mmhglobal-dynamicform 1.3.12 → 1.3.13

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 (68) hide show
  1. package/README.md +8 -4
  2. package/esm2020/lib/directives/elementcontainer.directive.mjs +4 -4
  3. package/esm2020/lib/directives/fieldelement.directive.mjs +4 -4
  4. package/esm2020/lib/directives/scrollbar.theme.directive.mjs +4 -4
  5. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +5 -5
  6. package/esm2020/lib/services/main.service.mjs +4 -4
  7. package/esm2020/lib/services/zcomponent.debug.service.mjs +4 -4
  8. package/esm2020/lib/services/zcomponent.service.mjs +4 -4
  9. package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +4 -4
  10. package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +4 -4
  11. package/esm2020/lib/uicontainer/uicontainer.component.mjs +4 -4
  12. package/esm2020/lib/uicontent/uicontent.component.mjs +4 -4
  13. package/esm2020/lib/uiheader/uiheader.component.mjs +4 -4
  14. package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +4 -4
  15. package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +4 -4
  16. package/esm2020/lib/uipage/uipage.component.mjs +4 -4
  17. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +4 -4
  18. package/esm2020/lib/zbullet/zbullet.component.mjs +4 -4
  19. package/esm2020/lib/zbuttons/zbuttons.component.mjs +4 -4
  20. package/esm2020/lib/zcard/zcard.component.mjs +4 -4
  21. package/esm2020/lib/zchart/zchart.component.mjs +4 -4
  22. package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +4 -4
  23. package/esm2020/lib/zchip/zchip.component.mjs +4 -4
  24. package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +4 -4
  25. package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +4 -4
  26. package/esm2020/lib/zdaterange/zdaterange.component.mjs +4 -4
  27. package/esm2020/lib/zdatetime/dateParser.pipe.mjs +4 -4
  28. package/esm2020/lib/zdatetime/zdatetime.component.mjs +4 -4
  29. package/esm2020/lib/zdiv/zdiv.component.mjs +4 -4
  30. package/esm2020/lib/zdiv/zdiv.pipe.mjs +4 -4
  31. package/esm2020/lib/zform/zform.component.mjs +4 -4
  32. package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +4 -4
  33. package/esm2020/lib/zgauge/zgauge.component.mjs +4 -4
  34. package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +4 -4
  35. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +4 -4
  36. package/esm2020/lib/zgrid/zgrid.component.mjs +4 -4
  37. package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +4 -4
  38. package/esm2020/lib/zimg/zimg.component.mjs +4 -4
  39. package/esm2020/lib/zkcard/zkcard.component.mjs +4 -4
  40. package/esm2020/lib/zlabel/zlabel.component.mjs +4 -4
  41. package/esm2020/lib/zmfb/zmfb.component.mjs +4 -4
  42. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +4 -4
  43. package/esm2020/lib/zmodal/zmodal.component.mjs +4 -4
  44. package/esm2020/lib/znumeric/znumeric.component.mjs +4 -4
  45. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +4 -4
  46. package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +4 -4
  47. package/esm2020/lib/zreport/zreport.component.mjs +21 -19
  48. package/esm2020/lib/zscheduler/zscheduler.component.mjs +4 -4
  49. package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +4 -4
  50. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +4 -4
  51. package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +4 -4
  52. package/esm2020/lib/ztab/ztab.component.mjs +4 -4
  53. package/esm2020/lib/ztab/ztab.pipe.mjs +4 -4
  54. package/esm2020/lib/ztext/ztext.component.mjs +4 -4
  55. package/esm2020/lib/ztextarea/ztextarea.component.mjs +4 -4
  56. package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +4 -4
  57. package/esm2020/lib/ztree/ztree.component.mjs +4 -4
  58. package/esm2020/lib/ztreelist/ztreelist.component.mjs +4 -4
  59. package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +4 -4
  60. package/esm2020/lib/zudf/zudf.component.mjs +4 -4
  61. package/esm2020/lib/zunknown/zunknown.component.mjs +4 -4
  62. package/esm2020/lib/zupload/zupload.component.mjs +4 -4
  63. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +4 -4
  64. package/fesm2015/mmhglobal-dynamicform.mjs +204 -202
  65. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  66. package/fesm2020/mmhglobal-dynamicform.mjs +204 -202
  67. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  68. package/package.json +1 -1
@@ -765,9 +765,9 @@ export class MainService {
765
765
  }
766
766
  }
767
767
  }
