@esfaenza/es-diagrams 12.2.8 → 12.2.9
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.
- package/bundles/esfaenza-es-diagrams.umd.js +99 -5
- package/bundles/esfaenza-es-diagrams.umd.js.map +1 -1
- package/esfaenza-es-diagrams.metadata.json +1 -1
- package/esm2015/lib/components/es-diagram.component.js +97 -4
- package/esm2015/lib/services/es-diagram.loc.js +3 -2
- package/esm2015/lib/services/es-diagram.service.js +2 -2
- package/fesm2015/esfaenza-es-diagrams.js +99 -5
- package/fesm2015/esfaenza-es-diagrams.js.map +1 -1
- package/lib/components/es-diagram.component.d.ts +45 -0
- package/lib/services/es-diagram.loc.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"ContextMenuCommand":{"__symbolic":"class","members":{}},"ContextMenuOptions":{"__symbolic":"class","members":{}},"ExpandCollapseOptions":{"__symbolic":"class","members":{}},"NodeHTMLTemplate":{"__symbolic":"class","members":{}},"NodeTemplate":{"__symbolic":"class","members":{}},"ZoomLevelBasedTemplate":{"__symbolic":"class","members":{}},"BaseLayoutOptionsImpl":{"__symbolic":"class","members":{"ready":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}]}},"BreadthFirstLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"CircleLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ConcentricLayoutOptionsImpl":{"__symbolic":"class","members":{"concentric":[{"__symbolic":"method"}],"levelWidth":[{"__symbolic":"method"}]}},"CoseLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"DagreLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"GridLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"NullLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PresetLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"RandomLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ShapedLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"EsDiagramModuleConfig":{"__symbolic":"class","members":{}},"EsDiagramComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"es-diagram","template":"<div #graph class=\"graph-wrapper {{name}}\"></div>","styles":[".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]}]}],"members":{"cyGraph":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["graph"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"UseContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"ContextMenuOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"UseExpandCollapse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"ExpandCollapseOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"NativeOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"Elements":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"NodeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"EdgeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"Readonly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"AutoupdateSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"PreserveElementsPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"AnimateLayoutChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"ResizeThrottleTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":118,"character":3}}]}],"Layout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":123,"character":3}}]}],"NodeHTMLTemplates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":130,"character":3}}]}],"ExtensionModulesImporter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":149,"character":3}}]}],"ExtensionModulesApplyer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":168,"character":3}}]}],"onNodeClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":173,"character":3}}]}],"onLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":178,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":218,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":218,"character":62}}],null],"parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"dispatchLoadChart":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"listenOnChanges":[{"__symbolic":"method"}],"onContainerSizeChanged":[{"__symbolic":"method"}],"bindCytoscapeEvents":[{"__symbolic":"method"}],"performModulesLoading":[{"__symbolic":"method"}],"performOperationsWithLoadedModules":[{"__symbolic":"method"}],"loadInternal":[{"__symbolic":"method"}],"getCompletedOptions":[{"__symbolic":"method"}],"reviewCytoscapeElements":[{"__symbolic":"method"}]}},"EsDiagramModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"EsDiagramComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":13},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":13,"character":27},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":13,"character":40},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":61}],"exports":[{"__symbolic":"reference","name":"EsDiagramComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"EsDiagramModule"},"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":false}}]}}}},"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":17}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":29},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":77}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":89},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"importIfNeeded":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":55},"arguments":["DIA_LOCALE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":60},"arguments":["DIA_DEBUG_MODE"]},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":23,"character":17},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"boolean"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"drainInitQueues":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"throttle":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"ContextMenuCommand":"./lib/models/component/contextmenu/ContextMenuCommand","ContextMenuOptions":"./lib/models/component/contextmenu/ContextMenuOptions","ExpandCollapseOptions":"./lib/models/component/grouping/ExpandCollapseOptions","NodeHTMLTemplate":"./lib/models/component/nodes/NodeHTMLTemplate","NodeTemplate":"./lib/models/component/nodes/NodeTemplate","ZoomLevelBasedTemplate":"./lib/models/component/nodes/ZoomLevelBasedTemplate","BaseLayoutOptionsImpl":"./lib/models/layouts/base/BaseLayoutOptionsImpl","BreadthFirstLayoutOptionsImpl":"./lib/models/layouts/BreadthFirstLayoutOptionsImpl","CircleLayoutOptionsImpl":"./lib/models/layouts/CircleLayoutOptionsImpl","ConcentricLayoutOptionsImpl":"./lib/models/layouts/ConcentricLayoutOptionsImpl","CoseLayoutOptionsImpl":"./lib/models/layouts/CoseLayoutOptionsImpl","DagreLayoutOptionsImpl":"./lib/models/layouts/DagreLayoutOptionsImpl","GridLayoutOptionsImpl":"./lib/models/layouts/GridLayoutOptionsImpl","NullLayoutOptionsImpl":"./lib/models/layouts/NullLayoutOptionsImpl","PresetLayoutOptionsImpl":"./lib/models/layouts/PresetLayoutOptionsImpl","RandomLayoutOptionsImpl":"./lib/models/layouts/RandomLayoutOptionsImpl","ShapedLayoutOptionsImpl":"./lib/models/layouts/base/ShapedLayoutOptionsImpl","EsDiagramModuleConfig":"./lib/models/EsDiagramModuleConfig","EsDiagramComponent":"./lib/components/es-diagram.component","EsDiagramModule":"./lib/esdiagram.module","ɵa":"./lib/models/layouts/base/AnimateLayoutOptionsImpl","ɵb":"./lib/services/es-diagram.service","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/services/es-diagram.dispatcher","ɵf":"./lib/extensions/ReactiveExtensions"},"importAs":"@esfaenza/es-diagrams"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"ContextMenuCommand":{"__symbolic":"class","members":{}},"ContextMenuOptions":{"__symbolic":"class","members":{}},"ExpandCollapseOptions":{"__symbolic":"class","members":{}},"NodeHTMLTemplate":{"__symbolic":"class","members":{}},"NodeTemplate":{"__symbolic":"class","members":{}},"ZoomLevelBasedTemplate":{"__symbolic":"class","members":{}},"BaseLayoutOptionsImpl":{"__symbolic":"class","members":{"ready":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}]}},"BreadthFirstLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"CircleLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ConcentricLayoutOptionsImpl":{"__symbolic":"class","members":{"concentric":[{"__symbolic":"method"}],"levelWidth":[{"__symbolic":"method"}]}},"CoseLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"DagreLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"GridLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ShapedLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"NullLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"PresetLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"RandomLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ShapedLayoutOptionsImpl":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"EsDiagramModuleConfig":{"__symbolic":"class","members":{}},"EsDiagramComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"es-diagram","template":"<div #graph class=\"graph-wrapper {{name}}\"></div>","styles":[".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]}]}],"members":{"cyGraph":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["graph"]}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"UseContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"ContextMenuOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"UseExpandCollapse":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"ExpandCollapseOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"NativeOptions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"Elements":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"NodeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"EdgeStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":87,"character":3}}]}],"Readonly":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"AutoupdateSize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"PreserveElementsPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"AnimateLayoutChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"SmartSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":123,"character":3}}]}],"SmartSelectionStyles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":134,"character":3}}]}],"ResizeThrottleTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":141,"character":3}}]}],"Layout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":146,"character":3}}]}],"NodeHTMLTemplates":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":153,"character":3}}]}],"ExtensionModulesImporter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":172,"character":3}}]}],"ExtensionModulesApplyer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":191,"character":3}}]}],"onNodeClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":196,"character":3}}]}],"onNodeSelection":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":201,"character":3}}]}],"onLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":206,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":251,"character":15}}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":251,"character":62}}],null],"parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"dispatchLoadChart":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"setupElementsSelectionIfNeeded":[{"__symbolic":"method"}],"setupSelectionStyles":[{"__symbolic":"method"}],"listenOnChanges":[{"__symbolic":"method"}],"onContainerSizeChanged":[{"__symbolic":"method"}],"bindCytoscapeEvents":[{"__symbolic":"method"}],"performModulesLoading":[{"__symbolic":"method"}],"performOperationsWithLoadedModules":[{"__symbolic":"method"}],"updateCardData":[{"__symbolic":"method"}],"loadInternal":[{"__symbolic":"method"}],"getCompletedOptions":[{"__symbolic":"method"}],"reviewCytoscapeElements":[{"__symbolic":"method"}]}},"EsDiagramModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":11,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"EsDiagramComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":13},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":13,"character":27},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":13,"character":40},{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":61}],"exports":[{"__symbolic":"reference","name":"EsDiagramComponent"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"EsDiagramModule"},"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵe"},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":false}}]}}}},"ɵa":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"BaseLayoutOptionsImpl"},"members":{"__ctor__":[{"__symbolic":"constructor"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":14,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":17}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":29},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":27,"character":77}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":27,"character":89},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"importIfNeeded":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":55},"arguments":["DIA_LOCALE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":60},"arguments":["DIA_DEBUG_MODE"]},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":23,"character":17},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"boolean"}]}],"register":[{"__symbolic":"method"}],"deregister":[{"__symbolic":"method"}],"drainInitQueues":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"throttle":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"ContextMenuCommand":"./lib/models/component/contextmenu/ContextMenuCommand","ContextMenuOptions":"./lib/models/component/contextmenu/ContextMenuOptions","ExpandCollapseOptions":"./lib/models/component/grouping/ExpandCollapseOptions","NodeHTMLTemplate":"./lib/models/component/nodes/NodeHTMLTemplate","NodeTemplate":"./lib/models/component/nodes/NodeTemplate","ZoomLevelBasedTemplate":"./lib/models/component/nodes/ZoomLevelBasedTemplate","BaseLayoutOptionsImpl":"./lib/models/layouts/base/BaseLayoutOptionsImpl","BreadthFirstLayoutOptionsImpl":"./lib/models/layouts/BreadthFirstLayoutOptionsImpl","CircleLayoutOptionsImpl":"./lib/models/layouts/CircleLayoutOptionsImpl","ConcentricLayoutOptionsImpl":"./lib/models/layouts/ConcentricLayoutOptionsImpl","CoseLayoutOptionsImpl":"./lib/models/layouts/CoseLayoutOptionsImpl","DagreLayoutOptionsImpl":"./lib/models/layouts/DagreLayoutOptionsImpl","GridLayoutOptionsImpl":"./lib/models/layouts/GridLayoutOptionsImpl","NullLayoutOptionsImpl":"./lib/models/layouts/NullLayoutOptionsImpl","PresetLayoutOptionsImpl":"./lib/models/layouts/PresetLayoutOptionsImpl","RandomLayoutOptionsImpl":"./lib/models/layouts/RandomLayoutOptionsImpl","ShapedLayoutOptionsImpl":"./lib/models/layouts/base/ShapedLayoutOptionsImpl","EsDiagramModuleConfig":"./lib/models/EsDiagramModuleConfig","EsDiagramComponent":"./lib/components/es-diagram.component","EsDiagramModule":"./lib/esdiagram.module","ɵa":"./lib/models/layouts/base/AnimateLayoutOptionsImpl","ɵb":"./lib/services/es-diagram.service","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/services/es-diagram.dispatcher","ɵf":"./lib/extensions/ReactiveExtensions"},"importAs":"@esfaenza/es-diagrams"}
|
|
@@ -53,6 +53,27 @@ export class EsDiagramComponent {
|
|
|
53
53
|
* Funziona solamente se il **Layout** corrente del diagramma supporta le animazioni
|
|
54
54
|
*/
|
|
55
55
|
this.AnimateLayoutChanges = true;
|
|
56
|
+
/**
|
|
57
|
+
* Attiva una modalità di selezione "smart"... o perlomeno "smarter" del default di Cytoscape.
|
|
58
|
+
*
|
|
59
|
+
* - Il click di un elemento non selezionato lo seleziona
|
|
60
|
+
* - Il click di un elemento selezionato lo deseleziona
|
|
61
|
+
* - Lo stato di selezione viene persistito sull'oggetto originale invece di rimanere in un internal
|
|
62
|
+
* - All'assegnazione di oggetti selezionati, questi vengono marcati correttamente con l'overlay di selezione
|
|
63
|
+
*
|
|
64
|
+
* N.B: la chiamata all'evento **onNodeClick** avviene **DOPO** la gestione della selezione
|
|
65
|
+
*/
|
|
66
|
+
this.SmartSelection = false;
|
|
67
|
+
/**
|
|
68
|
+
* CSS per la graficazione della selezione dei nodi. Quando un nodo verrà selezionato avrà sopra di se un overlay che 'sborda' di **overlay-padding** pixel,
|
|
69
|
+
* di colore **overlay-color** e con un opacità **overlay-opacity**
|
|
70
|
+
*
|
|
71
|
+
* Assegnando "{}" a questo input, la Smart selection viene gestita ma la gestione grafica è affidata all'utente,
|
|
72
|
+
* ad esempio usando dei **NodeHTMLTemplates** che definiscano selettori su nodi ":selected"
|
|
73
|
+
*
|
|
74
|
+
* @default {'overlay-color':'blue','overlay-opacity':0.5,'overlay-padding':7}
|
|
75
|
+
*/
|
|
76
|
+
this.SmartSelectionStyles = null;
|
|
56
77
|
/**
|
|
57
78
|
* Periodo di throttle da quando viene effettuato un resize a quando ricalcolare le dimensioni del diagramma.
|
|
58
79
|
*
|
|
@@ -99,6 +120,10 @@ export class EsDiagramComponent {
|
|
|
99
120
|
* Evento lanciato al click di un nodo, contiene l'oggetto **data** del nodo in questione
|
|
100
121
|
*/
|
|
101
122
|
this.onNodeClick = new EventEmitter();
|
|
123
|
+
/**
|
|
124
|
+
* Evento lanciato alla selezione o deselezione di un nodo, contiene l'oggetto **data** del nodo in questione e informazioni sul suo stato di selezione
|
|
125
|
+
*/
|
|
126
|
+
this.onNodeSelection = new EventEmitter();
|
|
102
127
|
/**
|
|
103
128
|
* Evento lanciato al termine del caricamento del diagramma
|
|
104
129
|
*/
|
|
@@ -111,6 +136,10 @@ export class EsDiagramComponent {
|
|
|
111
136
|
* Api dell'estensione expand-collapse per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se **UseExpandCollapse** è **true**
|
|
112
137
|
*/
|
|
113
138
|
this.ExpandCollapseApi = null;
|
|
139
|
+
/**
|
|
140
|
+
* Api dell'estensione html-node per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se sono impostati dei **NodeHTMLTemplates**
|
|
141
|
+
*/
|
|
142
|
+
this.HtmlNodeApi = null;
|
|
114
143
|
}
|
|
115
144
|
/**
|
|
116
145
|
* @ignore
|
|
@@ -164,6 +193,8 @@ export class EsDiagramComponent {
|
|
|
164
193
|
if (elements && elements.length && elements.length > 0) {
|
|
165
194
|
this.reviewCytoscapeElements(elements, previous_elements);
|
|
166
195
|
this.cy.add(elements);
|
|
196
|
+
if (this.SmartSelection)
|
|
197
|
+
this.setupElementsSelectionIfNeeded();
|
|
167
198
|
// Se solo gli elementi cambiano, riapplico il Layout precedente
|
|
168
199
|
if (!layoutChanges && this.LastLayout) {
|
|
169
200
|
// Se devo animare le modifche al layout forzo il parametro relativo
|
|
@@ -202,9 +233,39 @@ export class EsDiagramComponent {
|
|
|
202
233
|
// Se devo aggiornare in automatico in base alla dimensione del contenitore collego il ResizeObserver
|
|
203
234
|
if (this.AutoupdateSize)
|
|
204
235
|
this.listenOnChanges();
|
|
236
|
+
if (this.SmartSelection) {
|
|
237
|
+
this.setupSelectionStyles();
|
|
238
|
+
this.setupElementsSelectionIfNeeded();
|
|
239
|
+
}
|
|
205
240
|
this.onLoaded.emit();
|
|
206
241
|
});
|
|
207
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Prende tutti gli elementi appena assegnati, e se qualcuno era selezionato la situazione viene persistita su cytoscape
|
|
245
|
+
*/
|
|
246
|
+
setupElementsSelectionIfNeeded() {
|
|
247
|
+
for (let i = 0; i < this.Elements.length; i++) {
|
|
248
|
+
let eldata = this.Elements[i].data;
|
|
249
|
+
if (eldata.__selected) {
|
|
250
|
+
let el = this.cy.$id(eldata.id);
|
|
251
|
+
el.select();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Carica gli stili per mostrare carina la selezione dei nodi
|
|
257
|
+
*/
|
|
258
|
+
setupSelectionStyles() {
|
|
259
|
+
let cssItem = this.SmartSelectionStyles || {
|
|
260
|
+
'overlay-color': 'blue',
|
|
261
|
+
'overlay-opacity': 0.5,
|
|
262
|
+
'overlay-padding': 7
|
|
263
|
+
};
|
|
264
|
+
// Backdoor per poter assegnare "{}" a SmartSelectionStyles in modo di utilizzare la smart selection ma senza che nessuno stile venga applicato
|
|
265
|
+
// ad esempio qualora si volesse utilizzare l'htmlnode per gestire la grafica degli elementi selezionati
|
|
266
|
+
if (cssItem['overlay-color'] && cssItem['overlay-opacity'] && cssItem['overlay-padding'])
|
|
267
|
+
this.cy.style().selector('node:selected').css(cssItem);
|
|
268
|
+
}
|
|
208
269
|
/**
|
|
209
270
|
* Registra l'ascolto al contenitore del grafico e in caso di modifiche alla dimensione, al massimo una volta ogni 500 millisecondi, lo ridisegna
|
|
210
271
|
*/
|
|
@@ -226,7 +287,29 @@ export class EsDiagramComponent {
|
|
|
226
287
|
*/
|
|
227
288
|
bindCytoscapeEvents() {
|
|
228
289
|
this.cy.bind('click', 'node', (event) => {
|
|
229
|
-
|
|
290
|
+
let targetData = event.target.data();
|
|
291
|
+
if (this.SmartSelection) {
|
|
292
|
+
let id = targetData.id;
|
|
293
|
+
let el = this.cy.$id(id);
|
|
294
|
+
let selected = el.selected();
|
|
295
|
+
el.selectify();
|
|
296
|
+
if (selected)
|
|
297
|
+
el.unselect();
|
|
298
|
+
else
|
|
299
|
+
el.select();
|
|
300
|
+
el.unselectify();
|
|
301
|
+
// Questo va anche nella lista degli elementi originali (this.Elements) dato che cytoscape li prende per riferimento (bbbbbravo cyto-chan)
|
|
302
|
+
el.data("__selected", !selected);
|
|
303
|
+
}
|
|
304
|
+
this.onNodeClick.emit({ data: targetData });
|
|
305
|
+
});
|
|
306
|
+
this.cy.bind('select', 'node', (event) => {
|
|
307
|
+
let targetData = event.target.data();
|
|
308
|
+
this.onNodeSelection.emit({ data: targetData, selected: true });
|
|
309
|
+
});
|
|
310
|
+
this.cy.bind('unselect', 'node', (event) => {
|
|
311
|
+
let targetData = event.target.data();
|
|
312
|
+
this.onNodeSelection.emit({ data: targetData, selected: false });
|
|
230
313
|
});
|
|
231
314
|
// Altri eventi...
|
|
232
315
|
}
|
|
@@ -271,8 +354,8 @@ export class EsDiagramComponent {
|
|
|
271
354
|
}
|
|
272
355
|
// Utilizzo dell'HTML node
|
|
273
356
|
if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0) {
|
|
274
|
-
|
|
275
|
-
|
|
357
|
+
this.HtmlNodeApi = anyCy.htmlnode();
|
|
358
|
+
this.HtmlNodeApi.createHtmlNode(cytoscape, this.cy, this.NodeHTMLTemplates);
|
|
276
359
|
}
|
|
277
360
|
// Utilizzo del Context Menu
|
|
278
361
|
if (this.UseContextMenu)
|
|
@@ -284,6 +367,13 @@ export class EsDiagramComponent {
|
|
|
284
367
|
if (this.ExtensionModulesApplyer)
|
|
285
368
|
this.ExtensionModulesApplyer(this.cy);
|
|
286
369
|
}
|
|
370
|
+
updateCardData() {
|
|
371
|
+
if (!this.HtmlNodeApi) {
|
|
372
|
+
this.service.log("E", "Cannot update NodeHTMLTemplates as they don't seem to be used");
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
this.HtmlNodeApi.update();
|
|
376
|
+
}
|
|
287
377
|
/**
|
|
288
378
|
* Metodo interno per il caricamento dei moduli di estensione
|
|
289
379
|
*
|
|
@@ -391,12 +481,15 @@ EsDiagramComponent.propDecorators = {
|
|
|
391
481
|
AutoupdateSize: [{ type: Input }],
|
|
392
482
|
PreserveElementsPosition: [{ type: Input }],
|
|
393
483
|
AnimateLayoutChanges: [{ type: Input }],
|
|
484
|
+
SmartSelection: [{ type: Input }],
|
|
485
|
+
SmartSelectionStyles: [{ type: Input }],
|
|
394
486
|
ResizeThrottleTime: [{ type: Input }],
|
|
395
487
|
Layout: [{ type: Input }],
|
|
396
488
|
NodeHTMLTemplates: [{ type: Input }],
|
|
397
489
|
ExtensionModulesImporter: [{ type: Input }],
|
|
398
490
|
ExtensionModulesApplyer: [{ type: Input }],
|
|
399
491
|
onNodeClick: [{ type: Output }],
|
|
492
|
+
onNodeSelection: [{ type: Output }],
|
|
400
493
|
onLoaded: [{ type: Output }]
|
|
401
494
|
};
|
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQW9MN0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQWxMaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFTekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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QyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDeEMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUN6QzthQUNGO1lBRUQsSUFBSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLE9BQU87Z0JBQzdDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDMUM7SUFDSCxDQUFDOzs7WUF2ZUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QiwrREFBMEM7O2FBRTNDOzs7WUFoQlEsZ0JBQWdCLHVCQTBNVixRQUFRO1lBek1kLG1CQUFtQix1QkF5TWtDLFFBQVE7WUF0TTdELGtCQUFrQjs7O3NCQWtCeEIsU0FBUyxTQUFDLE9BQU87bUJBS2pCLEtBQUs7NkJBS0wsS0FBSztpQ0FPTCxLQUFLO2dDQUtMLEtBQUs7b0NBS0wsS0FBSzs0QkFPTCxLQUFLO3VCQUtMLEtBQUs7eUJBS0wsS0FBSzt5QkFLTCxLQUFLO3VCQUtMLEtBQUs7NkJBS0wsS0FBSzt1Q0FPTCxLQUFLO21DQU9MLEtBQUs7aUNBT0wsS0FBSztxQkFLTCxLQUFLO2dDQU9MLEtBQUs7dUNBbUJMLEtBQUs7c0NBbUJMLEtBQUs7MEJBS0wsTUFBTTt1QkFLTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBDb250ZXh0TWVudU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2NvbnRleHRtZW51L0NvbnRleHRNZW51T3B0aW9ucyc7XHJcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvZ3JvdXBpbmcvRXhwYW5kQ29sbGFwc2VPcHRpb25zJztcclxuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0JyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvc2VMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0Nvc2VMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgR3JpZExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvR3JpZExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgTnVsbExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvTnVsbExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFJhbmRvbUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5cclxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXInO1xyXG5pbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tIFwiLi4vZXh0ZW5zaW9ucy9SZXNpemVTZW5zb3JcIjtcclxuXHJcbmltcG9ydCB7IFJlYWN0aXZlRXh0ZW5zaW9ucyB9IGZyb20gJy4uL2V4dGVuc2lvbnMvUmVhY3RpdmVFeHRlbnNpb25zJztcclxuXHJcbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xyXG4vKiogQGlnbm9yZSAqL2NvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGkgZ3JhZmljYXJlIHVuIGRpYWdyYW1tYSBlIGRpIGdlc3Rpcm5lIGlsIGNpY2xvIGRpIHZpdGFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZXMtZGlhZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VzLWRpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gSFRNTCBzdSBjdWkgY3JlYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYXBoJykgY3lHcmFwaDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZGlhZ3JhbW1hLCBmb25kYW1lbnRhbGUgYXNzZWduYXJsbyBwZXIgcGVybWV0dGVyZSBhbGxhIGxpYnJlcmlhIGRpIHNjaGVkdWxhcm5lIGxhIGNyZWF6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgcXVhbG9yYSAqKlVzZUNvbnRleHRNZW51KiogZm9zc2UgKip0cnVlKiouXHJcbiAgICogXHJcbiAgICogT2duaSBlbGVtZW50byBkaSBxdWVzdG8gYXJyYXkgw6ggdW4gc2VsZXR0b3JlIGNvbiBpbCBtZW51IGRhIG1vc3RyYXJlIHBlciBxdWVsbGEgY2FzaXN0aWNhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljZSBhbCBjb21wb25lbnRlIHNlIGlsIGRpYWdyYW1tYSBkZXZlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBlc3RlbnNpb25lIHBlciBsJ2V4cGFuZCBlIGNvbGxhcHNlIGRlaSBncnVwcGlcclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4cGFuZENvbGxhcHNlT3B0aW9uczogRXhwYW5kQ29sbGFwc2VPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBCbG9jY28gY29tcGxldG8gZGVsbGUgb3B6aW9uaSwgYWx0ZXJuYXRpdm8gYWxsJ2Fzc2VnbmF6aW9uZSBkaSAqKkVsZW1lbnRzKiosICoqTm9kZVN0eWxlcyoqLCAqKkVkZ2VTdHlsZXMqKiwgZSAqKkxheW91dCoqLlxyXG4gICAqIFxyXG4gICAqIFF1YWxvcmEgZW50cmFtYmUgdmVuaXNzZXJvIHNwZWNpZmljYXRlIHZlcnLDoCBlZmZldHR1YXRhIHVuJ3VuaW9uZSBmcmEgcXVlc3RlIG9wemlvbmkgZSBxdWVsbGUgc3BlY2lmaWNhdGUsIGRhbmRvIHByaW9yaXTDoCBhbGxlIHNwZWNpZmljYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLk5vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBjb2xsZWdhbWVudGkgZnJhIGkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQWdnaW9ybmEgYXV0b21hdGljYW1lbnRlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYSBxdWFuZG8gY2FtYmlhbm8gbGUgZGltZW5zaW9uaSBkZWxsYSBmaW5lc3RyYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEF1dG91cGRhdGVTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGRpIG1hbnRlbmVyZSBsYSBwb3NpemlvbmUgZGVpIG5vZGkgcXVhbG9yYSB2ZW5pc3Nlcm8gY2FtYmlhdGkgZGFsbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUXVhbG9yYSB2ZW5pc3NlIG1vZGlmaWNhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiosIHBpdXR0b3N0byBjaGUgbWV0dGVyZSBzZW1wbGljZW1lbnRlIGlsIG51b3ZvIEVsZW1lbnRvIGluIGJhc2UgYWwgTGF5b3V0IHByZWNlZGVudGUsIGFwcGxpY2EgYW5jaGUgdW4nYW5pbWF6aW9uZSBcclxuICAgKiBcclxuICAgKiBGdW56aW9uYSBzb2xhbWVudGUgc2UgaWwgKipMYXlvdXQqKiBjb3JyZW50ZSBkZWwgZGlhZ3JhbW1hIHN1cHBvcnRhIGxlIGFuaW1hemlvbmlcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmlvZG8gZGkgdGhyb3R0bGUgZGEgcXVhbmRvIHZpZW5lIGVmZmV0dHVhdG8gdW4gcmVzaXplIGEgcXVhbmRvIHJpY2FsY29sYXJlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYS5cclxuICAgKiBcclxuICAgKiBQdcOyIGVzc2VyZSB0ZW51dG8gYSAwIChyZWRyYXcgaXN0YW50YW5lbykgZmluY2jDqSBub24gY2kgc29ubyBwcm9ibGVtaSBkaSBwcmVzdGF6aW9uaSBjb24gZXZlbnR1YWxtZW50ZSB0YW50aSByZXNpemUgYSBwb2NhIGRpc3RhbnphIGwndW5vIGRhbGwnYWx0cm8uXHJcbiAgICovXHJcbiAgQElucHV0KCkgUmVzaXplVGhyb3R0bGVUaW1lOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBMYXlvdXQgZGkgb3JkaW5hbWVudG8gZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBMYXlvdXQ6IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIHwgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfCBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgQ29zZUxheW91dE9wdGlvbnNJbXBsIHwgRGFncmVMYXlvdXRPcHRpb25zSW1wbCB8IEdyaWRMYXlvdXRPcHRpb25zSW1wbCB8IE51bGxMYXlvdXRPcHRpb25zSW1wbCB8IFByZXNldExheW91dE9wdGlvbnNJbXBsIHxcclxuICAgIFJhbmRvbUxheW91dE9wdGlvbnNJbXBsO1xyXG5cclxuICAvKipcclxuICAgKiBUZW1wbGF0ZSBIVE1MIGRhIGFwcGxpY2FyZSBhaSBub2RpIHBlciBkYXJnbGkgc3RpbGkgcGFydGljb2xhcmksIGRpdmVyc2kgZGFsbGUgc2hhcGUgZGkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIE5vZGVIVE1MVGVtcGxhdGVzOiBOb2RlSFRNTFRlbXBsYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm5pc2NlIGlsIGdsb2JhbCBkZWxsYSBsaWJyZXJpYSAobmFtZXNwYWNlICoqY3l0b3NjYXBlKiopIGUgc2kgYXNwZXR0YSBjaGUgZG9wbyBvcGVyYXppb25pIGRpIGltcG9ydGF6aW9uZSBcclxuICAgKiBsYXNjaWF0ZSBhbGwndXRlbnRlIHZlbmdhbm8gYWdnaXVudGkgdHV0dGkgaSBtb2R1bGkgZGVzaWRlcmF0aS4gXHJcbiAgICogXHJcbiAgICogw4ggKipmb25kYW1lbnRhbGUqKiBjaGUgaWwgcHJpbW8gcGFyYW1ldHJvIChpbCBub21lIGRlbCBtb2R1bG8pIHNpYSB1Z3VhbGUgYSBjacOyIGRpIGN1aSB2aWVuZSBmYXR0byBpbCByZXF1aXJlIGluIG1vZG8gY2hlIGxhIGxpYnJlcmlhXHJcbiAgICogcG9zc2EgY29udHJvbGxhcmUgY2hlIGlsIG1vZHVsbyBpbXBvcnRhdG8gbm9uIHNpYSBnacOgIHN0YXRvIGltcG9ydGF0byBpbiBwcmVjZWRlbnphXHJcbiAgICogXHJcbiAgICogIyMgRXNlbXBpbzpcclxuICAgKiBcclxuICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICogKGdsb2JhbCkgPT4ge1xyXG4gICAqICAgIHJldHVybiBpbXBvcnQoXCJjeXRvc2NhcGUtZXh0ZW5zaW9uLWxpYnJhcnlcIikudGhlbihtb2R1bGUgPT4gZ2xvYmFsLnVzZShcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiLCBtb2R1bGUuZGVmYXVsdCkpO1xyXG4gICAqIFxyXG4gICAqICAgIC4uLlxyXG4gICAqIH1cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoKSBFeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXI6IChnbG9iYWw6IHsgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IHZvaWQgfCBjeXRvc2NhcGUuRXh0KSA9PiB2b2lkIH0pID0+IFByb21pc2U8YW55PiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm5pc2NlIGwnaXN0YW56YSBhdHR1YWxlIGRpIEN5dG9zY2FwZSBkYSBjdWkgw6ggcG9zc2liaWxlIHByZW5kZXJlIGxlIGxpYnJlcmllIGRpIGVzdGVuc2lvbmUgY2FyaWNhdGUgaW4gKipFeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIqKlxyXG4gICAqIGUgY29uZmlndXJhcmxlIGluIGJhc2UgYWkgY29tcG9ydGFtZW50aSBzcGVjaWZpY2lcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoY3l0b3NjYXBlQ29yZSkgPT4ge1xyXG4gICAqICAgIC8vIEZhcmUgcXVlc3RvIGxhdm9ybyBwZXIgb2duaSBlc3RlbnNpb25lIGNhcmljYXRhXHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLiB9O1xyXG4gICAqICAgIGxldCBleHRlbnNpb25JbnN0YW5jZSA9IGN5dG9zY2FwZUNvcmUuZXh0ZW5zaW9uTGlicmFyeShleHRlbnNpb25Db25maWd1cmF0aW9uKTtcclxuICAgKiAgICBleHRlbnNpb25JbnN0YW5jZS5kb1NvbWV0aGluZ1NwZWNpZmljVG9UaGlzRXh0ZW5zaW9uKCk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNBcHBseWVyOiAoY3l0b3NjYXBlQ29yZTogY3l0b3NjYXBlLkNvcmUpID0+IHZvaWQgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgY2xpY2sgZGkgdW4gbm9kbywgY29udGllbmUgbCdvZ2dldHRvICoqZGF0YSoqIGRlbCBub2RvIGluIHF1ZXN0aW9uZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbk5vZGVDbGljazogRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBWYXJpYWJpbGUgc3UgY3VpIHNhbHZhcnNpIHNlIGkgbm9kaSBoYW5ubyB1bmEgZ2VyYXJjaGlhIGEgZ3J1cHBpIG8gbm8uIFNlcnZlIHBlciBwb2kgY2FyaWNhcmUgbCdlc3RlbnNpb25lIGV4cGFuZC1jb2xsYXBzZSBxdWFsb3JhIGZvc3NlIHJpY2hpZXN0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTm9kZXNIaWVyYXJjaHk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYSDDqCB0ZXJtaW5hdG9cclxuICAgKi9cclxuICBwcml2YXRlIFJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIElzdGFuemEgZGVsIGRpYWdyYW1tYSBhdHR1YWxtZW50ZSBpbiB1c29cclxuICAgKi9cclxuICBwdWJsaWMgY3k6IGN5dG9zY2FwZS5Db3JlXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwaSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHBlciBwZXJtZXR0ZXJlIGRpIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBkYWxsJ2VzdGVybm8gZGVsIGRpYWdyYW1tYS4gVmVuZ29ubyB2YWxvcml6emF0ZSBzZSAqKlVzZUV4cGFuZENvbGxhcHNlKiogw6ggKip0cnVlKipcclxuICAgKi9cclxuICBwdWJsaWMgRXhwYW5kQ29sbGFwc2VBcGk6IGFueSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9zc2VydmF0b3JlIGRlbGxlIG1vZGlmaWNoZSBhbCBjb250ZW5pdG9yZSBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplU2Vuc29yO1xyXG5cclxuICAvKipcclxuICAgKiBSaWZlcmltZW50byBhbGwndWx0aW1vIGxheW91dCB1dGlsaXp6YXRvLiBWaWVuZSByaWFwcGxpY2F0byBxdWFsb3JhIHZlbmlzc2UgY2FtYmlhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogTm9uIHV0aWxpenpvIGlsIG1ha2VMYXlvdXRzIHBlcmNow6kgYWx0cmltZW50aSByaXNjaGllcmVpIGRpIGNyZWFyZSB1biBsYXlvdXQgcmlmZXJpdG8gYSBYIGVsZW1lbnRpLCBuZSBhZ2dpdW5nbyAxLCByaWFwcGxpY28gaWwgTGF5b3V0IFxyXG4gICAqIG1hIG1pIHZpZW5lIHJpYXBwbGljYXRvIGEgWCBlbGVtZW50aSBpbnZlY2UgY2hlIFggKyAxXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBMYXN0TGF5b3V0OiBjeXRvc2NhcGUuTGF5b3V0T3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogQ29zdHJ1dHRvcmVcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBzZXJ2aWNlOiBFc0RpYWdyYW1TZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGRpc3BhdGNoZXI6IEVzRGlhZ3JhbURpc3BhdGNoZXIsIHByaXZhdGUgZXh0czogUmVhY3RpdmVFeHRlbnNpb25zKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZSBcclxuICAgKiBcclxuICAgKiBBbmd1bGFyIFBpcGVsaW5lXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5zZXJ2aWNlIHx8ICF0aGlzLmRpc3BhdGNoZXIpXHJcbiAgICAgIHRocm93IFwiSWwgbW9kdWxvIEBlc2ZhZW56YS9kaWFncmFtcyBub24gw6ggc3RhdG8gaW1wb3J0YXRvIGNvbiBpbCBmb3JSb290KCk7XCI7XHJcblxyXG4gICAgdGhpcy5kaXNwYXRjaExvYWRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsJ29uRGVzdHJveSByaXB1bGlzY28gbGEgbWVtb3JpYSBkYWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5jeSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkRpYWdyYW1cIiArIFwiIFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyBkZXN0cm95ZWQgZGlhZ3JhbVwiLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuY3kuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIGlsIGRpYWdyYW1tYSBhdHR1YWxlIG5lbCBEaXNwYXRjaGVyIGluIG1vZG8gY2hlIHZlbmdhIGNhcmljYXRvIGFwcGVuYSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMubmFtZSwgKCkgPT4geyByZXR1cm4gdGhpcy5yZW5kZXIoKTsgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlIFxyXG4gICAqIFxyXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmU6IEdlc3Rpb25lIHJpLWdyYWZpY2F6aW9uZSBkZWwgZGlhZ3JhbW1hLCBzZSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGFueSB7XHJcbiAgICBsZXQgdG9DaGVjayA9IFtcIlRlbXBsYXRlc1wiLCBcIlVzZUNvbnRleHRNZW51XCIsIFwiQ29udGV4dE1lbnVPcHRpb25zXCIsIFwiVXNlRXhwYW5kQ29sbGFwc2VcIiwgXCJFeHBhbmRDb2xsYXBzZU9wdGlvbnNcIiwgXCJOb2RlU3R5bGVzXCIsIFwiRWRnZVN0eWxlc1wiLCBcIk5hdGl2ZU9wdGlvbnNcIl07XHJcblxyXG4gICAgaWYgKHRoaXMuUmVuZGVyZWQgJiYgdG9DaGVjay5zb21lKHQgPT4gY2hhbmdlc1t0XSkpXHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIFwiUmVkcmF3IGJhc2VkIG9uIGR5bmFtaWMgSW5wdXQgY2hhbmdlIGlzIHN1cHBvcnRlZCBvbmx5IGZvciAnRWxlbWVudHMnIGFuZCAnTGF5b3V0JyBpbnB1dHMsIHBsZWFzZSBkZXN0cm95IHRoZSBjb21wb25lbnQgYW5kIHJlY3JlYXRlIGl0IHdpdGggdGhlIG5ldyBzZXR0aW5nc1wiKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudENoYW5nZXMgPSBjaGFuZ2VzW1wiRWxlbWVudHNcIl07XHJcbiAgICBsZXQgbGF5b3V0Q2hhbmdlcyA9IGNoYW5nZXNbXCJMYXlvdXRcIl07XHJcbiAgICBpZiAoZWxlbWVudENoYW5nZXMgJiYgIWVsZW1lbnRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcclxuXHJcbiAgICAgIC8vIENhbWJpYW1lbnRvIGFnbGkgRWxlbWVudGk6IHJpcHVsaXNjbyBnbGkgZWxlbWVudGkgdmVjY2hpLCBwcmVuZG8gaSBudW92aSwgbGkgc2lzdGVtbyBlIGxpIHJpYXNzZWduby4gXHJcbiAgICAgIC8vIFNlIGlsIG51b3ZvIElucHV0IEVsZW1lbnRzIMOoIHJvYmEgc3RyYW5hIG1pIGxpbWl0byBhIHJpcHVsaXJlIGlsIGRpYWdyYW1tYVxyXG4gICAgICAvLyBTZSBjeXRvc2NhcGUgYXZldmEgZ2nDoCBkZWdsaSBlbGVtZW50aSBwcmVjZWRlbnRlbWVudGUgbmUgcHJlbmRvIGxlIHBvc2l6aW9uaSBpbiBtb2RvIGRhIHJpZGlzZWduYXJsaSBwYXJ0ZW5kbyBkYWxsbyBzdGVzc28gcHVudG8gKGNhcmlubyBwZXIgbGUgYW5pbWF6aW9uaSlcclxuICAgICAgbGV0IGVsZW1lbnRzID0gZWxlbWVudENoYW5nZXM/LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgbGV0IHByZXZpb3VzX2VsZW1lbnRzID0gdGhpcy5QcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb24gPyA8YW55PnRoaXMuY3kubm9kZXMoKSA6IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmN5LmVsZW1lbnRzKCkucmVtb3ZlKCk7XHJcbiAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoZWxlbWVudHMsIHByZXZpb3VzX2VsZW1lbnRzKTtcclxuICAgICAgICB0aGlzLmN5LmFkZChlbGVtZW50cyk7XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbG8gZ2xpIGVsZW1lbnRpIGNhbWJpYW5vLCByaWFwcGxpY28gaWwgTGF5b3V0IHByZWNlZGVudGVcclxuICAgICAgICBpZiAoIWxheW91dENoYW5nZXMgJiYgdGhpcy5MYXN0TGF5b3V0KSB7XHJcblxyXG4gICAgICAgICAgLy8gU2UgZGV2byBhbmltYXJlIGxlIG1vZGlmY2hlIGFsIGxheW91dCBmb3J6byBpbCBwYXJhbWV0cm8gcmVsYXRpdm9cclxuICAgICAgICAgIGlmICh0aGlzLkFuaW1hdGVMYXlvdXRDaGFuZ2VzKVxyXG4gICAgICAgICAgICAoPGFueT50aGlzLkxhc3RMYXlvdXQpLmFuaW1hdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2UgaWwgbGF5b3V0IGNhbWJpYSBsbyBhcHBsaWNvIGUgbWUgbG8gc2Fsdm8gY29tZSBsYXlvdXQgcHJlY2VkZW50ZSBwZXIgaWwgZnV0dXJvXHJcbiAgICBpZiAobGF5b3V0Q2hhbmdlcyAmJiAhbGF5b3V0Q2hhbmdlcy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xyXG4gICAgICB0aGlzLkxhc3RMYXlvdXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxheW91dENoYW5nZXMuY3VycmVudFZhbHVlKSk7XHJcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmV0dHVhIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKSB7XHJcblxyXG4gICAgLy8gVGlybyBmdW9yaSBsZSBvcHppb25pIGNvbiBjdWkgZ2VuZXJhcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICBsZXQgY3lPcHRpb25zID0gdGhpcy5nZXRDb21wbGV0ZWRPcHRpb25zKCk7XHJcbiAgICB0aGlzLk5vZGVzSGllcmFyY2h5ID0gY3lPcHRpb25zLmVsZW1lbnRzICYmICg8Y3lfLkVsZW1lbnREZWZpbml0aW9uW10+Y3lPcHRpb25zLmVsZW1lbnRzKS5zb21lKHQgPT4gdC5kYXRhLnBhcmVudCk7XHJcblxyXG4gICAgLy8gQ2FyaWNvIGV2ZW50dWFsaSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjaGUgc2Vydm9ub1xyXG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtTW9kdWxlc0xvYWRpbmcoKTtcclxuXHJcbiAgICAvLyBHZW5lcm8gaWwgZGlhZ3JhbW1hXHJcbiAgICB0aGlzLmN5ID0gY3l0b3NjYXBlKGN5T3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQ29sbGVnbyBnbGkgZXZlbnRpIGFsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuYmluZEN5dG9zY2FwZUV2ZW50cygpO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGxlIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIHByZWNlZGVudGVtZW50ZSBwZXIgZmFyZSBpbCByZXN0byBkZWxsZSBtaWUgb3BlcmF6aW9uaVxyXG4gICAgdGhpcy5wZXJmb3JtT3BlcmF0aW9uc1dpdGhMb2FkZWRNb2R1bGVzKCk7XHJcblxyXG4gICAgLy8gSW1wb3N0byBsYSB2YXJpYWJpbGUgUmVuZGVyZWQgYSB0cnVlIGluIG1vZG8gY2hlIHNlIGRhIGFkZXNzbyB2ZW5nb25vIGZhdHRlIG1vZGlmaWNoZSBjaGUgZG92cmViYmVybyBjYXVzYXJlIHVuIHJlZHJhdyBwb3NzbyBhY2Nvcmdlcm1lbmVcclxuICAgIC8vIGUgbWFuZGFyZSBhIGNhZ2FyZSBsbyBzdHJvbnpvIGRpIHR1cm5vXHJcbiAgICB0aGlzLlJlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTZSBkZXZvIGFnZ2lvcm5hcmUgaW4gYXV0b21hdGljbyBpbiBiYXNlIGFsbGEgZGltZW5zaW9uZSBkZWwgY29udGVuaXRvcmUgY29sbGVnbyBpbCBSZXNpemVPYnNlcnZlclxyXG4gICAgaWYgKHRoaXMuQXV0b3VwZGF0ZVNpemUpXHJcbiAgICAgIHRoaXMubGlzdGVuT25DaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5vbkxvYWRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBsJ2FzY29sdG8gYWwgY29udGVuaXRvcmUgZGVsIGdyYWZpY28gZSBpbiBjYXNvIGRpIG1vZGlmaWNoZSBhbGxhIGRpbWVuc2lvbmUsIGFsIG1hc3NpbW8gdW5hIHZvbHRhIG9nbmkgNTAwIG1pbGxpc2Vjb25kaSwgbG8gcmlkaXNlZ25hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsaXN0ZW5PbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmN5R3JhcGgubmF0aXZlRWxlbWVudCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmV4dHMudGhyb3R0bGUodGhpcy5uYW1lLCB0aGlzLm9uQ29udGFpbmVyU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSwgdGhpcy5SZXNpemVUaHJvdHRsZVRpbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgcmVwYWludCBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNpemVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtIGNvbnRhaW5lciBzaXplIGhhcyBjaGFuZ2VkLCByZWRyYXdpbmdcIik7XHJcbiAgICB0aGlzLmN5LnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jeS5maXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlZ2EgdHV0dGkgZ2xpIGV2ZW50aSBjaGUgbWkgcG9zc29ubyBzZXJ2aXJlIGUgbGkgZXNwb25lIGluIG91dHB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYmluZEN5dG9zY2FwZUV2ZW50cygpIHtcclxuICAgIHRoaXMuY3kuYmluZCgnY2xpY2snLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9uTm9kZUNsaWNrLmVtaXQoeyBkYXRhOiBldmVudC50YXJnZXQuZGF0YSgpIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQWx0cmkgZXZlbnRpLi4uXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtTW9kdWxlc0xvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5MYXlvdXQubmFtZSA9PSAnZGFncmUnKVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1kYWdyZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyAmJiB0aGlzLk5vZGVIVE1MVGVtcGxhdGVzLmxlbmd0aCA+IDApXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5Vc2VDb250ZXh0TWVudSlcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtY3h0bWVudVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5Ob2Rlc0hpZXJhcmNoeSAmJiB0aGlzLlVzZUV4cGFuZENvbGxhcHNlKVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKSB7XHJcbiAgICAgIC8vIFdyYXBwbyBpbCBuYW1lc3BhY2UgaW4gbW9kbyBjaGUgcG9zc2EgZGlyZSBsYSBtaWEgc3VsIGZhdHRvIGNoZSBsJ3V0ZW50ZSBhZ2dpdW5nYSB1biBtb2R1bG8gbyBtZW5vIDpEXHJcbiAgICAgIHZhciB3cmFwcGVkQ3l0b3NjYXBlID0ge1xyXG4gICAgICAgIHVzZTogKG1vZHVsZU5hbWU6IHN0cmluZywgbW9kdWxlOiBjeXRvc2NhcGUuRXh0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIW1vZHVsZSlcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgdGhpcy5zZXJ2aWNlLmxvYyhcIlJlY2VpdmVkIGFuIHVuZGVmaW5lZCBtb2R1bGUuIE1ha2Ugc3VyZSB5b3UgYXJlIGNvcnJlY3RseSBsb2FkaW5nIGl0XCIpICsgXCI6IFwiICsgbW9kdWxlTmFtZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIGlmIChbXCJjeXRvc2NhcGUtZGFncmVcIiwgXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIsIFwiY3l0b3NjYXBlLWN4dG1lbnVcIiwgXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCJdLmluY2x1ZGVzKG1vZHVsZU5hbWUpKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiV1wiLCB0aGlzLnNlcnZpY2UubG9jKFwiTW9kdWxlXCIpICsgXCIgXCIgKyBtb2R1bGVOYW1lICsgXCIgXCIgKyB0aGlzLnNlcnZpY2UubG9jKFwiaXMgbG9hZGVkIGFuZCBtYW5hZ2VkIGRpcmVjdGx5IGJ5IHRoaXMgbGlicmFyeS4gWW91IGRvbid0IG5lZWQgdG8gaW1wb3J0IGl0IG9yIHVzZSBpdCBkaXJlY3RseSwganVzdCBiZSBzdXJlIHRvIHNldCB0aGUgcmVsYXRpdmUgb3B0aW9uc1wiKSwgZmFsc2UpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjeXRvc2NhcGUudXNlKG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcih3cmFwcGVkQ3l0b3NjYXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG8gY29uIGxlIG9wemlvbmkgZGVmaW5pdGUgZGFnbGkgSW5wdXRcclxuICAgKi9cclxuICBwcml2YXRlIHBlcmZvcm1PcGVyYXRpb25zV2l0aExvYWRlZE1vZHVsZXMoKSB7XHJcblxyXG4gICAgbGV0IGFueUN5ID0gKDxhbnk+dGhpcy5jeSk7XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsIGxheW91dCwgbG8gc2Fsdm8gcGVyIHBvdGVybG8gcml1dGlsaXp6YXJlIGluIGZ1dHVyb1xyXG4gICAgaWYgKHRoaXMuTGF5b3V0KSB7XHJcbiAgICAgIHRoaXMuTGFzdExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5MYXlvdXQpKTtcclxuICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbGwnSFRNTCBub2RlXHJcbiAgICBpZiAodGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyAmJiB0aGlzLk5vZGVIVE1MVGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGh0bWxub2RlID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgaHRtbG5vZGUuY3JlYXRlSHRtbE5vZGUoY3l0b3NjYXBlLCB0aGlzLmN5LCB0aGlzLk5vZGVIVE1MVGVtcGxhdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgQ29udGV4dCBNZW51XHJcbiAgICBpZiAodGhpcy5Vc2VDb250ZXh0TWVudSlcclxuICAgICAgdGhpcy5Db250ZXh0TWVudU9wdGlvbnMuZm9yRWFjaChvID0+IHsgYW55Q3kuY3h0bWVudShvKTsgfSk7XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdleHBhbmQgY29sbGFwc2Ugc29sbyBxdWFuZG8gYyfDqCB1bmEgZ2VyYXJjaGlhIGRpIG5vZGlcclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIHRoaXMuRXhwYW5kQ29sbGFwc2VBcGkgPSBhbnlDeS5leHBhbmRDb2xsYXBzZSh0aGlzLkV4cGFuZENvbGxhcHNlT3B0aW9ucyk7XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGkgZXN0ZW5zaW9uaSBleHRyYSwgaW1wbGVtZW50YXppb25lIGFmZmlkYXRhIGFsIHByb2dyYW1tYXRvcmVcclxuICAgIGlmICh0aGlzLkV4dGVuc2lvbk1vZHVsZXNBcHBseWVyKVxyXG4gICAgICB0aGlzLkV4dGVuc2lvbk1vZHVsZXNBcHBseWVyKHRoaXMuY3kpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQXFON0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQW5OaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFTekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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QUs7NkJBS0wsS0FBSzt1Q0FPTCxLQUFLO21DQU9MLEtBQUs7NkJBWUwsS0FBSzttQ0FXTCxLQUFLO2lDQU9MLEtBQUs7cUJBS0wsS0FBSztnQ0FPTCxLQUFLO3VDQW1CTCxLQUFLO3NDQW1CTCxLQUFLOzBCQUtMLE1BQU07OEJBS04sTUFBTTt1QkFLTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBDb250ZXh0TWVudU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2NvbnRleHRtZW51L0NvbnRleHRNZW51T3B0aW9ucyc7XHJcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvZ3JvdXBpbmcvRXhwYW5kQ29sbGFwc2VPcHRpb25zJztcclxuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0JyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvc2VMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0Nvc2VMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgR3JpZExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvR3JpZExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgTnVsbExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvTnVsbExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFJhbmRvbUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5cclxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXInO1xyXG5pbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tIFwiLi4vZXh0ZW5zaW9ucy9SZXNpemVTZW5zb3JcIjtcclxuXHJcbmltcG9ydCB7IFJlYWN0aXZlRXh0ZW5zaW9ucyB9IGZyb20gJy4uL2V4dGVuc2lvbnMvUmVhY3RpdmVFeHRlbnNpb25zJztcclxuXHJcbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xyXG4vKiogQGlnbm9yZSAqL2NvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGkgZ3JhZmljYXJlIHVuIGRpYWdyYW1tYSBlIGRpIGdlc3Rpcm5lIGlsIGNpY2xvIGRpIHZpdGFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZXMtZGlhZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VzLWRpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gSFRNTCBzdSBjdWkgY3JlYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYXBoJykgY3lHcmFwaDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZGlhZ3JhbW1hLCBmb25kYW1lbnRhbGUgYXNzZWduYXJsbyBwZXIgcGVybWV0dGVyZSBhbGxhIGxpYnJlcmlhIGRpIHNjaGVkdWxhcm5lIGxhIGNyZWF6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgcXVhbG9yYSAqKlVzZUNvbnRleHRNZW51KiogZm9zc2UgKip0cnVlKiouXHJcbiAgICogXHJcbiAgICogT2duaSBlbGVtZW50byBkaSBxdWVzdG8gYXJyYXkgw6ggdW4gc2VsZXR0b3JlIGNvbiBpbCBtZW51IGRhIG1vc3RyYXJlIHBlciBxdWVsbGEgY2FzaXN0aWNhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljZSBhbCBjb21wb25lbnRlIHNlIGlsIGRpYWdyYW1tYSBkZXZlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBlc3RlbnNpb25lIHBlciBsJ2V4cGFuZCBlIGNvbGxhcHNlIGRlaSBncnVwcGlcclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4cGFuZENvbGxhcHNlT3B0aW9uczogRXhwYW5kQ29sbGFwc2VPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBCbG9jY28gY29tcGxldG8gZGVsbGUgb3B6aW9uaSwgYWx0ZXJuYXRpdm8gYWxsJ2Fzc2VnbmF6aW9uZSBkaSAqKkVsZW1lbnRzKiosICoqTm9kZVN0eWxlcyoqLCAqKkVkZ2VTdHlsZXMqKiwgZSAqKkxheW91dCoqLlxyXG4gICAqIFxyXG4gICAqIFF1YWxvcmEgZW50cmFtYmUgdmVuaXNzZXJvIHNwZWNpZmljYXRlIHZlcnLDoCBlZmZldHR1YXRhIHVuJ3VuaW9uZSBmcmEgcXVlc3RlIG9wemlvbmkgZSBxdWVsbGUgc3BlY2lmaWNhdGUsIGRhbmRvIHByaW9yaXTDoCBhbGxlIHNwZWNpZmljYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLk5vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBjb2xsZWdhbWVudGkgZnJhIGkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQWdnaW9ybmEgYXV0b21hdGljYW1lbnRlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYSBxdWFuZG8gY2FtYmlhbm8gbGUgZGltZW5zaW9uaSBkZWxsYSBmaW5lc3RyYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEF1dG91cGRhdGVTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGRpIG1hbnRlbmVyZSBsYSBwb3NpemlvbmUgZGVpIG5vZGkgcXVhbG9yYSB2ZW5pc3Nlcm8gY2FtYmlhdGkgZGFsbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUXVhbG9yYSB2ZW5pc3NlIG1vZGlmaWNhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiosIHBpdXR0b3N0byBjaGUgbWV0dGVyZSBzZW1wbGljZW1lbnRlIGlsIG51b3ZvIEVsZW1lbnRvIGluIGJhc2UgYWwgTGF5b3V0IHByZWNlZGVudGUsIGFwcGxpY2EgYW5jaGUgdW4nYW5pbWF6aW9uZSBcclxuICAgKiBcclxuICAgKiBGdW56aW9uYSBzb2xhbWVudGUgc2UgaWwgKipMYXlvdXQqKiBjb3JyZW50ZSBkZWwgZGlhZ3JhbW1hIHN1cHBvcnRhIGxlIGFuaW1hemlvbmlcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGl2YSB1bmEgbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBcInNtYXJ0XCIuLi4gbyBwZXJsb21lbm8gXCJzbWFydGVyXCIgZGVsIGRlZmF1bHQgZGkgQ3l0b3NjYXBlLlxyXG4gICAqIFxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gbm9uIHNlbGV6aW9uYXRvIGxvIHNlbGV6aW9uYVxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gc2VsZXppb25hdG8gbG8gZGVzZWxlemlvbmFcclxuICAgKiAtIExvIHN0YXRvIGRpIHNlbGV6aW9uZSB2aWVuZSBwZXJzaXN0aXRvIHN1bGwnb2dnZXR0byBvcmlnaW5hbGUgaW52ZWNlIGRpIHJpbWFuZXJlIGluIHVuIGludGVybmFsXHJcbiAgICogLSBBbGwnYXNzZWduYXppb25lIGRpIG9nZ2V0dGkgc2VsZXppb25hdGksIHF1ZXN0aSB2ZW5nb25vIG1hcmNhdGkgY29ycmV0dGFtZW50ZSBjb24gbCdvdmVybGF5IGRpIHNlbGV6aW9uZVxyXG4gICAqIFxyXG4gICAqIE4uQjogbGEgY2hpYW1hdGEgYWxsJ2V2ZW50byAqKm9uTm9kZUNsaWNrKiogYXZ2aWVuZSAqKkRPUE8qKiBsYSBnZXN0aW9uZSBkZWxsYSBzZWxlemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBTbWFydFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDU1MgcGVyIGxhIGdyYWZpY2F6aW9uZSBkZWxsYSBzZWxlemlvbmUgZGVpIG5vZGkuIFF1YW5kbyB1biBub2RvIHZlcnLDoCBzZWxlemlvbmF0byBhdnLDoCBzb3ByYSBkaSBzZSB1biBvdmVybGF5IGNoZSAnc2JvcmRhJyBkaSAqKm92ZXJsYXktcGFkZGluZyoqIHBpeGVsLFxyXG4gICAqIGRpIGNvbG9yZSAqKm92ZXJsYXktY29sb3IqKiBlIGNvbiB1biBvcGFjaXTDoCAqKm92ZXJsYXktb3BhY2l0eSoqXHJcbiAgICogXHJcbiAgICogQXNzZWduYW5kbyBcInt9XCIgYSBxdWVzdG8gaW5wdXQsIGxhIFNtYXJ0IHNlbGVjdGlvbiB2aWVuZSBnZXN0aXRhIG1hIGxhIGdlc3Rpb25lIGdyYWZpY2Egw6ggYWZmaWRhdGEgYWxsJ3V0ZW50ZSxcclxuICAgKiBhZCBlc2VtcGlvIHVzYW5kbyBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqIGNoZSBkZWZpbmlzY2FubyBzZWxldHRvcmkgc3Ugbm9kaSBcIjpzZWxlY3RlZFwiXHJcbiAgICogXHJcbiAgICogQGRlZmF1bHQgeydvdmVybGF5LWNvbG9yJzonYmx1ZScsJ292ZXJsYXktb3BhY2l0eSc6MC41LCdvdmVybGF5LXBhZGRpbmcnOjd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgU21hcnRTZWxlY3Rpb25TdHlsZXM6IHsgJ292ZXJsYXktY29sb3InOiBzdHJpbmcsICdvdmVybGF5LW9wYWNpdHknOiBudW1iZXIsICdvdmVybGF5LXBhZGRpbmcnOiBudW1iZXIgfSA9IG51bGxcclxuXHJcbiAgLyoqXHJcbiAgICogUGVyaW9kbyBkaSB0aHJvdHRsZSBkYSBxdWFuZG8gdmllbmUgZWZmZXR0dWF0byB1biByZXNpemUgYSBxdWFuZG8gcmljYWxjb2xhcmUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hLlxyXG4gICAqIFxyXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cclxuICAgKi9cclxuICBASW5wdXQoKSBSZXNpemVUaHJvdHRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIExheW91dCBkaSBvcmRpbmFtZW50byBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExheW91dDogQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwgfCBDaXJjbGVMYXlvdXRPcHRpb25zSW1wbCB8IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB8XHJcbiAgICBDb3NlTGF5b3V0T3B0aW9uc0ltcGwgfCBEYWdyZUxheW91dE9wdGlvbnNJbXBsIHwgR3JpZExheW91dE9wdGlvbnNJbXBsIHwgTnVsbExheW91dE9wdGlvbnNJbXBsIHwgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgTm9kZUhUTUxUZW1wbGF0ZXM6IE5vZGVIVE1MVGVtcGxhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgaWwgZ2xvYmFsIGRlbGxhIGxpYnJlcmlhIChuYW1lc3BhY2UgKipjeXRvc2NhcGUqKikgZSBzaSBhc3BldHRhIGNoZSBkb3BvIG9wZXJhemlvbmkgZGkgaW1wb3J0YXppb25lIFxyXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcclxuICAgKiBcclxuICAgKiDDiCAqKmZvbmRhbWVudGFsZSoqIGNoZSBpbCBwcmltbyBwYXJhbWV0cm8gKGlsIG5vbWUgZGVsIG1vZHVsbykgc2lhIHVndWFsZSBhIGNpw7IgZGkgY3VpIHZpZW5lIGZhdHRvIGlsIHJlcXVpcmUgaW4gbW9kbyBjaGUgbGEgbGlicmVyaWFcclxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoZ2xvYmFsKSA9PiB7XHJcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXHJcbiAgICogZSBjb25maWd1cmFybGUgaW4gYmFzZSBhaSBjb21wb3J0YW1lbnRpIHNwZWNpZmljaVxyXG4gICAqIFxyXG4gICAqICMjIEVzZW1waW86XHJcbiAgICogXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XHJcbiAgICogICAgLy8gRmFyZSBxdWVzdG8gbGF2b3JvIHBlciBvZ25pIGVzdGVuc2lvbmUgY2FyaWNhdGFcclxuICAgKiAgICBsZXQgZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IHsgLi4uIH07XHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xyXG4gICAqICAgIGV4dGVuc2lvbkluc3RhbmNlLmRvU29tZXRoaW5nU3BlY2lmaWNUb1RoaXNFeHRlbnNpb24oKTtcclxuICAgKiBcclxuICAgKiAgICAuLi5cclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXI6IChjeXRvc2NhcGVDb3JlOiBjeXRvc2NhcGUuQ29yZSkgPT4gdm9pZCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCBjbGljayBkaSB1biBub2RvLCBjb250aWVuZSBsJ29nZ2V0dG8gKipkYXRhKiogZGVsIG5vZG8gaW4gcXVlc3Rpb25lXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbGxhIHNlbGV6aW9uZSBvIGRlc2VsZXppb25lIGRpIHVuIG5vZG8sIGNvbnRpZW5lIGwnb2dnZXR0byAqKmRhdGEqKiBkZWwgbm9kbyBpbiBxdWVzdGlvbmUgZSBpbmZvcm1hemlvbmkgc3VsIHN1byBzdGF0byBkaSBzZWxlemlvbmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIHNlbGVjdGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIHRlcm1pbmUgZGVsIGNhcmljYW1lbnRvIGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Mb2FkZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVmFyaWFiaWxlIHN1IGN1aSBzYWx2YXJzaSBzZSBpIG5vZGkgaGFubm8gdW5hIGdlcmFyY2hpYSBhIGdydXBwaSBvIG5vLiBTZXJ2ZSBwZXIgcG9pIGNhcmljYXJlIGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcXVhbG9yYSBmb3NzZSByaWNoaWVzdGFcclxuICAgKi9cclxuICBwcml2YXRlIE5vZGVzSGllcmFyY2h5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2Egc2UgaWwgcmVuZGVyaW5nIGRlbCBkaWFncmFtbWEgw6ggdGVybWluYXRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJc3RhbnphIGRlbCBkaWFncmFtbWEgYXR0dWFsbWVudGUgaW4gdXNvXHJcbiAgICovXHJcbiAgcHVibGljIGN5OiBjeXRvc2NhcGUuQ29yZVxyXG5cclxuICAvKipcclxuICAgKiBBcGkgZGVsbCdlc3RlbnNpb25lIGV4cGFuZC1jb2xsYXBzZSBwZXIgcGVybWV0dGVyZSBkaSBlZmZldHR1YXJlIG9wZXJhemlvbmkgZGFsbCdlc3Rlcm5vIGRlbCBkaWFncmFtbWEuIFZlbmdvbm8gdmFsb3JpenphdGUgc2UgKipVc2VFeHBhbmRDb2xsYXBzZSoqIMOoICoqdHJ1ZSoqXHJcbiAgICovXHJcbiAgcHVibGljIEV4cGFuZENvbGxhcHNlQXBpOiBhbnkgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBBcGkgZGVsbCdlc3RlbnNpb25lIGh0bWwtbm9kZSBwZXIgcGVybWV0dGVyZSBkaSBlZmZldHR1YXJlIG9wZXJhemlvbmkgZGFsbCdlc3Rlcm5vIGRlbCBkaWFncmFtbWEuIFZlbmdvbm8gdmFsb3JpenphdGUgc2Ugc29ubyBpbXBvc3RhdGkgZGVpICoqTm9kZUhUTUxUZW1wbGF0ZXMqKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgSHRtbE5vZGVBcGk6IGFueSA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9zc2VydmF0b3JlIGRlbGxlIG1vZGlmaWNoZSBhbCBjb250ZW5pdG9yZSBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplU2Vuc29yO1xyXG5cclxuICAvKipcclxuICAgKiBSaWZlcmltZW50byBhbGwndWx0aW1vIGxheW91dCB1dGlsaXp6YXRvLiBWaWVuZSByaWFwcGxpY2F0byBxdWFsb3JhIHZlbmlzc2UgY2FtYmlhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogTm9uIHV0aWxpenpvIGlsIG1ha2VMYXlvdXRzIHBlcmNow6kgYWx0cmltZW50aSByaXNjaGllcmVpIGRpIGNyZWFyZSB1biBsYXlvdXQgcmlmZXJpdG8gYSBYIGVsZW1lbnRpLCBuZSBhZ2dpdW5nbyAxLCByaWFwcGxpY28gaWwgTGF5b3V0IFxyXG4gICAqIG1hIG1pIHZpZW5lIHJpYXBwbGljYXRvIGEgWCBlbGVtZW50aSBpbnZlY2UgY2hlIFggKyAxXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBMYXN0TGF5b3V0OiBjeXRvc2NhcGUuTGF5b3V0T3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogQ29zdHJ1dHRvcmVcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBzZXJ2aWNlOiBFc0RpYWdyYW1TZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGRpc3BhdGNoZXI6IEVzRGlhZ3JhbURpc3BhdGNoZXIsIHByaXZhdGUgZXh0czogUmVhY3RpdmVFeHRlbnNpb25zKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZSBcclxuICAgKiBcclxuICAgKiBBbmd1bGFyIFBpcGVsaW5lXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5zZXJ2aWNlIHx8ICF0aGlzLmRpc3BhdGNoZXIpXHJcbiAgICAgIHRocm93IFwiSWwgbW9kdWxvIEBlc2ZhZW56YS9kaWFncmFtcyBub24gw6ggc3RhdG8gaW1wb3J0YXRvIGNvbiBpbCBmb3JSb290KCk7XCI7XHJcblxyXG4gICAgdGhpcy5kaXNwYXRjaExvYWRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsJ29uRGVzdHJveSByaXB1bGlzY28gbGEgbWVtb3JpYSBkYWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5jeSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkRpYWdyYW1cIiArIFwiIFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyBkZXN0cm95ZWQgZGlhZ3JhbVwiLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuY3kuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIGlsIGRpYWdyYW1tYSBhdHR1YWxlIG5lbCBEaXNwYXRjaGVyIGluIG1vZG8gY2hlIHZlbmdhIGNhcmljYXRvIGFwcGVuYSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMubmFtZSwgKCkgPT4geyByZXR1cm4gdGhpcy5yZW5kZXIoKTsgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlIFxyXG4gICAqIFxyXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmU6IEdlc3Rpb25lIHJpLWdyYWZpY2F6aW9uZSBkZWwgZGlhZ3JhbW1hLCBzZSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGFueSB7XHJcbiAgICBsZXQgdG9DaGVjayA9IFtcIlRlbXBsYXRlc1wiLCBcIlVzZUNvbnRleHRNZW51XCIsIFwiQ29udGV4dE1lbnVPcHRpb25zXCIsIFwiVXNlRXhwYW5kQ29sbGFwc2VcIiwgXCJFeHBhbmRDb2xsYXBzZU9wdGlvbnNcIiwgXCJOb2RlU3R5bGVzXCIsIFwiRWRnZVN0eWxlc1wiLCBcIk5hdGl2ZU9wdGlvbnNcIl07XHJcblxyXG4gICAgaWYgKHRoaXMuUmVuZGVyZWQgJiYgdG9DaGVjay5zb21lKHQgPT4gY2hhbmdlc1t0XSkpXHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIFwiUmVkcmF3IGJhc2VkIG9uIGR5bmFtaWMgSW5wdXQgY2hhbmdlIGlzIHN1cHBvcnRlZCBvbmx5IGZvciAnRWxlbWVudHMnIGFuZCAnTGF5b3V0JyBpbnB1dHMsIHBsZWFzZSBkZXN0cm95IHRoZSBjb21wb25lbnQgYW5kIHJlY3JlYXRlIGl0IHdpdGggdGhlIG5ldyBzZXR0aW5nc1wiKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudENoYW5nZXMgPSBjaGFuZ2VzW1wiRWxlbWVudHNcIl07XHJcbiAgICBsZXQgbGF5b3V0Q2hhbmdlcyA9IGNoYW5nZXNbXCJMYXlvdXRcIl07XHJcbiAgICBpZiAoZWxlbWVudENoYW5nZXMgJiYgIWVsZW1lbnRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcclxuXHJcbiAgICAgIC8vIENhbWJpYW1lbnRvIGFnbGkgRWxlbWVudGk6IHJpcHVsaXNjbyBnbGkgZWxlbWVudGkgdmVjY2hpLCBwcmVuZG8gaSBudW92aSwgbGkgc2lzdGVtbyBlIGxpIHJpYXNzZWduby4gXHJcbiAgICAgIC8vIFNlIGlsIG51b3ZvIElucHV0IEVsZW1lbnRzIMOoIHJvYmEgc3RyYW5hIG1pIGxpbWl0byBhIHJpcHVsaXJlIGlsIGRpYWdyYW1tYVxyXG4gICAgICAvLyBTZSBjeXRvc2NhcGUgYXZldmEgZ2nDoCBkZWdsaSBlbGVtZW50aSBwcmVjZWRlbnRlbWVudGUgbmUgcHJlbmRvIGxlIHBvc2l6aW9uaSBpbiBtb2RvIGRhIHJpZGlzZWduYXJsaSBwYXJ0ZW5kbyBkYWxsbyBzdGVzc28gcHVudG8gKGNhcmlubyBwZXIgbGUgYW5pbWF6aW9uaSlcclxuICAgICAgbGV0IGVsZW1lbnRzID0gZWxlbWVudENoYW5nZXM/LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgbGV0IHByZXZpb3VzX2VsZW1lbnRzID0gdGhpcy5QcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb24gPyA8YW55PnRoaXMuY3kubm9kZXMoKSA6IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmN5LmVsZW1lbnRzKCkucmVtb3ZlKCk7XHJcbiAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoZWxlbWVudHMsIHByZXZpb3VzX2VsZW1lbnRzKTtcclxuICAgICAgICB0aGlzLmN5LmFkZChlbGVtZW50cyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKVxyXG4gICAgICAgICAgdGhpcy5zZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKTtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29sbyBnbGkgZWxlbWVudGkgY2FtYmlhbm8sIHJpYXBwbGljbyBpbCBMYXlvdXQgcHJlY2VkZW50ZVxyXG4gICAgICAgIGlmICghbGF5b3V0Q2hhbmdlcyAmJiB0aGlzLkxhc3RMYXlvdXQpIHtcclxuXHJcbiAgICAgICAgICAvLyBTZSBkZXZvIGFuaW1hcmUgbGUgbW9kaWZjaGUgYWwgbGF5b3V0IGZvcnpvIGlsIHBhcmFtZXRybyByZWxhdGl2b1xyXG4gICAgICAgICAgaWYgKHRoaXMuQW5pbWF0ZUxheW91dENoYW5nZXMpXHJcbiAgICAgICAgICAgICg8YW55PnRoaXMuTGFzdExheW91dCkuYW5pbWF0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZSBpbCBsYXlvdXQgY2FtYmlhIGxvIGFwcGxpY28gZSBtZSBsbyBzYWx2byBjb21lIGxheW91dCBwcmVjZWRlbnRlIHBlciBpbCBmdXR1cm9cclxuICAgIGlmIChsYXlvdXRDaGFuZ2VzICYmICFsYXlvdXRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiTGF5b3V0IGhhdmUgYmVlbiBjaGFuZ2VkIGFmdGVyIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cIik7XHJcbiAgICAgIHRoaXMuTGFzdExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGF5b3V0Q2hhbmdlcy5jdXJyZW50VmFsdWUpKTtcclxuICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRWZmZXR0dWEgaWwgcmVuZGVyaW5nIGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpIHtcclxuXHJcbiAgICAvLyBUaXJvIGZ1b3JpIGxlIG9wemlvbmkgY29uIGN1aSBnZW5lcmFyZSBpbCBkaWFncmFtbWFcclxuICAgIGxldCBjeU9wdGlvbnMgPSB0aGlzLmdldENvbXBsZXRlZE9wdGlvbnMoKTtcclxuICAgIHRoaXMuTm9kZXNIaWVyYXJjaHkgPSBjeU9wdGlvbnMuZWxlbWVudHMgJiYgKDxjeV8uRWxlbWVudERlZmluaXRpb25bXT5jeU9wdGlvbnMuZWxlbWVudHMpLnNvbWUodCA9PiB0LmRhdGEucGFyZW50KTtcclxuXHJcbiAgICAvLyBDYXJpY28gZXZlbnR1YWxpIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNoZSBzZXJ2b25vXHJcbiAgICBhd2FpdCB0aGlzLnBlcmZvcm1Nb2R1bGVzTG9hZGluZygpO1xyXG5cclxuICAgIC8vIEdlbmVybyBpbCBkaWFncmFtbWFcclxuICAgIHRoaXMuY3kgPSBjeXRvc2NhcGUoY3lPcHRpb25zKTtcclxuXHJcbiAgICAvLyBDb2xsZWdvIGdsaSBldmVudGkgYWwgY29tcG9uZW50ZVxyXG4gICAgdGhpcy5iaW5kQ3l0b3NjYXBlRXZlbnRzKCk7XHJcblxyXG4gICAgLy8gVXRpbGl6em8gbGUgY2xhc3NpIGRpIGVzdGVuc2lvbmUgY2FyaWNhdGUgcHJlY2VkZW50ZW1lbnRlIHBlciBmYXJlIGlsIHJlc3RvIGRlbGxlIG1pZSBvcGVyYXppb25pXHJcbiAgICB0aGlzLnBlcmZvcm1PcGVyYXRpb25zV2l0aExvYWRlZE1vZHVsZXMoKTtcclxuXHJcbiAgICAvLyBJbXBvc3RvIGxhIHZhcmlhYmlsZSBSZW5kZXJlZCBhIHRydWUgaW4gbW9kbyBjaGUgc2UgZGEgYWRlc3NvIHZlbmdvbm8gZmF0dGUgbW9kaWZpY2hlIGNoZSBkb3ZyZWJiZXJvIGNhdXNhcmUgdW4gcmVkcmF3IHBvc3NvIGFjY29yZ2VybWVuZVxyXG4gICAgLy8gZSBtYW5kYXJlIGEgY2FnYXJlIGxvIHN0cm9uem8gZGkgdHVybm9cclxuICAgIHRoaXMuUmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vIFNlIGRldm8gYWdnaW9ybmFyZSBpbiBhdXRvbWF0aWNvIGluIGJhc2UgYWxsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZSBjb2xsZWdvIGlsIFJlc2l6ZU9ic2VydmVyXHJcbiAgICBpZiAodGhpcy5BdXRvdXBkYXRlU2l6ZSlcclxuICAgICAgdGhpcy5saXN0ZW5PbkNoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNldHVwU2VsZWN0aW9uU3R5bGVzKCk7XHJcbiAgICAgIHRoaXMuc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkxvYWRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmVuZGUgdHV0dGkgZ2xpIGVsZW1lbnRpIGFwcGVuYSBhc3NlZ25hdGksIGUgc2UgcXVhbGN1bm8gZXJhIHNlbGV6aW9uYXRvIGxhIHNpdHVhemlvbmUgdmllbmUgcGVyc2lzdGl0YSBzdSBjeXRvc2NhcGVcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWxkYXRhID0gPGFueT50aGlzLkVsZW1lbnRzW2ldLmRhdGE7XHJcbiAgICAgIGlmIChlbGRhdGEuX19zZWxlY3RlZCkge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY3kuJGlkKGVsZGF0YS5pZCk7XHJcbiAgICAgICAgZWwuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcmljYSBnbGkgc3RpbGkgcGVyIG1vc3RyYXJlIGNhcmluYSBsYSBzZWxlemlvbmUgZGVpIG5vZGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwU2VsZWN0aW9uU3R5bGVzKCl7XHJcbiAgICBsZXQgY3NzSXRlbSA9IHRoaXMuU21hcnRTZWxlY3Rpb25TdHlsZXMgfHwge1xyXG4gICAgICAnb3ZlcmxheS1jb2xvcic6ICdibHVlJyxcclxuICAgICAgJ292ZXJsYXktb3BhY2l0eSc6IDAuNSxcclxuICAgICAgJ292ZXJsYXktcGFkZGluZyc6IDdcclxuICAgIH07XHJcblxyXG4gICAgLy8gQmFja2Rvb3IgcGVyIHBvdGVyIGFzc2VnbmFyZSBcInt9XCIgYSBTbWFydFNlbGVjdGlvblN0eWxlcyBpbiBtb2RvIGRpIHV0aWxpenphcmUgbGEgc21hcnQgc2VsZWN0aW9uIG1hIHNlbnphIGNoZSBuZXNzdW5vIHN0aWxlIHZlbmdhIGFwcGxpY2F0b1xyXG4gICAgLy8gYWQgZXNlbXBpbyBxdWFsb3JhIHNpIHZvbGVzc2UgdXRpbGl6emFyZSBsJ2h0bWxub2RlIHBlciBnZXN0aXJlIGxhIGdyYWZpY2EgZGVnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcclxuICAgIGlmKGNzc0l0ZW1bJ292ZXJsYXktY29sb3InXSAmJiBjc3NJdGVtWydvdmVybGF5LW9wYWNpdHknXSAmJiBjc3NJdGVtWydvdmVybGF5LXBhZGRpbmcnXSlcclxuICAgICAgKDxhbnk+dGhpcy5jeS5zdHlsZSgpKS5zZWxlY3Rvcignbm9kZTpzZWxlY3RlZCcpLmNzcyhjc3NJdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIGwnYXNjb2x0byBhbCBjb250ZW5pdG9yZSBkZWwgZ3JhZmljbyBlIGluIGNhc28gZGkgbW9kaWZpY2hlIGFsbGEgZGltZW5zaW9uZSwgYWwgbWFzc2ltbyB1bmEgdm9sdGEgb2duaSA1MDAgbWlsbGlzZWNvbmRpLCBsbyByaWRpc2VnbmFcclxuICAgKi9cclxuICBwcml2YXRlIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplU2Vuc29yKHRoaXMuY3lHcmFwaC5uYXRpdmVFbGVtZW50LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZXh0cy50aHJvdHRsZSh0aGlzLm5hbWUsIHRoaXMub25Db250YWluZXJTaXplQ2hhbmdlZC5iaW5kKHRoaXMpLCB0aGlzLlJlc2l6ZVRocm90dGxlVGltZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGNoZSBzaSBvY2N1cGEgZGkgZ2VzdGlyZSBpbCByZXBhaW50IGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIG9uQ29udGFpbmVyU2l6ZUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkRpYWdyYW0gY29udGFpbmVyIHNpemUgaGFzIGNoYW5nZWQsIHJlZHJhd2luZ1wiKTtcclxuICAgIHRoaXMuY3kucmVzaXplKCk7XHJcbiAgICB0aGlzLmN5LmZpdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVnYSB0dXR0aSBnbGkgZXZlbnRpIGNoZSBtaSBwb3Nzb25vIHNlcnZpcmUgZSBsaSBlc3BvbmUgaW4gb3V0cHV0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBiaW5kQ3l0b3NjYXBlRXZlbnRzKCkge1xyXG4gICAgdGhpcy5jeS5iaW5kKCdjbGljaycsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG4gICAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbikge1xyXG4gICAgICAgIGxldCBpZCA9IHRhcmdldERhdGEuaWRcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLmN5LiRpZChpZCk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkID0gZWwuc2VsZWN0ZWQoKTtcclxuXHJcbiAgICAgICAgZWwuc2VsZWN0aWZ5KCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKVxyXG4gICAgICAgICAgZWwudW5zZWxlY3QoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBlbC5zZWxlY3QoKTtcclxuICAgICAgICBlbC51bnNlbGVjdGlmeSgpO1xyXG5cclxuICAgICAgICAvLyBRdWVzdG8gdmEgYW5jaGUgbmVsbGEgbGlzdGEgZGVnbGkgZWxlbWVudGkgb3JpZ2luYWxpICh0aGlzLkVsZW1lbnRzKSBkYXRvIGNoZSBjeXRvc2NhcGUgbGkgcHJlbmRlIHBlciByaWZlcmltZW50byAoYmJiYmJyYXZvIGN5dG8tY2hhbilcclxuICAgICAgICBlbC5kYXRhKFwiX19zZWxlY3RlZFwiLCAhc2VsZWN0ZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uTm9kZUNsaWNrLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCdzZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogdHJ1ZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgndW5zZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBbHRyaSBldmVudGkuLi5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLkxheW91dC5uYW1lID09ICdkYWdyZScpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWRhZ3JlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMClcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1jeHRtZW51XCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIpIHtcclxuICAgICAgLy8gV3JhcHBvIGlsIG5hbWVzcGFjZSBpbiBtb2RvIGNoZSBwb3NzYSBkaXJlIGxhIG1pYSBzdWwgZmF0dG8gY2hlIGwndXRlbnRlIGFnZ2l1bmdhIHVuIG1vZHVsbyBvIG1lbm8gOkRcclxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XHJcbiAgICAgICAgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IGN5dG9zY2FwZS5FeHQpID0+IHtcclxuICAgICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKFtcImN5dG9zY2FwZS1kYWdyZVwiLCBcImN5dG9zY2FwZS1odG1sLW5vZGVcIiwgXCJjeXRvc2NhcGUtY3h0bWVudVwiLCBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIl0uaW5jbHVkZXMobW9kdWxlTmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGN5dG9zY2FwZS51c2UobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0byBjb24gbGUgb3B6aW9uaSBkZWZpbml0ZSBkYWdsaSBJbnB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpIHtcclxuXHJcbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgbGF5b3V0LCBsbyBzYWx2byBwZXIgcG90ZXJsbyByaXV0aWxpenphcmUgaW4gZnV0dXJvXHJcbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkxheW91dCkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdIVE1MIG5vZGVcclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgdGhpcy5IdG1sTm9kZUFwaS5jcmVhdGVIdG1sTm9kZShjeXRvc2NhcGUsIHRoaXMuY3ksIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBDb250ZXh0IE1lbnVcclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICB0aGlzLkNvbnRleHRNZW51T3B0aW9ucy5mb3JFYWNoKG8gPT4geyBhbnlDeS5jeHRtZW51KG8pOyB9KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgdGhpcy5FeHBhbmRDb2xsYXBzZUFwaSA9IGFueUN5LmV4cGFuZENvbGxhcHNlKHRoaXMuRXhwYW5kQ29sbGFwc2VPcHRpb25zKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkaSBlc3RlbnNpb25pIGV4dHJhLCBpbXBsZW1lbnRhemlvbmUgYWZmaWRhdGEgYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIpXHJcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2FyZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuSHRtbE5vZGVBcGkpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkh0bWxOb2RlQXBpLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
@@ -12,6 +12,7 @@ export const Loc = {
|
|
|
12
12
|
"is loaded and managed directly by this library. You don't need to import it or use it directly, just be sure to set the relative options": { "en-US": "is loaded and managed directly by this library. You don't need to import it or use it directly, just be sure to set the relative options", "it-IT": "viene caricato e gestito nativamente dalla libreria. Non c'è bisogno di reimportarlo, né di configurarlo (usare le opzioni specifiche)" },
|
|
13
13
|
"If you don't specify a source and a target for an edge you have to write its id in the format {source}-{target}": { "en-US": "If you don't specify a source and a target for an edge you have to write its id in the format {source}-{target}", "it-IT": "Se non è specificata una sorgente e una destinazione per il collegamento è opportuno scriverne l'id nel formato {sorgente}-{destinazione}" },
|
|
14
14
|
"Elements have been changed after diagram initialization": { "en-US": "Elements have been changed after diagram initialization", "it-IT": "Rilevato un cambio di Elementi dopo l'inizializzazione del Diagramma" },
|
|
15
|
-
"Layout have been changed after diagram initialization": { "en-US": "Layout have been changed after diagram initialization", "it-IT": "Rilevato un cambio di Layout dopo l'inizializzazione del Diagramma" }
|
|
15
|
+
"Layout have been changed after diagram initialization": { "en-US": "Layout have been changed after diagram initialization", "it-IT": "Rilevato un cambio di Layout dopo l'inizializzazione del Diagramma" },
|
|
16
|
+
"Cannot update NodeHTMLTemplates as they don't seem to be used": { "en-US": "Cannot update NodeHTMLTemplates as they don't seem to be used", "it-IT": "Impossibile aggiornare i NodeHTMLTemplates dato che non sembra siano utilizzati" }
|
|
16
17
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL3NlcnZpY2VzL2VzLWRpYWdyYW0ubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHO0lBQ2YsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO0lBQ3JELHNFQUFzRSxFQUFFLEVBQUUsT0FBTyxFQUFFLHNFQUFzRSxFQUFFLE9BQU8sRUFBRSxxRUFBcUUsRUFBRTtJQUMzTyxzQ0FBc0MsRUFBRSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUU7SUFDN0ksdUJBQXVCLEVBQUcsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0lBQzlGLCtDQUErQyxFQUFFLEVBQUUsT0FBTyxFQUFFLCtDQUErQyxFQUFFLE9BQU8sRUFBRSxtRUFBbUUsRUFBRTtJQUMzTCx5QkFBeUIsRUFBRSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUU7SUFDNUcsK0pBQStKLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0pBQStKLEVBQUUsT0FBTyxFQUFFLG9LQUFvSyxHQUFHO0lBQzdmLDBJQUEwSSxFQUFFLEVBQUUsT0FBTyxFQUFFLDBJQUEwSSxFQUFFLE9BQU8sRUFBRSx3SUFBd0ksRUFBRTtJQUN0YixpSEFBaUgsRUFBRyxFQUFDLE9BQU8sRUFBQyxpSEFBaUgsRUFBRSxPQUFPLEVBQUUsMklBQTJJLEVBQUM7SUFDclkseURBQXlELEVBQUUsRUFBQyxPQUFPLEVBQUUseURBQXlELEVBQUUsT0FBTyxFQUFFLHNFQUFzRSxFQUFDO0lBQ2hOLHVEQUF1RCxFQUFFLEVBQUMsT0FBTyxFQUFFLHVEQUF1RCxFQUFFLE9BQU8sRUFBRSxvRUFBb0UsRUFBQztJQUMxTSwrREFBK0QsRUFBRyxFQUFDLE9BQU8sRUFBRSwrREFBK0QsRUFBRSxPQUFPLEVBQUUsaUZBQWlGLEVBQUM7Q0FDM08sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBPZ2dldHRvIHN0YXRpY28gZGkgbG9jYWxpenphemlvbmUgcGVyIGkgbWVzc2FnZ2lcclxuICovXHJcbmV4cG9ydCBjb25zdCBMb2MgPSB7XHJcbiAgICBcIk1vZHVsZVwiOiB7IFwiZW4tVVNcIjogXCJNb2R1bGVcIiwgXCJpdC1JVFwiOiBcIklsIE1vZHVsb1wiIH0sXHJcbiAgICBcIlJlY2VpdmVkIGFuIHVuZGVmaW5lZCBtb2R1bGUuIE1ha2Ugc3VyZSB5b3UgYXJlIGNvcnJlY3RseSBsb2FkaW5nIGl0XCI6IHsgXCJlbi1VU1wiOiBcIlJlY2VpdmVkIGFuIHVuZGVmaW5lZCBtb2R1bGUuIE1ha2Ugc3VyZSB5b3UgYXJlIGNvcnJlY3RseSBsb2FkaW5nIGl0XCIsIFwiaXQtSVRcIjogXCJSaWNldnV0byBtb2R1bG8gbm9uIGRlZmluaXRvLiBBc3NpY3VyYXRpIGRpIGNhcmljYXJsbyBjb3JyZXR0YW1lbnRlXCIgfSxcclxuICAgIFwiTW9kdWxlIG5vdCBhdmFpbGFibGUuIExvYWRpbmcgaXQgbm93XCI6IHsgXCJlbi1VU1wiOiBcIk1vZHVsZSBub3QgYXZhaWxhYmxlLiBMb2FkaW5nIGl0IG5vd1wiLCBcIml0LUlUXCI6IFwiTW9kdWxvIG5vbiBkaXNwb25pYmlsZS4gTG8gY2FyaWNvIG9yYVwiIH0sXHJcbiAgICBcIk1vZHVsZSBhbHJlYWR5IGxvYWRlZFwiIDogeyBcImVuLVVTXCI6IFwiTW9kdWxlIGFscmVhZHkgbG9hZGVkXCIsIFwiaXQtSVRcIjogXCJNb2R1bG8gZ2nDoCBjYXJpY2F0b1wiIH0sXHJcbiAgICBcIkRpYWdyYW0gY29udGFpbmVyIHNpemUgaGFzIGNoYW5nZWQsIHJlZHJhd2luZ1wiOiB7IFwiZW4tVVNcIjogXCJEaWFncmFtIGNvbnRhaW5lciBzaXplIGhhcyBjaGFuZ2VkLCByZWRyYXdpbmdcIiwgXCJpdC1JVFwiOiBcIkxhIGRpbWVuc2lvbmUgZGVsIGNvbnRlbml0b3JlIGRlbCBkaWFncmFtbWEgw6ggY2FtYmlhdGEsIHJpZGlzZWdub1wiIH0sXHJcbiAgICBcIk1vZHVsZSBjYW5ub3QgYmUgbG9hZGVkXCI6IHsgXCJlbi1VU1wiOiBcIk1vZHVsZSBjYW5ub3QgYmUgbG9hZGVkXCIsIFwiaXQtSVRcIjogXCJJbXBvc3NpYmlsZSBjYXJpY2FyZSBpbCBtb2R1bG9cIiB9LFxyXG4gICAgXCJSZWRyYXcgYmFzZWQgb24gZHluYW1pYyBJbnB1dCBjaGFuZ2UgaXMgc3VwcG9ydGVkIG9ubHkgZm9yICdFbGVtZW50cycgYW5kICdMYXlvdXQnIGlucHV0cywgcGxlYXNlIGRlc3Ryb3kgdGhlIGNvbXBvbmVudCBhbmQgcmVjcmVhdGUgaXQgd2l0aCB0aGUgbmV3IHNldHRpbmdzXCI6IHsgXCJlbi1VU1wiOiBcIlJlZHJhdyBiYXNlZCBvbiBkeW5hbWljIElucHV0IGNoYW5nZSBpcyBzdXBwb3J0ZWQgb25seSBmb3IgJ0VsZW1lbnRzJyBhbmQgJ0xheW91dCcgaW5wdXRzLCBwbGVhc2UgZGVzdHJveSB0aGUgY29tcG9uZW50IGFuZCByZWNyZWF0ZSBpdCB3aXRoIHRoZSBuZXcgc2V0dGluZ3NcIiwgXCJpdC1JVFwiOiBcIklsIGNhbWJpbyBlIGFnZ2lvcm5hbWVudG8gZGluYW1pY28gZGVnbGkgSW5wdXQgw6ggc3VwcG9ydGF0byBzb2xvIHBlciBnbGkgSW5wdXQgJ0VsZW1lbnRzJyBlICdMYXlvdXQnLCBkaXN0cnVnZ2kgaWwgY29tcG9uZW50ZSBlIHJpY3JlYWxvIGNvbiBsZSBudW92ZSBpbXBvc3RhemlvbmlcIiwgfSxcclxuICAgIFwiaXMgbG9hZGVkIGFuZCBtYW5hZ2VkIGRpcmVjdGx5IGJ5IHRoaXMgbGlicmFyeS4gWW91IGRvbid0IG5lZWQgdG8gaW1wb3J0IGl0IG9yIHVzZSBpdCBkaXJlY3RseSwganVzdCBiZSBzdXJlIHRvIHNldCB0aGUgcmVsYXRpdmUgb3B0aW9uc1wiOiB7IFwiZW4tVVNcIjogXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIsIFwiaXQtSVRcIjogXCJ2aWVuZSBjYXJpY2F0byBlIGdlc3RpdG8gbmF0aXZhbWVudGUgZGFsbGEgbGlicmVyaWEuIE5vbiBjJ8OoIGJpc29nbm8gZGkgcmVpbXBvcnRhcmxvLCBuw6kgZGkgY29uZmlndXJhcmxvICh1c2FyZSBsZSBvcHppb25pIHNwZWNpZmljaGUpXCIgfSxcclxuICAgIFwiSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0IGZvciBhbiBlZGdlIHlvdSBoYXZlIHRvIHdyaXRlIGl0cyBpZCBpbiB0aGUgZm9ybWF0IHtzb3VyY2V9LXt0YXJnZXR9XCIgOiB7XCJlbi1VU1wiOlwiSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzb3VyY2UgYW5kIGEgdGFyZ2V0IGZvciBhbiBlZGdlIHlvdSBoYXZlIHRvIHdyaXRlIGl0cyBpZCBpbiB0aGUgZm9ybWF0IHtzb3VyY2V9LXt0YXJnZXR9XCIsIFwiaXQtSVRcIjogXCJTZSBub24gw6ggc3BlY2lmaWNhdGEgdW5hIHNvcmdlbnRlIGUgdW5hIGRlc3RpbmF6aW9uZSBwZXIgaWwgY29sbGVnYW1lbnRvIMOoIG9wcG9ydHVubyBzY3JpdmVybmUgbCdpZCBuZWwgZm9ybWF0byB7c29yZ2VudGV9LXtkZXN0aW5hemlvbmV9XCJ9LFxyXG4gICAgXCJFbGVtZW50cyBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCI6IHtcImVuLVVTXCI6IFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiLCBcIml0LUlUXCI6IFwiUmlsZXZhdG8gdW4gY2FtYmlvIGRpIEVsZW1lbnRpIGRvcG8gbCdpbml6aWFsaXp6YXppb25lIGRlbCBEaWFncmFtbWFcIn0sXHJcbiAgICBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCI6IHtcImVuLVVTXCI6IFwiTGF5b3V0IGhhdmUgYmVlbiBjaGFuZ2VkIGFmdGVyIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cIiwgXCJpdC1JVFwiOiBcIlJpbGV2YXRvIHVuIGNhbWJpbyBkaSBMYXlvdXQgZG9wbyBsJ2luaXppYWxpenphemlvbmUgZGVsIERpYWdyYW1tYVwifSxcclxuICAgIFwiQ2Fubm90IHVwZGF0ZSBOb2RlSFRNTFRlbXBsYXRlcyBhcyB0aGV5IGRvbid0IHNlZW0gdG8gYmUgdXNlZFwiOiAge1wiZW4tVVNcIjogXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIsIFwiaXQtSVRcIjogXCJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGkgTm9kZUhUTUxUZW1wbGF0ZXMgZGF0byBjaGUgbm9uIHNlbWJyYSBzaWFubyB1dGlsaXp6YXRpXCJ9XHJcbn0iXX0=
|
|
@@ -40,7 +40,7 @@ export class EsDiagramService {
|
|
|
40
40
|
switch (moduleId) {
|
|
41
41
|
case "cytoscape-cxtmenu": return import("cytoscape-cxtmenu").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
|
|
42
42
|
case "cytoscape-expand-collapse": return import("cytoscape-expand-collapse").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
|
|
43
|
-
case "cytoscape-html-node": return import("cytoscape-html-node").then((module) => this.modulesCache[moduleId] = module.register).catch(err => this.handleError(moduleId, err));
|
|
43
|
+
case "cytoscape-html-node": return import("@esfaenza/cytoscape-html-node").then((module) => this.modulesCache[moduleId] = module.register).catch(err => this.handleError(moduleId, err));
|
|
44
44
|
case "cytoscape-dagre":
|
|
45
45
|
yield import("dagre").catch(err => this.handleError("dagre", err));
|
|
46
46
|
return import("cytoscape-dagre").then((module) => this.modulesCache[moduleId] = module.default).catch(err => this.handleError(moduleId, err));
|
|
@@ -103,4 +103,4 @@ EsDiagramService.ctorParameters = () => [
|
|
|
103
103
|
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [DIA_LOCALE,] }] },
|
|
104
104
|
{ type: String, decorators: [{ type: Optional }, { type: Inject, args: [DIA_DEBUG_MODE,] }] }
|
|
105
105
|
];
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9zZXJ2aWNlcy9lcy1kaWFncmFtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakQsNkdBQTZHO0FBQzdHLDJKQUEySjtBQUMzSixPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXJDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFPekI7Ozs7T0FJRztJQUNILFlBQW9ELFVBQWtCLEVBQThDLGNBQXNCO1FBQXRGLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBOEMsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFWMUk7O1dBRUc7UUFDSyxpQkFBWSxHQUF1QyxFQUFFLENBQUM7SUFPZ0YsQ0FBQztJQUUvSTs7Ozs7O09BTUc7SUFDVSxjQUFjLENBQUMsUUFBdUc7O1lBRTlILG9FQUFvRTtZQUNyRSw4S0FBOEs7WUFDOUssSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6RixRQUFRLFFBQVEsRUFBRTtvQkFDZCxLQUFLLG1CQUFtQixDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQy9LLEtBQUssMkJBQTJCLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDL0wsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNwTCxLQUFLLGlCQUFpQjt3QkFDbEIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDbkUsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQzFKO2FBQ0o7aUJBQ0k7Z0JBQ0QsNkhBQTZIO2dCQUM3SCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7UUFDTCxDQUFDO0tBQUE7SUFFRDs7Ozs7T0FLRztJQUNLLFdBQVcsQ0FBQyxRQUFnQixFQUFFLEdBQVE7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFDLFFBQXlCLEVBQUUsSUFBWSxFQUFFLHNCQUErQixJQUFJO1FBRW5GLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUNwQixPQUFPO1FBRVgsSUFBSSxPQUFPLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckYsUUFBUSxRQUFRLEVBQUU7WUFDZCxLQUFLLEdBQUc7Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07U0FDYjtJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7O1lBdEZKLFVBQVU7Ozt5Q0FhTSxRQUFRLFlBQUksTUFBTSxTQUFDLFVBQVU7eUNBQStCLFFBQVEsWUFBSSxNQUFNLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgRElBX0RFQlVHX01PREUsIERJQV9MT0NBTEUgfSBmcm9tIFwiLi4vdG9rZW5zXCI7XHJcbmltcG9ydCB7IExvYyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmxvY1wiO1xyXG5cclxuLy8gUXVlc3RvIG1vZHVsbyBlc3BvcnRhIHNpYSB1biBuYW1lc3BhY2UgY2hlIHNpIGNoaWFtYSBcImN5dG9zY2FwZVwiIHNpYSBsYSBmdW56aW9uZSBcImN5dG9zY2FwZVwiIChjb3N0cnV0dG9yZSlcclxuLy8gQ29uIHF1ZXN0aSAyIHNhbHRpIHNpIHJpZXNjb25vIGEgbm9uIGF2ZXJlIHByb2JsZW1pIGRpIHR5cGluZ3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdmFuZGVtby9nZW5lcmF0b3ItYW5ndWxhcjItbGlicmFyeS9pc3N1ZXMvMjIxI2lzc3VlY29tbWVudC0zNTU5NDUyMDdcclxuaW1wb3J0ICogYXMgY3lfIGZyb20gJ2N5dG9zY2FwZSc7XHJcbi8qKiBAaWdub3JlICovIGNvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBMb2FkZXIgZGVpIG1vZHVsaSBkaSBDeXRvc2NhcGUuIFV0aWxpenphIHVuYSBjYWNoZSBwZXIgdGVuZXJzZWxpIGluIG1lbW9yaWEgYSBsaXZlbGxvIGRpIGFwcGxpY2F6aW9uZSBcclxuICogaW4gbW9kbyBkYSBub24gZG92ZXIgcmljYXJpY2FyZSBudWxsYSBkb3BvIGF2ZXJlIHVzYXRvIHVuIG1vZHVsbyBhbG1lbm8gdW5hIHZvbHRhXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFc0RpYWdyYW1TZXJ2aWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGRlaSBtb2R1bGkgY2FyaWNhdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtb2R1bGVzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuRXh0IH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChESUFfTE9DQUxFKSBwcml2YXRlIERJQV9MT0NBTEU6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChESUFfREVCVUdfTU9ERSkgcHJpdmF0ZSBESUFfREVCVUdfTU9ERTogc3RyaW5nKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIGltcG9ydGFyZSwgc2Ugc2VydmUgdW4gZGF0byB0ZW1hIG8gbG9jYWxpenphemlvbmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZSd9IG1vZHVsZUlkIE5vbWUgZGVsIG1vZHVsbyBkaSBDeXRvc2NhcGUgZGEgaW1wb3J0YXJlIChkZXYnZXNzZXJlIGlsIG5vbWUgZGVsbGEgY2FydGVsbGEgaW4gbm9kZV9tb2R1bGVzKVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkIHwgY3l0b3NjYXBlLkV4dD59IEZ1bnppb25lIGRpIGVzdGVuc2lvbmUgcGVyIEN5dG9zY2FwZSBwcmVzYSBkYWwgbW9kdWxvIHJpY2hpZXN0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0SWZOZWVkZWQobW9kdWxlSWQ6ICdjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlJyB8ICdjeXRvc2NhcGUtY3h0bWVudScgfCAnY3l0b3NjYXBlLWh0bWwtbm9kZScgfCAnY3l0b3NjYXBlLWRhZ3JlJyk6IFByb21pc2U8dm9pZCB8IGN5dG9zY2FwZS5FeHQ+IHtcclxuXHJcbiAgICAgICAgIC8vIE9nbnVubyBlc3BvcnRhIGlsIG1vZHVsbyB1biBwbycgY29tZSBjYXp6byBnbGkgcGFyZSBxdWluZGkgb2Npby4gXHJcbiAgICAgICAgLy8gTm90YXJlIGNoZSB0dXR0aSBpIFwibW91ZGxlXCIgZG9wbyBsbyB0aGVuIHNvbm8gY2FzdGF0aSBhZCA8YW55PiBlIGNoZSBsJ29nZ2V0dG8gcmVjdXBlcmF0byBvZ25pIHRhbnRvIMOoIFwiZGVmYXVsdFwiLCBhbHRyZSB2b2x0ZSDDqCBpbCBcInJlZ2lzdGVyXCIsIGFsdHJlIMOoIGwnXCJleHRcIiwgZWNjZXRlcmEuLi5cclxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlc0NhY2hlW21vZHVsZUlkXSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcIklcIiwgdGhpcy5sb2MoXCJNb2R1bGUgbm90IGF2YWlsYWJsZS4gTG9hZGluZyBpdCBub3dcIikgKyBcIjogXCIgKyBtb2R1bGVJZCwgZmFsc2UpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3l0b3NjYXBlLWN4dG1lbnVcIjogcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1jeHRtZW51XCIpLnRoZW4oKG1vZHVsZTogYW55KSA9PiB0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0gPSBtb2R1bGUuZGVmYXVsdCkuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IobW9kdWxlSWQsIGVycikpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIjogcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIikudGhlbigobW9kdWxlOiBhbnkpID0+IHRoaXMubW9kdWxlc0NhY2hlW21vZHVsZUlkXSA9IG1vZHVsZS5kZWZhdWx0KS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihtb2R1bGVJZCwgZXJyKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiOiByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiKS50aGVuKChtb2R1bGU6IGFueSkgPT4gdGhpcy5tb2R1bGVzQ2FjaGVbbW9kdWxlSWRdID0gbW9kdWxlLnJlZ2lzdGVyKS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihtb2R1bGVJZCwgZXJyKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3l0b3NjYXBlLWRhZ3JlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaW1wb3J0KFwiZGFncmVcIikuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoXCJkYWdyZVwiLCBlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWRhZ3JlXCIpLnRoZW4oKG1vZHVsZTogYW55KSA9PiB0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0gPSBtb2R1bGUuZGVmYXVsdCkuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IobW9kdWxlSWQsIGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBJIG1vZHVsaSBub24gZGV2b25vIG1haSBlc3NlcmUgcmljYXJpY2F0aSBuZWwgZ2xvYmFsZSwgcXVpbmRpIGludmVjZSBjaGUgcmVzdGl0dWlyZSBsYSBjb3BpYSBkZWxsYSBjYWNoZSByZXN0aXR1aXNjbyB2dW90b1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcIklcIiwgdGhpcy5sb2MoXCJNb2R1bGUgYWxyZWFkeSBsb2FkZWRcIikgKyBcIjogXCIgKyBtb2R1bGVJZCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVzb2x2ZShudWxsKSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aW9uZSBkZWdsaSBlcnJvcmkgZGkgY2FyaWNhbWVudG8gZGVpIG1vZHVsaSBxdWFsb3JhIHF1YWxjdW5vIHV0aWxpenphc3NlIHVuIG1vZHVsbyBub24gaW5zdGFsbGF0b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgTm9tZSBkZWwgbW9kdWxvIGNoZSBzaSDDqCBjZXJjYXRvIGRpIGNhcmljYXJlXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSByZXN0aXR1aXRvIGRhbGxhIHByb21pc2UgZGkgY2FyaWNhbWVudG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihtb2R1bGVJZDogc3RyaW5nLCBlcnI6IGFueSkge1xyXG4gICAgICAgIHRoaXMubG9nKFwiRVwiLCB0aGlzLmxvYyhcIk1vZHVsZSBjYW5ub3QgYmUgbG9hZGVkXCIpICsgXCI6IFwiICsgbW9kdWxlSWQgKyBcIiAtIFwiICsgZXJyLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JpdHRvcmUgZGkgbG9nIGEgY29uc29sZS4gQXR0aXZvIHNvbG8gcXVhbmRvIGxhIGxpYnJlcmlhIMOoIGluIG1vZGFsaXTDoCBkaSBEZWJ1Z1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydFJyB8ICdJJyB8ICdXJ30gc2V2ZXJpdHkgVGlwbyBkaSBtZXNzYWdnaW8gKEVycm9yZSwgSW5mbywgV2FybmluZylcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVpcmVzVHJhbnNsYXRpb24gSW5kaWNhIHNlICoqdGV4dCoqIMOoIHVuYSBmcmFzZSBnacOgIHRyYWRvdHRhIG8gc2Ugw6ggZGEgdHJhZHVycmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvZyhzZXZlcml0eTogJ0UnIHwgJ0knIHwgJ1cnLCB0ZXh0OiBzdHJpbmcsIHJlcXVpcmVzVHJhbnNsYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5ESUFfREVCVUdfTU9ERSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgbWVzc2FnZSA9IFwiQGVzZmFlbnphL2RpYWdyYW1zOiBcIiArIChyZXF1aXJlc1RyYW5zbGF0aW9uID8gdGhpcy5sb2ModGV4dCkgOiB0ZXh0KTtcclxuICAgICAgICBzd2l0Y2ggKHNldmVyaXR5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0UnOiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0knOiBjb25zb2xlLmluZm8obWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnVyc6IGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkaSBsb2NhbGl6emF6aW9uZSBkZWkgbWVzc2FnZ2lcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgTWVzc2FnZ2lvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2dpbyB0cmFkb3R0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9jKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIExvY1t0ZXh0XVt0aGlzLkRJQV9MT0NBTEVdO1xyXG4gICAgfVxyXG59Il19
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9zZXJ2aWNlcy9lcy1kaWFncmFtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakQsNkdBQTZHO0FBQzdHLDJKQUEySjtBQUMzSixPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXJDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFPekI7Ozs7T0FJRztJQUNILFlBQW9ELFVBQWtCLEVBQThDLGNBQXNCO1FBQXRGLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBOEMsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFWMUk7O1dBRUc7UUFDSyxpQkFBWSxHQUF1QyxFQUFFLENBQUM7SUFPZ0YsQ0FBQztJQUUvSTs7Ozs7O09BTUc7SUFDVSxjQUFjLENBQUMsUUFBdUc7O1lBRS9ILG9FQUFvRTtZQUNwRSw4S0FBOEs7WUFDOUssSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6RixRQUFRLFFBQVEsRUFBRTtvQkFDZCxLQUFLLG1CQUFtQixDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMs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SUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1YsS0FBSyxHQUFHO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07U0FDYjtJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7O1lBdEZKLFVBQVU7Ozt5Q0FhTSxRQUFRLFlBQUksTUFBTSxTQUFDLFVBQVU7eUNBQStCLFFBQVEsWUFBSSxNQUFNLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgRElBX0RFQlVHX01PREUsIERJQV9MT0NBTEUgfSBmcm9tIFwiLi4vdG9rZW5zXCI7XHJcbmltcG9ydCB7IExvYyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmxvY1wiO1xyXG5cclxuLy8gUXVlc3RvIG1vZHVsbyBlc3BvcnRhIHNpYSB1biBuYW1lc3BhY2UgY2hlIHNpIGNoaWFtYSBcImN5dG9zY2FwZVwiIHNpYSBsYSBmdW56aW9uZSBcImN5dG9zY2FwZVwiIChjb3N0cnV0dG9yZSlcclxuLy8gQ29uIHF1ZXN0aSAyIHNhbHRpIHNpIHJpZXNjb25vIGEgbm9uIGF2ZXJlIHByb2JsZW1pIGRpIHR5cGluZ3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdmFuZGVtby9nZW5lcmF0b3ItYW5ndWxhcjItbGlicmFyeS9pc3N1ZXMvMjIxI2lzc3VlY29tbWVudC0zNTU5NDUyMDdcclxuaW1wb3J0ICogYXMgY3lfIGZyb20gJ2N5dG9zY2FwZSc7XHJcbi8qKiBAaWdub3JlICovIGNvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBMb2FkZXIgZGVpIG1vZHVsaSBkaSBDeXRvc2NhcGUuIFV0aWxpenphIHVuYSBjYWNoZSBwZXIgdGVuZXJzZWxpIGluIG1lbW9yaWEgYSBsaXZlbGxvIGRpIGFwcGxpY2F6aW9uZSBcclxuICogaW4gbW9kbyBkYSBub24gZG92ZXIgcmljYXJpY2FyZSBudWxsYSBkb3BvIGF2ZXJlIHVzYXRvIHVuIG1vZHVsbyBhbG1lbm8gdW5hIHZvbHRhXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFc0RpYWdyYW1TZXJ2aWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGRlaSBtb2R1bGkgY2FyaWNhdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtb2R1bGVzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuRXh0IH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChESUFfTE9DQUxFKSBwcml2YXRlIERJQV9MT0NBTEU6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChESUFfREVCVUdfTU9ERSkgcHJpdmF0ZSBESUFfREVCVUdfTU9ERTogc3RyaW5nKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIGltcG9ydGFyZSwgc2Ugc2VydmUgdW4gZGF0byB0ZW1hIG8gbG9jYWxpenphemlvbmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZSd9IG1vZHVsZUlkIE5vbWUgZGVsIG1vZHVsbyBkaSBDeXRvc2NhcGUgZGEgaW1wb3J0YXJlIChkZXYnZXNzZXJlIGlsIG5vbWUgZGVsbGEgY2FydGVsbGEgaW4gbm9kZV9tb2R1bGVzKVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkIHwgY3l0b3NjYXBlLkV4dD59IEZ1bnppb25lIGRpIGVzdGVuc2lvbmUgcGVyIEN5dG9zY2FwZSBwcmVzYSBkYWwgbW9kdWxvIHJpY2hpZXN0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0SWZOZWVkZWQobW9kdWxlSWQ6ICdjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlJyB8ICdjeXRvc2NhcGUtY3h0bWVudScgfCAnY3l0b3NjYXBlLWh0bWwtbm9kZScgfCAnY3l0b3NjYXBlLWRhZ3JlJyk6IFByb21pc2U8dm9pZCB8IGN5dG9zY2FwZS5FeHQ+IHtcclxuXHJcbiAgICAgICAgLy8gT2dudW5vIGVzcG9ydGEgaWwgbW9kdWxvIHVuIHBvJyBjb21lIGNhenpvIGdsaSBwYXJlIHF1aW5kaSBvY2lvLiBcclxuICAgICAgICAvLyBOb3RhcmUgY2hlIHR1dHRpIGkgXCJtb3VkbGVcIiBkb3BvIGxvIHRoZW4gc29ubyBjYXN0YXRpIGFkIDxhbnk+IGUgY2hlIGwnb2dnZXR0byByZWN1cGVyYXRvIG9nbmkgdGFudG8gw6ggXCJkZWZhdWx0XCIsIGFsdHJlIHZvbHRlIMOoIGlsIFwicmVnaXN0ZXJcIiwgYWx0cmUgw6ggbCdcImV4dFwiLCBlY2NldGVyYS4uLlxyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzQ2FjaGVbbW9kdWxlSWRdKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKFwiSVwiLCB0aGlzLmxvYyhcIk1vZHVsZSBub3QgYXZhaWxhYmxlLiBMb2FkaW5nIGl0IG5vd1wiKSArIFwiOiBcIiArIG1vZHVsZUlkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjeXRvc2NhcGUtY3h0bWVudVwiOiByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWN4dG1lbnVcIikudGhlbigobW9kdWxlOiBhbnkpID0+IHRoaXMubW9kdWxlc0NhY2hlW21vZHVsZUlkXSA9IG1vZHVsZS5kZWZhdWx0KS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihtb2R1bGVJZCwgZXJyKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiOiByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKS50aGVuKChtb2R1bGU6IGFueSkgPT4gdGhpcy5tb2R1bGVzQ2FjaGVbbW9kdWxlSWRdID0gbW9kdWxlLmRlZmF1bHQpLmNhdGNoKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKG1vZHVsZUlkLCBlcnIpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCI6IHJldHVybiBpbXBvcnQoXCJAZXNmYWVuemEvY3l0b3NjYXBlLWh0bWwtbm9kZVwiKS50aGVuKChtb2R1bGU6IGFueSkgPT4gdGhpcy5tb2R1bGVzQ2FjaGVbbW9kdWxlSWRdID0gbW9kdWxlLnJlZ2lzdGVyKS5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihtb2R1bGVJZCwgZXJyKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3l0b3NjYXBlLWRhZ3JlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaW1wb3J0KFwiZGFncmVcIikuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoXCJkYWdyZVwiLCBlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiY3l0b3NjYXBlLWRhZ3JlXCIpLnRoZW4oKG1vZHVsZTogYW55KSA9PiB0aGlzLm1vZHVsZXNDYWNoZVttb2R1bGVJZF0gPSBtb2R1bGUuZGVmYXVsdCkuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IobW9kdWxlSWQsIGVycikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBJIG1vZHVsaSBub24gZGV2b25vIG1haSBlc3NlcmUgcmljYXJpY2F0aSBuZWwgZ2xvYmFsZSwgcXVpbmRpIGludmVjZSBjaGUgcmVzdGl0dWlyZSBsYSBjb3BpYSBkZWxsYSBjYWNoZSByZXN0aXR1aXNjbyB2dW90b1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhcIklcIiwgdGhpcy5sb2MoXCJNb2R1bGUgYWxyZWFkeSBsb2FkZWRcIikgKyBcIjogXCIgKyBtb2R1bGVJZCwgZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVzb2x2ZShudWxsKSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aW9uZSBkZWdsaSBlcnJvcmkgZGkgY2FyaWNhbWVudG8gZGVpIG1vZHVsaSBxdWFsb3JhIHF1YWxjdW5vIHV0aWxpenphc3NlIHVuIG1vZHVsbyBub24gaW5zdGFsbGF0b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgTm9tZSBkZWwgbW9kdWxvIGNoZSBzaSDDqCBjZXJjYXRvIGRpIGNhcmljYXJlXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSByZXN0aXR1aXRvIGRhbGxhIHByb21pc2UgZGkgY2FyaWNhbWVudG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihtb2R1bGVJZDogc3RyaW5nLCBlcnI6IGFueSkge1xyXG4gICAgICAgIHRoaXMubG9nKFwiRVwiLCB0aGlzLmxvYyhcIk1vZHVsZSBjYW5ub3QgYmUgbG9hZGVkXCIpICsgXCI6IFwiICsgbW9kdWxlSWQgKyBcIiAtIFwiICsgZXJyLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JpdHRvcmUgZGkgbG9nIGEgY29uc29sZS4gQXR0aXZvIHNvbG8gcXVhbmRvIGxhIGxpYnJlcmlhIMOoIGluIG1vZGFsaXTDoCBkaSBEZWJ1Z1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydFJyB8ICdJJyB8ICdXJ30gc2V2ZXJpdHkgVGlwbyBkaSBtZXNzYWdnaW8gKEVycm9yZSwgSW5mbywgV2FybmluZylcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVpcmVzVHJhbnNsYXRpb24gSW5kaWNhIHNlICoqdGV4dCoqIMOoIHVuYSBmcmFzZSBnacOgIHRyYWRvdHRhIG8gc2Ugw6ggZGEgdHJhZHVycmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvZyhzZXZlcml0eTogJ0UnIHwgJ0knIHwgJ1cnLCB0ZXh0OiBzdHJpbmcsIHJlcXVpcmVzVHJhbnNsYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5ESUFfREVCVUdfTU9ERSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgbWVzc2FnZSA9IFwiQGVzZmFlbnphL2RpYWdyYW1zOiBcIiArIChyZXF1aXJlc1RyYW5zbGF0aW9uID8gdGhpcy5sb2ModGV4dCkgOiB0ZXh0KTtcclxuICAgICAgICBzd2l0Y2ggKHNldmVyaXR5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0UnOiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0knOiBjb25zb2xlLmluZm8obWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnVyc6IGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkaSBsb2NhbGl6emF6aW9uZSBkZWkgbWVzc2FnZ2lcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgTWVzc2FnZ2lvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2dpbyB0cmFkb3R0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9jKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIExvY1t0ZXh0XVt0aGlzLkRJQV9MT0NBTEVdO1xyXG4gICAgfVxyXG59Il19
|