768
- MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, deps: [{ token: i1.Router }, { token: i2.ModalController }, { token: i2.NavController }, { token: i3.AlertService }, { token: i3.CacheService }, { token: i3.FieldService }, { token: i3.ResourceApiService }, { token: i3.ToastService }, { token: i3.WebApiService }, { token: i3.ZCoreService }, { token: i4.ModalService }, { token: i5.ZComponentDebugService }], target: i0.ɵɵFactoryTarget.Injectable });
769
- MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, providedIn: 'root' });
770
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: MainService, decorators: [{
768
+ MainService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, deps: [{ token: i1.Router }, { token: i2.ModalController }, { token: i2.NavController }, { token: i3.AlertService }, { token: i3.CacheService }, { token: i3.FieldService }, { token: i3.ResourceApiService }, { token: i3.ToastService }, { token: i3.WebApiService }, { token: i3.ZCoreService }, { token: i4.ModalService }, { token: i5.ZComponentDebugService }], target: i0.ɵɵFactoryTarget.Injectable });
769
+ MainService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, providedIn: 'root' });
770
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MainService, decorators: [{
771
771
  type: Injectable,
772
772
  args: [{
773
773
  providedIn: 'root',
@@ -780,4 +780,4 @@ export function refreshGrid(group) {
780
780
  }
781
781
  group.isTriggered = false;
782
782
  }
783
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvbWFpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU96RCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFjLGVBQWUsRUFBZ0IsRUFBRSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBUSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNRLFdBQVcsRUFFeEIsZ0JBQWdCLEVBQStELE1BQU0sRUFDdEYsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7QUFFMUUsc0RBQXNEO0FBRXRELHFIQUFxSDtBQUNySCwwREFBMEQ7QUFLMUQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFDVSxNQUFjLEVBQ2QsU0FBMEIsRUFDMUIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsa0JBQXNDLEVBQ3RDLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFlBQW9DO1FBWHBDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMx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cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgZnJvbSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgdGFrZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBNRVNTQUdFVFlQRSwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIEFsZXJ0U2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFNpemUsIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXBcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UsIE1vZGFsUmVzcG9uc2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuLy8gaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vem1vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50RGVidWdTZXJ2aWNlIH0gZnJvbSAnLi96Y29tcG9uZW50LmRlYnVnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBabW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi96bW9kYWwvem1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFptb2RhbE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwtbW9iaWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSAnLi4vemdyaWQvemdyaWQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgWm1vZGFsUGFnZSB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwucGFnZSc7XHJcblxyXG4vLyBpbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIE1vZGFsUGFnZVBhcmFtcywgWkdyaWQgfSBmcm9tICcuLi9keW5hbWljZm9ybS96Y29tcG9uZW50Lm1vZGVsJztcclxuLy8gaW1wb3J0IHsgWkdyb3VwLCBaRmllbGQgfSBmcm9tICcuLi9tb2RlbC96Z3JvdXAubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1haW5TZXJ2aWNlIHtcclxuICBwcml2YXRlIGdyb3VwOiBaR3JvdXA7XHJcbiAgcHJpdmF0ZSBvYXV0aEVudmlyb25tZW50VXJsOiBzdHJpbmc7XHJcbiAgIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZWJ1Z1NlcnZpY2U6IFpDb21wb25lbnREZWJ1Z1NlcnZpY2VcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdNYWluU2VydmljZSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgdGhpcy5vYXV0aEVudmlyb25tZW50VXJsID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKS5lMU9hdXRoVXJsICsgJy8nO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRVcCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdBdCBtYWluLnNlcnZpY2UgKFN0YXJ0VXApIC4uLicpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JvdXAoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5ncm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5maWVsZFNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNldEdyb3VwKGdyb3VwKTtcclxuICAgIGNvbnN0IGlzRGVidWdnaW5nID0gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKSB8fCBmYWxzZTtcclxuICAgIGlmIChpc0RlYnVnZ2luZykge1xyXG4gICAgICB0aGlzLmRlYnVnU2VydmljZS5vbkluaXREZWJ1Z2dlcihncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNlcnZlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwRmllbGRzKFxyXG4gICAgY3RybE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1UeXBlOiBcIkxpc3RGaWVsZFwiIHwgXCJGb3JtRmllbGRcIixcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIGN0cmxOYW1lLFxyXG4gICAgICBmb3JtVHlwZSxcclxuICAgICAgZ3JvdXAsXHJcbiAgICAgIHByb3BlcnR5TmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcm91cChcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBjdHJsTmFtZTogc3RyaW5nLFxyXG4gICAgcGFnZU5hbWU6IHN0cmluZyxcclxuICAgIG1lOiBhbnlcclxuICApOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGdyb3VwLnJlc291cmNlVVJMTmFtZSB8fCBjdHJsTmFtZTtcclxuICAgIGdyb3VwLnJlc291cmNlVVJMTmFtZSA9IHJlc291cmNlTmFtZTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGdyb3VwLCB7XHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwocmVzb3VyY2VOYW1lKSxcclxuICAgICAgZ3JpZENvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICBjdHJsTmFtZSxcclxuICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBjdHJsU2NvcGU6IG1lLFxyXG4gICAgICBwYWdlTmFtZSxcclxuICAgICAgY3RybE5hbWUsXHJcbiAgICAgIC8vIGNyZWF0ZU1vZGVsVVJMOiBcIi9jcmVhdGVcIiArIGN0cmxOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgIGVkaXRNb2RlbFVSTDogY3RybE5hbWUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgLy8gbGlzdE1vZGVsVVJMOiBcIi9saXN0XCIgKyBjdHJsTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAvLyBmb3JtSGVhZGVyOiBcIi4uLlwiLFxyXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXHJcbiAgICAgIGZpZWxkczogW10sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHpDb21wb25lbnRzOiB7fSxcclxuICAgICAgekRhdGE6IHt9LFxyXG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFpDb21wb25lbnRPdXRwdXRFdmVudD4obnVsbCksXHJcbiAgICAgIC8vIGZvcm06IG51bGwgYXMgRm9ybUdyb3VwLCAvLyByZW1vdmVkIGZvciBidWcgZml4LlxyXG4gICAgICBjYW5jZWxCdXR0b25OYW1lOiBcIkNsb3NlXCIsXHJcbiAgICAgIHpCdXR0b25zQ291bnQ6IDAsXHJcbiAgICAgIC8vIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBbXSxcclxuICAgICAgLy8gb25BY3Rpb246IHRoaXMub25BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgYmFja05hdmlnYXRpb246IHRoaXMuYmFja05hdmlnYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgaGlzdG9yeUJhY2s6IHRoaXMuaGlzdG9yeUJhY2suYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFBhZ2U6IHRoaXMucmVmcmVzaFBhZ2UsXHJcbiAgICAgIHJlZnJlc2hHcmlkOiB0aGlzLnJlZnJlc2hHcmlkLmJpbmQodGhpcyksXHJcbiAgICAgIHVwZGF0ZU1vZGVsOiB0aGlzLnVwZGF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNyZWF0ZU1vZGVsOiB0aGlzLmNyZWF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNsb25lTmV3TW9kZWw6IHRoaXMuY2xvbmVOZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBkZWxldGVNb2RlbDogdGhpcy5kZWxldGVNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBuZXdNb2RlbDogdGhpcy5uZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBfaXNEZWJ1Z2dpbmc6IGVudmlyb25tZW50LmRlYnVnU2Vzc2lvbiB8fCBmYWxzZSxcclxuICAgICAgLy8gX2RlYnVnOiB7XHJcbiAgICAgIC8vICAgekRhdGE6ICB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH1cclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBhZnRlckdldE1vZGVsU3VjY2VzczogbnVsbCxcclxuICAgICAgLy8gYmVmb3JlVXBkYXRlTW9kZWw6IG51bGwsXHJcbiAgICAgIC8vIGlzRWRpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGdyb3VwLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZ3JvdXAsIG1lKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbWUuc3Vic2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBaR3JvdXAsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgIGdyb3VwLnpNb2RlbCA9IHptb2RlbDtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGQgJiZcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoem1vZGVsKS5pbmRleE9mKGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkKSAhPT0gLTEgJiZcclxuICAgICAgICAgICAgIWdyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZS5lbmRzV2l0aChcIi5lZGl0XCIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlID1cclxuICAgICAgICAgICAgICBncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UgK1xyXG4gICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICB6bW9kZWxbZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGRdLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgIFwiL2VkaXRcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGNhbkV4aXQoZm9ybTogRm9ybUdyb3VwKTogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFmb3JtIHx8ICFmb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtWydza2lwRGlydHlDaGVjayddKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZVxyXG4gICAgICAuc2hvdyhcIkRhdGEgbm90IHNhdmUgeWV0XCIsIFwiQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGlzY2FyZCB0aGUgY2hhbmdlcz9cIiwgW1xyXG4gICAgICAgIFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcGx5ID09PSBcIkRpc2NhcmQgQ2hhbmdlc1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIC8vIGNvbnN0IHJlcGx5U3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAgIC8vIHRoaXMuYWxlcnRDdHJsXHJcbiAgICAvLyAgIC5jcmVhdGUoe1xyXG4gICAgLy8gICAgIGhlYWRlcjogXCJEYXRhIG5vdCBzYXZlIHlldFwiLFxyXG4gICAgLy8gICAgIC8vIHN1YkhlYWRlcjogJ1N1YkhlYWRlciBzdGF0ZW1lbnQgaGVyZScsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogXCJBcmUgeW91IHN1cmUgd2FudCB0byBkaXNjYXJkIHRoZSBjaGFuZ2VzP1wiLFxyXG4gICAgLy8gICAgIGJ1dHRvbnM6IFtcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJDYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgcm9sZTogXCJjYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwic2Vjb25kYXJ5XCIsXHJcbiAgICAvLyAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICByZXBseVN1Yi5uZXh0KGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwid2FybmluZ1wiLFxyXG4gICAgLy8gICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgcmVwbHlTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIF1cclxuICAgIC8vICAgfSlcclxuICAgIC8vICAgLnRoZW4oYWxlcnRFbGVtZW50ID0+IHtcclxuICAgIC8vICAgICBhbGVydEVsZW1lbnQucHJlc2VudCgpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHJldHVybiByZXBseVN1Yi5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgb3Blbk1vZGFsRm9ybShtb2RhbFBhcmFtczogTW9kYWxQYWdlUGFyYW1zKSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhcIm9wZW5Nb2RhbEZvcm1cIik7XHJcbiAgLy8gICBjb25zb2xlLmVycm9yKFxyXG4gIC8vICAgICBcIlBsZWFzZSB1c2UgTW9kYWxTZXJ2aWNlLnNob3cgaW5zdGVhZCBvZiBNYWluU2VydmljZS5vcGVuTW9kYWxGb3JtIVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgLy8gY29uc3QgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFyYW1zLmNvbEZpZWxkcyQgfHwgbW9kYWxQYXJhbXMuY29udHJvbGxlck5hbWUsIG1vZGFsUGFyYW1zLnBhcmVudEdyb3VwLFxyXG4gIC8vICAgLy8gICBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyLCBtb2RhbFBhcmFtcy56TW9kZWwsIG1vZGFsUGFyYW1zLnJlZmVySWQpO1xyXG4gIC8vICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xyXG4gIC8vICAgICBjb21wb25lbnQ6IFptb2RhbFBhZ2UsXHJcbiAgLy8gICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcclxuICAvLyAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAvLyAgICAgICBtb2RhbFBhcmFtcyxcclxuICAvLyAgICAgfSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgbW9kYWwucHJlc2VudCgpO1xyXG4gIC8vICAgcmV0dXJuIG1vZGFsO1xyXG4gIC8vICAgLy8gLm9uV2lsbERpc21pc3MoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgLy8gICAvLyAgIHRoaXMuXHJcbiAgLy8gICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIGNsb3NlTW9kYWxGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiPj4gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBncm91cC5jdHJsU2NvcGUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkVycm9yIHdoZW4gZ2V0R3JvdXBWYWx1ZTogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlLmVuZHNXaXRoKFwib25OYXZpZ2F0ZVRvXCIpKSB7XHJcbiAgICAgICAgY29uc3QgblVybCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKFwiLzppZFwiLCBcIi9cIiArIGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuVXJsXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIC8vIChjYWxsRnVuYy5zdGFydHNXaXRoKCdlZGl0JykpIHsgIHpncmlkLWNlbGxDbGlja1xyXG4gICAgICAgIGNvbnN0IGNOYW1lID0gY2FsbEZ1bmMuc2xpY2UoNCk7XHJcbiAgICAgICAgLy8gLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjTmFtZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgXCJcIixcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjYWxsRnVuYy5jdHJsTmFtZTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5mb3JtSGVhZGVyID0gY2FsbEZ1bmMuZm9ybUhlYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhcclxuICAgICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjYWxsRnVuYy5jdHJsTmFtZSxcclxuICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgIGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIkludmFsaWQgY2FsbEZ1bmMgdHlwZTogXCIsXHJcbiAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgIFwiIGV2ZW50LlRhcmdldDogXCIsXHJcbiAgICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybUJ5Q29tcG9uZW50KGNhbGxGdW5jLnR5cGUsIGV2ZW50LkRhdGEuSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAgZm9yOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICBpZiAocmVzLlByb2Nlc3NpbmdTdGF0dXMpIHtcclxuICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoXHJcbiAgICAgICAgICBNRVNTQUdFVFlQRS5TdWNjZXNzLFxyXG4gICAgICAgICAgc3VjY2Vzc01zZyxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhY2tOYXZpZ2F0aW9uKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmIChncm91cFsnaXNFbWJlZGRlZFBhZ2UnXSkge1xyXG4gICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlQ29udGFpbmVyVmlldyhncm91cCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ3JvdXAuYmVmb3JlQmFja05hdmlnYXRpb25QYWdlKSB7XHJcbiAgICAgIGdyb3VwLmJlZm9yZUJhY2tOYXZpZ2F0aW9uUGFnZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtncm91cC5iYWNrTmF2aWdhdGlvblBhZ2VdKTtcclxuXHJcbiAgICAgICAgLy9pZiAoZ3JvdXBbJ3JlbG9hZCddKSB7XHJcbiAgICAgICAgLy8gIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgfVxyXG4gICAgICAgIC8vICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSwpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcblxyXG4gICAgICAvL3RoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAvL31cclxuICAgICAgLy90aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpc3RvcnlCYWNrKCkge1xyXG4gICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwWydpc0VtYmVkZGVkUGFnZSddKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VDb250YWluZXJWaWV3KHRoaXMuZ3JvdXApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIucG9wKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoXHJcbiAgICBldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gICAgZ3JvdXA6IFpHcm91cCxcclxuICAgIG1lOiBhbnksXHJcbiAgICBncmlkT3B0aW9uTmFtZT86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgZ3JpZE9wdGlvbk5hbWUgPSBncmlkT3B0aW9uTmFtZSB8fCBcImdyaWRPcHRpb25zXCI7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIGNvbnN0IGdyaWRPcHRpb24gPSBldmVudC50YXJnZXRcclxuICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIoXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCJncm91cC5yZWZyZXNoR3JpZFwiLCBcIlwiKTtcclxuICAgICAgaWYgKGdyaWRPcHRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWRPcHRpb25OYW1lID0gZ3JpZE9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW2dyaWRPcHRpb25OYW1lXSBhcyBaR3JpZDtcclxuICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgIH1cclxuICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1BhdGg6ICcsIHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jcm0vY3VzdG9tZXInXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbG9uZU5ld0NhY2hlWk1vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGNhY2hlWk1vZGVsID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgaWYgKGNhY2hlWk1vZGVsKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgICBncm91cC56TW9kZWwgPSBjYWNoZVpNb2RlbDtcclxuICAgICAgZ3JvdXAuek1vZGVsLklkID0gMDtcclxuICAgIH1cclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb2YoW10pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBuZXcsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZU5ld01vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQgfHwgXCIwXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImN1cnJlbnQgdXJsOiBcIiwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gcGF0aFNlZ21lbnRbcGF0aFNlZ21lbnQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICBpZiAobGFzdFNlZ21lbnQgPT09IFwiZWRpdFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoU2VnbWVudC5zbGljZSgwLCBwYXRoU2VnbWVudC5sZW5ndGggLSAyKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKHJlZmVyZW5jZUlkKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKFwibmV3XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZVpNb2RlbCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldENhY2hlKFwiY2xvbmVOZXdNb2RlbFwiKTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZVpNb2RlbCkge1xyXG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgaXQgQ2xvbmVOZXdcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cC5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VnbWVudCA9PT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICBncm91cC56TW9kZWwgPSB7fTtcclxuICAgICAgICAgICAgZ3JvdXAuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL2dyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyb3VwLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZ3JvdXAuek1vZGVsW1xyXG4gICAgICAgICAgICAgIGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkXHJcbiAgICAgICAgICAgIF0gPSBncm91cC5wYXJlbnRSZWZlcmVuY2VJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2dyb3VwLmVkaXRNb2RlbFVSTCwgcmVmZXJlbmNlSWQsIFwibmV3XCJdLCB7XHJcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogZ3JvdXAuY3RybFNjb3BlLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuZWRpdE1vZGVsVVJMLCByZWZlcmVuY2VJZCwgXCJuZXdcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU1vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBjcmVhdGVNb2RlbHJlcyA9IG51bGw7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBjcmVhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUNyZWF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IE9iamVjdC5hc3NpZ24oe30sIF9ncm91cC56TW9kZWwpO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVOdWxsRmllbGRzKG5ld01vZGVsKTtcclxuICAgICAgICAgIC8vIE9iamVjdC5rZXlzKG5ld01vZGVsKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgaWYgKG5ld01vZGVsW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICBkZWxldGUgbmV3TW9kZWxba2V5XTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBpZiAoIW5ld01vZGVsLklkKSB7XHJcbiAgICAgICAgICAvLyAgIG5ld01vZGVsLklkID0gMDtcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUG9zdCQoXHJcbiAgICAgICAgICAgICAgX2dyb3VwLnJlc291cmNlVVJMLCAvLyArIFwiL1wiICsgZ3JvdXAuek1vZGVsLklkLFxyXG4gICAgICAgICAgICAgIG5ld01vZGVsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVNb2RlbHJlcyA9IHJlc3A7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBjcmVhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsKSB7XHJcblxyXG4gICAgICAgICAgICAvL3N1cHBvcnQgb2xkIGFuZCBuZXcgd2ViYXBpIG1ldGhvZFxyXG4gICAgICAgICAgICBpZiAoem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh6bW9kZWxbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9ncm91cC5yZWZlcmVuY2VJZCA9IF9ncm91cC56TW9kZWwuSWQ7XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJDcmVhdGVNb2RlbChfZ3JvdXAsIHptb2RlbCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY3JlYXRlTW9kZWxyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PSBudWxsIHx8IGNyZWF0ZU1vZGVscmVzLlByb2Nlc3NpbmdTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcCAmJiBfZ3JvdXAuek1vZGVsLklkICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmNhbmNlbEJ1dHRvbk5hbWUgPSBcIkNsb3NlXCI7XHJcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmZy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAvLyB0aGlzLnRvYXN0U2VydmljZS5zaG93KFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVNb2RlbChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSB1cGRhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVVwZGF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRlZCwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRG9uZSB1cGRhdGVNb2RlbCB1cGRhdGVkIHpNb2RlbDpcIiwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoem1vZGVsICYmIHptb2RlbFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkRvbmUgdXBkYXRlTW9kZWwgdXBkYXRlZCB6TW9kZWw6XCIsIGZnLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyVXBkYXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgLy8gICAuaHR0cFB1dCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIGdyb3VwLnpNb2RlbC5JZCwgZ3JvdXAuek1vZGVsKVxyXG4gICAgLy8gICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgIC8vICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgLy8gICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAvLyAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9uZU5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBfZ3JvdXAuZm9ybS52YWx1ZSk7XHJcbiAgICBfZ3JvdXAuek1vZGVsLklkID0gMDtcclxuXHJcbiAgICBjb25zdCBjbGVhckZpZWxkcyA9IFtcIldGU19Eb2N1bWVudElkXCIsIFwiV0ZTX1N0YXR1c0NvZGVcIiwgXCJXRlNfU3RhdHVzTmFtZVwiXTtcclxuICAgIGNsZWFyRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChfZ3JvdXAuek1vZGVsLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xyXG4gICAgICAgIF9ncm91cC56TW9kZWxbZmllbGRdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICB0aGlzLm5ld01vZGVsKG51bGwsIGdyb3VwKTtcclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsZXRlTW9kZWwoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgbGV0IGZnOiBGb3JtR3JvdXAgPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBmZyA9IGdyb3VwWydfJyArIGV2ZW50LmRhdGEuU3ViVHlwZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgX2dyb3VwID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBkZWxldGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZURlbGV0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5zaG93KFwiRGVsZXRlIFJlY29yZFwiLCBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVwbHkgPT09IFwiWWVzXCIpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAgIF9ncm91cC56TW9kZWwuRGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBkZWxldGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyRGVsZXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5QmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVVcGRhdGVNb2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVEZWxldGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZURlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVEZWxldGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZU5ld01vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlTmV3b2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlTmV3TW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVDcmVhdGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZUNyZWF0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVDcmVhdGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC56TW9kZWwuSWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiek1vZGVsLklkIGlzIG5vdCBkZWZpbmVkXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGFmdGVyTmV3TW9kZWwoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJOZXdNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlck5ld01vZGVsKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJDcmVhdGVNb2RlbChncm91cDogWkdyb3VwLCB6bW9kZWw6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyQ3JlYXRlTW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJDcmVhdGVNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlckNyZWF0ZU1vZGVsKGdyb3VwLCB6bW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclVwZGF0ZU1vZGVsKGdyb3VwOiBaR3JvdXAsIHptb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghZ3JvdXAuYWZ0ZXJVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5hZnRlclVwZGF0ZU1vZGVsIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyVXBkYXRlTW9kZWwoZ3JvdXAsIHptb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyRGVsZXRlTW9kZWwoZ3JvdXA6IFpHcm91cCwgem1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC5hZnRlckRlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyRGVsZXRlTW9kZWwgaXMgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYWZ0ZXJEZWxldGVNb2RlbChncm91cCwgem1vZGVsKTtcclxuICB9XHJcblxyXG4gIGFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5hZnRlclBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBvbkFjdGlvbihncm91cDogWkdyb3VwKSB7XHJcbiAgLy8gICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gIC8vICAgICAuY3JlYXRlKHtcclxuICAvLyAgICAgICBoZWFkZXI6IFwiQ2hvb3NlIGFuIEFjdGlvblwiLFxyXG4gIC8vICAgICAgIGJ1dHRvbnM6IGdyb3VwLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gIC8vICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldE1vZGVsVmFsdWUocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGdyb3VwOiBaR3JvdXApIHtcclxuICAvLyAgIGdyb3VwLnpNb2RlbFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgLy8gICBpZiAoZ3JvdXAuaXNMb2FkaW5nKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGZnID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgLy8gICBpZiAoIWZnKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICwgbm8tZGVidWdnZXJcclxuICAvLyAgICAgZGVidWdnZXI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBmYyA9IGZnLmNvbnRyb2xzW3Byb3BlcnR5TmFtZV07XHJcbiAgLy8gICBpZiAoIWZjKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgLy8gICAgIGRlYnVnZ2VyO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZmMuc2V0VmFsdWUodmFsdWUpO1xyXG4gIC8vICAgZmMubWFya0FzRGlydHkoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93ek1vZGFsKFxyXG4gICAgY29sRmllbGRzJDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxBcnJheTxaRmllbGQ+PixcclxuICAgIHBhcmVudEdyb3VwOiBaR3JvdXAsXHJcbiAgICBmb3JtSGVhZGVyOiBzdHJpbmcsXHJcbiAgICB6TW9kZWw/OiBhbnksXHJcbiAgICByZWZlcklkPzogc3RyaW5nLFxyXG4gICAgY29tcG9uZW50U2l6ZT86IFpDb21wb25lbnRTaXplLFxyXG4gICAgc2tpcElzRGlydHlDaGVjaz86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1vZGFsY29tcG9uZW50ID0gWm1vZGFsQ29tcG9uZW50O1xyXG4gICAgY29uc3QgbW9kYWxtb2JpbGVjb21wb25lbnQgPSBabW9kYWxNb2JpbGVDb21wb25lbnQ7XHJcblxyXG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBwYXJlbnRHcm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coY29sRmllbGRzJCwgcGFyZW50R3JvdXAsIGZvcm1IZWFkZXIsIG1vZGFsY29tcG9uZW50LCBtb2RhbG1vYmlsZWNvbXBvbmVudCwgek1vZGVsLCByZWZlcklkLCBjb21wb25lbnRTaXplLCBza2lwSXNEaXJ0eUNoZWNrKVxyXG4gICAgLy9jb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgY29va2llU3RvcmVQb3N0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXNcIjtcclxuICAgIGNvbnN0IGNvb2tpZVN0b3JlVmFsdWUgPSB7XHJcbiAgICAgICdOYW1lJzogbmFtZSxcclxuICAgICAgJ1ZhbHVlJzogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKGNvb2tpZVN0b3JlVVJMLCBjb29raWVTdG9yZVZhbHVlKS5waXBlKG1hcChyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJncmlkIGNvbmZpZyBzYXZlZChcIiArIHJlcy5zdGF0dXMgKyBcIik6IFwiLCByZXMpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZUdldChuYW1lOiBzdHJpbmcsIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXMvP25hbWU9XCIgKyBuYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoY29va2llU3RvcmVVUkwsIHsgaGVhZGVyczogYWNjZXNzVG9rZW4gfSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcIkFkbWluL0RlbGV0ZU11bHRpcGxlQ29va2llc1wiO1xyXG4gICAgY29uc3QgY29va2llU3RvcmVWYWx1ZSA9IHtcclxuICAgICAgJ2NvbnRhaW5OYW1lJzogbmFtZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChjb29raWVTdG9yZVVSTCwgY29va2llU3RvcmVWYWx1ZSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRDb250YWluZXJWaWV3KGVsZW1lbnRDb250YWluZXI6IGFueSwgY29udGFpbmVyUGFnZTogYW55LCBncm91cD86IFpHcm91cCkge1xyXG4gICAgaWYgKCFlbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRWxlbWVudENvbnRhaW5lciBpcyBudWxsLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29udGFpbmVyUGFnZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkNvbnRhaW5lclBhZ2UgaXMgbnVsbC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZWxlbWVudENvbnRhaW5lci52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG5cclxuICAgIGdyb3VwID0gZ3JvdXAgPyBncm91cCA6IG5ldyBaR3JvdXA7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29udGFpbmVyUGFnZSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2VbXCJncm91cFwiXSwgZ3JvdXApO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlW1wiZ3JvdXBcIl0sIHsgaXNFbWJlZGRlZFBhZ2U6IHRydWUsIGVsZW1lbnRDb250YWluZXI6IGVsZW1lbnRDb250YWluZXIgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xvc2VDb250YWluZXJWaWV3KGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSBncm91cC5lbGVtZW50Q29udGFpbmVyLnZpZXdDb250YWluZXJSZWY7XHJcbiAgICBpZiAodmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfSBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hHcmlkKGdyb3VwOiBaR3JvdXApIHtcclxuICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtcImdyaWRPcHRpb25zXCJdIGFzIFpHcmlkO1xyXG4gIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgIHpncmlkQ29udHJvbC5nZXREYXRhKCk7XHJcbiAgfVxyXG4gIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbn1cclxuIl19
783
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvbWFpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU96RCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFjLGVBQWUsRUFBZ0IsRUFBRSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBUSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNRLFdBQVcsRUFFeEIsZ0JBQWdCLEVBQStELE1BQU0sRUFDdEYsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7QUFFMUUsc0RBQXNEO0FBRXRELHFIQUFxSDtBQUNySCwwREFBMEQ7QUFLMUQsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFDVSxNQUFjLEVBQ2QsU0FBMEIsRUFDMUIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsa0JBQXNDLEVBQ3RDLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFlBQW9DO1FBWHBDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMx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cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgZnJvbSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgdGFrZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBNRVNTQUdFVFlQRSwgTW9kYWxQYWdlUGFyYW1zLFxyXG4gIEFsZXJ0U2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFNpemUsIFpDb3JlU2VydmljZSwgWkZpZWxkLCBaR3JvdXBcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UsIE1vZGFsUmVzcG9uc2UgfSBmcm9tICdtbWhnbG9iYWwtem1vZGFsJztcclxuLy8gaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vem1vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50RGVidWdTZXJ2aWNlIH0gZnJvbSAnLi96Y29tcG9uZW50LmRlYnVnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBabW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi96bW9kYWwvem1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFptb2RhbE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwtbW9iaWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSAnLi4vemdyaWQvemdyaWQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgWm1vZGFsUGFnZSB9IGZyb20gJy4uL3ptb2RhbC96bW9kYWwucGFnZSc7XHJcblxyXG4vLyBpbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIE1vZGFsUGFnZVBhcmFtcywgWkdyaWQgfSBmcm9tICcuLi9keW5hbWljZm9ybS96Y29tcG9uZW50Lm1vZGVsJztcclxuLy8gaW1wb3J0IHsgWkdyb3VwLCBaRmllbGQgfSBmcm9tICcuLi9tb2RlbC96Z3JvdXAubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1haW5TZXJ2aWNlIHtcclxuICBwcml2YXRlIGdyb3VwOiBaR3JvdXA7XHJcbiAgcHJpdmF0ZSBvYXV0aEVudmlyb25tZW50VXJsOiBzdHJpbmc7XHJcbiAgIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZWJ1Z1NlcnZpY2U6IFpDb21wb25lbnREZWJ1Z1NlcnZpY2VcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKCdNYWluU2VydmljZSBjb25zdHJ1Y3RvcicpO1xyXG4gICAgdGhpcy5vYXV0aEVudmlyb25tZW50VXJsID0gdGhpcy56Y29yZVNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKS5lMU9hdXRoVXJsICsgJy8nO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRVcCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdBdCBtYWluLnNlcnZpY2UgKFN0YXJ0VXApIC4uLicpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JvdXAoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5ncm91cCA9IGdyb3VwO1xyXG4gICAgdGhpcy5maWVsZFNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2Uuc2V0R3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNldEdyb3VwKGdyb3VwKTtcclxuICAgIGNvbnN0IGlzRGVidWdnaW5nID0gdGhpcy56Y29yZVNlcnZpY2UuaXNEZWJ1Z1Nlc3Npb24oKSB8fCBmYWxzZTtcclxuICAgIGlmIChpc0RlYnVnZ2luZykge1xyXG4gICAgICB0aGlzLmRlYnVnU2VydmljZS5vbkluaXREZWJ1Z2dlcihncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNlcnZlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwRmllbGRzKFxyXG4gICAgY3RybE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1UeXBlOiBcIkxpc3RGaWVsZFwiIHwgXCJGb3JtRmllbGRcIixcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIGN0cmxOYW1lLFxyXG4gICAgICBmb3JtVHlwZSxcclxuICAgICAgZ3JvdXAsXHJcbiAgICAgIHByb3BlcnR5TmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVHcm91cChcclxuICAgIGdyb3VwOiBaR3JvdXAsXHJcbiAgICBjdHJsTmFtZTogc3RyaW5nLFxyXG4gICAgcGFnZU5hbWU6IHN0cmluZyxcclxuICAgIG1lOiBhbnlcclxuICApOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgaWYgKG1lLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICBtZS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGdyb3VwLnJlc291cmNlVVJMTmFtZSB8fCBjdHJsTmFtZTtcclxuICAgIGdyb3VwLnJlc291cmNlVVJMTmFtZSA9IHJlc291cmNlTmFtZTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGdyb3VwLCB7XHJcbiAgICAgIHJlc291cmNlVVJMOiB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwocmVzb3VyY2VOYW1lKSxcclxuICAgICAgZ3JpZENvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICBjdHJsTmFtZSxcclxuICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApLFxyXG4gICAgICBjdHJsU2NvcGU6IG1lLFxyXG4gICAgICBwYWdlTmFtZSxcclxuICAgICAgY3RybE5hbWUsXHJcbiAgICAgIC8vIGNyZWF0ZU1vZGVsVVJMOiBcIi9jcmVhdGVcIiArIGN0cmxOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgIGVkaXRNb2RlbFVSTDogY3RybE5hbWUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgLy8gbGlzdE1vZGVsVVJMOiBcIi9saXN0XCIgKyBjdHJsTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAvLyBmb3JtSGVhZGVyOiBcIi4uLlwiLFxyXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXHJcbiAgICAgIGZpZWxkczogW10sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHpDb21wb25lbnRzOiB7fSxcclxuICAgICAgekRhdGE6IHt9LFxyXG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFpDb21wb25lbnRPdXRwdXRFdmVudD4obnVsbCksXHJcbiAgICAgIC8vIGZvcm06IG51bGwgYXMgRm9ybUdyb3VwLCAvLyByZW1vdmVkIGZvciBidWcgZml4LlxyXG4gICAgICBjYW5jZWxCdXR0b25OYW1lOiBcIkNsb3NlXCIsXHJcbiAgICAgIHpCdXR0b25zQ291bnQ6IDAsXHJcbiAgICAgIC8vIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBbXSxcclxuICAgICAgLy8gb25BY3Rpb246IHRoaXMub25BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgYmFja05hdmlnYXRpb246IHRoaXMuYmFja05hdmlnYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgaGlzdG9yeUJhY2s6IHRoaXMuaGlzdG9yeUJhY2suYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFBhZ2U6IHRoaXMucmVmcmVzaFBhZ2UsXHJcbiAgICAgIHJlZnJlc2hHcmlkOiB0aGlzLnJlZnJlc2hHcmlkLmJpbmQodGhpcyksXHJcbiAgICAgIHVwZGF0ZU1vZGVsOiB0aGlzLnVwZGF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNyZWF0ZU1vZGVsOiB0aGlzLmNyZWF0ZU1vZGVsLmJpbmQodGhpcyksXHJcbiAgICAgIGNsb25lTmV3TW9kZWw6IHRoaXMuY2xvbmVOZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBkZWxldGVNb2RlbDogdGhpcy5kZWxldGVNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICBuZXdNb2RlbDogdGhpcy5uZXdNb2RlbC5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBfaXNEZWJ1Z2dpbmc6IGVudmlyb25tZW50LmRlYnVnU2Vzc2lvbiB8fCBmYWxzZSxcclxuICAgICAgLy8gX2RlYnVnOiB7XHJcbiAgICAgIC8vICAgekRhdGE6ICB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH1cclxuICAgICAgLy8gfVxyXG4gICAgICAvLyBhZnRlckdldE1vZGVsU3VjY2VzczogbnVsbCxcclxuICAgICAgLy8gYmVmb3JlVXBkYXRlTW9kZWw6IG51bGwsXHJcbiAgICAgIC8vIGlzRWRpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIG1lLnN1YnNjcmlwdGlvbiA9IGdyb3VwLnN1YmplY3Quc3Vic2NyaWJlKChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSA9PlxyXG4gICAgICB0aGlzLnN1YmplY3RFdmVudChldmVudCwgZ3JvdXAsIG1lKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbWUuc3Vic2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwkKGdyb3VwOiBaR3JvdXAsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVjSWQgPSBpZCB8fCBncm91cC5yZWZlcmVuY2VJZDtcclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2VcclxuICAgICAgLmh0dHBHZXQkKGdyb3VwLnJlc291cmNlVVJMICsgXCIvXCIgKyByZWNJZCwgbnVsbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgIGdyb3VwLnpNb2RlbCA9IHptb2RlbDtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGQgJiZcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoem1vZGVsKS5pbmRleE9mKGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkKSAhPT0gLTEgJiZcclxuICAgICAgICAgICAgIWdyb3VwLmJhY2tOYXZpZ2F0aW9uUGFnZS5lbmRzV2l0aChcIi5lZGl0XCIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlID1cclxuICAgICAgICAgICAgICBncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UgK1xyXG4gICAgICAgICAgICAgIFwiL1wiICtcclxuICAgICAgICAgICAgICB6bW9kZWxbZ3JvdXAucGFyZW50UmVmZXJlbmNlRmllbGRdLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgIFwiL2VkaXRcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGNhbkV4aXQoZm9ybTogRm9ybUdyb3VwKTogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFmb3JtIHx8ICFmb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtWydza2lwRGlydHlDaGVjayddKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZVxyXG4gICAgICAuc2hvdyhcIkRhdGEgbm90IHNhdmUgeWV0XCIsIFwiQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGlzY2FyZCB0aGUgY2hhbmdlcz9cIiwgW1xyXG4gICAgICAgIFwiQ2FuY2VsXCIsXHJcbiAgICAgICAgXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgICAgXSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcGx5ID09PSBcIkRpc2NhcmQgQ2hhbmdlc1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIC8vIGNvbnN0IHJlcGx5U3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAgIC8vIHRoaXMuYWxlcnRDdHJsXHJcbiAgICAvLyAgIC5jcmVhdGUoe1xyXG4gICAgLy8gICAgIGhlYWRlcjogXCJEYXRhIG5vdCBzYXZlIHlldFwiLFxyXG4gICAgLy8gICAgIC8vIHN1YkhlYWRlcjogJ1N1YkhlYWRlciBzdGF0ZW1lbnQgaGVyZScsXHJcbiAgICAvLyAgICAgbWVzc2FnZTogXCJBcmUgeW91IHN1cmUgd2FudCB0byBkaXNjYXJkIHRoZSBjaGFuZ2VzP1wiLFxyXG4gICAgLy8gICAgIGJ1dHRvbnM6IFtcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJDYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgcm9sZTogXCJjYW5jZWxcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwic2Vjb25kYXJ5XCIsXHJcbiAgICAvLyAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICByZXBseVN1Yi5uZXh0KGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfSxcclxuICAgIC8vICAgICAgIHtcclxuICAgIC8vICAgICAgICAgdGV4dDogXCJEaXNjYXJkIENoYW5nZXNcIixcclxuICAgIC8vICAgICAgICAgY3NzQ2xhc3M6IFwid2FybmluZ1wiLFxyXG4gICAgLy8gICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgcmVwbHlTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIF1cclxuICAgIC8vICAgfSlcclxuICAgIC8vICAgLnRoZW4oYWxlcnRFbGVtZW50ID0+IHtcclxuICAgIC8vICAgICBhbGVydEVsZW1lbnQucHJlc2VudCgpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHJldHVybiByZXBseVN1Yi5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgb3Blbk1vZGFsRm9ybShtb2RhbFBhcmFtczogTW9kYWxQYWdlUGFyYW1zKSB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhcIm9wZW5Nb2RhbEZvcm1cIik7XHJcbiAgLy8gICBjb25zb2xlLmVycm9yKFxyXG4gIC8vICAgICBcIlBsZWFzZSB1c2UgTW9kYWxTZXJ2aWNlLnNob3cgaW5zdGVhZCBvZiBNYWluU2VydmljZS5vcGVuTW9kYWxGb3JtIVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgLy8gY29uc3QgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KG1vZGFsUGFyYW1zLmNvbEZpZWxkcyQgfHwgbW9kYWxQYXJhbXMuY29udHJvbGxlck5hbWUsIG1vZGFsUGFyYW1zLnBhcmVudEdyb3VwLFxyXG4gIC8vICAgLy8gICBtb2RhbFBhcmFtcy5mb3JtSGVhZGVyLCBtb2RhbFBhcmFtcy56TW9kZWwsIG1vZGFsUGFyYW1zLnJlZmVySWQpO1xyXG4gIC8vICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xyXG4gIC8vICAgICBjb21wb25lbnQ6IFptb2RhbFBhZ2UsXHJcbiAgLy8gICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcclxuICAvLyAgICAgY29tcG9uZW50UHJvcHM6IHtcclxuICAvLyAgICAgICBtb2RhbFBhcmFtcyxcclxuICAvLyAgICAgfSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgbW9kYWwucHJlc2VudCgpO1xyXG4gIC8vICAgcmV0dXJuIG1vZGFsO1xyXG4gIC8vICAgLy8gLm9uV2lsbERpc21pc3MoKHptb2RlbDogYW55KSA9PiB7XHJcbiAgLy8gICAvLyAgIHRoaXMuXHJcbiAgLy8gICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIGNsb3NlTW9kYWxGb3JtKCkge1xyXG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiPj4gU3ViamVjdEV2ZW50XCIsIGV2ZW50KTtcclxuICAgIGxldCBjYWxsRnVuYztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYWxsRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICBncm91cC5jdHJsU2NvcGUsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShldmVudC5UYXJnZXQsIGdyb3VwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBcIkVycm9yIHdoZW4gZ2V0R3JvdXBWYWx1ZTogXCIsXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LFxyXG4gICAgICAgIFwiID4gRXJyb3I6IFwiLFxyXG4gICAgICAgIGVycm9yXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKG1lKTtcclxuICAgICAgbmV3RnVuYyhldmVudCwgZ3JvdXAsIG1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlLmVuZHNXaXRoKFwib25OYXZpZ2F0ZVRvXCIpKSB7XHJcbiAgICAgICAgY29uc3QgblVybCA9IGV2ZW50LnRhcmdldC5yZXBsYWNlKFwiLzppZFwiLCBcIi9cIiArIGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuVXJsXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIC8vIChjYWxsRnVuYy5zdGFydHNXaXRoKCdlZGl0JykpIHsgIHpncmlkLWNlbGxDbGlja1xyXG4gICAgICAgIGNvbnN0IGNOYW1lID0gY2FsbEZ1bmMuc2xpY2UoNCk7XHJcbiAgICAgICAgLy8gLy8gZGVidWdnZXI7XHJcbiAgICAgICAgLy8gY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjTmFtZTtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjTmFtZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgXCJcIixcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgZXZlbnQuZGF0YS5JZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIGlmIChldmVudC50eXBlID09PSBcInpncmlkLWNlbGxDbGlja1wiKSB7XHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLm5hdmlnYXRlVXJsKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBjYWxsRnVuYy5uYXZpZ2F0ZVVybC5yZXBsYWNlKFwiOmlkXCIsIGV2ZW50LmRhdGEuSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxHcm91cFBhcmFtOiBNb2RhbFBhZ2VQYXJhbXMgPSB7fTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0uY29udHJvbGxlck5hbWUgPSBjYWxsRnVuYy5jdHJsTmFtZTtcclxuICAgICAgICBtb2RhbEdyb3VwUGFyYW0ucmVmZXJJZCA9IGV2ZW50LmRhdGEuSWQ7XHJcbiAgICAgICAgbW9kYWxHcm91cFBhcmFtLmNvbEZpZWxkcyQgPSBldmVudC5jb2x1bW5GaWVsZHMkO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5wYXJlbnRHcm91cCA9IG1lLmdyb3VwO1xyXG4gICAgICAgIG1vZGFsR3JvdXBQYXJhbS5mb3JtSGVhZGVyID0gY2FsbEZ1bmMuZm9ybUhlYWRlcjtcclxuXHJcbiAgICAgICAgaWYgKGNhbGxGdW5jLmZvcm1IZWFkZXIpIHtcclxuICAgICAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybShtb2RhbEdyb3VwUGFyYW0pO1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhcclxuICAgICAgICAgICAgZXZlbnQuY29sdW1uRmllbGRzJCB8fCBjYWxsRnVuYy5jdHJsTmFtZSxcclxuICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgIGNhbGxGdW5jLmZvcm1IZWFkZXIsXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICBldmVudC5kYXRhLklkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIkludmFsaWQgY2FsbEZ1bmMgdHlwZTogXCIsXHJcbiAgICAgICAgICBjYWxsRnVuYyxcclxuICAgICAgICAgIFwiIGV2ZW50LlRhcmdldDogXCIsXHJcbiAgICAgICAgICBldmVudC50YXJnZXRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMub3Blbk1vZGFsRm9ybUJ5Q29tcG9uZW50KGNhbGxGdW5jLnR5cGUsIGV2ZW50LkRhdGEuSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIFwiRnVuY3Rpb24gbm90IGRlZmluZWQgaW4gZ3JvdXAgZm9yOiBcIixcclxuICAgICAgICBldmVudC50YXJnZXQsXHJcbiAgICAgICAgXCIsIEV2ZW50OiBcIixcclxuICAgICAgICBldmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICBpZiAocmVzLlByb2Nlc3NpbmdTdGF0dXMpIHtcclxuICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2Uuc2hvd0h0dHBSZXNwb25zZU1lc3NhZ2UoXHJcbiAgICAgICAgICBNRVNTQUdFVFlQRS5TdWNjZXNzLFxyXG4gICAgICAgICAgc3VjY2Vzc01zZyxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJhY2tOYXZpZ2F0aW9uKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmIChncm91cFsnaXNFbWJlZGRlZFBhZ2UnXSkge1xyXG4gICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlQ29udGFpbmVyVmlldyhncm91cCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ3JvdXAuYmVmb3JlQmFja05hdmlnYXRpb25QYWdlKSB7XHJcbiAgICAgIGdyb3VwLmJlZm9yZUJhY2tOYXZpZ2F0aW9uUGFnZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBncm91cFsnaXNUcmlnZ2VyZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtncm91cC5iYWNrTmF2aWdhdGlvblBhZ2VdKTtcclxuXHJcbiAgICAgICAgLy9pZiAoZ3JvdXBbJ3JlbG9hZCddKSB7XHJcbiAgICAgICAgLy8gIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAvLyAgfVxyXG4gICAgICAgIC8vICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSwpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcblxyXG4gICAgICAvL3RoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAvL31cclxuICAgICAgLy90aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpc3RvcnlCYWNrKCkge1xyXG4gICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwWydpc0VtYmVkZGVkUGFnZSddKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VDb250YWluZXJWaWV3KHRoaXMuZ3JvdXApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIucG9wKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaEdyaWQoXHJcbiAgICBldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gICAgZ3JvdXA6IFpHcm91cCxcclxuICAgIG1lOiBhbnksXHJcbiAgICBncmlkT3B0aW9uTmFtZT86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgZ3JpZE9wdGlvbk5hbWUgPSBncmlkT3B0aW9uTmFtZSB8fCBcImdyaWRPcHRpb25zXCI7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIGNvbnN0IGdyaWRPcHRpb24gPSBldmVudC50YXJnZXRcclxuICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIoXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoXCJncm91cC5yZWZyZXNoR3JpZFwiLCBcIlwiKTtcclxuICAgICAgaWYgKGdyaWRPcHRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWRPcHRpb25OYW1lID0gZ3JpZE9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHpncmlkQ29udHJvbCA9IGdyb3VwW2dyaWRPcHRpb25OYW1lXSBhcyBaR3JpZDtcclxuICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgemdyaWRDb250cm9sLmdldERhdGEoKTtcclxuICAgIH1cclxuICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1BhdGg6ICcsIHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybCk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jcm0vY3VzdG9tZXInXSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbG9uZU5ld0NhY2hlWk1vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGNhY2hlWk1vZGVsID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgaWYgKGNhY2hlWk1vZGVsKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLmNsZWFyQ2FjaGUoXCJjbG9uZU5ld01vZGVsXCIpO1xyXG4gICAgICBncm91cC56TW9kZWwgPSBjYWNoZVpNb2RlbDtcclxuICAgICAgZ3JvdXAuek1vZGVsLklkID0gMDtcclxuICAgIH1cclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb2YoW10pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBuZXcsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZU5ld01vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gZ3JvdXAucGFyZW50UmVmZXJlbmNlSWQgfHwgXCIwXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImN1cnJlbnQgdXJsOiBcIiwgdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gcGF0aFNlZ21lbnRbcGF0aFNlZ21lbnQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICBpZiAobGFzdFNlZ21lbnQgPT09IFwiZWRpdFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoU2VnbWVudC5zbGljZSgwLCBwYXRoU2VnbWVudC5sZW5ndGggLSAyKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKHJlZmVyZW5jZUlkKTtcclxuICAgICAgICAgICAgbmV3UGF0aC5wdXNoKFwibmV3XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZVpNb2RlbCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldENhY2hlKFwiY2xvbmVOZXdNb2RlbFwiKTtcclxuICAgICAgICAgICAgaWYgKCFjYWNoZVpNb2RlbCkge1xyXG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgaXQgQ2xvbmVOZXdcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZ3JvdXAuYmFja05hdmlnYXRpb25QYWdlLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuek1vZGVsID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cC5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuZXdQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VnbWVudCA9PT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICBncm91cC56TW9kZWwgPSB7fTtcclxuICAgICAgICAgICAgZ3JvdXAuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgICAvL2dyb3VwLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGdyb3VwLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZ3JvdXAuek1vZGVsW1xyXG4gICAgICAgICAgICAgIGdyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkXHJcbiAgICAgICAgICAgIF0gPSBncm91cC5wYXJlbnRSZWZlcmVuY2VJZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2dyb3VwLmVkaXRNb2RlbFVSTCwgcmVmZXJlbmNlSWQsIFwibmV3XCJdLCB7XHJcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogZ3JvdXAuY3RybFNjb3BlLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbZ3JvdXAuZWRpdE1vZGVsVVJMLCByZWZlcmVuY2VJZCwgXCJuZXdcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU1vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBjcmVhdGVNb2RlbHJlcyA9IG51bGw7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBjcmVhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUNyZWF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdNb2RlbCA9IE9iamVjdC5hc3NpZ24oe30sIF9ncm91cC56TW9kZWwpO1xyXG4gICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVOdWxsRmllbGRzKG5ld01vZGVsKTtcclxuICAgICAgICAgIC8vIE9iamVjdC5rZXlzKG5ld01vZGVsKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgaWYgKG5ld01vZGVsW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIC8vICAgICBkZWxldGUgbmV3TW9kZWxba2V5XTtcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyBpZiAoIW5ld01vZGVsLklkKSB7XHJcbiAgICAgICAgICAvLyAgIG5ld01vZGVsLklkID0gMDtcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUG9zdCQoXHJcbiAgICAgICAgICAgICAgX2dyb3VwLnJlc291cmNlVVJMLCAvLyArIFwiL1wiICsgZ3JvdXAuek1vZGVsLklkLFxyXG4gICAgICAgICAgICAgIG5ld01vZGVsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVNb2RlbHJlcyA9IHJlc3A7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhyZXMsIFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHptb2RlbDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBjcmVhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsKSB7XHJcblxyXG4gICAgICAgICAgICAvL3N1cHBvcnQgb2xkIGFuZCBuZXcgd2ViYXBpIG1ldGhvZFxyXG4gICAgICAgICAgICBpZiAoem1vZGVsLkRhdGEpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh6bW9kZWxbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHptb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF9ncm91cC5yZWZlcmVuY2VJZCA9IF9ncm91cC56TW9kZWwuSWQ7XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWZ0ZXJDcmVhdGVNb2RlbChfZ3JvdXAsIHptb2RlbCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY3JlYXRlTW9kZWxyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PSBudWxsIHx8IGNyZWF0ZU1vZGVscmVzLlByb2Nlc3NpbmdTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzcCAmJiBfZ3JvdXAuek1vZGVsLklkICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgX2dyb3VwLmNhbmNlbEJ1dHRvbk5hbWUgPSBcIkNsb3NlXCI7XHJcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmZy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAvLyB0aGlzLnRvYXN0U2VydmljZS5zaG93KFwiUmVjb3JkIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVNb2RlbChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwKSB7XHJcbiAgICBsZXQgZmc6IEZvcm1Hcm91cCA9IGdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgbGV0IF9ncm91cDogWkdyb3VwID0gZ3JvdXA7XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuU3ViVHlwZSkge1xyXG4gICAgICAgIGZnID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UsIGdyb3VwKTtcclxuICAgICAgY29uc29sZS53YXJuKFwiRm9ybSBWYWxpZGF0aW9uIGdvdCBlcnJvcihzKTpcIiwgZXJyb3JzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSB1cGRhdGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZVVwZGF0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgdXBkYXRlZCwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgICAgaWYgKHptb2RlbCAmJiB6bW9kZWwuRGF0YSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKF9ncm91cC56TW9kZWwsIHptb2RlbC5EYXRhKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRG9uZSB1cGRhdGVNb2RlbCB1cGRhdGVkIHpNb2RlbDpcIiwgZmcudmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoem1vZGVsICYmIHptb2RlbFtcIklkXCJdKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2dyb3VwLnpNb2RlbCwgem1vZGVsKTtcclxuICAgICAgICAgICAgZmcucGF0Y2hWYWx1ZSh6bW9kZWwpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkRvbmUgdXBkYXRlTW9kZWwgdXBkYXRlZCB6TW9kZWw6XCIsIGZnLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgX2dyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyVXBkYXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihncm91cC56TW9kZWwsIGZnLnZhbHVlKTtcclxuICAgIC8vIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgLy8gICAuaHR0cFB1dCQoZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIGdyb3VwLnpNb2RlbC5JZCwgZ3JvdXAuek1vZGVsKVxyXG4gICAgLy8gICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oZ3JvdXAuek1vZGVsLCByZXNwKTtcclxuICAgIC8vICAgICBmZy5wYXRjaFZhbHVlKHJlc3ApO1xyXG4gICAgLy8gICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJEb25lIHVwZGF0ZU1vZGVsIHVwZGF0ZWQgek1vZGVsOlwiLCBmZy52YWx1ZSk7XHJcbiAgICAvLyAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9uZU5ld01vZGVsKGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBfZ3JvdXAgPSBncm91cFsnXycgKyBldmVudC5kYXRhLlN1YlR5cGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBfZ3JvdXAuZm9ybS52YWx1ZSk7XHJcbiAgICBfZ3JvdXAuek1vZGVsLklkID0gMDtcclxuXHJcbiAgICBjb25zdCBjbGVhckZpZWxkcyA9IFtcIldGU19Eb2N1bWVudElkXCIsIFwiV0ZTX1N0YXR1c0NvZGVcIiwgXCJXRlNfU3RhdHVzTmFtZVwiXTtcclxuICAgIGNsZWFyRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmIChfZ3JvdXAuek1vZGVsLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xyXG4gICAgICAgIF9ncm91cC56TW9kZWxbZmllbGRdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYWNoZVNlcnZpY2Uuc2V0Q2FjaGUoXCJjbG9uZU5ld01vZGVsXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICB0aGlzLm5ld01vZGVsKG51bGwsIGdyb3VwKTtcclxuICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsZXRlTW9kZWwoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgbGV0IGZnOiBGb3JtR3JvdXAgPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGxldCBfZ3JvdXA6IFpHcm91cCA9IGdyb3VwO1xyXG5cclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLlN1YlR5cGUpIHtcclxuICAgICAgICBmZyA9IGdyb3VwWydfJyArIGV2ZW50LmRhdGEuU3ViVHlwZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgX2dyb3VwID0gZ3JvdXBbJ18nICsgZXZlbnQuZGF0YS5TdWJUeXBlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9mKF9ncm91cC56TW9kZWwpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZm9yZSBkZWxldGUsIHpNb2RlbDpcIiwgem1vZGVsKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZURlbGV0ZU1vZGVsKF9ncm91cCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBfZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5zaG93KFwiRGVsZXRlIFJlY29yZFwiLCBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXBseTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVwbHkgPT09IFwiWWVzXCIpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfZ3JvdXAuek1vZGVsLCBmZy52YWx1ZSk7XHJcbiAgICAgICAgICAgIF9ncm91cC56TW9kZWwuRGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZVxyXG4gICAgICAgICAgICAgIC5odHRwUHV0JChfZ3JvdXAucmVzb3VyY2VVUkwgKyBcIi9cIiArIF9ncm91cC56TW9kZWwuSWQsIF9ncm91cC56TW9kZWwpXHJcbiAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzKHJlcywgXCJSZWNvcmQgaXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuXCIpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh6bW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZnRlciBkZWxldGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFmdGVyRGVsZXRlTW9kZWwoX2dyb3VwLCB6bW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5QmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5iZWZvcmVVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVVcGRhdGVNb2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVEZWxldGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZURlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVEZWxldGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJlZm9yZU5ld01vZGVsKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlTmV3b2RlbCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlTmV3TW9kZWwoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVDcmVhdGVNb2RlbChncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZUNyZWF0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVVwZGF0ZU1vZGVsIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVDcmVhdGVNb2RlbChncm91cCk7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cDogWkdyb3VwKSB7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmJlZm9yZVBhZ2VJbml0aWFsaXNlIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5iZWZvcmVQYWdlSW5pdGlhbGlzZShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC56TW9kZWwuSWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiek1vZGVsLklkIGlzIG5vdCBkZWZpbmVkXCIsIGdyb3VwLnpNb2RlbCk7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyR2V0TW9kZWxTdWNjZXNzKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGFmdGVyTmV3TW9kZWwoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyTmV3TW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJOZXdNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlck5ld01vZGVsKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWZ0ZXJDcmVhdGVNb2RlbChncm91cDogWkdyb3VwLCB6bW9kZWw6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoIWdyb3VwLmFmdGVyQ3JlYXRlTW9kZWwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYWZ0ZXJDcmVhdGVNb2RlbCBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBncm91cC5hZnRlckNyZWF0ZU1vZGVsKGdyb3VwLCB6bW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclVwZGF0ZU1vZGVsKGdyb3VwOiBaR3JvdXAsIHptb2RlbDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghZ3JvdXAuYWZ0ZXJVcGRhdGVNb2RlbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5hZnRlclVwZGF0ZU1vZGVsIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyVXBkYXRlTW9kZWwoZ3JvdXAsIHptb2RlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyRGVsZXRlTW9kZWwoZ3JvdXA6IFpHcm91cCwgem1vZGVsOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKCFncm91cC5hZnRlckRlbGV0ZU1vZGVsKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyRGVsZXRlTW9kZWwgaXMgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYWZ0ZXJEZWxldGVNb2RlbChncm91cCwgem1vZGVsKTtcclxuICB9XHJcblxyXG4gIGFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKCFncm91cC5hZnRlclBhZ2VJbml0aWFsaXNlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcImdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwLmFmdGVyUGFnZUluaXRpYWxpc2UoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBvbkFjdGlvbihncm91cDogWkdyb3VwKSB7XHJcbiAgLy8gICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gIC8vICAgICAuY3JlYXRlKHtcclxuICAvLyAgICAgICBoZWFkZXI6IFwiQ2hvb3NlIGFuIEFjdGlvblwiLFxyXG4gIC8vICAgICAgIGJ1dHRvbnM6IGdyb3VwLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gIC8vICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldE1vZGVsVmFsdWUocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGdyb3VwOiBaR3JvdXApIHtcclxuICAvLyAgIGdyb3VwLnpNb2RlbFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgLy8gICBpZiAoZ3JvdXAuaXNMb2FkaW5nKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGZnID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgLy8gICBpZiAoIWZnKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICwgbm8tZGVidWdnZXJcclxuICAvLyAgICAgZGVidWdnZXI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBmYyA9IGZnLmNvbnRyb2xzW3Byb3BlcnR5TmFtZV07XHJcbiAgLy8gICBpZiAoIWZjKSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgLy8gICAgIGRlYnVnZ2VyO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZmMuc2V0VmFsdWUodmFsdWUpO1xyXG4gIC8vICAgZmMubWFya0FzRGlydHkoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93ek1vZGFsKFxyXG4gICAgY29sRmllbGRzJDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxBcnJheTxaRmllbGQ+PixcclxuICAgIHBhcmVudEdyb3VwOiBaR3JvdXAsXHJcbiAgICBmb3JtSGVhZGVyOiBzdHJpbmcsXHJcbiAgICB6TW9kZWw/OiBhbnksXHJcbiAgICByZWZlcklkPzogc3RyaW5nLFxyXG4gICAgY29tcG9uZW50U2l6ZT86IFpDb21wb25lbnRTaXplLFxyXG4gICAgc2tpcElzRGlydHlDaGVjaz86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1vZGFsY29tcG9uZW50ID0gWm1vZGFsQ29tcG9uZW50O1xyXG4gICAgY29uc3QgbW9kYWxtb2JpbGVjb21wb25lbnQgPSBabW9kYWxNb2JpbGVDb21wb25lbnQ7XHJcblxyXG4gICAgaWYgKHBhcmVudEdyb3VwKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgaXNUcmlnZ2VyZWQgYmVmb3JlIGRpc3BsYXkgdGhlIHBvcHVwLlxyXG4gICAgICBwYXJlbnRHcm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coY29sRmllbGRzJCwgcGFyZW50R3JvdXAsIGZvcm1IZWFkZXIsIG1vZGFsY29tcG9uZW50LCBtb2RhbG1vYmlsZWNvbXBvbmVudCwgek1vZGVsLCByZWZlcklkLCBjb21wb25lbnRTaXplLCBza2lwSXNEaXJ0eUNoZWNrKVxyXG4gICAgLy9jb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgY29va2llU3RvcmVQb3N0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXNcIjtcclxuICAgIGNvbnN0IGNvb2tpZVN0b3JlVmFsdWUgPSB7XHJcbiAgICAgICdOYW1lJzogbmFtZSxcclxuICAgICAgJ1ZhbHVlJzogSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKGNvb2tpZVN0b3JlVVJMLCBjb29raWVTdG9yZVZhbHVlKS5waXBlKG1hcChyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJncmlkIGNvbmZpZyBzYXZlZChcIiArIHJlcy5zdGF0dXMgKyBcIik6IFwiLCByZXMpO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZUdldChuYW1lOiBzdHJpbmcsIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcImFwaS9Db29raWVTdG9yZXMvP25hbWU9XCIgKyBuYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQoY29va2llU3RvcmVVUkwsIHsgaGVhZGVyczogYWNjZXNzVG9rZW4gfSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBmb3IgUG9zdCB0byBDb29raWVTdG9yZVxyXG4gICAgY29uc3QgY29va2llU3RvcmVVUkwgPSB0aGlzLm9hdXRoRW52aXJvbm1lbnRVcmwgKyBcIkFkbWluL0RlbGV0ZU11bHRpcGxlQ29va2llc1wiO1xyXG4gICAgY29uc3QgY29va2llU3RvcmVWYWx1ZSA9IHtcclxuICAgICAgJ2NvbnRhaW5OYW1lJzogbmFtZVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JChjb29raWVTdG9yZVVSTCwgY29va2llU3RvcmVWYWx1ZSkucGlwZShtYXAocmVzID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRDb250YWluZXJWaWV3KGVsZW1lbnRDb250YWluZXI6IGFueSwgY29udGFpbmVyUGFnZTogYW55LCBncm91cD86IFpHcm91cCkge1xyXG4gICAgaWYgKCFlbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRWxlbWVudENvbnRhaW5lciBpcyBudWxsLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29udGFpbmVyUGFnZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkNvbnRhaW5lclBhZ2UgaXMgbnVsbC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZWxlbWVudENvbnRhaW5lci52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG5cclxuICAgIGdyb3VwID0gZ3JvdXAgPyBncm91cCA6IG5ldyBaR3JvdXA7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29udGFpbmVyUGFnZSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2VbXCJncm91cFwiXSwgZ3JvdXApO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlW1wiZ3JvdXBcIl0sIHsgaXNFbWJlZGRlZFBhZ2U6IHRydWUsIGVsZW1lbnRDb250YWluZXI6IGVsZW1lbnRDb250YWluZXIgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2xvc2VDb250YWluZXJWaWV3KGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSBncm91cC5lbGVtZW50Q29udGFpbmVyLnZpZXdDb250YWluZXJSZWY7XHJcbiAgICBpZiAodmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfSBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hHcmlkKGdyb3VwOiBaR3JvdXApIHtcclxuICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtcImdyaWRPcHRpb25zXCJdIGFzIFpHcmlkO1xyXG4gIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgIHpncmlkQ29udHJvbC5nZXREYXRhKCk7XHJcbiAgfVxyXG4gIGdyb3VwLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbn1cclxuIl19