@k8slens/ai-tools-contracts 1.0.0 → 1.0.1

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/dist/index.js CHANGED
@@ -495,7 +495,7 @@ var getAiToolInjectableBunch = (params) => {
495
495
  isVisible: (0, import_mobx.computed)(() => detectedInstallState(detectedAiTools, params.kind) === true),
496
496
  Component: SelectionRowComponent
497
497
  };
498
- return () => item;
498
+ return () => () => item;
499
499
  },
500
500
  injectionToken: import_drop_down_menu_contracts2.dropDownMenuItemInjectionToken.for(aiToolTopBarMenuKind)
501
501
  }),
@@ -510,7 +510,7 @@ var getAiToolInjectableBunch = (params) => {
510
510
  isVisible: (0, import_mobx.computed)(() => detectedInstallState(detectedAiTools, params.kind) === false),
511
511
  Component: SelectionRowComponent
512
512
  };
513
- return () => item;
513
+ return () => () => item;
514
514
  },
515
515
  injectionToken: import_drop_down_menu_contracts2.dropDownMenuItemInjectionToken.for(aiToolTopBarMenuKind)
516
516
  }),
@@ -639,4 +639,4 @@ var effectiveAiToolIconInjectionToken = (0, import_injectable25.getInjectionToke
639
639
  shellQuote,
640
640
  windowsShellQuote
641
641
  });
642
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2FpLXRvb2wudHMiLCAiLi4vc3JjL2FpLXRvb2wtaXMtY29uZmlndXJlZC50cyIsICIuLi9zcmMvb3MtYW5kLXNoZWxsLXNwZWNpZmljLnRzIiwgIi4uL3NyYy9jdXJyZW50LXNoZWxsLWZhbWlseS50cyIsICIuLi9zcmMvYWktdG9vbC1pbmplY3Rpb24tdG9rZW4udHMiLCAiLi4vc3JjL2dldC1haS1jb21tYW5kLWZvci10ZXJtaW5hbC50cyIsICIuLi9zcmMvZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbC50cyIsICIuLi9zcmMvYWktdG9vbC1pbnN0YWxsZWQtdmlhLWNsaS1jb21tYW5kLnRzIiwgIi4uL3NyYy9haS10b29sLWRldGVjdGlvbi50cyIsICIuLi9zcmMvYWktdG9vbC1uYW1lLnRzIiwgIi4uL3NyYy9haS10b29sLWRpc3BsYXktbmFtZS50cyIsICIuLi9zcmMvYWktdG9vbC1kZXNjcmlwdGlvbi50cyIsICIuLi9zcmMvYWktdG9vbC1pY29uLnRzIiwgIi4uL3NyYy9kZWZhdWx0LWFpLXRvb2wtaWNvbi50c3giLCAiLi4vc3JjL2FpLXRvb2wtb3JkZXItbnVtYmVyLnRzIiwgIi4uL3NyYy9haS10b29sLXNldHRpbmdzLnRzIiwgIi4uL3NyYy9haS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnMudHMiLCAiLi4vc3JjL2FpLXRvb2wtaW5zdHJ1Y3Rpb25zLWZpbGVuYW1lLnRzIiwgIi4uL3NyYy9haS10b29sLWluc3RydWN0aW9ucy1maWxlbmFtZXMudHMiLCAiLi4vc3JjL3Jlc29sdmUtbGxtLWNvbW1hbmQudHMiLCAiLi4vc3JjL2J1aWxkLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmQudHMiLCAiLi4vc3JjL2dldC1vcGVuLXRvb2wtaW4tZXh0ZXJuYWwtdGVybWluYWwtZm9yLXRvb2wudHMiLCAiLi4vc3JjL2dldC1haS10b29sLWlzLWluc3RhbGxlZC1jbGktY29tbWFuZC50cyIsICIuLi9zcmMvYWktdG9vbHMtb3Blbi1leHRlcm5hbGx5LnRzIiwgIi4uL3NyYy9nZXQtYWktdG9vbC1pbmplY3RhYmxlLWJ1bmNoLnRzIiwgIi4uL3NyYy9haS10b29sLXNlbGVjdGlvbi1yb3cudHMiLCAiLi4vc3JjL2FpLXRvb2wtdG9wLWJhci1tZW51LnRzIiwgIi4uL3NyYy9kZXRlY3RlZC1haS10b29scy50cyIsICIuLi9zcmMvYWktdG9vbHMtaW5qZWN0aW9uLXRva2VuLnRzIiwgIi4uL3NyYy9haS10b29sLWNvbmZpZ3VyYXRpb24udHMiLCAiLi4vc3JjL3NlbGVjdGVkLWFpLXRvb2wtaW5qZWN0aW9uLXRva2Vucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHtcbiAgdHlwZSBBaVRvb2xLaW5kLFxuICBjdXN0b21BaVRvb2xLaW5kLFxuICBub0FpVG9vbEtpbmQsXG4gIGFnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lLFxuICBhZ2VudHNJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkNvbnRlbnRzLFxuICB0eXBlIEdldENsaUNvbW1hbmQsXG4gIHR5cGUgR2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kLFxuICB0eXBlIEdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsQ2xpQ29tbWFuZCxcbiAgdHlwZSBBaVRvb2xMaXN0RW50cnksXG59IGZyb20gXCIuL3NyYy9haS10b29sXCI7XG5leHBvcnQgeyBhaVRvb2xJc0NvbmZpZ3VyZWRJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9haS10b29sLWlzLWNvbmZpZ3VyZWRcIjtcbmV4cG9ydCB0eXBlIHtcbiAgT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWMsXG4gIE1heWJlT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWMsXG59IGZyb20gXCIuL3NyYy9vcGVyYXRpbmctc3lzdGVtLXNwZWNpZmljXCI7XG5leHBvcnQge1xuICB0eXBlIFNoZWxsU3BlY2lmaWMsXG4gIHR5cGUgTWF5YmVTaGVsbFNwZWNpZmljLFxuICB0eXBlIE9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWMsXG4gIHR5cGUgTWF5YmVPcGVyYXRpbmdTeXN0ZW1BbmRTaGVsbFNwZWNpZmljLFxuICBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlLFxufSBmcm9tIFwiLi9zcmMvb3MtYW5kLXNoZWxsLXNwZWNpZmljXCI7XG5leHBvcnQgeyBjdXJyZW50U2hlbGxGYW1pbHlJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9jdXJyZW50LXNoZWxsLWZhbWlseVwiO1xuXG5leHBvcnQgeyBhaVRvb2xJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9haS10b29sLWluamVjdGlvbi10b2tlblwiO1xuZXhwb3J0IHsgZ2V0QWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9nZXQtYWktY29tbWFuZC1mb3ItdGVybWluYWxcIjtcbmV4cG9ydCB7IGdldFJlc3VtZUFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9zcmMvZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiO1xuZXhwb3J0IHtcbiAgYWlUb29sSW5zdGFsbGVkVmlhQ2xpQ29tbWFuZEluamVjdGlvblRva2VuLFxuICB0eXBlIEFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmQsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RhbGxlZC12aWEtY2xpLWNvbW1hbmRcIjtcbmV4cG9ydCB7IHJlZnJlc2hBaVRvb2xEZXRlY3Rpb25JbmplY3Rpb25Ub2tlbiwgdHlwZSBSZWZyZXNoQWlUb29sRGV0ZWN0aW9uIH0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtZGV0ZWN0aW9uXCI7XG5leHBvcnQgeyBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4sIHR5cGUgQWlUb29sTmFtZSB9IGZyb20gXCIuL3NyYy9haS10b29sLW5hbWVcIjtcbmV4cG9ydCB7IGFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4sIHR5cGUgQWlUb29sRGlzcGxheU5hbWUgfSBmcm9tIFwiLi9zcmMvYWktdG9vbC1kaXNwbGF5LW5hbWVcIjtcbmV4cG9ydCB7XG4gIGFpVG9vbERlc2NyaXB0aW9uSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sRGVzY3JpcHRpb24sXG4gIHR5cGUgQWlUb29sRGVzY3JpcHRpb25Qcm9wcyxcbn0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtZGVzY3JpcHRpb25cIjtcbmV4cG9ydCB7XG4gIGFpVG9vbEljb25JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJY29uLFxuICBhaVRvb2xJY29uRm9yS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIEFpVG9vbEljb25Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvYWktdG9vbC1pY29uXCI7XG5leHBvcnQgeyBEZWZhdWx0QWlUb29sSWNvbiB9IGZyb20gXCIuL3NyYy9kZWZhdWx0LWFpLXRvb2wtaWNvblwiO1xuZXhwb3J0IHsgYWlUb29sT3JkZXJOdW1iZXJJbmplY3Rpb25Ub2tlbiwgdHlwZSBBaVRvb2xPcmRlck51bWJlciB9IGZyb20gXCIuL3NyYy9haS10b29sLW9yZGVyLW51bWJlclwiO1xuZXhwb3J0IHsgYWlUb29sU2V0dGluZ3NJbmplY3Rpb25Ub2tlbiwgdHlwZSBBaVRvb2xTZXR0aW5ncyB9IGZyb20gXCIuL3NyYy9haS10b29sLXNldHRpbmdzXCI7XG5leHBvcnQge1xuICBhaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnNJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnNcIjtcbmV4cG9ydCB7XG4gIGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sSW5zdHJ1Y3Rpb25zRmlsZW5hbWUsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RydWN0aW9ucy1maWxlbmFtZVwiO1xuZXhwb3J0IHtcbiAgYWlUb29sSW5zdHJ1Y3Rpb25zSW5kaXJlY3Rpb25GaWxlbmFtZXNJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkZpbGVuYW1lcyxcbn0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtaW5zdHJ1Y3Rpb25zLWZpbGVuYW1lc1wiO1xuZXhwb3J0IHsgcmVzb2x2ZUxsbUNvbW1hbmQsIHR5cGUgUmVzb2x2ZUxsbUNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUtbGxtLWNvbW1hbmRcIjtcbi8vIEdlbmVyaWMgc2hlbGwgZXNjYXBpbmcsIGRlZmluZWQgd2l0aCB0aGUgb3RoZXIgc2hlbGwgaGVscGVycyBpblxuLy8gQGs4c2xlbnMvcHVibGljLXV0aWxpdGllczsgcmUtZXhwb3J0ZWQgc28gZXhpc3RpbmcgaW1wb3J0ZXJzIGFyZSB1bmFmZmVjdGVkLlxuZXhwb3J0IHsgc2hlbGxRdW90ZSwgd2luZG93c1NoZWxsUXVvdGUgfSBmcm9tIFwiQGs4c2xlbnMvcHVibGljLXV0aWxpdGllc1wiO1xuZXhwb3J0IHtcbiAgZXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRPcHRpb25zLFxuICB0eXBlIEV4dGVybmFsVGVybWluYWxDb21tYW5kQnVpbGRlcixcbn0gZnJvbSBcIi4vc3JjL2J1aWxkLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmRcIjtcbmV4cG9ydCB7IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vc3JjL2dldC1vcGVuLXRvb2wtaW4tZXh0ZXJuYWwtdGVybWluYWwtZm9yLXRvb2xcIjtcbmV4cG9ydCB7IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vc3JjL2dldC1haS10b29sLWlzLWluc3RhbGxlZC1jbGktY29tbWFuZFwiO1xuZXhwb3J0IHsgYWlUb29sc09wZW5FeHRlcm5hbGx5SW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9zcmMvYWktdG9vbHMtb3Blbi1leHRlcm5hbGx5XCI7XG5leHBvcnQgeyBnZXRBaVRvb2xJbmplY3RhYmxlQnVuY2gsIHR5cGUgQWlUb29sQnVuY2hQYXJhbXMgfSBmcm9tIFwiLi9zcmMvZ2V0LWFpLXRvb2wtaW5qZWN0YWJsZS1idW5jaFwiO1xuZXhwb3J0IHsgYWlUb29sc0luamVjdGlvblRva2VuLCB0eXBlIEFpVG9vbHMgfSBmcm9tIFwiLi9zcmMvYWktdG9vbHMtaW5qZWN0aW9uLXRva2VuXCI7XG5leHBvcnQgeyBkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbiwgdHlwZSBEZXRlY3RlZEFpVG9vbHMgfSBmcm9tIFwiLi9zcmMvZGV0ZWN0ZWQtYWktdG9vbHNcIjtcbmV4cG9ydCB7IGFpVG9vbFRvcEJhck1lbnVLaW5kLCBhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzIH0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtdG9wLWJhci1tZW51XCI7XG5leHBvcnQge1xuICBhaVRvb2xDb25maWd1cmF0aW9uTWVudUtpbmQsXG4gIGFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUluamVjdGlvblRva2VuLFxuICBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sQ29uZmlndXJhdGlvblN0YXRlLFxuICB0eXBlIEFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUZvcixcbiAgdHlwZSBBaVRvb2xJc0NvbmZpZ3VyZWQsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWNvbmZpZ3VyYXRpb25cIjtcbmV4cG9ydCB7IEFpVG9vbFNlbGVjdGlvblJvdywgdHlwZSBBaVRvb2xTZWxlY3Rpb25Sb3dQcm9wcyB9IGZyb20gXCIuL3NyYy9haS10b29sLXNlbGVjdGlvbi1yb3dcIjtcbmV4cG9ydCB7XG4gIHNlbGVjdGVkQWlUb29sS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIFNlbGVjdGVkQWlUb29sS2luZCxcbiAgZWZmZWN0aXZlQWlUb29sS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIEVmZmVjdGl2ZUFpVG9vbEtpbmQsXG4gIHNlbGVjdGVkQWlUb29sQ29tbWFuZEluamVjdGlvblRva2VuLFxuICB0eXBlIFNlbGVjdGVkQWlUb29sQ29tbWFuZCxcbiAgc2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kLFxuICBzZWxlY3RlZEFpVG9vbE9wZW5JbkV4dGVybmFsVGVybWluYWxDb21tYW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgU2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZCxcbiAgZWZmZWN0aXZlQWlUb29sTmFtZUluamVjdGlvblRva2VuLFxuICB0eXBlIEVmZmVjdGl2ZUFpVG9vbE5hbWUsXG4gIGVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgRWZmZWN0aXZlQWlUb29sRGlzcGxheU5hbWUsXG4gIGVmZmVjdGl2ZUFpVG9vbEljb25JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBFZmZlY3RpdmVBaVRvb2xJY29uLFxufSBmcm9tIFwiLi9zcmMvc2VsZWN0ZWQtYWktdG9vbC1pbmplY3Rpb24tdG9rZW5zXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBDb25zdW1wdGlvbkRpLCBEaUNvbnRhaW5lckZvckluamVjdGlvbiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5cbi8qKiBJZGVudGlmaWVyIGZvciBhIGtpbmQgb2YgQUkgQ0xJIHRvb2wsIGUuZy4gYFwiY2xhdWRlXCJgLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sS2luZCA9IHN0cmluZztcblxuLyoqIFRoZSBwc2V1ZG8ta2luZCBmb3IgdGhlIHVzZXIncyBmcmVlLXRleHQgXCJDdXN0b21cIiBjb21tYW5kLiAqL1xuZXhwb3J0IGNvbnN0IGN1c3RvbUFpVG9vbEtpbmQ6IEFpVG9vbEtpbmQgPSBcImN1c3RvbVwiO1xuXG4vKipcbiAqIFRoZSBwc2V1ZG8ta2luZCBmb3IgXCJObyBBSSB0b29sXCIgXHUyMDE0IHRoZSBleHBsaWNpdCBvcHQtb3V0LCBhbmQgdGhlIGRlZmF1bHQvZmFsbGJhY2tcbiAqIGVmZmVjdGl2ZSBraW5kLiBJdCBpcyBub3QgYSByZWdpc3RlcmVkIHRvb2w6IHdoZW4gaXQgaXMgdGhlIGVmZmVjdGl2ZSBzZWxlY3Rpb24sXG4gKiBMZW5zIGxhdW5jaGVzIG5vdGhpbmcgYW5kIHRoZSBBSSBzdXJmYWNlcyBoaWRlICh0aGUgdG9wLWJhciBidXR0b24gYmVjb21lc1xuICogXCJDb25maWd1cmUgQUlcIikuIFRoZSBlZmZlY3RpdmUga2luZCByZXNvbHZlcyB0byB0aGlzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gaXNcbiAqIHVuc2V0LCBzZXQgdG8gdGhpcyBzZW50aW5lbCwgb3Igc2V0IHRvIGEgdG9vbCB0aGF0IGlzIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBub0FpVG9vbEtpbmQ6IEFpVG9vbEtpbmQgPSBcIm5vbmVcIjtcblxuLyoqXG4gKiBUaGUgY2Fub25pY2FsIGFnZW50LWluc3RydWN0aW9ucyBmaWxlbmFtZSwgd3JpdHRlbiBpbnRvIGV2ZXJ5IEFJIHRvb2wgdGFiJ3NcbiAqIHdvcmtpbmcgZGlyZWN0b3J5LiBUb29scyB0aGF0IHJlYWQgYSBkaWZmZXJlbnRseS1uYW1lZCBmaWxlIChzZWVcbiAqIHtAbGluayBBaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZX0pIGdldCB0aGF0IGZpbGUgdG9vLCBhcyBhbiBpbmRpcmVjdGlvblxuICogaW1wb3J0aW5nIHRoaXMgb25lLlxuICovXG5leHBvcnQgY29uc3QgYWdlbnRzSW5zdHJ1Y3Rpb25zRmlsZW5hbWUgPSBcIkFHRU5UUy5tZFwiO1xuXG4vKipcbiAqIFRoZSBjb250ZW50cyBvZiBhIHRvb2wtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpbGUgKGUuZy4gYENMQVVERS5tZGApOiBhIHNpbmdsZVxuICogbGluZSBpbXBvcnRpbmcgdGhlIGNhbm9uaWNhbCB7QGxpbmsgYWdlbnRzSW5zdHJ1Y3Rpb25zRmlsZW5hbWV9LCBzbyBhIHRvb2wgdGhhdFxuICogcmVhZHMgaXRzIG93biBmaWxlbmFtZSBzdGlsbCBwaWNrcyB1cCB0aGUgaW5zdHJ1Y3Rpb25zIHdyaXR0ZW4gdGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhZ2VudHNJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkNvbnRlbnRzID0gYEAke2FnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lfVxcbmA7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzaGVsbCBjb21tYW5kIHRoYXQgbGF1bmNoZXMgYW4gQUkgQ0xJIHRvb2wgaW4gYSB0ZXJtaW5hbC4gQW4gYXN5bmNcbiAqIGNhbGxiYWNrIHJlY2VpdmluZyB0aGUgREkgY29udGFpbmVyLCBzbyBhIHRvb2wgY2FuIGluamVjdCAoYW5kIGF3YWl0KSB3aGF0ZXZlclxuICogaXQgbmVlZHMgd2hpbGUgYXNzZW1ibGluZyBpdHMgY29tbWFuZC4gYGRpcmAgaXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZVxuICogY29tbWFuZCBydW5zIGluOyB0aGUgbGF1bmNoZXIgaGFzIGFscmVhZHkgd3JpdHRlbiB0aGUgY2x1c3RlciBjb250ZXh0IHRoZXJlIGFzXG4gKiBgQUdFTlRTLm1kYCAocGx1cyBwZXItdG9vbCBpbmRpcmVjdGlvbiBmaWxlcyksIHNvIHRvb2xzIGRpc2NvdmVyIGl0IGZyb20gY3dkLlxuICovXG5leHBvcnQgdHlwZSBHZXRDbGlDb21tYW5kID0gKGRpOiBEaUNvbnRhaW5lckZvckluamVjdGlvbiwgYXJnczogeyBwcm9tcHQ/OiBzdHJpbmc7IGRpcjogc3RyaW5nIH0pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGhvc3QgY29tbWFuZCB0aGF0IGNoZWNrcyB3aGV0aGVyIGFuIEFJIHRvb2wgaXMgaW5zdGFsbGVkIChlLmcuXG4gKiBgY29tbWFuZCAtdiBjbGF1ZGVgIC8gYHdoZXJlIGNsYXVkZWApLiBUaGUgY29tbWFuZCBpcyBydW4gb24gdGhlIGhvc3QgYW5kIGFuXG4gKiBleGl0IGNvZGUgb2YgYDBgIG1lYW5zIGluc3RhbGxlZC4gR2l2ZW4gdGhlIERJIGNvbnRhaW5lciwgcmV0dXJucyB0aGUgY29tbWFuZFxuICogc3RyaW5nLiBPbWl0IChvbiBgQWlUb29sQnVuY2hQYXJhbXNgKSBmb3IgYW4gYWx3YXlzLWF2YWlsYWJsZSB0b29sLlxuICovXG4vLyBSZWNlaXZlcyB0aGUgaW52b2tpbmcgaW5qZWN0YWJsZSdzIHNjb3BlZCBgZGlgLCBzbyBhIGJ1aWxkZXIgbWF5IGluamVjdFxuLy8gaW5qZWN0YWJsZXMgYnkgcmVmZXJlbmNlIGJ1dCBubyBpbmplY3Rpb24gdG9rZW5zICh0aGV5IHdvdWxkIGhhdmUgdG8gYmVcbi8vIGRlY2xhcmVkIGJ5IGV2ZXJ5IGludm9rZXIpLiBUaGUgYnVpbHQtaW4gY2hlY2tzIGFyZSBzdGF0aWMgc3RyaW5ncyBhbnl3YXkuXG5leHBvcnQgdHlwZSBHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgPSAoZGk6IENvbnN1bXB0aW9uRGkpID0+IHN0cmluZztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGZ1bGwgaG9zdCBjb21tYW5kIHRoYXQgb3BlbnMgYW4gQUkgdG9vbCBpbiBhIGZyZXNoIGV4dGVybmFsIHRlcm1pbmFsXG4gKiB3aW5kb3cgXHUyMDE0IHR5cGljYWxseSBieSB3cmFwcGluZyB0aGUgdG9vbCdzIG93biBpbnZvY2F0aW9uIHdpdGggb25lIG9mIHRoZVxuICogYGJ1aWxke01hYyxXaW5kb3dzLExpbnV4fUV4dGVybmFsVGVybWluYWxDb21tYW5kYCBoZWxwZXJzLiBNaXJyb3JzXG4gKiB7QGxpbmsgR2V0Q2xpQ29tbWFuZH0ncyBhcmdzIChzbyBpdCBjYW4gcmV1c2UgdGhlIHRvb2wncyBsYXVuY2ggY29tbWFuZCksXG4gKiBwbHVzIGBlbnZgIChlLmcuIGB7IEtVQkVDT05GSUcgfWApIHdoaWNoIGlzIGJha2VkIGludG8gdGhlIGNvbW1hbmQgYmVjYXVzZSB0aGVcbiAqIGZyZXNobHktb3BlbmVkIHRlcm1pbmFsIGRvZXMgbm90IGluaGVyaXQgdGhlIGxhdW5jaGVyJ3MgZW52aXJvbm1lbnQuIFJldHVybnNcbiAqIGBcIlwiYCB3aGVuIHRoZSB0b29sIGhhcyBubyBjb21tYW5kIHRvIHJ1biAoZS5nLiBhbiBlbXB0eSBDdXN0b20gdGVtcGxhdGUpLlxuICovXG5leHBvcnQgdHlwZSBHZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQgPSAoXG4gIGRpOiBEaUNvbnRhaW5lckZvckluamVjdGlvbixcbiAgYXJnczogeyBwcm9tcHQ/OiBzdHJpbmc7IGRpcjogc3RyaW5nOyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0sXG4pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIEFuIEFJIHRvb2wga2luZCB0b2dldGhlciB3aXRoIGl0cyBkZXRlY3RlZCBpbnN0YWxsYXRpb24gc3RhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbExpc3RFbnRyeSB7XG4gIHJlYWRvbmx5IGtpbmQ6IEFpVG9vbEtpbmQ7XG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcblxuLyoqXG4gKiBXaGV0aGVyIGEgcmVhbCBBSSB0b29sIGlzIGNvbmZpZ3VyZWQgXHUyMDE0IGkuZS4gdGhlIGVmZmVjdGl2ZSBBSSB0b29sIGtpbmQgaXMgYSByZWFsXG4gKiB0b29sIChvciBDdXN0b20pLCBub3Qge0BsaW5rIG5vQWlUb29sS2luZH0uIERlcml2ZWQgcHVyZWx5IGZyb20gdGhlIHVzZXInc1xuICogc2VsZWN0aW9uLCBOT1QgZnJvbSBpbnN0YWxsIGRldGVjdGlvbjogb2JzZXJ2aW5nIHRoZSBjb25maWd1cmVkIHN0YXRlIG11c3Qgbm90XG4gKiBkZXBlbmQgb24gdGhlIGFzeW5jIFBBVEggc2NhbiBoYXZpbmcgcnVuIGZpcnN0LlxuICpcbiAqIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBlcnNpc3RlZCBzZWxlY3Rpb24gaGFzIGxvYWRlZCAodGhlbiBhIHJlYWN0aXZlXG4gKiBib29sZWFuKSwgc28gY29uc3VtZXJzIHJlZmxlY3QgYSBnZW51aW5lICpwZW5kaW5nKiBzdGF0ZSB3aGlsZSBpdCBsb2FkcyBpbnN0ZWFkXG4gKiBvZiBndWVzc2luZyBgZmFsc2VgLiBSZWFjdCBzdXJmYWNlcyByZWFkIGl0IHZpYSBgdXNlSW5qZWN0KC4uLilgIHVuZGVyXG4gKiBgPFN1c3BlbnNlPmAgKG9yIGJyaWRnZSBpdCB3aXRoIGBhc1JlYWN0aXZlYCk7IHRoZSBsYXVuY2ggaGFuZGxlcnMgYGF3YWl0YCBpdC5cbiAqIFRoZSBBc2stQUkgbGF1bmNoIHN1cmZhY2VzIGdhdGUgdGhlaXIgdmlzaWJpbGl0eSBvbiBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbElzQ29uZmlndXJlZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPj47XG59Pih7XG4gIGlkOiBcImFpLXRvb2wtaXMtY29uZmlndXJlZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHR5cGUgeyBGYWN0b3J5LCBJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5qZWN0YWJsZUZvck9wZXJhdGluZ1N5c3RlbXNBbmRTaGVsbHMsXG4gIGdldEluamVjdGFibGVGb3JTaGVsbHMsXG4gIHR5cGUgUGVyU2hlbGxGYW1pbHksXG4gIHR5cGUgU2hlbGxTY29wZWQsXG59IGZyb20gXCJAazhzbGVucy9wbGF0Zm9ybS1zcGVjaWZpYy1pbmplY3RhYmxlc1wiO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYyB9IGZyb20gXCIuL29wZXJhdGluZy1zeXN0ZW0tc3BlY2lmaWNcIjtcblxuLyoqXG4gKiBBIHZhbHVlIHByb3ZpZGVkIHNlcGFyYXRlbHkgcGVyIHNoZWxsIGZhbWlseS4gVGhlIHNoZWxsIGFuYWxvZ3VlIG9mXG4gKiB7QGxpbmsgT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWN9LlxuICovXG5leHBvcnQgdHlwZSBTaGVsbFNwZWNpZmljPFQ+ID0gUGVyU2hlbGxGYW1pbHk8VD47XG5cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGlzIGVpdGhlciBzaGVsbC1hZ25vc3RpYyAodGhlIHZhbHVlIGl0c2VsZikgb3Igc2hlbGwgc3BlY2lmaWMgKGFcbiAqIHtAbGluayBTaGVsbFNwZWNpZmljfSBvYmplY3QpLiBUaGUgc2hlbGwgYW5hbG9ndWUgb2YgYE1heWJlT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWNgLlxuICovXG5leHBvcnQgdHlwZSBNYXliZVNoZWxsU3BlY2lmaWM8VD4gPSBUIHwgU2hlbGxTcGVjaWZpYzxUPjtcblxuLyoqIEEgdmFsdWUgcHJvdmlkZWQgcGVyIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB3aXRoaW4gZWFjaCwgcGVyIHNoZWxsIGZhbWlseS4gKi9cbmV4cG9ydCB0eXBlIE9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8VD4gPSBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYzxTaGVsbFNwZWNpZmljPFQ+PjtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgbWF5IHZhcnkgYWxvbmcgZWl0aGVyIGF4aXM6IGFnbm9zdGljLCBvcGVyYXRpbmctc3lzdGVtIHNwZWNpZmljLFxuICogc2hlbGwgc3BlY2lmaWMsIG9yIGJvdGguIFVzZWQgZm9yIHRoZSBBSS10b29sIENMSSBjb21tYW5kcyBzbyBhIHRvb2wgbWF5IGRpZmZlclxuICogaXRzIGNvbW1hbmQgKmNvbnRlbnQqIHBlciBPUyBhbmQvb3Igc2hlbGwgKGUuZy4gbGF1bmNoLWJ5LW5hbWUgdnMgcGF0aCwgb3JcbiAqIHBlci1PUyBkaXNjb3ZlcnkgbG9naWMpLlxuICovXG5leHBvcnQgdHlwZSBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8VD4gPVxuICB8IFRcbiAgfCBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYzxUPlxuICB8IFNoZWxsU3BlY2lmaWM8VD5cbiAgfCBPcGVyYXRpbmdTeXN0ZW1BbmRTaGVsbFNwZWNpZmljPFQ+O1xuXG5jb25zdCBpc0Z1bmN0aW9uID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRmFjdG9yeSA9PiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcblxuY29uc3QgaXNTaGVsbFNwZWNpZmljID0gPEY+KFxuICB2YWx1ZTogT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWM8RiB8IFNoZWxsU3BlY2lmaWM8Rj4+IHwgU2hlbGxTcGVjaWZpYzxGPixcbik6IHZhbHVlIGlzIFNoZWxsU3BlY2lmaWM8Rj4gPT4gXCJwb3NpeFwiIGluIHZhbHVlO1xuXG5jb25zdCBzYW1lRm9yRXZlcnlTaGVsbCA9IDxGPih2YWx1ZTogRik6IFBlclNoZWxsRmFtaWx5PCgpID0+IEY+ID0+ICh7XG4gIHBvc2l4OiAoKSA9PiB2YWx1ZSxcbiAgZmlzaDogKCkgPT4gdmFsdWUsXG4gIGNtZDogKCkgPT4gdmFsdWUsXG4gIHBvd2Vyc2hlbGw6ICgpID0+IHZhbHVlLFxufSk7XG5cbmNvbnN0IHBlclNoZWxsUHJvZHVjZXJzID0gPEY+KHZhbHVlOiBTaGVsbFNwZWNpZmljPEY+KTogUGVyU2hlbGxGYW1pbHk8KCkgPT4gRj4gPT4gKHtcbiAgcG9zaXg6ICgpID0+IHZhbHVlLnBvc2l4LFxuICBmaXNoOiAoKSA9PiB2YWx1ZS5maXNoLFxuICBjbWQ6ICgpID0+IHZhbHVlLmNtZCxcbiAgcG93ZXJzaGVsbDogKCkgPT4gdmFsdWUucG93ZXJzaGVsbCxcbn0pO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHtAbGluayBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWN9IHZhbHVlIHVuZGVyIGEgc2luZ2xlXG4gKiB0b2tlbiBzbyBjb25zdW1lcnMgcmVzb2x2ZSBpdCBhdCBydW50aW1lIHdpdGhcbiAqIGByZXNvbHZlRm9yU2hlbGwoaW5qZWN0TWFueSh0b2tlbikoKSwgc2hlbGxGYW1pbHkpYC4gVGhlICoqT1MqKiBheGlzIGlzIGZpbHRlcmVkXG4gKiBzeW5jaHJvbm91c2x5IGF0IHJlZ2lzdHJhdGlvbiAoaG9zdC1vbmx5IGAqLW9ubHlgIHRhZ3MsIHZpYVxuICogYGdldEluamVjdGFibGVGb3JPcGVyYXRpbmdTeXN0ZW1zQW5kU2hlbGxzYCk7IHRoZSAqKnNoZWxsKiogYXhpcyBpcyBzZWxlY3RlZCBhdFxuICogcnVudGltZSwgc2luY2UgdGhlIGNvbmZpZ3VyZWQgc2hlbGwgaXMgYXN5bmMuIEFnbm9zdGljIGFuZCBPUy1vbmx5IHZhbHVlcyBhcmVcbiAqIHJlcGVhdGVkIGFjcm9zcyB0aGUgc2hlbGwgZmFtaWxpZXMgc28gZXZlcnkgdG9rZW4gdW5pZm9ybWx5IHlpZWxkc1xuICogYFNoZWxsU2NvcGVkPEY+YC4gVGhlIHNoZWxsIGFuYWxvZ3VlL3N1cGVyc2V0IG9mIGBnZXRJbmplY3RhYmxlRm9yT3BlcmF0aW5nU3lzdGVtc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlID0gPEYgZXh0ZW5kcyBGYWN0b3J5PihhcmdzOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGluamVjdGlvblRva2VuOiBJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFNoZWxsU2NvcGVkPEY+O1xuICAgIG1hbnlGYWN0b3J5OiBhbnk7XG4gICAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IHVuZGVmaW5lZDtcbiAgICBjYXJkaW5hbGl0eTogYW55O1xuICB9PjtcbiAgdmFsdWU6IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxGPjtcbn0pID0+IHtcbiAgY29uc3QgeyBpZCwgaW5qZWN0aW9uVG9rZW4sIHZhbHVlIH0gPSBhcmdzO1xuXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRJbmplY3RhYmxlRm9yU2hlbGxzKHsgaWQsIGluamVjdGlvblRva2VuLCBpbnN0YW50aWF0ZTogc2FtZUZvckV2ZXJ5U2hlbGwodmFsdWUpIH0pO1xuICB9XG5cbiAgaWYgKGlzU2hlbGxTcGVjaWZpYyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0SW5qZWN0YWJsZUZvclNoZWxscyh7IGlkLCBpbmplY3Rpb25Ub2tlbiwgaW5zdGFudGlhdGU6IHBlclNoZWxsUHJvZHVjZXJzKHZhbHVlKSB9KTtcbiAgfVxuXG4gIGNvbnN0IHBlck9wZXJhdGluZ1N5c3RlbSA9IChvc1ZhbHVlOiBGIHwgU2hlbGxTcGVjaWZpYzxGPik6IFBlclNoZWxsRmFtaWx5PCgpID0+IEY+ID0+XG4gICAgaXNGdW5jdGlvbihvc1ZhbHVlKSA/IHNhbWVGb3JFdmVyeVNoZWxsKG9zVmFsdWUpIDogcGVyU2hlbGxQcm9kdWNlcnMob3NWYWx1ZSk7XG5cbiAgcmV0dXJuIGdldEluamVjdGFibGVGb3JPcGVyYXRpbmdTeXN0ZW1zQW5kU2hlbGxzKHtcbiAgICBpZCxcbiAgICBpbmplY3Rpb25Ub2tlbixcbiAgICBpbnN0YW50aWF0ZToge1xuICAgICAgbWFjb3M6IHBlck9wZXJhdGluZ1N5c3RlbSh2YWx1ZS5tYWNvcyksXG4gICAgICB3aW5kb3dzOiBwZXJPcGVyYXRpbmdTeXN0ZW0odmFsdWUud2luZG93cyksXG4gICAgICBsaW51eDogcGVyT3BlcmF0aW5nU3lzdGVtKHZhbHVlLmxpbnV4KSxcbiAgICB9LFxuICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBTaGVsbEZhbWlseSB9IGZyb20gXCJAazhzbGVucy9wdWJsaWMtdXRpbGl0aWVzXCI7XG5cbi8qKlxuICogUmVhY3RpdmUgbG9va3VwIG9mIHRoZSBhY3RpdmUgc2hlbGwgKmZhbWlseSogKGBwb3NpeGAvYGZpc2hgL2BjbWRgL2Bwb3dlcnNoZWxsYCksXG4gKiBkZXJpdmVkIGZyb20gdGhlIHVzZXItY29uZmlndXJlZCBzaGVsbC4gQ29uc3VtZXJzIG9mIHRoZSBwZXIta2luZCBBSSBjb21tYW5kXG4gKiB0b2tlbnMgKHdoaWNoIHJlZ2lzdGVyIG9uZSB7QGxpbmsgaW1wb3J0KFwiQGs4c2xlbnMvcHVibGljLXV0aWxpdGllc1wiKS5TaGVsbFNjb3BlZH0gY2VsbFxuICogcGVyIGZhbWlseSkgdXNlIHRoaXMgdG8gcGljayB0aGUgYWN0aXZlIHNoZWxsJ3MgY29tbWFuZCBhdCBydW50aW1lIHZpYVxuICogYHJlc29sdmVGb3JTaGVsbChpbmplY3RNYW55KHRva2VuLmZvcihraW5kKSkoKSwgY3VycmVudFNoZWxsRmFtaWx5LmdldCgpKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBjdXJyZW50U2hlbGxGYW1pbHlJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IElDb21wdXRlZFZhbHVlPFNoZWxsRmFtaWx5Pjtcbn0+KHtcbiAgaWQ6IFwiY3VycmVudC1zaGVsbC1mYW1pbHlcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogVGhlIHJlZ2lzdHJ5IG9mIGF2YWlsYWJsZSBBSSB0b29sIGtpbmRzLiBFYWNoIGNvbnRyaWJ1dGlvbiBpcyBKVVNUIGEga2luZDtcbiAqIGV2ZXJ5IG90aGVyIGFzcGVjdCAoY29tbWFuZCwgaW5zdGFsbC1zdGF0ZSwgbmFtZSwgb3JkZXIsIFx1MjAyNikgaXMgY29udHJpYnV0ZWRcbiAqIHZpYSBpdHMgb3duIGAuZm9yKGtpbmQpYCB0b2tlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWlUb29sS2luZCB9Pih7XG4gIGlkOiBcImFpLXRvb2xcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFNoZWxsU2NvcGVkIH0gZnJvbSBcIkBrOHNsZW5zL3BsYXRmb3JtLXNwZWNpZmljLWluamVjdGFibGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQsIEdldENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCBsYXVuY2hlcyBhbiBBSSB0b29sIGluIGEgdGVybWluYWwuXG4gKiBDb250cmlidXRlIG9uZSBwZXIgdG9vbCBraW5kIHZpYSBgLmZvcihraW5kKWAuIFJlZ2lzdGVyZWQgKGJ5IHRoZSBidW5jaCBmYWN0b3J5KVxuICogYXMgb25lIHtAbGluayBTaGVsbFNjb3BlZH0gY2VsbCBwZXIgc2hlbGwgZmFtaWx5OyBjb25zdW1lcnMgcGljayB0aGUgYWN0aXZlXG4gKiBzaGVsbCdzIGF0IHJ1bnRpbWUgd2l0aCBgcmVzb2x2ZUZvclNoZWxsKGluamVjdE1hbnkodG9rZW4uZm9yKGtpbmQpKSgpLCBmYW1pbHkpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0Q2xpQ29tbWFuZD47XG4gICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IFNoZWxsU2NvcGVkPEdldENsaUNvbW1hbmQ+PjtcbiAgfT4oe1xuICAgIGlkOiBgZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFNoZWxsU2NvcGVkIH0gZnJvbSBcIkBrOHNsZW5zL3BsYXRmb3JtLXNwZWNpZmljLWluamVjdGFibGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQsIEdldENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCAqcmVzdW1lcyogYW4gQUkgdG9vbCBpbiBhIHRlcm1pbmFsIFx1MjAxNFxuICogcnVuIGluc3RlYWQgb2Yge0BsaW5rIGdldEFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW59IHdoZW4gdGhlIHRhYidzXG4gKiBzZXNzaW9uIGlzIHJlLWVzdGFibGlzaGVkIChlLmcuIGFmdGVyIGFuIGFwcCByZXN0YXJ0KSByYXRoZXIgdGhhbiBmaXJzdFxuICogb3BlbmVkLCBzbyB0aGUgdG9vbCBjb250aW51ZXMgaXRzIHByZXZpb3VzIHNlc3Npb24gKGUuZy4gYGNsYXVkZSAtLWNvbnRpbnVlXG4gKiB8fCBjbGF1ZGVgLCB3aGljaCBmYWxscyBiYWNrIHRvIGEgZnJlc2ggbGF1bmNoIHdoZW4gdGhlcmUgaXMgbm8gc2Vzc2lvbikuXG4gKlxuICogUmVzb2x2ZXMgdG8gYSB7QGxpbmsgR2V0Q2xpQ29tbWFuZH0gKHRoZSBsYXVuY2gtY29tbWFuZCBzaWduYXR1cmUpOyByZXN1bWVcbiAqIGJ1aWxkZXJzIHR5cGljYWxseSBpZ25vcmUgYHByb21wdGAgKHRoZXkgY29udGludWUgdGhlIHByaW9yIHNlc3Npb24gcmF0aGVyXG4gKiB0aGFuIHN0YXJ0aW5nIGEgbmV3IG9uZSkuIEV2ZXJ5IHRvb2wgY29udHJpYnV0ZXMgb25lIHZpYSBgLmZvcihraW5kKWAgXHUyMDE0IGEgdG9vbFxuICogd2l0aCBubyBkZWRpY2F0ZWQgcmVzdW1lIGludm9jYXRpb24gcGFzc2VzIGl0cyBsYXVuY2ggY29tbWFuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc3VtZUFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFNoZWxsU2NvcGVkPEdldENsaUNvbW1hbmQ+O1xuICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPj47XG4gIH0+KHtcbiAgICBpZDogYGdldC1yZXN1bWUtYWktY29tbWFuZC1mb3ItdGVybWluYWwtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqIFJ1bnMgYW4gaW5zdGFsbGF0aW9uLWRldGVjdGlvbiBjb21tYW5kIG9uIHRoZSBob3N0OyByZXNvbHZlcyBgdHJ1ZWAgaWZmIGl0IGV4aXRzIDAuICovXG5leHBvcnQgdHlwZSBBaVRvb2xJbnN0YWxsZWRWaWFDbGlDb21tYW5kID0gKGNvbW1hbmQ6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBSdW5zIGEgdG9vbCdzIGBnZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmRgIG91dHB1dCBvbiB0aGUgaG9zdCBhbmQgcmVwb3J0c1xuICogd2hldGhlciBpdCBzdWNjZWVkZWQgKGV4aXQgY29kZSAwKS4gSW1wbGVtZW50ZWQgaW4gdGhlIGBAbGVuc2FwcC9haS10b29sc2BcbiAqIGZlYXR1cmUgdmlhIGBjbGlFeGVjdXRlYCBhZ2FpbnN0IHRoZSBzaGVsbC1zeW5jZWQgZW52aXJvbm1lbnQsIHNvIGRldGVjdGlvblxuICogcmVzb2x2ZXMgdGhlIHNhbWUgUEFUSCB0aGUgbGF1bmNoZWQgdG9vbHMgc2VlLiBUaGUgZGV0ZWN0ZWQtdG9vbHMgbGlzdFxuICogKGByZWZyZXNoQWlUb29sc2ApIHJ1bnMgdGhlIHBlci1raW5kIGNvbW1hbmQgdGhyb3VnaCBpdC5cbiAqXG4gKiBUaGUgaW5zdGFuY2UgaXMgdGhlIGNoZWNrIGZ1bmN0aW9uIGl0c2VsZiAoYGRpLmluamVjdCh0b2tlbikoKWAgeWllbGRzIGl0KSBcdTIwMTRcbiAqIGEgdjIgaW5qZWN0YWJsZSBtZW1vaXNlcyBpdHMgaW5zdGFuY2UgYnkgY2FsbCBhcmdzLCBzbyByZXR1cm5pbmcgYSBmdW5jdGlvblxuICogKHJhdGhlciB0aGFuIGEgYFByb21pc2U8Ym9vbGVhbj5gKSBrZWVwcyBldmVyeSBjaGVjayBsaXZlIGFjcm9zcyByZS1zY2Fucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmRJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmQ7XG59Pih7XG4gIGlkOiBcImFpLXRvb2wtaW5zdGFsbGVkLXZpYS1jbGktY29tbWFuZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqXG4gKiBSZS1zY2FucyBBSSB0b29sIGluc3RhbGxhdGlvbiBzdGF0ZSBhbmQgdXBkYXRlcyB7QGxpbmsgYWlUb29sc0luamVjdGlvblRva2VufS5cbiAqIEF3YWl0YWJsZSwgc28gY2FsbGVycyBjYW4gYWN0IG9uY2UgZGV0ZWN0aW9uIHNldHRsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlZnJlc2hBaVRvb2xEZXRlY3Rpb24gPSAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBleHBsaWNpdCBcInJlLXNjYW4gaW5zdGFsbGVkIEFJIHRvb2xzXCIgYWN0aW9uLiBEZXRlY3Rpb24gaXMgbmV2ZXJcbiAqIGEgc2lkZSBlZmZlY3Qgb2YgaW5qZWN0aW9uOiB0aGUgcHJlZmVyZW5jZXMgVUkgY2FsbHMgdGhpcyBvbiBtb3VudCBhbmQgZnJvbSBhXG4gKiBcIlJlZnJlc2hcIiBjb250cm9sLCBhbmQgdGhlIGxhdW5jaCBwYXRoIGF3YWl0cyBpdCBiZWZvcmUgcmVzb2x2aW5nIHRoZVxuICogZWZmZWN0aXZlIHRvb2wgXHUyMDE0IHNvIHRvb2xzIGluc3RhbGxlZC9yZW1vdmVkIHdoaWxlIExlbnMgaXMgcnVubmluZyBhcmUgcGlja2VkXG4gKiB1cCB3aXRob3V0IGEgcmVzdGFydC5cbiAqXG4gKiBTaGFwZWQgYXMgYSBmYWN0b3J5IHJldHVybmluZyB0aGUgYWN0aW9uIChsaWtlIGBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW5gKSBzb1xuICogaXQgaXMgY29uc3VtYWJsZSB2aWEgYHVzZUluamVjdGAgLyBgZGkuaW5qZWN0YCBcdTIwMTQgd2hpY2ggcmV0dXJuIHRoZSBhY3Rpb24gXHUyMDE0IGFuZFxuICogbmV2ZXIgbmVlZHMgYGluamVjdDJgIChhYnNlbnQgZnJvbSB0aGUgUmVhY3QtY29udGV4dCBESSBjb250YWluZXIpLlxuICovXG5leHBvcnQgY29uc3QgcmVmcmVzaEFpVG9vbERldGVjdGlvbkluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gUmVmcmVzaEFpVG9vbERldGVjdGlvbiB9PihcbiAge1xuICAgIGlkOiBcInJlZnJlc2gtYWktdG9vbC1kZXRlY3Rpb25cIixcbiAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgfSxcbikoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgZGlzcGxheS1uYW1lIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBBSSB0b29sIGtpbmQuICovXG5leHBvcnQgdHlwZSBBaVRvb2xOYW1lID0gKCkgPT4gUmVhY3QuQ29tcG9uZW50VHlwZTtcblxuLyoqXG4gKiBQZXIta2luZCBkaXNwbGF5IG5hbWUgZm9yIGFuIEFJIHRvb2wgXHUyMDE0IGEgUmVhY3QgY29tcG9uZW50IChub3QgYSBzdHJpbmcpLCBzb1xuICogYSB0b29sIGNhbiByZW5kZXIgYnJhbmRpbmcvbWFya3VwLiBDb250cmlidXRlIG9uZSBwZXIgdG9vbCBraW5kLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sTmFtZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sTmFtZSB9Pih7XG4gIGlkOiBcImFpLXRvb2wtbmFtZVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xOYW1lIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtbmFtZS0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHBsYWluLXRleHQgZGlzcGxheSBuYW1lIGZvciBhIGdpdmVuIEFJIHRvb2wga2luZC4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbERpc3BsYXlOYW1lID0gKCkgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFBlci1raW5kIHBsYWluLXRleHQgZGlzcGxheSBuYW1lIChlLmcuIFwiQ2xhdWRlIENvZGVcIikuIFVzZWQgYnkgc3RyaW5nLW9ubHlcbiAqIHNsb3RzIHRoYXQgY2Fubm90IHJlbmRlciB0aGUgUmVhY3QgYGFpVG9vbE5hbWVJbmplY3Rpb25Ub2tlbmAgY29tcG9uZW50IFx1MjAxNCBmb3JcbiAqIGV4YW1wbGUgdGhlIGNvbW1hbmQtcGFsZXR0ZSBlbnRyeSB0aXRsZS4gVGhlIFJlYWN0IG5hbWUgY29tcG9uZW50IGRlcml2ZXNcbiAqIGZyb20gdGhpcyBzYW1lIHZhbHVlLCBzbyB0aGUgdHdvIHN0YXkgaW4gc3luYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xEaXNwbGF5TmFtZSB9Pih7XG4gIGlkOiBcImFpLXRvb2wtZGlzcGxheS1uYW1lXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbERpc3BsYXlOYW1lIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtZGlzcGxheS1uYW1lLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCB9IGZyb20gXCIuL2FpLXRvb2xcIjtcblxuLyoqIFByb3BzIGEgdG9vbCdzIGRlc2NyaXB0aW9uIGNvbXBvbmVudCByZWNlaXZlcywgc28gaXQgY2FuIGFkYXB0IHRvIGRldGVjdGlvbiBzdGF0ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWlUb29sRGVzY3JpcHRpb25Qcm9wcyB7XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIHdhcyBkZXRlY3RlZCBhcyBpbnN0YWxsZWQ7IGxldHMgYSBkZXNjcmlwdGlvbiBzd2FwIGluIGEgXCJOb3QgZm91bmQgaW4gUEFUSFwiIG1lc3NhZ2UuICovXG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuXG4vKiogUmVzb2x2ZXMgYSBraW5kJ3MgZGVzY3JpcHRpb24gY29tcG9uZW50LiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sRGVzY3JpcHRpb24gPSAoKSA9PiBSZWFjdC5Db21wb25lbnRUeXBlPEFpVG9vbERlc2NyaXB0aW9uUHJvcHM+O1xuXG4vKipcbiAqIFBlci1raW5kIGRlc2NyaXB0aW9uIGZvciBhbiBBSSB0b29sIFx1MjAxNCBhIHNob3J0IGJsdXJiIGludHJvZHVjaW5nIHRoZSB0b29sIChlLmcuXG4gKiBcIlRoZSBjb2RpbmcgYXNzaXN0YW50IGJ5IEFudGhyb3BpY1wiKSwgc2hvd24gYXMgdGhlIHNlbGVjdG9yJ3Mgc2Vjb25kYXJ5IGxpbmUuXG4gKiBBIFJlYWN0IGNvbXBvbmVudCAobm90IGEgc3RyaW5nKSByZWNlaXZpbmcgdGhlIHRvb2wncyBkZXRlY3Rpb24gc3RhdGUsIHNvIGl0XG4gKiBtYXkgaW5jbHVkZSBtYXJrdXAvbGlua3MgYW5kIG9wdCB0byBzaG93IGEgXCJOb3QgZm91bmQgaW4gUEFUSFwiIG1lc3NhZ2UgKG9yIGFueVxuICogb3RoZXIgZ3VpZGFuY2UpIHdoZW4gdGhlIHRvb2wgaXMgbm90IGluc3RhbGxlZC4gQ29udHJpYnV0ZSBvbmUgcGVyIHRvb2wga2luZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbERlc2NyaXB0aW9uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xEZXNjcmlwdGlvbiB9Pih7XG4gIGlkOiBcImFpLXRvb2wtZGVzY3JpcHRpb25cIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sRGVzY3JpcHRpb24gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1kZXNjcmlwdGlvbi0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgU3ZnUHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvZWxlbWVudC1jb21wb25lbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgaWNvbiBjb21wb25lbnQgZm9yIGEgZ2l2ZW4gQUkgdG9vbCBraW5kLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sSWNvbiA9ICgpID0+IFJlYWN0LkNvbXBvbmVudFR5cGU8U3ZnUHJvcHM+O1xuXG4vKipcbiAqIFBlci1raW5kIGljb24gZm9yIGFuIEFJIHRvb2wgXHUyMDE0IGEgUmVhY3QgY29tcG9uZW50IChub3QgYW4gaWNvbiBuYW1lKS4gSXRcbiAqIGFjY2VwdHMgYFN2Z1Byb3BzYCBzbyBjYWxsIHNpdGVzIGNhbiBzaXplIGl0IChgJHNpemVgKSwgYnV0IGV2ZXJ5IGZpZWxkIGlzXG4gKiBvcHRpb25hbCwgc28gYSBwcm9wLWxlc3MgY29tcG9uZW50IGlzIGFzc2lnbmFibGUgdG9vLiBTaG93biBiZXNpZGUgdGhlIHRvb2wnc1xuICogbmFtZSBpbiB0aGUgc2VsZWN0b3IgYW5kIHdoZXJldmVyIHRoZSB0b29sIGlzIG9mZmVyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJY29uIH0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pY29uXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbEljb24gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pY29uLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBpY29uIGNvbXBvbmVudCBmb3IgYW4gYXJiaXRyYXJ5IEFJIHRvb2wga2luZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBnZW5lcmljIGljb24gZm9yIGtpbmRzXG4gKiB3aXRob3V0IGEgcmVnaXN0ZXJlZCBvbmUgKGUuZy4gdGhlIGN1c3RvbSBraW5kKS4gVXNlIHRoaXMgdG8gcmVuZGVyIGEgKnNwZWNpZmljKiB0b29sJ3MgaWNvbiBcdTIwMTQgZS5nLiBhblxuICogZW50cnkgcG9pbnQgdGhhdCBtdXN0IHN0YXkgb24gdGhlIHRvb2wgaXQgd2FzIGNyZWF0ZWQgZm9yIHJhdGhlciB0aGFuIGZvbGxvd2luZyB0aGUgbGl2ZSBzZWxlY3Rpb24uXG4gKiBGb3IgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0b29sLCBwcmVmZXIge0BsaW5rIGVmZmVjdGl2ZUFpVG9vbEljb25JbmplY3Rpb25Ub2tlbn0uXG4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEljb25Gb3JLaW5kID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTwoa2luZDogQWlUb29sS2luZCkgPT4gUmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz4+PjtcblxuZXhwb3J0IGNvbnN0IGFpVG9vbEljb25Gb3JLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJY29uRm9yS2luZCB9Pih7XG4gIGlkOiBcImFpLXRvb2wtaWNvbi1mb3Ita2luZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgdHlwZSBTdmdQcm9wcywgU3ZnIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuXG4vKipcbiAqIEdlbmVyaWMgZmFsbGJhY2sgaWNvbiBmb3IgYW4gQUkgdG9vbCB0aGF0IGNvbnRyaWJ1dGVzIG5vIGBJY29uYCBvZiBpdHMgb3duIChhXG4gKiB0ZXJtaW5hbCBnbHlwaCkuIFRoZSBidW5jaCBmYWN0b3J5IGZhbGxzIGJhY2sgdG8gdGhpcyBzbyB0aGUgZWZmZWN0aXZlLWljb25cbiAqIHRva2VuIG5ldmVyIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdEFpVG9vbEljb24gPSAocHJvcHM6IFN2Z1Byb3BzKSA9PiAoXG4gIDxTdmcgey4uLnByb3BzfSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICAgIDxwYXRoIGQ9XCJNMyAzYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxOGEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMkgzem0wIDJoMTh2MTRIM1Y1em0zLjUgMi41TDUgOWwyIDItMiAyIDEuNSAxLjVMMTEgMTEgNi41IDcuNXpNMTIgMTRoNXYyaC01di0yelwiIC8+XG4gIDwvU3ZnPlxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIG9yZGVyL3ByaW9yaXR5IG51bWJlciBmb3IgYSBnaXZlbiBBSSB0b29sIGtpbmQuICovXG5leHBvcnQgdHlwZSBBaVRvb2xPcmRlck51bWJlciA9ICgpID0+IG51bWJlcjtcblxuLyoqXG4gKiBQZXIta2luZCBvcmRlcmluZy9wcmlvcml0eSBmb3IgYW4gQUkgdG9vbC4gTG93ZXIgY29tZXMgZmlyc3QgaW4gdGhlIHNlbGVjdG9yO1xuICogdGhlIGxvd2VzdC1udW1iZXJlZCAqaW5zdGFsbGVkKiB0b29sIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbE9yZGVyTnVtYmVySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xPcmRlck51bWJlciB9Pih7XG4gIGlkOiBcImFpLXRvb2wtb3JkZXItbnVtYmVyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbE9yZGVyTnVtYmVyIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtb3JkZXItbnVtYmVyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCB9IGZyb20gXCIuL2FpLXRvb2xcIjtcblxuLyoqIFJlc29sdmVzIGEga2luZCdzIHNldHRpbmdzIGNvbXBvbmVudCwgc2hvd24gYmVsb3cgdGhlIHNlbGVjdG9yIHdoZW4gdGhhdCBraW5kIGlzIHNlbGVjdGVkLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sU2V0dGluZ3MgPSAoKSA9PiBSZWFjdC5Db21wb25lbnRUeXBlO1xuXG4vKipcbiAqIFBlci1raW5kIHNldHRpbmdzIFVJLCByZW5kZXJlZCBiZW5lYXRoIHRoZSBBSS10b29sIHNlbGVjdG9yIHdoZW4gdGhhdCBraW5kIGlzXG4gKiB0aGUgYWN0aXZlIHNlbGVjdGlvbi4gT3B0aW9uYWwgXHUyMDE0IG1vc3QgdG9vbHMgbmVlZCBub25lOyBlLmcuIHRoZSBcImN1c3RvbVwiIGtpbmRcbiAqIGNvbnRyaWJ1dGVzIGEgY29tbWFuZCBpbnB1dCArIGEgcnVuLWV4dGVybmFsbHkgdG9nZ2xlLiBBIFJlYWN0IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbFNldHRpbmdzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xTZXR0aW5ncyB9Pih7XG4gIGlkOiBcImFpLXRvb2wtc2V0dGluZ3NcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sU2V0dGluZ3MgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1zZXR0aW5ncy0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyBhIGtpbmQncyBpbnN0YWxsYXRpb24taW5zdHJ1Y3Rpb25zIGNvbXBvbmVudC4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9ucyA9ICgpID0+IFJlYWN0LkNvbXBvbmVudFR5cGU7XG5cbi8qKlxuICogUGVyLWtpbmQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBVSSwgcmVuZGVyZWQgYmVuZWF0aCB0aGUgQUktdG9vbCBzZWxlY3RvclxuICogd2hlbiB0aGF0IGtpbmQgaXMgZGV0ZWN0ZWQgYXMgbm90IGluc3RhbGxlZCBcdTIwMTQgc28gdGhlIHRvb2wgaXMgc2hvd24gZGlzYWJsZWRcbiAqIGluc3RlYWQgb2YgaGlkZGVuLCB3aXRoIGd1aWRhbmNlIG9uIGhvdyB0byBpbnN0YWxsIGl0LiBPcHRpb25hbDsgYSBSZWFjdFxuICogY29tcG9uZW50LCBzbyBpbnN0cnVjdGlvbnMgbWF5IGluY2x1ZGUgbGlua3MgKGUuZy4gYDxCcm93c2VyTGluaz5gKSBvciBhbnlcbiAqIG90aGVyIG1hcmt1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0luamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zO1xufT4oe1xuICBpZDogXCJhaS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnNcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtaW5zdGFsbGF0aW9uLWluc3RydWN0aW9ucy0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGluc3RydWN0aW9ucyBmaWxlbmFtZSBhIGdpdmVuIEFJIHRvb2wga2luZCByZWFkcyBmcm9tIGl0cyB3b3JraW5nIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lID0gKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBlci1raW5kIGluc3RydWN0aW9ucyBmaWxlbmFtZSBcdTIwMTQgdGhlIGZpbGUgdGhlIHRvb2wgYXV0by1kaXNjb3ZlcnMgaW4gaXRzXG4gKiB3b3JraW5nIGRpcmVjdG9yeSAoZS5nLiBgXCJDTEFVREUubWRcImAgZm9yIENsYXVkZSBDb2RlLCBgXCJHRU1JTkkubWRcImAgZm9yXG4gKiBHZW1pbmkgQ0xJKS4gVGhlIGxhdW5jaGVyIGFsd2F5cyB3cml0ZXMgdGhlIGNhbm9uaWNhbFxuICoge0BsaW5rIGFnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lfTsgd2hlbiBhIGtpbmQgZGVjbGFyZXMgYSBkaWZmZXJlbnQgZmlsZW5hbWVcbiAqIHRoZSBsYXVuY2hlciBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoYXQgZmlsZSBhcyBhbiBpbmRpcmVjdGlvbiBpbXBvcnRpbmcgdGhlXG4gKiBjYW5vbmljYWwgb25lLiBgdW5kZWZpbmVkYCBmb3Iga2luZHMgdGhhdCByZWFkIG5vIHN1Y2ggZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZTtcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWVcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdHJ1Y3Rpb25zRmlsZW5hbWUgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWUtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqIFJlc29sdmVzIHRoZSBpbmRpcmVjdGlvbiBpbnN0cnVjdGlvbnMgZmlsZW5hbWVzIHRvIHdyaXRlIGFjcm9zcyBhbGwgcmVnaXN0ZXJlZCBBSSB0b29scy4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RydWN0aW9uc0luZGlyZWN0aW9uRmlsZW5hbWVzID0gKCkgPT4gcmVhZG9ubHkgc3RyaW5nW107XG5cbi8qKlxuICogVGhlIGRpc3RpbmN0IHRvb2wtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpbGVuYW1lcyBhY3Jvc3MgKiphbGwqKiByZWdpc3RlcmVkIEFJXG4gKiB0b29sIGtpbmRzIFx1MjAxNCByZWdhcmRsZXNzIG9mIGluc3RhbGxhdGlvbiBzdGF0ZSBcdTIwMTQgZXhjbHVkaW5nIHRoZSBjYW5vbmljYWxcbiAqIHtAbGluayBhZ2VudHNJbnN0cnVjdGlvbnNGaWxlbmFtZX0uIEEgbGF1bmNoZXIgd3JpdGVzIHRoZSBjYW5vbmljYWxcbiAqIGBBR0VOVFMubWRgIHBsdXMgZWFjaCBvZiB0aGVzZSBhcyBhbiBpbmRpcmVjdGlvbiBpbXBvcnRpbmcgaXQsIHNvIHdoaWNoZXZlclxuICogdG9vbCB0aGUgdXNlciBsYXRlciBwaWNrcyBmaW5kcyBpdHMgaW5zdHJ1Y3Rpb25zIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RydWN0aW9uc0luZGlyZWN0aW9uRmlsZW5hbWVzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkZpbGVuYW1lcztcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pbnN0cnVjdGlvbnMtaW5kaXJlY3Rpb24tZmlsZW5hbWVzXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBzaGVsbFF1b3RlIH0gZnJvbSBcIkBrOHNsZW5zL3B1YmxpYy11dGlsaXRpZXNcIjtcblxuY29uc3QgcHJvbXB0UGxhY2Vob2xkZXIgPSBcIntwcm9tcHR9XCI7XG5jb25zdCBkaXJQbGFjZWhvbGRlciA9IFwie2Rpcn1cIjtcblxuY29uc3QgZXNjYXBlRm9yUmVnZXggPSAodmFsdWU6IHN0cmluZykgPT4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuXG5jb25zdCBzdWJzdGl0dXRlID0gKHRlbXBsYXRlOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5zcGxpdChwbGFjZWhvbGRlcikuam9pbihzaGVsbFF1b3RlKHZhbHVlKSk7XG4gIH1cblxuICAvLyBTdHJpcCB0aGUgcGxhY2Vob2xkZXIgYW5kIG9uZSBsZWFkaW5nIHdoaXRlc3BhY2UgcnVuLCBzbyBgY2xhdWRlIHtwcm9tcHR9YFxuICAvLyBiZWNvbWVzIGBjbGF1ZGVgLCBub3QgYGNsYXVkZSBgLlxuICBjb25zdCBzdHJpcFBhdHRlcm4gPSBuZXcgUmVnRXhwKGBcXFxccyoke2VzY2FwZUZvclJlZ2V4KHBsYWNlaG9sZGVyKX1gLCBcImdcIik7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHN0cmlwUGF0dGVybiwgXCJcIik7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMbG1Db21tYW5kT3B0aW9ucyB7XG4gIC8qKiBTZWVkZWQgaW5pdGlhbCB1c2VyIG1lc3NhZ2UsIHN1YnN0aXR1dGVkIGludG8gYHtwcm9tcHR9YC4gKi9cbiAgcHJvbXB0Pzogc3RyaW5nO1xuICAvKiogV29ya2luZyBkaXJlY3RvcnkgdGhlIGNvbW1hbmQgcnVucyBpbiwgc3Vic3RpdHV0ZWQgKHNoZWxsLWVzY2FwZWQpIGludG8gYHtkaXJ9YC4gKi9cbiAgZGlyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBmcmVlLXRleHQgTExNIGNvbW1hbmQgdGVtcGxhdGUgYnkgc3Vic3RpdHV0aW5nIHRoZSBge3Byb21wdH1gIGFuZFxuICogYHtkaXJ9YCBwbGFjZWhvbGRlcnMgd2l0aCBzaGVsbC1lc2NhcGVkIHZhbHVlcy4gVW5maWxsZWQgcGxhY2Vob2xkZXJzIChhbmQgb25lXG4gKiBsZWFkaW5nIHdoaXRlc3BhY2UgcnVuKSBhcmUgc3RyaXBwZWQuIEEgdmFsdWUgd2l0aCBubyBtYXRjaGluZyBwbGFjZWhvbGRlciBpc1xuICogc2ltcGx5IG9taXR0ZWQgXHUyMDE0IGluIHBhcnRpY3VsYXIsIGEgc2VlZGVkIHByb21wdCBpcyBOT1QgYXBwZW5kZWQgdG8gYSB0ZW1wbGF0ZVxuICogdGhhdCBvbWl0cyBge3Byb21wdH1gIChhIGNvbW1hbmQgc3VjaCBhcyBgb3BlbiAtYSBpVGVybSB7ZGlyfWAgbXVzdCBub3QgcmVjZWl2ZVxuICogdGhlIHByb21wdCBhcyBhIHN0cmF5IGFyZ3VtZW50KS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVMbG1Db21tYW5kID0gKHRlbXBsYXRlOiBzdHJpbmcsIHsgcHJvbXB0LCBkaXIgfTogUmVzb2x2ZUxsbUNvbW1hbmRPcHRpb25zID0ge30pOiBzdHJpbmcgPT4ge1xuICBsZXQgcmVzb2x2ZWQgPSBzdWJzdGl0dXRlKHRlbXBsYXRlLCBkaXJQbGFjZWhvbGRlciwgZGlyKTtcblxuICByZXNvbHZlZCA9IHN1YnN0aXR1dGUocmVzb2x2ZWQsIHByb21wdFBsYWNlaG9sZGVyLCBwcm9tcHQpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGlubmVyIGNvbW1hbmQgdG8gcnVuLCBpbnNlcnRlZCAqKnJhdyoqIChpdCBpcyBhIGZ1bGwgY29tbWFuZFxuICAgKiBsaW5lLCBub3QgYW4gYXJndW1lbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb21tYW5kIHJ1bnMgaW4uIEJ1aWxkZXJzIHF1b3RlIGl0LCBzbyBhIHBhdGggd2l0aCBzcGFjZXMgaXMgc2FmZS4gKi9cbiAgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQZXItbGF1bmNoIGVudmlyb25tZW50IHRvIGFwcGx5LiBBIGZyZXNobHktb3BlbmVkIGV4dGVybmFsIHRlcm1pbmFsIHJ1bnMgaXRzXG4gICAqIG93biBzaGVsbCB0aGF0IGRvZXMgbm90IGluaGVyaXQgdGhlIGxhdW5jaGVyJ3MgZW52LCBzbyBhIGJ1aWxkZXIgaGFzIHRvIGNhcnJ5XG4gICAqIHRoZXNlIGludG8gdGhlIGxhdW5jaGVkIGNvbW1hbmQgaXRzZWxmIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIGFtYmllbnRcbiAgICogZW52aXJvbm1lbnQuIFJlYWxpc3RpY2FsbHkgc21hbGwgKGUuZy4ganVzdCBgS1VCRUNPTkZJR2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIFRoZSB1c2VyLWNvbmZpZ3VyZWQgc2hlbGwgKHRoZSBzYW1lIFwiU2hlbGwgUGF0aFwiIHRoZSBpbi1hcHAgdGVybWluYWwgdXNlcyksIHNvXG4gICAqIHRoZSBleHRlcm5hbCB0ZXJtaW5hbCBydW5zIHRoZSBjb21tYW5kIGluIFx1MjAxNCBhbmQgZHJvcHMgdGhlIHVzZXIgaW50byBcdTIwMTQgdGhhdFxuICAgKiBzaGVsbCByYXRoZXIgdGhhbiB0aGUgT1MvdGVybWluYWwgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsOiBzdHJpbmc7XG59XG5cbi8qKiBCdWlsZHMgdGhlIGZ1bGwgaG9zdCBjb21tYW5kIHRoYXQgb3BlbnMgYGNvbW1hbmRgIGluIGEgZnJlc2ggZXh0ZXJuYWwgdGVybWluYWwgd2luZG93IGZvciBvbmUgT1MuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEJ1aWxkZXIgPSAob3B0aW9uczogRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRPcHRpb25zKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogVGhlIGhvc3QgT1MncyB7QGxpbmsgRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVyfS4gUmVnaXN0ZXJlZCBwZXItT1MgdmlhXG4gKiBgZ2V0SW5qZWN0YWJsZUZvck9wZXJhdGluZ1N5c3RlbXNgIChob3N0LW9ubHkgYCotb25seWAgdGFncyksIHNvIGluamVjdGluZyB0aGVcbiAqIHRva2VuIHlpZWxkcyB0aGUgYnVpbGRlciBmb3IgdGhlIGN1cnJlbnQgT1MgXHUyMDE0IG5vIHJ1bnRpbWUgcGxhdGZvcm0gc3dpdGNoLlxuICovXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEJ1aWxkZXI7XG59Pih7XG4gIGlkOiBcImV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmQtYnVpbGRlclwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5IH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU2hlbGxTY29wZWQgfSBmcm9tIFwiQGs4c2xlbnMvcGxhdGZvcm0tc3BlY2lmaWMtaW5qZWN0YWJsZXNcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCwgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKipcbiAqIFBlci1raW5kIGJ1aWxkZXIgZm9yIHRoZSBob3N0IGNvbW1hbmQgdGhhdCBvcGVucyBhbiBBSSB0b29sIGluIGEgZnJlc2ggZXh0ZXJuYWxcbiAqIHRlcm1pbmFsIHdpbmRvdy4gQ29udHJpYnV0ZWQgcGVyIHRvb2wgYnkgYGdldEFpVG9vbEluamVjdGFibGVCdW5jaGAgKHJlc29sdmVkXG4gKiB0byB0aGUgaG9zdCBPUydzIHZhcmlhbnQgZnJvbSB0aGUgdG9vbCdzIGBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmRgXG4gKiBwYXJhbSkuIENvbnN1bWVkIHZpYSB0aGUgZGVyaXZlZCBgc2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEluamVjdGlvblRva2VuYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwib3Blbi10b29sLWluLWV4dGVybmFsLXRlcm1pbmFsLWZvci10b29sXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPjtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPj47XG4gIH0+KHtcbiAgICBpZDogYG9wZW4tdG9vbC1pbi1leHRlcm5hbC10ZXJtaW5hbC1mb3ItdG9vbC0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnkgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBTaGVsbFNjb3BlZCB9IGZyb20gXCJAazhzbGVucy9wbGF0Zm9ybS1zcGVjaWZpYy1pbmplY3RhYmxlc1wiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kLCBHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCBkZXRlY3RzIHdoZXRoZXIgYW4gQUkgdG9vbCBpcyBpbnN0YWxsZWRcbiAqIChlLmcuIGBjb21tYW5kIC12IGNsYXVkZWAgLyBgd2hlcmUgY2xhdWRlYCkuIENvbnRyaWJ1dGVkIHBlciB0b29sIGJ5XG4gKiBgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoYCAodGhlIGhvc3QgT1MncyB2YXJpYW50IHdoZW4gdGhlIHRvb2wnc1xuICogYGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZGAgaXMgb3BlcmF0aW5nLXN5c3RlbSBzcGVjaWZpYykuIFRoZSBkZXRlY3RlZFxuICogdG9vbHMgbGlzdCBydW5zIGl0IHZpYSBgYWlUb29sSW5zdGFsbGVkVmlhQ2xpQ29tbWFuZEluamVjdGlvblRva2VuYCAoZXhpdCBjb2RlXG4gKiAwIFx1MjFEMiBpbnN0YWxsZWQpLiBOb3QgY29udHJpYnV0ZWQgZm9yIGFsd2F5cy1hdmFpbGFibGUgdG9vbHMgKGUuZy4gQ3VzdG9tKSxcbiAqIHdoaWNoIGFyZSB0aGVuIHJlcG9ydGVkIGFzIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmRcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+O1xuICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBTaGVsbFNjb3BlZDxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+PjtcbiAgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmQtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSU9ic2VydmFibGVWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5cbi8qKlxuICogVGhlIGdsb2JhbCBcIm9wZW4gQUkgdG9vbHMgaW4gYW4gZXh0ZXJuYWwgdGVybWluYWxcIiB0b2dnbGUuIFdoZW4gYHRydWVgLCB0aGVcbiAqIHNlbGVjdGVkIEFJIHRvb2wgbGF1bmNoZXMgaW4gYSBmcmVzaCBleHRlcm5hbCB0ZXJtaW5hbCB3aW5kb3cgXHUyMDE0IGJ1aWx0IGJ5IHRoZVxuICogaG9zdCBvcGVyYXRpbmcgc3lzdGVtJ3MgZXh0ZXJuYWwtdGVybWluYWwgY29tbWFuZCBidWlsZGVyIChyZXNvbHZlZCB2aWFcbiAqIGBzZWxlY3RlZEFpVG9vbEV4dGVybmFsVGVybWluYWxDb21tYW5kSW5qZWN0aW9uVG9rZW5gKSBhbmQgc3Bhd25lZCBkZXRhY2hlZCBvblxuICogdGhlIGhvc3QgXHUyMDE0IGluc3RlYWQgb2YgYSBMZW5zIHRlcm1pbmFsIHRhYi4gQXBwbGllcyB0byBldmVyeSB0b29sIChDdXN0b21cbiAqIGluY2x1ZGVkKSwgcmVwbGFjaW5nIHRoZSBmb3JtZXIgcGVyLXRvb2wgcnVucy1leHRlcm5hbGx5IGNhbGxiYWNrcy5cbiAqXG4gKiBQZXJzaXN0ZWQ7IHRoZSBib3ggbG9hZHMgYXN5bmNocm9ub3VzbHksIHNvIHRoZSB0b2tlbiByZXNvbHZlcyB0byBhIHByb21pc2VcbiAqIG9mIHRoZSBvYnNlcnZhYmxlLiBTdXBwb3J0ZWQgb24gbWFjT1MgKFRlcm1pbmFsKSwgV2luZG93cyAoV2luZG93cyBUZXJtaW5hbCksIGFuZFxuICogTGludXggKHRoZSBmaXJzdCBhdmFpbGFibGUgdGVybWluYWwgZW11bGF0b3IpLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sc09wZW5FeHRlcm5hbGx5SW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBQcm9taXNlPElPYnNlcnZhYmxlVmFsdWU8Ym9vbGVhbj4+O1xufT4oe1xuICBpZDogXCJhaS10b29scy1vcGVuLWV4dGVybmFsbHlcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGFibGUyLCBnZXRJbmplY3RhYmxlQnVuY2ggfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZHJvcERvd25NZW51SXRlbUluamVjdGlvblRva2VuLCB0eXBlIERyb3BEb3duTWVudUl0ZW0gfSBmcm9tIFwiQGs4c2xlbnMvZHJvcC1kb3duLW1lbnUtY29udHJhY3RzXCI7XG5pbXBvcnQgeyBjb21wdXRlZCwgdHlwZSBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IFN2Z1Byb3BzIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuICBBaVRvb2xLaW5kLFxuICBBaVRvb2xMaXN0RW50cnksXG4gIEdldENsaUNvbW1hbmQsXG4gIEdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZCxcbiAgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kLFxufSBmcm9tIFwiLi9haS10b29sXCI7XG5pbXBvcnQgeyBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlLCB0eXBlIE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYyB9IGZyb20gXCIuL29zLWFuZC1zaGVsbC1zcGVjaWZpY1wiO1xuaW1wb3J0IHsgYWlUb29sSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLWluamVjdGlvbi10b2tlblwiO1xuaW1wb3J0IHsgZ2V0QWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2dldC1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiO1xuaW1wb3J0IHsgZ2V0UmVzdW1lQWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2dldC1yZXN1bWUtYWktY29tbWFuZC1mb3ItdGVybWluYWxcIjtcbmltcG9ydCB7IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vZ2V0LW9wZW4tdG9vbC1pbi1leHRlcm5hbC10ZXJtaW5hbC1mb3ItdG9vbFwiO1xuaW1wb3J0IHsgZ2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9nZXQtYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmRcIjtcbmltcG9ydCB7IGFpVG9vbE5hbWVJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtbmFtZVwiO1xuaW1wb3J0IHsgYWlUb29sRGlzcGxheU5hbWVJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtZGlzcGxheS1uYW1lXCI7XG5pbXBvcnQgeyBhaVRvb2xEZXNjcmlwdGlvbkluamVjdGlvblRva2VuLCB0eXBlIEFpVG9vbERlc2NyaXB0aW9uUHJvcHMgfSBmcm9tIFwiLi9haS10b29sLWRlc2NyaXB0aW9uXCI7XG5pbXBvcnQgeyBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLWljb25cIjtcbmltcG9ydCB7IGFpVG9vbE9yZGVyTnVtYmVySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLW9yZGVyLW51bWJlclwiO1xuaW1wb3J0IHsgYWlUb29sU2V0dGluZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtc2V0dGluZ3NcIjtcbmltcG9ydCB7IGFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0luamVjdGlvblRva2VuIH0gZnJvbSBcIi4vYWktdG9vbC1pbnN0YWxsYXRpb24taW5zdHJ1Y3Rpb25zXCI7XG5pbXBvcnQgeyBhaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWVcIjtcbmltcG9ydCB7IEFpVG9vbFNlbGVjdGlvblJvdyB9IGZyb20gXCIuL2FpLXRvb2wtc2VsZWN0aW9uLXJvd1wiO1xuaW1wb3J0IHsgYWlUb29sVG9wQmFyTWVudUtpbmQsIGFpVG9vbFRvcEJhck1lbnVPcmRlck51bWJlcnMgfSBmcm9tIFwiLi9haS10b29sLXRvcC1iYXItbWVudVwiO1xuaW1wb3J0IHsgZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9kZXRlY3RlZC1haS10b29sc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEFpVG9vbEljb24gfSBmcm9tIFwiLi9kZWZhdWx0LWFpLXRvb2wtaWNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbEJ1bmNoUGFyYW1zIHtcbiAgcmVhZG9ubHkga2luZDogQWlUb29sS2luZDtcbiAgLyoqIExvd2VyIGNvbWVzIGZpcnN0OyB0aGUgbG93ZXN0LW51bWJlcmVkIGluc3RhbGxlZCB0b29sIGlzIHRoZSBkZWZhdWx0LiAqL1xuICByZWFkb25seSBvcmRlck51bWJlcjogbnVtYmVyO1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBpbi1hcHAgbGF1bmNoIGNvbW1hbmQgKGtub3dzIGhvdyB0byBwYXNzIGB7cHJvbXB0fWApLiBBIHNpbmdsZVxuICAgKiBPUy1hZ25vc3RpYyBidWlsZGVyLCBvciBvbmUgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRDbGlDb21tYW5kOiBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8R2V0Q2xpQ29tbWFuZD47XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgdGhhdCAqcmVzdW1lcyogdGhlIHRvb2wgd2hlbiBpdHMgdGFiJ3Mgc2Vzc2lvbiBpc1xuICAgKiByZS1lc3RhYmxpc2hlZCAoZS5nLiBhZnRlciBhbiBhcHAgcmVzdGFydCkgcmF0aGVyIHRoYW4gZmlyc3Qgb3BlbmVkIFx1MjAxNCBlLmcuXG4gICAqIGBjbGF1ZGUgLS1jb250aW51ZSB8fCBjbGF1ZGVgLCB3aGljaCBjb250aW51ZXMgdGhlIHByaW9yIHNlc3Npb24gYW5kIGZhbGxzXG4gICAqIGJhY2sgdG8gYSBmcmVzaCBsYXVuY2ggd2hlbiB0aGVyZSBpcyBub25lLiBBIHRvb2wgd2l0aCBubyBkZWRpY2F0ZWQgcmVzdW1lXG4gICAqIGludm9jYXRpb24gcGFzc2VzIGl0cyBsYXVuY2ggY29tbWFuZC4gVXN1YWxseSBpZ25vcmVzIGBwcm9tcHRgLiBPUy1hZ25vc3RpYyxcbiAgICogb3Igb25lIGJ1aWxkZXIgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRSZXN1bWVDbGlDb21tYW5kOiBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8R2V0Q2xpQ29tbWFuZD47XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgdG9vbCBpcyBpbnN0YWxsZWQgKGUuZy5cbiAgICogYGNvbW1hbmQgLXYgY2xhdWRlYCAvIGB3aGVyZSBjbGF1ZGVgKSwgcnVuIG9uIHRoZSBob3N0IHdpdGggZXhpdCBjb2RlIDBcbiAgICogbWVhbmluZyBpbnN0YWxsZWQuIE9TLWFnbm9zdGljLCBvciBvbmUgYnVpbGRlciBwZXIgb3BlcmF0aW5nIHN5c3RlbS4gT21pdCBmb3JcbiAgICogYW4gYWx3YXlzLWF2YWlsYWJsZSB0b29sIChlLmcuIHRoZSBmcmVlLXRleHQgQ3VzdG9tIGNvbW1hbmQpLCB3aGljaCBpcyB0aGVuXG4gICAqIHJlcG9ydGVkIGFzIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZD86IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+O1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBjb21tYW5kIHRoYXQgb3BlbnMgdGhlIHRvb2wgaW4gYSBmcmVzaCBleHRlcm5hbCB0ZXJtaW5hbCB3aW5kb3cgXHUyMDE0XG4gICAqIHR5cGljYWxseSB3cmFwcGluZyB0aGUgdG9vbCdzIGludm9jYXRpb24gd2l0aCBhIGBidWlsZHtNYWMsV2luZG93cyxMaW51eH1FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZGBcbiAgICogaGVscGVyLiBPUy1hZ25vc3RpYywgb3Igb25lIGJ1aWxkZXIgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQ6IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxHZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQ+O1xuICAvKiogQ2Fub25pY2FsIHBsYWluLXRleHQgZGlzcGxheSBuYW1lLCBlLmcuIGBcIkNsYXVkZSBDb2RlXCJgLiBEcml2ZXMgc3RyaW5nLW9ubHkgc2xvdHMgYW5kIHRoZSBkZWZhdWx0IG5hbWUgY29tcG9uZW50LiBEZWZhdWx0cyB0byBga2luZGAuICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCByaWNoIGRpc3BsYXktbmFtZSBjb21wb25lbnQ7IGRlZmF1bHRzIHRvIGEgZnJhZ21lbnQgb2YgdGhlIGRpc3BsYXkgbmFtZS4gKi9cbiAgcmVhZG9ubHkgTmFtZT86IFJlYWN0LkNvbXBvbmVudFR5cGU7XG4gIC8qKiBTaG9ydCBibHVyYiBpbnRyb2R1Y2luZyB0aGUgdG9vbCAoZS5nLiBgXCJUaGUgY29kaW5nIGFzc2lzdGFudCBieSBBbnRocm9waWNcImApLCBzaG93biBhcyB0aGUgc2VsZWN0b3IncyBzZWNvbmRhcnkgbGluZS4gUmVjZWl2ZXMgdGhlIHRvb2wncyBgaXNJbnN0YWxsZWRgIHN0YXRlIHNvIGl0IG1heSBvcHQgdG8gc2hvdyBhIFwiTm90IGZvdW5kIGluIFBBVEhcIiBtZXNzYWdlIGluc3RlYWQuIEEgY29tcG9uZW50IHNvIGl0IG1heSBpbmNsdWRlIG1hcmt1cC9saW5rcy4gRGVmYXVsdHMgdG8gbm90aGluZy4gKi9cbiAgcmVhZG9ubHkgRGVzY3JpcHRpb24/OiBSZWFjdC5Db21wb25lbnRUeXBlPEFpVG9vbERlc2NyaXB0aW9uUHJvcHM+O1xuICAvKiogSWNvbiBjb21wb25lbnQgKGRlZmF1bHRzIHRvIGEgZ2VuZXJpYyB0ZXJtaW5hbCBnbHlwaCkuIEFjY2VwdHMgYFN2Z1Byb3BzYCBzbyBjYWxsIHNpdGVzIGNhbiBzaXplIGl0LiAqL1xuICByZWFkb25seSBJY29uPzogUmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz47XG4gIC8qKiBTZXR0aW5ncyBjb21wb25lbnQgc2hvd24gYmVsb3cgdGhlIHNlbGVjdG9yIHdoZW4gdGhpcyBraW5kIGlzIHNlbGVjdGVkIChlLmcuIHRoZSBjdXN0b20gY29tbWFuZCBpbnB1dCkuICovXG4gIHJlYWRvbmx5IFNldHRpbmdzPzogUmVhY3QuQ29tcG9uZW50VHlwZTtcbiAgLyoqIEluc3RydWN0aW9ucyBzaG93biBiZWxvdyB0aGUgc2VsZWN0b3Igd2hlbiB0aGlzIGtpbmQgaXMgbm90IGluc3RhbGxlZCwgc28gaXQgYXBwZWFycyBkaXNhYmxlZCB3aXRoIGd1aWRhbmNlIGluc3RlYWQgb2YgaGlkZGVuLiBNYXkgY29udGFpbiBsaW5rcy4gKi9cbiAgcmVhZG9ubHkgSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zPzogUmVhY3QuQ29tcG9uZW50VHlwZTtcbiAgLyoqIEZpbGVuYW1lIHRoZSB0b29sIGF1dG8tZGlzY292ZXJzIGluIGl0cyB3b3JraW5nIGRpcmVjdG9yeSAoZS5nLiBgXCJDTEFVREUubWRcImApLiBPbWl0IHdoZW4gdGhlIHRvb2wgcmVhZHMgbm8gc3VjaCBmaWxlOyB0aGUgbGF1bmNoZXIgYWx3YXlzIHdyaXRlcyB0aGUgY2Fub25pY2FsIGBBR0VOVFMubWRgLiAqL1xuICByZWFkb25seSBpbnN0cnVjdGlvbnNGaWxlbmFtZT86IHN0cmluZztcbn1cblxuLy8gVGhlIHRvb2wncyBpbnN0YWxsIHN0YXRlIGFzIHRoZSBsYXN0IHNjYW4gc2F3IGl0OiB0cnVlL2ZhbHNlIG9uY2Ugc2Nhbm5lZCxcbi8vIHVuZGVmaW5lZCB3aGlsZSBubyBzY2FuIGhhcyBkZXRlcm1pbmVkIGl0IHlldC5cbmNvbnN0IGRldGVjdGVkSW5zdGFsbFN0YXRlID0gKFxuICBkZXRlY3RlZEFpVG9vbHM6IElDb21wdXRlZFZhbHVlPEFpVG9vbExpc3RFbnRyeVtdPixcbiAga2luZDogQWlUb29sS2luZCxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4gZGV0ZWN0ZWRBaVRvb2xzLmdldCgpLmZpbmQoKHRvb2wpID0+IHRvb2wua2luZCA9PT0ga2luZCk/LmlzSW5zdGFsbGVkO1xuXG4vLyBBIHRvb2wncyBvd24gb3JkZXIgbnVtYmVyIG9ubHkgcGxhY2VzIGl0IHdpdGhpbiBpdHMgYmFuZDogQ3VzdG9tIGRlY2xhcmVzXG4vLyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB0byBzb3J0IGxhc3QsIHdoaWNoIG11c3Qgbm90IGxlYWsgaW50byBsYXRlciBiYW5kcy5cbmNvbnN0IGluU2VsZWN0aW9uQmFuZCA9IChiYW5kOiBudW1iZXIsIHRvb2xPcmRlck51bWJlcjogbnVtYmVyKSA9PlxuICBiYW5kICsgTWF0aC5tYXgoMCwgTWF0aC5taW4odG9vbE9yZGVyTnVtYmVyLCBhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzLmJhbmRXaWR0aCAtIDEpKTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIHR5cGljYWwgTExNIENMSSB0b29sOiBpdHMga2luZCwgb3JkZXIsIHRoZSBjb21tYW5kcyAobGF1bmNoLCByZXN1bWUsXG4gKiBpbnN0YWxsLWNoZWNrLCBvcGVuLWV4dGVybmFsbHkpLCBkaXNwbGF5IG5hbWUsIGFuZCBpY29uLiBFYWNoIGNvbW1hbmQgbWF5IGJlIGFcbiAqIHNpbmdsZSBhZ25vc3RpYyBidWlsZGVyLCBvciB2YXJ5IHBlciBvcGVyYXRpbmcgc3lzdGVtIGFuZC9vciBzaGVsbCBcdTIwMTQgcmVnaXN0ZXJlZFxuICogdmlhIGBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlYDogdGhlIE9TIGlzIGZpbHRlcmVkIGF0IHJlZ2lzdHJhdGlvbiAoaG9zdC1vbmx5XG4gKiBgKi1vbmx5YCB0YWdzKSBhbmQgdGhlIHNoZWxsIGlzIHNlbGVjdGVkIGF0IHJ1bnRpbWUgKGByZXNvbHZlRm9yU2hlbGxgKSwgc2luY2VcbiAqIHRoZSBjb25maWd1cmVkIHNoZWxsIGlzIGFzeW5jLiBUaGUgZGV0ZWN0ZWQgdG9vbHMgbGlzdCBydW5zIHRoZSBpbnN0YWxsLWNoZWNrXG4gKiBjb21tYW5kIHZpYVxuICogYGFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmRJbmplY3Rpb25Ub2tlbmAgKG9taXQgdGhlIGNvbW1hbmQgZm9yIGFuXG4gKiBhbHdheXMtYXZhaWxhYmxlIHRvb2wpLiBCdW5kbGUgc2V2ZXJhbCB3aXRoXG4gKiBgZ2V0SW5qZWN0YWJsZUJ1bmNoKFsgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoKC4uLiksIC4uLiBdKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBaVRvb2xJbmplY3RhYmxlQnVuY2ggPSAocGFyYW1zOiBBaVRvb2xCdW5jaFBhcmFtcykgPT4ge1xuICAvLyBCdWlsdCBvbmNlIHBlciB0b29sIHNvIHRoZSBjb21wb25lbnQgcmVmcyBhcmUgc3RhYmxlIFx1MjAxNCBhIGZyZXNoIHJlZiBvbiBlYWNoXG4gIC8vIGluamVjdGlvbiB3b3VsZCByZW1vdW50IFJlYWN0IGFuZCBsb3NlIHN0YXRlLlxuICBjb25zdCBkaXNwbGF5TmFtZSA9IHBhcmFtcy5uYW1lID8/IHBhcmFtcy5raW5kO1xuICBjb25zdCBOYW1lQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlID1cbiAgICBwYXJhbXMuTmFtZSA/PyAoKCkgPT4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgZGlzcGxheU5hbWUpKTtcbiAgY29uc3QgRGVzY3JpcHRpb25Db21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8QWlUb29sRGVzY3JpcHRpb25Qcm9wcz4gPSBwYXJhbXMuRGVzY3JpcHRpb24gPz8gKCgpID0+IG51bGwpO1xuICBjb25zdCBJY29uQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFN2Z1Byb3BzPiA9IHBhcmFtcy5JY29uID8/IERlZmF1bHRBaVRvb2xJY29uO1xuICBjb25zdCBTZWxlY3Rpb25Sb3dDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGUgPSAoKSA9PlxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWlUb29sU2VsZWN0aW9uUm93LCB7IGtpbmQ6IHBhcmFtcy5raW5kIH0pO1xuICBjb25zdCBTZXR0aW5nc0NvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZSA9IHBhcmFtcy5TZXR0aW5ncyA/PyAoKCkgPT4gbnVsbCk7XG4gIGNvbnN0IEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZSA9IHBhcmFtcy5JbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMgPz8gKCgpID0+IG51bGwpO1xuXG4gIHJldHVybiBnZXRJbmplY3RhYmxlQnVuY2goe1xuICAgIGFpVG9vbDogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKTogQWlUb29sS2luZCA9PiBwYXJhbXMua2luZCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJbmplY3Rpb25Ub2tlbixcbiAgICB9KSxcblxuICAgIG9yZGVyTnVtYmVyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtb3JkZXItbnVtYmVyLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKTogbnVtYmVyID0+IHBhcmFtcy5vcmRlck51bWJlcixcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xPcmRlck51bWJlckluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBnZXRDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluamVjdGlvblRva2VuOiBnZXRBaUNvbW1hbmRGb3JUZXJtaW5hbEluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgICB2YWx1ZTogcGFyYW1zLmdldENsaUNvbW1hbmQsXG4gICAgfSksXG5cbiAgICBnZXRSZXN1bWVDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbC0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbmplY3Rpb25Ub2tlbjogZ2V0UmVzdW1lQWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgICAgdmFsdWU6IHBhcmFtcy5nZXRSZXN1bWVDbGlDb21tYW5kLFxuICAgIH0pLFxuXG4gICAgZ2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgb3Blbi10b29sLWluLWV4dGVybmFsLXRlcm1pbmFsLWZvci10b29sLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluamVjdGlvblRva2VuOiBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbEZvclRvb2xJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgICAgdmFsdWU6IHBhcmFtcy5nZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQsXG4gICAgfSksXG5cbiAgICBuYW1lOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtbmFtZS0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbnN0YW50aWF0ZTogKCkgPT4gKCkgPT4gTmFtZUNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIGRpc3BsYXlOYW1lOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtZGlzcGxheS1uYW1lLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKSA9PiBkaXNwbGF5TmFtZSxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xEaXNwbGF5TmFtZUluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBkZXNjcmlwdGlvbjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLWRlc2NyaXB0aW9uLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKSA9PiBEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xEZXNjcmlwdGlvbkluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBpY29uOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtaWNvbi0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbnN0YW50aWF0ZTogKCkgPT4gKCkgPT4gSWNvbkNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIHNldHRpbmdzOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtc2V0dGluZ3MtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBSZWFjdC5Db21wb25lbnRUeXBlID0+IFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgaW5qZWN0aW9uVG9rZW46IGFpVG9vbFNldHRpbmdzSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIGluc3RhbGxhdGlvbkluc3RydWN0aW9uczogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnMtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBSZWFjdC5Db21wb25lbnRUeXBlID0+IEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnNJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgIH0pLFxuXG4gICAgaW5zdHJ1Y3Rpb25zRmlsZW5hbWU6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWUtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gcGFyYW1zLmluc3RydWN0aW9uc0ZpbGVuYW1lLFxuICAgICAgaW5qZWN0aW9uVG9rZW46IGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIC8vIFRoZSB0b29sJ3Mgcm93cyBpbiB0aGUgQUkgdG9vbCBidXR0b24ncyBkcm9wLWRvd24gbWVudTogb25lIHBlciBiYW5kLCB0aGVcbiAgICAvLyB2aXNpYmlsaXR5IHN3aXRjaGluZyBvbiB0aGUgZGV0ZWN0ZWQgaW5zdGFsbCBzdGF0ZSBzbyB0aGUgdG9vbCBzaXRzIGluXG4gICAgLy8gd2hpY2hldmVyIGJhbmQgbWF0Y2hlcyBcdTIwMTQgYW5kIGluIG5laXRoZXIgd2hpbGUgbm8gc2NhbiBoYXMgZGV0ZXJtaW5lZCBpdC5cbiAgICAvLyBXaGF0IGEgcm93IGxvb2tzIGxpa2UgYW5kIGRvZXMgaXMgdGhlIEFpVG9vbFNlbGVjdGlvblJvdyBpbXBsZW1lbnRhdGlvbidzXG4gICAgLy8gYnVzaW5lc3MuXG4gICAgaW5zdGFsbGVkU2VsZWN0aW9uUm93OiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtc2VsZWN0aW9uLXJvdy1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkQWlUb29scyA9IGRpLmluamVjdChkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbikoKTtcblxuICAgICAgICBjb25zdCBpdGVtOiBEcm9wRG93bk1lbnVJdGVtID0ge1xuICAgICAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LWluc3RhbGxlZC0ke3BhcmFtcy5raW5kfWAsXG4gICAgICAgICAgb3JkZXJOdW1iZXI6IGluU2VsZWN0aW9uQmFuZChhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzLmluc3RhbGxlZEFpVG9vbEJhbmQsIHBhcmFtcy5vcmRlck51bWJlciksXG4gICAgICAgICAgaXNWaXNpYmxlOiBjb21wdXRlZCgoKSA9PiBkZXRlY3RlZEluc3RhbGxTdGF0ZShkZXRlY3RlZEFpVG9vbHMsIHBhcmFtcy5raW5kKSA9PT0gdHJ1ZSksXG4gICAgICAgICAgQ29tcG9uZW50OiBTZWxlY3Rpb25Sb3dDb21wb25lbnQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGl0ZW07XG4gICAgICB9LFxuXG4gICAgICBpbmplY3Rpb25Ub2tlbjogZHJvcERvd25NZW51SXRlbUluamVjdGlvblRva2VuLmZvcihhaVRvb2xUb3BCYXJNZW51S2luZCksXG4gICAgfSksXG5cbiAgICBub3RJbnN0YWxsZWRTZWxlY3Rpb25Sb3c6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LW5vdC1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkQWlUb29scyA9IGRpLmluamVjdChkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbikoKTtcblxuICAgICAgICBjb25zdCBpdGVtOiBEcm9wRG93bk1lbnVJdGVtID0ge1xuICAgICAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LW5vdC1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgICAgIG9yZGVyTnVtYmVyOiBpblNlbGVjdGlvbkJhbmQoYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVycy5ub3RJbnN0YWxsZWRBaVRvb2xCYW5kLCBwYXJhbXMub3JkZXJOdW1iZXIpLFxuICAgICAgICAgIGlzVmlzaWJsZTogY29tcHV0ZWQoKCkgPT4gZGV0ZWN0ZWRJbnN0YWxsU3RhdGUoZGV0ZWN0ZWRBaVRvb2xzLCBwYXJhbXMua2luZCkgPT09IGZhbHNlKSxcbiAgICAgICAgICBDb21wb25lbnQ6IFNlbGVjdGlvblJvd0NvbXBvbmVudCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gaXRlbTtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiBkcm9wRG93bk1lbnVJdGVtSW5qZWN0aW9uVG9rZW4uZm9yKGFpVG9vbFRvcEJhck1lbnVLaW5kKSxcbiAgICB9KSxcblxuICAgIC8vIFRoZSBpbnN0YWxsLWRldGVjdGlvbiBjb21tYW5kLCByZWdpc3RlcmVkIG9ubHkgd2hlbiB0aGUgdG9vbCBkZWNsYXJlcyBvbmU7XG4gICAgLy8gdGhlIGRldGVjdGVkLXRvb2xzIGxpc3QgcnVucyBpdCAoZXhpdCAwIFx1MjFEMiBpbnN0YWxsZWQpLiBBIHRvb2wgdGhhdCBkZWNsYXJlc1xuICAgIC8vIG5vbmUgKGUuZy4gQ3VzdG9tKSBpcyByZXBvcnRlZCBhcyBpbnN0YWxsZWQuXG4gICAgLi4uKHBhcmFtcy5nZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7XG4gICAgICAgICAgYWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgICAgICAgIGlkOiBgYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgICAgICAgaW5qZWN0aW9uVG9rZW46IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgICAgICAgICB2YWx1ZTogcGFyYW1zLmdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH0pO1xufTtcbiIsICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlLXJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWlUb29sU2VsZWN0aW9uUm93UHJvcHMge1xuICAvKiogVGhlIHRvb2wgdGhlIHJvdyByZXByZXNlbnRzLiAqL1xuICByZWFkb25seSBraW5kOiBBaVRvb2xLaW5kO1xufVxuXG4vKipcbiAqIE9uZSBBSSB0b29sJ3Mgcm93IGluIHRoZSB0b3AgYmFyIG1lbnUncyBzZWxlY3Rpb24gc2VjdGlvbjogaG93IHRoZSByb3cgbG9va3MgYW5kIHdoYXRcbiAqIGNsaWNraW5nIGl0IGRvZXMgKHNlbGVjdGluZyBhbiBpbnN0YWxsZWQgdG9vbCwgZ3VpZGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgbWlzc2luZ1xuICogb25lKS4gUmVnaXN0ZXJlZCBhZ2FpbnN0IHRoZSBtZW51IGF1dG9tYXRpY2FsbHksIHBlciB0b29sLCBieVxuICoge0BsaW5rIGdldEFpVG9vbEluamVjdGFibGVCdW5jaH07IHRoZSBmZWF0dXJlIG93bmluZyB0aGUgQUkgdG9vbCBidXR0b24gcHJvdmlkZXMgdGhlXG4gKiBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBnZW5lcmljIHBhY2thZ2Ugc3RheXMgZnJlZSBvZiBpdHMgdGVsZW1ldHJ5IGFuZCBlbnRpdGxlbWVudFxuICogY29uY2VybnMuXG4gKi9cbmV4cG9ydCBjb25zdCBBaVRvb2xTZWxlY3Rpb25Sb3cgPSBnZXRJbmplY3Rpb25Ub2tlbkNvbXBvbmVudDI8UmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8QWlUb29sU2VsZWN0aW9uUm93UHJvcHM+Pih7XG4gIGlkOiBcImFpLXRvb2wtc2VsZWN0aW9uLXJvd1wiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXREcm9wRG93bk1lbnVLaW5kIH0gZnJvbSBcIkBrOHNsZW5zL2Ryb3AtZG93bi1tZW51LWNvbnRyYWN0c1wiO1xuXG4vKipcbiAqIFRoZSBkcm9wLWRvd24gbWVudSBvZiB0aGUgdG9wIGJhcidzIEFJIHRvb2wgYnV0dG9uLiBUaGUgQUkgdG9vbCBzZWxlY3Rpb24gcm93cyBhcmVcbiAqIGNvbnRyaWJ1dGVkIGF1dG9tYXRpY2FsbHksIG9uZSBwZXIgcmVnaXN0ZXJlZCB0b29sLCBieSBgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoYCBvZlxuICogYEBrOHNsZW5zL2FpLXRvb2xzLWNvbnRyYWN0c2A7IGFueW9uZSBlbHNlIGNvbnRyaWJ1dGVzIHRoZWlyIG93biBpdGVtcyB3aXRoXG4gKiBgZ2V0RHJvcERvd25NZW51SXRlbUluamVjdGFibGVCdW5jaGAgb2YgYEBrOHNsZW5zL2Ryb3AtZG93bi1tZW51LWNvbnRyYWN0c2AgYWdhaW5zdFxuICogdGhpcyBraW5kLCBwbGFjZWQgd2l0aCB7QGxpbmsgYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVyc30uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZXhwb3J0IGRlZmF1bHQgZ2V0RHJvcERvd25NZW51SXRlbUluamVjdGFibGVCdW5jaCh7XG4gKiAgIGlkOiBcIm15LWFpLW1lbnUtaXRlbVwiLFxuICogICBraW5kOiBhaVRvb2xUb3BCYXJNZW51S2luZCxcbiAqICAgb3JkZXJOdW1iZXI6IGFpVG9vbFRvcEJhck1lbnVPcmRlck51bWJlcnMuc2VjdGlvbkVuZCArIDEwMCxcbiAqICAgQ29tcG9uZW50OiBNeU1lbnVJdGVtLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbFRvcEJhck1lbnVLaW5kID0gZ2V0RHJvcERvd25NZW51S2luZCgpKFwiYWktdG9vbC10b3AtYmFyLW1lbnVcIik7XG5cbi8qKlxuICogV2hlcmUgdGhlIEFJIHRvb2wgc2VsZWN0aW9uIHNlY3Rpb24ncyBvd24gaXRlbXMgc2l0IGluIHRoZSBidXR0b24ncyBtZW51LCBhcyB0aGVcbiAqIGJvdW5kYXJpZXMgdGhleSBhcmUgbGFpZCBvdXQgYWdhaW5zdC4gVGhlIHNlbGVjdGlvbiByb3dzIG9jY3VweSB0d28gYmFuZHMsIGVhY2hcbiAqIGBiYW5kV2lkdGhgIHdpZGUsIHNvIHRoYXQgZXZlcnkgaW5zdGFsbGVkIHRvb2wgY29tZXMgYmVmb3JlIGV2ZXJ5IG5vdC15ZXQtaW5zdGFsbGVkXG4gKiBvbmUgd2hpbGUgZWFjaCBiYW5kIHN0YXlzIHNvcnRlZCBieSB0aGUgdG9vbHMnIG93biBvcmRlciBudW1iZXJzLlxuICpcbiAqIEEgY29udHJpYnV0b3IgcGxhY2VzIGl0c2VsZiByZWxhdGl2ZSB0byB0aGVzZSByYXRoZXIgdGhhbiBhZ2FpbnN0IGEgZ3Vlc3NlZCBudW1iZXIuXG4gKiBUaGUgc2VjdGlvbiBlbmRzIGF0IHtAbGluayBzZWN0aW9uRW5kfTogaXRlbXMgY29udHJpYnV0ZWQgYWZ0ZXIgaXQgcGljayB0aGVpciBvcmRlclxuICogbnVtYmVycyBmcm9tIHRoZXJlIHVwLCBmcmFtaW5nIHRoZWlyIG93biBzZWN0aW9ucyB3aXRoIHNlcGFyYXRvcnMgdGhleSBjb250cmlidXRlXG4gKiB0aGVtc2VsdmVzLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVycyA9IHtcbiAgLyoqIFRoZSBoZWFkaW5nIGFib3ZlIHRoZSBzZWxlY3Rpb24gcm93cy4gKi9cbiAgYWlUb29sc0hlYWRlcjogMTAwLFxuICAvKiogVGhlIHNjYW5uaW5nIGluZGljYXRvciBzaG93biB3aGlsZSB0aGUgZmlyc3QgZGV0ZWN0aW9uIGhhcyBub3Qgc2V0dGxlZC4gKi9cbiAgZGV0ZWN0aW9uUGVuZGluZzogMjAwLFxuICAvKiogVGhlIGZpcnN0IG9yZGVyIG51bWJlciBvZiB0aGUgYmFuZCBob2xkaW5nIHRoZSByb3dzIG9mIGluc3RhbGxlZCB0b29scy4gKi9cbiAgaW5zdGFsbGVkQWlUb29sQmFuZDogMzAwLFxuICAvKiogVGhlIGZpcnN0IG9yZGVyIG51bWJlciBvZiB0aGUgYmFuZCBob2xkaW5nIHRoZSByb3dzIG9mIG5vdC1pbnN0YWxsZWQgdG9vbHMuICovXG4gIG5vdEluc3RhbGxlZEFpVG9vbEJhbmQ6IDQwMCxcbiAgLyoqIEhvdyB3aWRlIGVhY2ggc2VsZWN0aW9uIGJhbmQgaXMsIGFuZCBzbyBob3cgZmFyIGEgdG9vbCdzIG93biBudW1iZXIgbWF5IHJlYWNoLiAqL1xuICBiYW5kV2lkdGg6IDEwMCxcbiAgLyoqIFRoZSBmaXJzdCBvcmRlciBudW1iZXIgcGFzdCB0aGUgd2hvbGUgc2VsZWN0aW9uIHNlY3Rpb24uICovXG4gIHNlY3Rpb25FbmQ6IDUwMCxcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xMaXN0RW50cnkgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgc3luY2hyb25vdXNseSByZWFkYWJsZSBkZXRlY3RlZC10b29scyBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgRGV0ZWN0ZWRBaVRvb2xzID0gKCkgPT4gSUNvbXB1dGVkVmFsdWU8QWlUb29sTGlzdEVudHJ5W10+O1xuXG4vKipcbiAqIFRoZSBBSSB0b29scyB3aXRoIHRoZWlyIGRldGVjdGVkIGluc3RhbGwgc3RhdGUsIGFzIGEgc3luY2hyb25vdXNseSByZWFkYWJsZSByZWFjdGl2ZVxuICogbGlzdCBcdTIwMTQgdGhlIHNhbWUgc3RhdGUgYGFpVG9vbHNJbmplY3Rpb25Ub2tlbmAgZXhwb3NlcyBiZWhpbmQgYSBwcm9taXNlLCBmb3IgY29uc3VtZXJzXG4gKiB0aGF0IG5lZWQgc3luYyByZWFjdGl2aXR5IChlLmcuIHRoZSBgaXNWaXNpYmxlYCBjb21wdXRlZHMgb2YgbWVudSBpdGVtcykuIEVtcHR5IHVudGlsXG4gKiB0aGUgZmlyc3QgZXhwbGljaXQgc2NhbiAoYHJlZnJlc2hBaVRvb2xEZXRlY3Rpb25JbmplY3Rpb25Ub2tlbmApIGhhcyBydW47IGEga2luZFxuICogbWlzc2luZyBmcm9tIHRoZSBsaXN0IGhhcyBub3QgYmVlbiBzY2FubmVkIHlldC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdGVkQWlUb29sc0luamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogRGV0ZWN0ZWRBaVRvb2xzIH0+KHtcbiAgaWQ6IFwiZGV0ZWN0ZWQtYWktdG9vbHNcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sTGlzdEVudHJ5IH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHJlYWN0aXZlIGxpc3Qgb2YgYWxsIGNvbnRyaWJ1dGVkIEFJIHRvb2xzIHdpdGggaW5zdGFsbCBzdGF0ZS4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbHMgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEFpVG9vbExpc3RFbnRyeVtdPj47XG5cbi8qKlxuICogQWxsIGNvbnRyaWJ1dGVkIEFJIHRvb2wga2luZHMgdG9nZXRoZXIgd2l0aCB0aGVpciBkZXRlY3RlZCBpbnN0YWxsYXRpb25cbiAqIHN0YXRlLCBzb3J0ZWQgYnkgb3JkZXIgbnVtYmVyLiBDb25zdW1lZCBieSB0aGUgcHJlZmVyZW5jZXMgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xzIH0+KHtcbiAgaWQ6IFwiYWktdG9vbHNcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYXliZVJlc3VsdEZhY3RvcnkgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZ2V0RHJvcERvd25NZW51S2luZCB9IGZyb20gXCJAazhzbGVucy9kcm9wLWRvd24tbWVudS1jb250cmFjdHNcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKipcbiAqIFRoZSBtZW51IGEgdG9vbCdzIG93biBjb25maWd1cmF0aW9uIGlzIG9mZmVyZWQgaW4sIG9wZW5lZCBmcm9tIHRoZSB0b29sJ3Mgcm93IGluXG4gKiB0aGUgQUkgdG9vbCBidXR0b24ncyBtZW51LiBPbmUga2luZCBmb3IgZXZlcnkgdG9vbDogdGhlIHJvdyBzYXlzIHdoaWNoIHRvb2wgaXRcbiAqIG9wZW5lZCB0aGUgbWVudSBmb3IsIGFuZCB0aGUgaXRlbSByZW5kZXJzIHRoYXQgdG9vbCdzIGBTZXR0aW5nc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xDb25maWd1cmF0aW9uTWVudUtpbmQgPSBnZXREcm9wRG93bk1lbnVLaW5kPHsgcmVhZG9ubHkga2luZDogQWlUb29sS2luZCB9PigpKFxuICBcImFpLXRvb2wtY29uZmlndXJhdGlvbi1tZW51XCIsXG4pO1xuXG4vKiogUmVzb2x2ZXMgd2hldGhlciB0aGUgdG9vbCBoYXMgdGhlIGNvbmZpZ3VyYXRpb24gaXQgbmVlZHMgdG8gcnVuLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sSXNDb25maWd1cmVkID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPj47XG5cbi8qKlxuICogV2hldGhlciBhIHRvb2wgaGFzIHRoZSBjb25maWd1cmF0aW9uIGl0IG5lZWRzIHRvIHJ1biBcdTIwMTQgdGhlIEN1c3RvbSBraW5kJ3NcbiAqIGZyZWUtdGV4dCBjb21tYW5kLCBmb3IgaW5zdGFuY2UsIGlzIG5vdGhpbmcgdW50aWwgdGhlIHVzZXIgd3JpdGVzIG9uZS5cbiAqXG4gKiBSZWdpc3RlcmVkIG9ubHkgYnkgdGhlIHRvb2xzIHRoYXQgbmVlZCBjb25maWd1cmluZzsgYSB0b29sIHdpdGggbm8gcmVnaXN0cmF0aW9uXG4gKiBuZWVkcyBub25lIGFuZCBpcyBhbHdheXMgcmVhZHkuIFJlZ2lzdGVyaW5nIG9uZSBpcyBhbHNvIHdoYXQgbWFrZXMgYSBzdXJmYWNlXG4gKiBvZmZlciB0aGUgdG9vbCdzIG93biBgU2V0dGluZ3NgLCBzbyBhIHRvb2wgY2FuIGJlIGNvbmZpZ3VyZWQgd2hlcmUgaXQgaXMgcGlja2VkXG4gKiByYXRoZXIgdGhhbiBpbiBvbmUgcGxhY2UgYWxvbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJc0NvbmZpZ3VyZWQgfT4oe1xuICBpZDogXCJhaS10b29sLWlzLWNvbmZpZ3VyZWQtZm9yLWtpbmRcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJc0NvbmZpZ3VyZWQ7IG1heWJlRmFjdG9yeTogTWF5YmVSZXN1bHRGYWN0b3J5PEFpVG9vbElzQ29uZmlndXJlZD4gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pcy1jb25maWd1cmVkLWZvci1raW5kLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIixcbiAgfSkoKSxcbik7XG5cbi8qKiBXaGF0IG9uZSB0b29sIHNheXMgYWJvdXQgY29uZmlndXJhdGlvbiBvZiBpdHMgb3duLCBhcyB0aGUgc3VyZmFjZXMgdGhhdCBnYXRlIG9uIGl0IG5lZWQgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZSB7XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIGhhcyBjb25maWd1cmF0aW9uIHRvIGZpbGwgaW4gYXQgYWxsLiAqL1xuICByZWFkb25seSBpc0NvbmZpZ3VyYWJsZTogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoYXQgY29uZmlndXJhdGlvbiBpcyB0aGVyZSB5ZXQuICovXG4gIHJlYWRvbmx5IGlzQ29uZmlndXJlZDogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIG1heSBiZSBwaWNrZWQ6IGl0IGVpdGhlciBuZWVkcyBubyBjb25maWd1cmF0aW9uLCBvciBoYXMgaXQuICovXG4gIHJlYWRvbmx5IGlzUmVhZHlUb1NlbGVjdDogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG59XG5cbi8qKiBSZXNvbHZlcyBvbmUgdG9vbCdzIGNvbmZpZ3VyYXRpb24gc3RhdGUuICovXG5leHBvcnQgdHlwZSBBaVRvb2xDb25maWd1cmF0aW9uU3RhdGVGb3IgPSAoKSA9PiAoa2luZDogQWlUb29sS2luZCkgPT4gQWlUb29sQ29uZmlndXJhdGlvblN0YXRlO1xuXG4vKipcbiAqIFJlYWRzIHtAbGluayBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW59IG9uIGJlaGFsZiBvZiBldmVyeSBzdXJmYWNlXG4gKiB0aGF0IGdhdGVzIG9uIGl0IFx1MjAxNCB0aGUgQUkgdG9vbCBidXR0b24ncyBtZW51IGFuZCB0aGUgcHJlZmVyZW5jZXMgc2VsZWN0b3IgXHUyMDE0IHNvXG4gKiBvbmUgcnVsZSBpcyBub3QgZW5mb3JjZWQgaW4gb25lIHBsYWNlIGFuZCBtaXNzZWQgaW4gYW5vdGhlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogQWlUb29sQ29uZmlndXJhdGlvblN0YXRlRm9yO1xufT4oe1xuICBpZDogXCJhaS10b29sLWNvbmZpZ3VyYXRpb24tc3RhdGVcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlLCBJT2JzZXJ2YWJsZVZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBTdmdQcm9wcyB9IGZyb20gXCJAazhzbGVucy9lbGVtZW50LWNvbXBvbmVudHNcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCwgR2V0Q2xpQ29tbWFuZCwgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHBlcnNpc3RlZCByYXcgc2VsZWN0aW9uOiBhIHRvb2wga2luZCwgYGN1c3RvbUFpVG9vbEtpbmRgLCBgbm9BaVRvb2xLaW5kYCwgb3IgYHVuZGVmaW5lZGAgKHVuc2V0KS4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdGVkQWlUb29sS2luZCA9ICgpID0+IFByb21pc2U8SU9ic2VydmFibGVWYWx1ZTxBaVRvb2xLaW5kIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogVGhlIHVzZXIncyBwZXJzaXN0ZWQgQUkgdG9vbCBzZWxlY3Rpb24uIEhvbGRzIGEgY29udHJpYnV0ZWQgdG9vbCBraW5kLCB0aGVcbiAqIGBjdXN0b21BaVRvb2xLaW5kYCBzZW50aW5lbCwgdGhlIGBub0FpVG9vbEtpbmRgIG9wdC1vdXQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmV2ZXJcbiAqIHNldC4gUmVhZC93cml0ZSBcdTIwMTQgdGhlIHByZWZlcmVuY2VzIHNlbGVjdG9yIGJpbmRzIHRvIGl0LlxuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRBaVRvb2xLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBTZWxlY3RlZEFpVG9vbEtpbmQgfT4oe1xuICBpZDogXCJzZWxlY3RlZC1haS10b29sLWtpbmRcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSBzZWxlY3Rpb246IHRoZSByYXcgc2VsZWN0aW9uIGlmIGluc3RhbGxlZCwgZWxzZSBgbm9BaVRvb2xLaW5kYC4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbEtpbmQgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEFpVG9vbEtpbmQ+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIEFJIHRvb2wga2luZDogdGhlIHJhdyBzZWxlY3Rpb24gd2hlbiBpdCBpcyBhbiBpbnN0YWxsZWQga2luZCAoYVxuICogcmVhbCB0b29sIG9yIGBjdXN0b21BaVRvb2xLaW5kYCksIG90aGVyd2lzZSBgbm9BaVRvb2xLaW5kYC4gU28gYW4gdW5zZXRcbiAqIHNlbGVjdGlvbiwgYW4gZXhwbGljaXQgXCJObyBBSSB0b29sXCIsIGFuZCBhIHNlbGVjdGVkLWJ1dC11bmluc3RhbGxlZCB0b29sIGFsbFxuICogcmVzb2x2ZSB0byBgbm9BaVRvb2xLaW5kYCBcdTIwMTQgdGhlIGRlZmF1bHQgYW5kIHRoZSBmYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IGVmZmVjdGl2ZUFpVG9vbEtpbmRJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEVmZmVjdGl2ZUFpVG9vbEtpbmQgfT4oe1xuICBpZDogXCJlZmZlY3RpdmUtYWktdG9vbC1raW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgY29tbWFuZCBidWlsZGVyLCBvciBgdW5kZWZpbmVkYCB3aGVuIEN1c3RvbSBvciBcIk5vIEFJIHRvb2xcIiBpcyBlZmZlY3RpdmUuICovXG5leHBvcnQgdHlwZSBTZWxlY3RlZEFpVG9vbENvbW1hbmQgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEdldENsaUNvbW1hbmQgfCB1bmRlZmluZWQ+PjtcblxuLyoqXG4gKiBUaGUgY29tbWFuZCBidWlsZGVyIGZvciB0aGUgZWZmZWN0aXZlIHNlbGVjdGlvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVcbiAqIGVmZmVjdGl2ZSBzZWxlY3Rpb24gaXMgYGN1c3RvbUFpVG9vbEtpbmRgICh0aGUgY29uc3VtZXIgdGhlbiB1c2VzIGl0cyBvd25cbiAqIGZyZWUtdGV4dCBjb21tYW5kKSBvciBgbm9BaVRvb2xLaW5kYCAobm90aGluZyB0byBsYXVuY2gpLiBDb25zdW1lZCB3aGVuXG4gKiBsYXVuY2hpbmcgYW4gQUkgdG9vbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQWlUb29sQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xDb21tYW5kIH0+KHtcbiAgaWQ6IFwic2VsZWN0ZWQtYWktdG9vbC1jb21tYW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIHJlc3VtZSBjb21tYW5kIGJ1aWxkZXIsIG9yIGB1bmRlZmluZWRgIHdoZW4gaXQgaGFzIG5vIHJlc3VtZSBpbnZvY2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxHZXRDbGlDb21tYW5kIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogVGhlIGNvbW1hbmQgYnVpbGRlciB0aGF0ICpyZXN1bWVzKiB0aGUgZWZmZWN0aXZlIHNlbGVjdGlvbiAoZS5nLiBidWlsZGluZ1xuICogYGNsYXVkZSAtLWNvbnRpbnVlIHx8IGNsYXVkZWApLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlZmZlY3RpdmUgdG9vbCBkZWNsYXJlcyBub1xuICogcmVzdW1lIGludm9jYXRpb24uIENvbnN1bWVkIHdoZW4gcmUtZXN0YWJsaXNoaW5nIGFuIEFJIHRvb2wncyBzZXNzaW9uIFx1MjAxNCBhXG4gKiB0ZXJtaW5hbCB0YWIgcnVucyB0aGlzIGluc3RlYWQgb2YgdGhlIGxhdW5jaCBjb21tYW5kIGFmdGVyIGEgcmVzdGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQWlUb29sUmVzdW1lQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kO1xufT4oe1xuICBpZDogXCJzZWxlY3RlZC1haS10b29sLXJlc3VtZS1jb21tYW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIFwib3BlbiBpbiBleHRlcm5hbCB0ZXJtaW5hbFwiIGNvbW1hbmQgYnVpbGRlciBmb3IgdGhlIGhvc3QgT1MuICovXG5leHBvcnQgdHlwZSBTZWxlY3RlZEFpVG9vbE9wZW5JbkV4dGVybmFsVGVybWluYWxDb21tYW5kID0gKCkgPT4gUHJvbWlzZTxcbiAgSUNvbXB1dGVkVmFsdWU8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIHwgdW5kZWZpbmVkPlxuPjtcblxuLyoqXG4gKiBUaGUgY29tbWFuZCBidWlsZGVyIHRoYXQgb3BlbnMgdGhlIGVmZmVjdGl2ZSBzZWxlY3RlZCB0b29sIGluIGEgZnJlc2ggZXh0ZXJuYWxcbiAqIHRlcm1pbmFsIHdpbmRvdywgZm9yIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIENvbnN1bWVkIHdoZW4gdGhlIGdsb2JhbCBcIm9wZW5cbiAqIEFJIHRvb2xzIGluIGFuIGV4dGVybmFsIHRlcm1pbmFsXCIgdG9nZ2xlIGlzIG9uIFx1MjAxNCB0aGUgY29uc3VtZXIgY2FsbHMgaXQgd2l0aFxuICogYHsgcHJvbXB0LCBkaXIsIGVudiB9YCBhbmQgc3Bhd25zIHRoZSByZXN1bHQgZGV0YWNoZWQuIFJlc29sdmVzIHRoZSB0b29sJ3NcbiAqIGhvc3QtT1MgdmFyaWFudCAobWFjT1MgVGVybWluYWwsIFdpbmRvd3MgVGVybWluYWwsIG9yIGEgTGludXggZmFsbGJhY2sgY2hhaW4pIHZpYVxuICogdGhlIHBlci1raW5kIGBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbEZvclRvb2xgIHRva2VuLlxuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZDtcbn0+KHtcbiAgaWQ6IFwic2VsZWN0ZWQtYWktdG9vbC1vcGVuLWluLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmRcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSB0b29sJ3MgZGlzcGxheS1uYW1lIFJlYWN0IGNvbXBvbmVudC4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbE5hbWUgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPFJlYWN0LkNvbXBvbmVudFR5cGU+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBkaXNwbGF5LW5hbWUgY29tcG9uZW50IChlLmcuIHJlbmRlcnMgXCJDbGF1ZGVcbiAqIENvZGVcIikuIERyaXZlcyB0aGUgUmVhY3Qgc3VyZmFjZXMgdGhhdCBuYW1lIHRoZSBBSSB0b29sIFx1MjAxNCBcIkFzayA8bmFtZT5cIlxuICogYnV0dG9ucyBhbmQgdGhlIHRvcC1iYXIgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBlZmZlY3RpdmVBaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xOYW1lIH0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtbmFtZVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG5cbi8qKiBSZXNvbHZlcyB0aGUgZWZmZWN0aXZlIHRvb2wncyBwbGFpbi10ZXh0IGRpc3BsYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxzdHJpbmc+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBwbGFpbi10ZXh0IG5hbWUsIGZvciBzdHJpbmctb25seSBzbG90cyB0aGF0XG4gKiBjYW5ub3QgcmVuZGVyIHRoZSBSZWFjdCBuYW1lIGNvbXBvbmVudCAoZS5nLiB0aGUgY29tbWFuZC1wYWxldHRlIGVudHJ5IHRpdGxlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xEaXNwbGF5TmFtZTtcbn0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtZGlzcGxheS1uYW1lXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIGljb24gY29tcG9uZW50LiAqL1xuZXhwb3J0IHR5cGUgRWZmZWN0aXZlQWlUb29sSWNvbiA9ICgpID0+IFByb21pc2U8SUNvbXB1dGVkVmFsdWU8UmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz4+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBpY29uIGNvbXBvbmVudCwgc2hvd24gd2hlcmV2ZXIgdGhlIHRvb2wgaXMgb2ZmZXJlZFxuICogKHRoZSBcIkFzayA8bmFtZT5cIiBidXR0b25zIGFuZCB0aGUgdG9wLWJhciBidXR0b24pIGluIHBsYWNlIG9mIGEgZml4ZWQgYnJhbmRcbiAqIGljb24uXG4gKi9cbmV4cG9ydCBjb25zdCBlZmZlY3RpdmVBaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xJY29uIH0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtaWNvblwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QUNmLENBQUMsRUFBRTtBQVdJLElBQU0sd0NBQW9DLHdDQUEyRDtBQUFBLEVBQzFHLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDLEVBQUU7QUFXSSxJQUFNLDBDQUFzQyx3Q0FBNkQ7QUFBQSxFQUM5RyxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBV0ksSUFBTSxnREFBNEMsd0NBRXREO0FBQUEsRUFDRCxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBZUksSUFBTSxnRUFBNEQsd0NBRXRFO0FBQUEsRUFDRCxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBVUksSUFBTSx3Q0FBb0Msd0NBQTJEO0FBQUEsRUFDMUcsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUNmLENBQUMsRUFBRTtBQVNJLElBQU0sK0NBQTJDLHdDQUVyRDtBQUFBLEVBQ0QsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUNmLENBQUMsRUFBRTtBQVVJLElBQU0sd0NBQW9DLHdDQUEyRDtBQUFBLEVBQzFHLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDLEVBQUU7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9wdWJsaWNfdXRpbGl0aWVzIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9kcm9wX2Rvd25fbWVudV9jb250cmFjdHMiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiUmVhY3QiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiaW1wb3J0X2Ryb3BfZG93bl9tZW51X2NvbnRyYWN0cyIsICJpbXBvcnRfaW5qZWN0YWJsZSJdCn0K
642
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2FpLXRvb2wudHMiLCAiLi4vc3JjL2FpLXRvb2wtaXMtY29uZmlndXJlZC50cyIsICIuLi9zcmMvb3MtYW5kLXNoZWxsLXNwZWNpZmljLnRzIiwgIi4uL3NyYy9jdXJyZW50LXNoZWxsLWZhbWlseS50cyIsICIuLi9zcmMvYWktdG9vbC1pbmplY3Rpb24tdG9rZW4udHMiLCAiLi4vc3JjL2dldC1haS1jb21tYW5kLWZvci10ZXJtaW5hbC50cyIsICIuLi9zcmMvZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbC50cyIsICIuLi9zcmMvYWktdG9vbC1pbnN0YWxsZWQtdmlhLWNsaS1jb21tYW5kLnRzIiwgIi4uL3NyYy9haS10b29sLWRldGVjdGlvbi50cyIsICIuLi9zcmMvYWktdG9vbC1uYW1lLnRzIiwgIi4uL3NyYy9haS10b29sLWRpc3BsYXktbmFtZS50cyIsICIuLi9zcmMvYWktdG9vbC1kZXNjcmlwdGlvbi50cyIsICIuLi9zcmMvYWktdG9vbC1pY29uLnRzIiwgIi4uL3NyYy9kZWZhdWx0LWFpLXRvb2wtaWNvbi50c3giLCAiLi4vc3JjL2FpLXRvb2wtb3JkZXItbnVtYmVyLnRzIiwgIi4uL3NyYy9haS10b29sLXNldHRpbmdzLnRzIiwgIi4uL3NyYy9haS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnMudHMiLCAiLi4vc3JjL2FpLXRvb2wtaW5zdHJ1Y3Rpb25zLWZpbGVuYW1lLnRzIiwgIi4uL3NyYy9haS10b29sLWluc3RydWN0aW9ucy1maWxlbmFtZXMudHMiLCAiLi4vc3JjL3Jlc29sdmUtbGxtLWNvbW1hbmQudHMiLCAiLi4vc3JjL2J1aWxkLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmQudHMiLCAiLi4vc3JjL2dldC1vcGVuLXRvb2wtaW4tZXh0ZXJuYWwtdGVybWluYWwtZm9yLXRvb2wudHMiLCAiLi4vc3JjL2dldC1haS10b29sLWlzLWluc3RhbGxlZC1jbGktY29tbWFuZC50cyIsICIuLi9zcmMvYWktdG9vbHMtb3Blbi1leHRlcm5hbGx5LnRzIiwgIi4uL3NyYy9nZXQtYWktdG9vbC1pbmplY3RhYmxlLWJ1bmNoLnRzIiwgIi4uL3NyYy9haS10b29sLXNlbGVjdGlvbi1yb3cudHMiLCAiLi4vc3JjL2FpLXRvb2wtdG9wLWJhci1tZW51LnRzIiwgIi4uL3NyYy9kZXRlY3RlZC1haS10b29scy50cyIsICIuLi9zcmMvYWktdG9vbHMtaW5qZWN0aW9uLXRva2VuLnRzIiwgIi4uL3NyYy9haS10b29sLWNvbmZpZ3VyYXRpb24udHMiLCAiLi4vc3JjL3NlbGVjdGVkLWFpLXRvb2wtaW5qZWN0aW9uLXRva2Vucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHtcbiAgdHlwZSBBaVRvb2xLaW5kLFxuICBjdXN0b21BaVRvb2xLaW5kLFxuICBub0FpVG9vbEtpbmQsXG4gIGFnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lLFxuICBhZ2VudHNJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkNvbnRlbnRzLFxuICB0eXBlIEdldENsaUNvbW1hbmQsXG4gIHR5cGUgR2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kLFxuICB0eXBlIEdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsQ2xpQ29tbWFuZCxcbiAgdHlwZSBBaVRvb2xMaXN0RW50cnksXG59IGZyb20gXCIuL3NyYy9haS10b29sXCI7XG5leHBvcnQgeyBhaVRvb2xJc0NvbmZpZ3VyZWRJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9haS10b29sLWlzLWNvbmZpZ3VyZWRcIjtcbmV4cG9ydCB0eXBlIHtcbiAgT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWMsXG4gIE1heWJlT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWMsXG59IGZyb20gXCIuL3NyYy9vcGVyYXRpbmctc3lzdGVtLXNwZWNpZmljXCI7XG5leHBvcnQge1xuICB0eXBlIFNoZWxsU3BlY2lmaWMsXG4gIHR5cGUgTWF5YmVTaGVsbFNwZWNpZmljLFxuICB0eXBlIE9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWMsXG4gIHR5cGUgTWF5YmVPcGVyYXRpbmdTeXN0ZW1BbmRTaGVsbFNwZWNpZmljLFxuICBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlLFxufSBmcm9tIFwiLi9zcmMvb3MtYW5kLXNoZWxsLXNwZWNpZmljXCI7XG5leHBvcnQgeyBjdXJyZW50U2hlbGxGYW1pbHlJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9jdXJyZW50LXNoZWxsLWZhbWlseVwiO1xuXG5leHBvcnQgeyBhaVRvb2xJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9haS10b29sLWluamVjdGlvbi10b2tlblwiO1xuZXhwb3J0IHsgZ2V0QWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3NyYy9nZXQtYWktY29tbWFuZC1mb3ItdGVybWluYWxcIjtcbmV4cG9ydCB7IGdldFJlc3VtZUFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9zcmMvZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiO1xuZXhwb3J0IHtcbiAgYWlUb29sSW5zdGFsbGVkVmlhQ2xpQ29tbWFuZEluamVjdGlvblRva2VuLFxuICB0eXBlIEFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmQsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RhbGxlZC12aWEtY2xpLWNvbW1hbmRcIjtcbmV4cG9ydCB7IHJlZnJlc2hBaVRvb2xEZXRlY3Rpb25JbmplY3Rpb25Ub2tlbiwgdHlwZSBSZWZyZXNoQWlUb29sRGV0ZWN0aW9uIH0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtZGV0ZWN0aW9uXCI7XG5leHBvcnQgeyBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4sIHR5cGUgQWlUb29sTmFtZSB9IGZyb20gXCIuL3NyYy9haS10b29sLW5hbWVcIjtcbmV4cG9ydCB7IGFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4sIHR5cGUgQWlUb29sRGlzcGxheU5hbWUgfSBmcm9tIFwiLi9zcmMvYWktdG9vbC1kaXNwbGF5LW5hbWVcIjtcbmV4cG9ydCB7XG4gIGFpVG9vbERlc2NyaXB0aW9uSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sRGVzY3JpcHRpb24sXG4gIHR5cGUgQWlUb29sRGVzY3JpcHRpb25Qcm9wcyxcbn0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtZGVzY3JpcHRpb25cIjtcbmV4cG9ydCB7XG4gIGFpVG9vbEljb25JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJY29uLFxuICBhaVRvb2xJY29uRm9yS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIEFpVG9vbEljb25Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvYWktdG9vbC1pY29uXCI7XG5leHBvcnQgeyBEZWZhdWx0QWlUb29sSWNvbiB9IGZyb20gXCIuL3NyYy9kZWZhdWx0LWFpLXRvb2wtaWNvblwiO1xuZXhwb3J0IHsgYWlUb29sT3JkZXJOdW1iZXJJbmplY3Rpb25Ub2tlbiwgdHlwZSBBaVRvb2xPcmRlck51bWJlciB9IGZyb20gXCIuL3NyYy9haS10b29sLW9yZGVyLW51bWJlclwiO1xuZXhwb3J0IHsgYWlUb29sU2V0dGluZ3NJbmplY3Rpb25Ub2tlbiwgdHlwZSBBaVRvb2xTZXR0aW5ncyB9IGZyb20gXCIuL3NyYy9haS10b29sLXNldHRpbmdzXCI7XG5leHBvcnQge1xuICBhaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnNJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnNcIjtcbmV4cG9ydCB7XG4gIGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sSW5zdHJ1Y3Rpb25zRmlsZW5hbWUsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWluc3RydWN0aW9ucy1maWxlbmFtZVwiO1xuZXhwb3J0IHtcbiAgYWlUb29sSW5zdHJ1Y3Rpb25zSW5kaXJlY3Rpb25GaWxlbmFtZXNJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBBaVRvb2xJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkZpbGVuYW1lcyxcbn0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtaW5zdHJ1Y3Rpb25zLWZpbGVuYW1lc1wiO1xuZXhwb3J0IHsgcmVzb2x2ZUxsbUNvbW1hbmQsIHR5cGUgUmVzb2x2ZUxsbUNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUtbGxtLWNvbW1hbmRcIjtcbi8vIEdlbmVyaWMgc2hlbGwgZXNjYXBpbmcsIGRlZmluZWQgd2l0aCB0aGUgb3RoZXIgc2hlbGwgaGVscGVycyBpblxuLy8gQGs4c2xlbnMvcHVibGljLXV0aWxpdGllczsgcmUtZXhwb3J0ZWQgc28gZXhpc3RpbmcgaW1wb3J0ZXJzIGFyZSB1bmFmZmVjdGVkLlxuZXhwb3J0IHsgc2hlbGxRdW90ZSwgd2luZG93c1NoZWxsUXVvdGUgfSBmcm9tIFwiQGs4c2xlbnMvcHVibGljLXV0aWxpdGllc1wiO1xuZXhwb3J0IHtcbiAgZXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRPcHRpb25zLFxuICB0eXBlIEV4dGVybmFsVGVybWluYWxDb21tYW5kQnVpbGRlcixcbn0gZnJvbSBcIi4vc3JjL2J1aWxkLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmRcIjtcbmV4cG9ydCB7IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vc3JjL2dldC1vcGVuLXRvb2wtaW4tZXh0ZXJuYWwtdGVybWluYWwtZm9yLXRvb2xcIjtcbmV4cG9ydCB7IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vc3JjL2dldC1haS10b29sLWlzLWluc3RhbGxlZC1jbGktY29tbWFuZFwiO1xuZXhwb3J0IHsgYWlUb29sc09wZW5FeHRlcm5hbGx5SW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9zcmMvYWktdG9vbHMtb3Blbi1leHRlcm5hbGx5XCI7XG5leHBvcnQgeyBnZXRBaVRvb2xJbmplY3RhYmxlQnVuY2gsIHR5cGUgQWlUb29sQnVuY2hQYXJhbXMgfSBmcm9tIFwiLi9zcmMvZ2V0LWFpLXRvb2wtaW5qZWN0YWJsZS1idW5jaFwiO1xuZXhwb3J0IHsgYWlUb29sc0luamVjdGlvblRva2VuLCB0eXBlIEFpVG9vbHMgfSBmcm9tIFwiLi9zcmMvYWktdG9vbHMtaW5qZWN0aW9uLXRva2VuXCI7XG5leHBvcnQgeyBkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbiwgdHlwZSBEZXRlY3RlZEFpVG9vbHMgfSBmcm9tIFwiLi9zcmMvZGV0ZWN0ZWQtYWktdG9vbHNcIjtcbmV4cG9ydCB7IGFpVG9vbFRvcEJhck1lbnVLaW5kLCBhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzIH0gZnJvbSBcIi4vc3JjL2FpLXRvb2wtdG9wLWJhci1tZW51XCI7XG5leHBvcnQge1xuICBhaVRvb2xDb25maWd1cmF0aW9uTWVudUtpbmQsXG4gIGFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUluamVjdGlvblRva2VuLFxuICBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWlUb29sQ29uZmlndXJhdGlvblN0YXRlLFxuICB0eXBlIEFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUZvcixcbiAgdHlwZSBBaVRvb2xJc0NvbmZpZ3VyZWQsXG59IGZyb20gXCIuL3NyYy9haS10b29sLWNvbmZpZ3VyYXRpb25cIjtcbmV4cG9ydCB7IEFpVG9vbFNlbGVjdGlvblJvdywgdHlwZSBBaVRvb2xTZWxlY3Rpb25Sb3dQcm9wcyB9IGZyb20gXCIuL3NyYy9haS10b29sLXNlbGVjdGlvbi1yb3dcIjtcbmV4cG9ydCB7XG4gIHNlbGVjdGVkQWlUb29sS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIFNlbGVjdGVkQWlUb29sS2luZCxcbiAgZWZmZWN0aXZlQWlUb29sS2luZEluamVjdGlvblRva2VuLFxuICB0eXBlIEVmZmVjdGl2ZUFpVG9vbEtpbmQsXG4gIHNlbGVjdGVkQWlUb29sQ29tbWFuZEluamVjdGlvblRva2VuLFxuICB0eXBlIFNlbGVjdGVkQWlUb29sQ29tbWFuZCxcbiAgc2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kLFxuICBzZWxlY3RlZEFpVG9vbE9wZW5JbkV4dGVybmFsVGVybWluYWxDb21tYW5kSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgU2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZCxcbiAgZWZmZWN0aXZlQWlUb29sTmFtZUluamVjdGlvblRva2VuLFxuICB0eXBlIEVmZmVjdGl2ZUFpVG9vbE5hbWUsXG4gIGVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgRWZmZWN0aXZlQWlUb29sRGlzcGxheU5hbWUsXG4gIGVmZmVjdGl2ZUFpVG9vbEljb25JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBFZmZlY3RpdmVBaVRvb2xJY29uLFxufSBmcm9tIFwiLi9zcmMvc2VsZWN0ZWQtYWktdG9vbC1pbmplY3Rpb24tdG9rZW5zXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBDb25zdW1wdGlvbkRpLCBEaUNvbnRhaW5lckZvckluamVjdGlvbiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5cbi8qKiBJZGVudGlmaWVyIGZvciBhIGtpbmQgb2YgQUkgQ0xJIHRvb2wsIGUuZy4gYFwiY2xhdWRlXCJgLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sS2luZCA9IHN0cmluZztcblxuLyoqIFRoZSBwc2V1ZG8ta2luZCBmb3IgdGhlIHVzZXIncyBmcmVlLXRleHQgXCJDdXN0b21cIiBjb21tYW5kLiAqL1xuZXhwb3J0IGNvbnN0IGN1c3RvbUFpVG9vbEtpbmQ6IEFpVG9vbEtpbmQgPSBcImN1c3RvbVwiO1xuXG4vKipcbiAqIFRoZSBwc2V1ZG8ta2luZCBmb3IgXCJObyBBSSB0b29sXCIgXHUyMDE0IHRoZSBleHBsaWNpdCBvcHQtb3V0LCBhbmQgdGhlIGRlZmF1bHQvZmFsbGJhY2tcbiAqIGVmZmVjdGl2ZSBraW5kLiBJdCBpcyBub3QgYSByZWdpc3RlcmVkIHRvb2w6IHdoZW4gaXQgaXMgdGhlIGVmZmVjdGl2ZSBzZWxlY3Rpb24sXG4gKiBMZW5zIGxhdW5jaGVzIG5vdGhpbmcgYW5kIHRoZSBBSSBzdXJmYWNlcyBoaWRlICh0aGUgdG9wLWJhciBidXR0b24gYmVjb21lc1xuICogXCJDb25maWd1cmUgQUlcIikuIFRoZSBlZmZlY3RpdmUga2luZCByZXNvbHZlcyB0byB0aGlzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gaXNcbiAqIHVuc2V0LCBzZXQgdG8gdGhpcyBzZW50aW5lbCwgb3Igc2V0IHRvIGEgdG9vbCB0aGF0IGlzIG5vdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBub0FpVG9vbEtpbmQ6IEFpVG9vbEtpbmQgPSBcIm5vbmVcIjtcblxuLyoqXG4gKiBUaGUgY2Fub25pY2FsIGFnZW50LWluc3RydWN0aW9ucyBmaWxlbmFtZSwgd3JpdHRlbiBpbnRvIGV2ZXJ5IEFJIHRvb2wgdGFiJ3NcbiAqIHdvcmtpbmcgZGlyZWN0b3J5LiBUb29scyB0aGF0IHJlYWQgYSBkaWZmZXJlbnRseS1uYW1lZCBmaWxlIChzZWVcbiAqIHtAbGluayBBaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZX0pIGdldCB0aGF0IGZpbGUgdG9vLCBhcyBhbiBpbmRpcmVjdGlvblxuICogaW1wb3J0aW5nIHRoaXMgb25lLlxuICovXG5leHBvcnQgY29uc3QgYWdlbnRzSW5zdHJ1Y3Rpb25zRmlsZW5hbWUgPSBcIkFHRU5UUy5tZFwiO1xuXG4vKipcbiAqIFRoZSBjb250ZW50cyBvZiBhIHRvb2wtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpbGUgKGUuZy4gYENMQVVERS5tZGApOiBhIHNpbmdsZVxuICogbGluZSBpbXBvcnRpbmcgdGhlIGNhbm9uaWNhbCB7QGxpbmsgYWdlbnRzSW5zdHJ1Y3Rpb25zRmlsZW5hbWV9LCBzbyBhIHRvb2wgdGhhdFxuICogcmVhZHMgaXRzIG93biBmaWxlbmFtZSBzdGlsbCBwaWNrcyB1cCB0aGUgaW5zdHJ1Y3Rpb25zIHdyaXR0ZW4gdGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhZ2VudHNJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkNvbnRlbnRzID0gYEAke2FnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lfVxcbmA7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzaGVsbCBjb21tYW5kIHRoYXQgbGF1bmNoZXMgYW4gQUkgQ0xJIHRvb2wgaW4gYSB0ZXJtaW5hbC4gQW4gYXN5bmNcbiAqIGNhbGxiYWNrIHJlY2VpdmluZyB0aGUgREkgY29udGFpbmVyLCBzbyBhIHRvb2wgY2FuIGluamVjdCAoYW5kIGF3YWl0KSB3aGF0ZXZlclxuICogaXQgbmVlZHMgd2hpbGUgYXNzZW1ibGluZyBpdHMgY29tbWFuZC4gYGRpcmAgaXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZVxuICogY29tbWFuZCBydW5zIGluOyB0aGUgbGF1bmNoZXIgaGFzIGFscmVhZHkgd3JpdHRlbiB0aGUgY2x1c3RlciBjb250ZXh0IHRoZXJlIGFzXG4gKiBgQUdFTlRTLm1kYCAocGx1cyBwZXItdG9vbCBpbmRpcmVjdGlvbiBmaWxlcyksIHNvIHRvb2xzIGRpc2NvdmVyIGl0IGZyb20gY3dkLlxuICovXG5leHBvcnQgdHlwZSBHZXRDbGlDb21tYW5kID0gKGRpOiBEaUNvbnRhaW5lckZvckluamVjdGlvbiwgYXJnczogeyBwcm9tcHQ/OiBzdHJpbmc7IGRpcjogc3RyaW5nIH0pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGhvc3QgY29tbWFuZCB0aGF0IGNoZWNrcyB3aGV0aGVyIGFuIEFJIHRvb2wgaXMgaW5zdGFsbGVkIChlLmcuXG4gKiBgY29tbWFuZCAtdiBjbGF1ZGVgIC8gYHdoZXJlIGNsYXVkZWApLiBUaGUgY29tbWFuZCBpcyBydW4gb24gdGhlIGhvc3QgYW5kIGFuXG4gKiBleGl0IGNvZGUgb2YgYDBgIG1lYW5zIGluc3RhbGxlZC4gR2l2ZW4gdGhlIERJIGNvbnRhaW5lciwgcmV0dXJucyB0aGUgY29tbWFuZFxuICogc3RyaW5nLiBPbWl0IChvbiBgQWlUb29sQnVuY2hQYXJhbXNgKSBmb3IgYW4gYWx3YXlzLWF2YWlsYWJsZSB0b29sLlxuICovXG4vLyBSZWNlaXZlcyB0aGUgaW52b2tpbmcgaW5qZWN0YWJsZSdzIHNjb3BlZCBgZGlgLCBzbyBhIGJ1aWxkZXIgbWF5IGluamVjdFxuLy8gaW5qZWN0YWJsZXMgYnkgcmVmZXJlbmNlIGJ1dCBubyBpbmplY3Rpb24gdG9rZW5zICh0aGV5IHdvdWxkIGhhdmUgdG8gYmVcbi8vIGRlY2xhcmVkIGJ5IGV2ZXJ5IGludm9rZXIpLiBUaGUgYnVpbHQtaW4gY2hlY2tzIGFyZSBzdGF0aWMgc3RyaW5ncyBhbnl3YXkuXG5leHBvcnQgdHlwZSBHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgPSAoZGk6IENvbnN1bXB0aW9uRGkpID0+IHN0cmluZztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGZ1bGwgaG9zdCBjb21tYW5kIHRoYXQgb3BlbnMgYW4gQUkgdG9vbCBpbiBhIGZyZXNoIGV4dGVybmFsIHRlcm1pbmFsXG4gKiB3aW5kb3cgXHUyMDE0IHR5cGljYWxseSBieSB3cmFwcGluZyB0aGUgdG9vbCdzIG93biBpbnZvY2F0aW9uIHdpdGggb25lIG9mIHRoZVxuICogYGJ1aWxke01hYyxXaW5kb3dzLExpbnV4fUV4dGVybmFsVGVybWluYWxDb21tYW5kYCBoZWxwZXJzLiBNaXJyb3JzXG4gKiB7QGxpbmsgR2V0Q2xpQ29tbWFuZH0ncyBhcmdzIChzbyBpdCBjYW4gcmV1c2UgdGhlIHRvb2wncyBsYXVuY2ggY29tbWFuZCksXG4gKiBwbHVzIGBlbnZgIChlLmcuIGB7IEtVQkVDT05GSUcgfWApIHdoaWNoIGlzIGJha2VkIGludG8gdGhlIGNvbW1hbmQgYmVjYXVzZSB0aGVcbiAqIGZyZXNobHktb3BlbmVkIHRlcm1pbmFsIGRvZXMgbm90IGluaGVyaXQgdGhlIGxhdW5jaGVyJ3MgZW52aXJvbm1lbnQuIFJldHVybnNcbiAqIGBcIlwiYCB3aGVuIHRoZSB0b29sIGhhcyBubyBjb21tYW5kIHRvIHJ1biAoZS5nLiBhbiBlbXB0eSBDdXN0b20gdGVtcGxhdGUpLlxuICovXG5leHBvcnQgdHlwZSBHZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQgPSAoXG4gIGRpOiBEaUNvbnRhaW5lckZvckluamVjdGlvbixcbiAgYXJnczogeyBwcm9tcHQ/OiBzdHJpbmc7IGRpcjogc3RyaW5nOyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0sXG4pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIEFuIEFJIHRvb2wga2luZCB0b2dldGhlciB3aXRoIGl0cyBkZXRlY3RlZCBpbnN0YWxsYXRpb24gc3RhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbExpc3RFbnRyeSB7XG4gIHJlYWRvbmx5IGtpbmQ6IEFpVG9vbEtpbmQ7XG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcblxuLyoqXG4gKiBXaGV0aGVyIGEgcmVhbCBBSSB0b29sIGlzIGNvbmZpZ3VyZWQgXHUyMDE0IGkuZS4gdGhlIGVmZmVjdGl2ZSBBSSB0b29sIGtpbmQgaXMgYSByZWFsXG4gKiB0b29sIChvciBDdXN0b20pLCBub3Qge0BsaW5rIG5vQWlUb29sS2luZH0uIERlcml2ZWQgcHVyZWx5IGZyb20gdGhlIHVzZXInc1xuICogc2VsZWN0aW9uLCBOT1QgZnJvbSBpbnN0YWxsIGRldGVjdGlvbjogb2JzZXJ2aW5nIHRoZSBjb25maWd1cmVkIHN0YXRlIG11c3Qgbm90XG4gKiBkZXBlbmQgb24gdGhlIGFzeW5jIFBBVEggc2NhbiBoYXZpbmcgcnVuIGZpcnN0LlxuICpcbiAqIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBlcnNpc3RlZCBzZWxlY3Rpb24gaGFzIGxvYWRlZCAodGhlbiBhIHJlYWN0aXZlXG4gKiBib29sZWFuKSwgc28gY29uc3VtZXJzIHJlZmxlY3QgYSBnZW51aW5lICpwZW5kaW5nKiBzdGF0ZSB3aGlsZSBpdCBsb2FkcyBpbnN0ZWFkXG4gKiBvZiBndWVzc2luZyBgZmFsc2VgLiBSZWFjdCBzdXJmYWNlcyByZWFkIGl0IHZpYSBgdXNlSW5qZWN0KC4uLilgIHVuZGVyXG4gKiBgPFN1c3BlbnNlPmAgKG9yIGJyaWRnZSBpdCB3aXRoIGBhc1JlYWN0aXZlYCk7IHRoZSBsYXVuY2ggaGFuZGxlcnMgYGF3YWl0YCBpdC5cbiAqIFRoZSBBc2stQUkgbGF1bmNoIHN1cmZhY2VzIGdhdGUgdGhlaXIgdmlzaWJpbGl0eSBvbiBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbElzQ29uZmlndXJlZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPj47XG59Pih7XG4gIGlkOiBcImFpLXRvb2wtaXMtY29uZmlndXJlZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHR5cGUgeyBGYWN0b3J5LCBJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5qZWN0YWJsZUZvck9wZXJhdGluZ1N5c3RlbXNBbmRTaGVsbHMsXG4gIGdldEluamVjdGFibGVGb3JTaGVsbHMsXG4gIHR5cGUgUGVyU2hlbGxGYW1pbHksXG4gIHR5cGUgU2hlbGxTY29wZWQsXG59IGZyb20gXCJAazhzbGVucy9wbGF0Zm9ybS1zcGVjaWZpYy1pbmplY3RhYmxlc1wiO1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYyB9IGZyb20gXCIuL29wZXJhdGluZy1zeXN0ZW0tc3BlY2lmaWNcIjtcblxuLyoqXG4gKiBBIHZhbHVlIHByb3ZpZGVkIHNlcGFyYXRlbHkgcGVyIHNoZWxsIGZhbWlseS4gVGhlIHNoZWxsIGFuYWxvZ3VlIG9mXG4gKiB7QGxpbmsgT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWN9LlxuICovXG5leHBvcnQgdHlwZSBTaGVsbFNwZWNpZmljPFQ+ID0gUGVyU2hlbGxGYW1pbHk8VD47XG5cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGlzIGVpdGhlciBzaGVsbC1hZ25vc3RpYyAodGhlIHZhbHVlIGl0c2VsZikgb3Igc2hlbGwgc3BlY2lmaWMgKGFcbiAqIHtAbGluayBTaGVsbFNwZWNpZmljfSBvYmplY3QpLiBUaGUgc2hlbGwgYW5hbG9ndWUgb2YgYE1heWJlT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWNgLlxuICovXG5leHBvcnQgdHlwZSBNYXliZVNoZWxsU3BlY2lmaWM8VD4gPSBUIHwgU2hlbGxTcGVjaWZpYzxUPjtcblxuLyoqIEEgdmFsdWUgcHJvdmlkZWQgcGVyIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB3aXRoaW4gZWFjaCwgcGVyIHNoZWxsIGZhbWlseS4gKi9cbmV4cG9ydCB0eXBlIE9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8VD4gPSBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYzxTaGVsbFNwZWNpZmljPFQ+PjtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgbWF5IHZhcnkgYWxvbmcgZWl0aGVyIGF4aXM6IGFnbm9zdGljLCBvcGVyYXRpbmctc3lzdGVtIHNwZWNpZmljLFxuICogc2hlbGwgc3BlY2lmaWMsIG9yIGJvdGguIFVzZWQgZm9yIHRoZSBBSS10b29sIENMSSBjb21tYW5kcyBzbyBhIHRvb2wgbWF5IGRpZmZlclxuICogaXRzIGNvbW1hbmQgKmNvbnRlbnQqIHBlciBPUyBhbmQvb3Igc2hlbGwgKGUuZy4gbGF1bmNoLWJ5LW5hbWUgdnMgcGF0aCwgb3JcbiAqIHBlci1PUyBkaXNjb3ZlcnkgbG9naWMpLlxuICovXG5leHBvcnQgdHlwZSBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8VD4gPVxuICB8IFRcbiAgfCBPcGVyYXRpbmdTeXN0ZW1TcGVjaWZpYzxUPlxuICB8IFNoZWxsU3BlY2lmaWM8VD5cbiAgfCBPcGVyYXRpbmdTeXN0ZW1BbmRTaGVsbFNwZWNpZmljPFQ+O1xuXG5jb25zdCBpc0Z1bmN0aW9uID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRmFjdG9yeSA9PiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcblxuY29uc3QgaXNTaGVsbFNwZWNpZmljID0gPEY+KFxuICB2YWx1ZTogT3BlcmF0aW5nU3lzdGVtU3BlY2lmaWM8RiB8IFNoZWxsU3BlY2lmaWM8Rj4+IHwgU2hlbGxTcGVjaWZpYzxGPixcbik6IHZhbHVlIGlzIFNoZWxsU3BlY2lmaWM8Rj4gPT4gXCJwb3NpeFwiIGluIHZhbHVlO1xuXG5jb25zdCBzYW1lRm9yRXZlcnlTaGVsbCA9IDxGPih2YWx1ZTogRik6IFBlclNoZWxsRmFtaWx5PCgpID0+IEY+ID0+ICh7XG4gIHBvc2l4OiAoKSA9PiB2YWx1ZSxcbiAgZmlzaDogKCkgPT4gdmFsdWUsXG4gIGNtZDogKCkgPT4gdmFsdWUsXG4gIHBvd2Vyc2hlbGw6ICgpID0+IHZhbHVlLFxufSk7XG5cbmNvbnN0IHBlclNoZWxsUHJvZHVjZXJzID0gPEY+KHZhbHVlOiBTaGVsbFNwZWNpZmljPEY+KTogUGVyU2hlbGxGYW1pbHk8KCkgPT4gRj4gPT4gKHtcbiAgcG9zaXg6ICgpID0+IHZhbHVlLnBvc2l4LFxuICBmaXNoOiAoKSA9PiB2YWx1ZS5maXNoLFxuICBjbWQ6ICgpID0+IHZhbHVlLmNtZCxcbiAgcG93ZXJzaGVsbDogKCkgPT4gdmFsdWUucG93ZXJzaGVsbCxcbn0pO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHtAbGluayBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWN9IHZhbHVlIHVuZGVyIGEgc2luZ2xlXG4gKiB0b2tlbiBzbyBjb25zdW1lcnMgcmVzb2x2ZSBpdCBhdCBydW50aW1lIHdpdGhcbiAqIGByZXNvbHZlRm9yU2hlbGwoaW5qZWN0TWFueSh0b2tlbikoKSwgc2hlbGxGYW1pbHkpYC4gVGhlICoqT1MqKiBheGlzIGlzIGZpbHRlcmVkXG4gKiBzeW5jaHJvbm91c2x5IGF0IHJlZ2lzdHJhdGlvbiAoaG9zdC1vbmx5IGAqLW9ubHlgIHRhZ3MsIHZpYVxuICogYGdldEluamVjdGFibGVGb3JPcGVyYXRpbmdTeXN0ZW1zQW5kU2hlbGxzYCk7IHRoZSAqKnNoZWxsKiogYXhpcyBpcyBzZWxlY3RlZCBhdFxuICogcnVudGltZSwgc2luY2UgdGhlIGNvbmZpZ3VyZWQgc2hlbGwgaXMgYXN5bmMuIEFnbm9zdGljIGFuZCBPUy1vbmx5IHZhbHVlcyBhcmVcbiAqIHJlcGVhdGVkIGFjcm9zcyB0aGUgc2hlbGwgZmFtaWxpZXMgc28gZXZlcnkgdG9rZW4gdW5pZm9ybWx5IHlpZWxkc1xuICogYFNoZWxsU2NvcGVkPEY+YC4gVGhlIHNoZWxsIGFuYWxvZ3VlL3N1cGVyc2V0IG9mIGBnZXRJbmplY3RhYmxlRm9yT3BlcmF0aW5nU3lzdGVtc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlID0gPEYgZXh0ZW5kcyBGYWN0b3J5PihhcmdzOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGluamVjdGlvblRva2VuOiBJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFNoZWxsU2NvcGVkPEY+O1xuICAgIG1hbnlGYWN0b3J5OiBhbnk7XG4gICAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IHVuZGVmaW5lZDtcbiAgICBjYXJkaW5hbGl0eTogYW55O1xuICB9PjtcbiAgdmFsdWU6IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxGPjtcbn0pID0+IHtcbiAgY29uc3QgeyBpZCwgaW5qZWN0aW9uVG9rZW4sIHZhbHVlIH0gPSBhcmdzO1xuXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRJbmplY3RhYmxlRm9yU2hlbGxzKHsgaWQsIGluamVjdGlvblRva2VuLCBpbnN0YW50aWF0ZTogc2FtZUZvckV2ZXJ5U2hlbGwodmFsdWUpIH0pO1xuICB9XG5cbiAgaWYgKGlzU2hlbGxTcGVjaWZpYyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0SW5qZWN0YWJsZUZvclNoZWxscyh7IGlkLCBpbmplY3Rpb25Ub2tlbiwgaW5zdGFudGlhdGU6IHBlclNoZWxsUHJvZHVjZXJzKHZhbHVlKSB9KTtcbiAgfVxuXG4gIGNvbnN0IHBlck9wZXJhdGluZ1N5c3RlbSA9IChvc1ZhbHVlOiBGIHwgU2hlbGxTcGVjaWZpYzxGPik6IFBlclNoZWxsRmFtaWx5PCgpID0+IEY+ID0+XG4gICAgaXNGdW5jdGlvbihvc1ZhbHVlKSA/IHNhbWVGb3JFdmVyeVNoZWxsKG9zVmFsdWUpIDogcGVyU2hlbGxQcm9kdWNlcnMob3NWYWx1ZSk7XG5cbiAgcmV0dXJuIGdldEluamVjdGFibGVGb3JPcGVyYXRpbmdTeXN0ZW1zQW5kU2hlbGxzKHtcbiAgICBpZCxcbiAgICBpbmplY3Rpb25Ub2tlbixcbiAgICBpbnN0YW50aWF0ZToge1xuICAgICAgbWFjb3M6IHBlck9wZXJhdGluZ1N5c3RlbSh2YWx1ZS5tYWNvcyksXG4gICAgICB3aW5kb3dzOiBwZXJPcGVyYXRpbmdTeXN0ZW0odmFsdWUud2luZG93cyksXG4gICAgICBsaW51eDogcGVyT3BlcmF0aW5nU3lzdGVtKHZhbHVlLmxpbnV4KSxcbiAgICB9LFxuICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBTaGVsbEZhbWlseSB9IGZyb20gXCJAazhzbGVucy9wdWJsaWMtdXRpbGl0aWVzXCI7XG5cbi8qKlxuICogUmVhY3RpdmUgbG9va3VwIG9mIHRoZSBhY3RpdmUgc2hlbGwgKmZhbWlseSogKGBwb3NpeGAvYGZpc2hgL2BjbWRgL2Bwb3dlcnNoZWxsYCksXG4gKiBkZXJpdmVkIGZyb20gdGhlIHVzZXItY29uZmlndXJlZCBzaGVsbC4gQ29uc3VtZXJzIG9mIHRoZSBwZXIta2luZCBBSSBjb21tYW5kXG4gKiB0b2tlbnMgKHdoaWNoIHJlZ2lzdGVyIG9uZSB7QGxpbmsgaW1wb3J0KFwiQGs4c2xlbnMvcHVibGljLXV0aWxpdGllc1wiKS5TaGVsbFNjb3BlZH0gY2VsbFxuICogcGVyIGZhbWlseSkgdXNlIHRoaXMgdG8gcGljayB0aGUgYWN0aXZlIHNoZWxsJ3MgY29tbWFuZCBhdCBydW50aW1lIHZpYVxuICogYHJlc29sdmVGb3JTaGVsbChpbmplY3RNYW55KHRva2VuLmZvcihraW5kKSkoKSwgY3VycmVudFNoZWxsRmFtaWx5LmdldCgpKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBjdXJyZW50U2hlbGxGYW1pbHlJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IElDb21wdXRlZFZhbHVlPFNoZWxsRmFtaWx5Pjtcbn0+KHtcbiAgaWQ6IFwiY3VycmVudC1zaGVsbC1mYW1pbHlcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogVGhlIHJlZ2lzdHJ5IG9mIGF2YWlsYWJsZSBBSSB0b29sIGtpbmRzLiBFYWNoIGNvbnRyaWJ1dGlvbiBpcyBKVVNUIGEga2luZDtcbiAqIGV2ZXJ5IG90aGVyIGFzcGVjdCAoY29tbWFuZCwgaW5zdGFsbC1zdGF0ZSwgbmFtZSwgb3JkZXIsIFx1MjAyNikgaXMgY29udHJpYnV0ZWRcbiAqIHZpYSBpdHMgb3duIGAuZm9yKGtpbmQpYCB0b2tlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWlUb29sS2luZCB9Pih7XG4gIGlkOiBcImFpLXRvb2xcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFNoZWxsU2NvcGVkIH0gZnJvbSBcIkBrOHNsZW5zL3BsYXRmb3JtLXNwZWNpZmljLWluamVjdGFibGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQsIEdldENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCBsYXVuY2hlcyBhbiBBSSB0b29sIGluIGEgdGVybWluYWwuXG4gKiBDb250cmlidXRlIG9uZSBwZXIgdG9vbCBraW5kIHZpYSBgLmZvcihraW5kKWAuIFJlZ2lzdGVyZWQgKGJ5IHRoZSBidW5jaCBmYWN0b3J5KVxuICogYXMgb25lIHtAbGluayBTaGVsbFNjb3BlZH0gY2VsbCBwZXIgc2hlbGwgZmFtaWx5OyBjb25zdW1lcnMgcGljayB0aGUgYWN0aXZlXG4gKiBzaGVsbCdzIGF0IHJ1bnRpbWUgd2l0aCBgcmVzb2x2ZUZvclNoZWxsKGluamVjdE1hbnkodG9rZW4uZm9yKGtpbmQpKSgpLCBmYW1pbHkpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0Q2xpQ29tbWFuZD47XG4gICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IFNoZWxsU2NvcGVkPEdldENsaUNvbW1hbmQ+PjtcbiAgfT4oe1xuICAgIGlkOiBgZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFNoZWxsU2NvcGVkIH0gZnJvbSBcIkBrOHNsZW5zL3BsYXRmb3JtLXNwZWNpZmljLWluamVjdGFibGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQsIEdldENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCAqcmVzdW1lcyogYW4gQUkgdG9vbCBpbiBhIHRlcm1pbmFsIFx1MjAxNFxuICogcnVuIGluc3RlYWQgb2Yge0BsaW5rIGdldEFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW59IHdoZW4gdGhlIHRhYidzXG4gKiBzZXNzaW9uIGlzIHJlLWVzdGFibGlzaGVkIChlLmcuIGFmdGVyIGFuIGFwcCByZXN0YXJ0KSByYXRoZXIgdGhhbiBmaXJzdFxuICogb3BlbmVkLCBzbyB0aGUgdG9vbCBjb250aW51ZXMgaXRzIHByZXZpb3VzIHNlc3Npb24gKGUuZy4gYGNsYXVkZSAtLWNvbnRpbnVlXG4gKiB8fCBjbGF1ZGVgLCB3aGljaCBmYWxscyBiYWNrIHRvIGEgZnJlc2ggbGF1bmNoIHdoZW4gdGhlcmUgaXMgbm8gc2Vzc2lvbikuXG4gKlxuICogUmVzb2x2ZXMgdG8gYSB7QGxpbmsgR2V0Q2xpQ29tbWFuZH0gKHRoZSBsYXVuY2gtY29tbWFuZCBzaWduYXR1cmUpOyByZXN1bWVcbiAqIGJ1aWxkZXJzIHR5cGljYWxseSBpZ25vcmUgYHByb21wdGAgKHRoZXkgY29udGludWUgdGhlIHByaW9yIHNlc3Npb24gcmF0aGVyXG4gKiB0aGFuIHN0YXJ0aW5nIGEgbmV3IG9uZSkuIEV2ZXJ5IHRvb2wgY29udHJpYnV0ZXMgb25lIHZpYSBgLmZvcihraW5kKWAgXHUyMDE0IGEgdG9vbFxuICogd2l0aCBubyBkZWRpY2F0ZWQgcmVzdW1lIGludm9jYXRpb24gcGFzc2VzIGl0cyBsYXVuY2ggY29tbWFuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc3VtZUFpQ29tbWFuZEZvclRlcm1pbmFsSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFNoZWxsU2NvcGVkPEdldENsaUNvbW1hbmQ+O1xuICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBTaGVsbFNjb3BlZDxHZXRDbGlDb21tYW5kPj47XG4gIH0+KHtcbiAgICBpZDogYGdldC1yZXN1bWUtYWktY29tbWFuZC1mb3ItdGVybWluYWwtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqIFJ1bnMgYW4gaW5zdGFsbGF0aW9uLWRldGVjdGlvbiBjb21tYW5kIG9uIHRoZSBob3N0OyByZXNvbHZlcyBgdHJ1ZWAgaWZmIGl0IGV4aXRzIDAuICovXG5leHBvcnQgdHlwZSBBaVRvb2xJbnN0YWxsZWRWaWFDbGlDb21tYW5kID0gKGNvbW1hbmQ6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBSdW5zIGEgdG9vbCdzIGBnZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmRgIG91dHB1dCBvbiB0aGUgaG9zdCBhbmQgcmVwb3J0c1xuICogd2hldGhlciBpdCBzdWNjZWVkZWQgKGV4aXQgY29kZSAwKS4gSW1wbGVtZW50ZWQgaW4gdGhlIGBAbGVuc2FwcC9haS10b29sc2BcbiAqIGZlYXR1cmUgdmlhIGBjbGlFeGVjdXRlYCBhZ2FpbnN0IHRoZSBzaGVsbC1zeW5jZWQgZW52aXJvbm1lbnQsIHNvIGRldGVjdGlvblxuICogcmVzb2x2ZXMgdGhlIHNhbWUgUEFUSCB0aGUgbGF1bmNoZWQgdG9vbHMgc2VlLiBUaGUgZGV0ZWN0ZWQtdG9vbHMgbGlzdFxuICogKGByZWZyZXNoQWlUb29sc2ApIHJ1bnMgdGhlIHBlci1raW5kIGNvbW1hbmQgdGhyb3VnaCBpdC5cbiAqXG4gKiBUaGUgaW5zdGFuY2UgaXMgdGhlIGNoZWNrIGZ1bmN0aW9uIGl0c2VsZiAoYGRpLmluamVjdCh0b2tlbikoKWAgeWllbGRzIGl0KSBcdTIwMTRcbiAqIGEgdjIgaW5qZWN0YWJsZSBtZW1vaXNlcyBpdHMgaW5zdGFuY2UgYnkgY2FsbCBhcmdzLCBzbyByZXR1cm5pbmcgYSBmdW5jdGlvblxuICogKHJhdGhlciB0aGFuIGEgYFByb21pc2U8Ym9vbGVhbj5gKSBrZWVwcyBldmVyeSBjaGVjayBsaXZlIGFjcm9zcyByZS1zY2Fucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmRJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmQ7XG59Pih7XG4gIGlkOiBcImFpLXRvb2wtaW5zdGFsbGVkLXZpYS1jbGktY29tbWFuZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqXG4gKiBSZS1zY2FucyBBSSB0b29sIGluc3RhbGxhdGlvbiBzdGF0ZSBhbmQgdXBkYXRlcyB7QGxpbmsgYWlUb29sc0luamVjdGlvblRva2VufS5cbiAqIEF3YWl0YWJsZSwgc28gY2FsbGVycyBjYW4gYWN0IG9uY2UgZGV0ZWN0aW9uIHNldHRsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlZnJlc2hBaVRvb2xEZXRlY3Rpb24gPSAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBleHBsaWNpdCBcInJlLXNjYW4gaW5zdGFsbGVkIEFJIHRvb2xzXCIgYWN0aW9uLiBEZXRlY3Rpb24gaXMgbmV2ZXJcbiAqIGEgc2lkZSBlZmZlY3Qgb2YgaW5qZWN0aW9uOiB0aGUgcHJlZmVyZW5jZXMgVUkgY2FsbHMgdGhpcyBvbiBtb3VudCBhbmQgZnJvbSBhXG4gKiBcIlJlZnJlc2hcIiBjb250cm9sLCBhbmQgdGhlIGxhdW5jaCBwYXRoIGF3YWl0cyBpdCBiZWZvcmUgcmVzb2x2aW5nIHRoZVxuICogZWZmZWN0aXZlIHRvb2wgXHUyMDE0IHNvIHRvb2xzIGluc3RhbGxlZC9yZW1vdmVkIHdoaWxlIExlbnMgaXMgcnVubmluZyBhcmUgcGlja2VkXG4gKiB1cCB3aXRob3V0IGEgcmVzdGFydC5cbiAqXG4gKiBTaGFwZWQgYXMgYSBmYWN0b3J5IHJldHVybmluZyB0aGUgYWN0aW9uIChsaWtlIGBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW5gKSBzb1xuICogaXQgaXMgY29uc3VtYWJsZSB2aWEgYHVzZUluamVjdGAgLyBgZGkuaW5qZWN0YCBcdTIwMTQgd2hpY2ggcmV0dXJuIHRoZSBhY3Rpb24gXHUyMDE0IGFuZFxuICogbmV2ZXIgbmVlZHMgYGluamVjdDJgIChhYnNlbnQgZnJvbSB0aGUgUmVhY3QtY29udGV4dCBESSBjb250YWluZXIpLlxuICovXG5leHBvcnQgY29uc3QgcmVmcmVzaEFpVG9vbERldGVjdGlvbkluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gUmVmcmVzaEFpVG9vbERldGVjdGlvbiB9PihcbiAge1xuICAgIGlkOiBcInJlZnJlc2gtYWktdG9vbC1kZXRlY3Rpb25cIixcbiAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgfSxcbikoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgZGlzcGxheS1uYW1lIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBBSSB0b29sIGtpbmQuICovXG5leHBvcnQgdHlwZSBBaVRvb2xOYW1lID0gKCkgPT4gUmVhY3QuQ29tcG9uZW50VHlwZTtcblxuLyoqXG4gKiBQZXIta2luZCBkaXNwbGF5IG5hbWUgZm9yIGFuIEFJIHRvb2wgXHUyMDE0IGEgUmVhY3QgY29tcG9uZW50IChub3QgYSBzdHJpbmcpLCBzb1xuICogYSB0b29sIGNhbiByZW5kZXIgYnJhbmRpbmcvbWFya3VwLiBDb250cmlidXRlIG9uZSBwZXIgdG9vbCBraW5kLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sTmFtZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sTmFtZSB9Pih7XG4gIGlkOiBcImFpLXRvb2wtbmFtZVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xOYW1lIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtbmFtZS0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHBsYWluLXRleHQgZGlzcGxheSBuYW1lIGZvciBhIGdpdmVuIEFJIHRvb2wga2luZC4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbERpc3BsYXlOYW1lID0gKCkgPT4gc3RyaW5nO1xuXG4vKipcbiAqIFBlci1raW5kIHBsYWluLXRleHQgZGlzcGxheSBuYW1lIChlLmcuIFwiQ2xhdWRlIENvZGVcIikuIFVzZWQgYnkgc3RyaW5nLW9ubHlcbiAqIHNsb3RzIHRoYXQgY2Fubm90IHJlbmRlciB0aGUgUmVhY3QgYGFpVG9vbE5hbWVJbmplY3Rpb25Ub2tlbmAgY29tcG9uZW50IFx1MjAxNCBmb3JcbiAqIGV4YW1wbGUgdGhlIGNvbW1hbmQtcGFsZXR0ZSBlbnRyeSB0aXRsZS4gVGhlIFJlYWN0IG5hbWUgY29tcG9uZW50IGRlcml2ZXNcbiAqIGZyb20gdGhpcyBzYW1lIHZhbHVlLCBzbyB0aGUgdHdvIHN0YXkgaW4gc3luYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xEaXNwbGF5TmFtZSB9Pih7XG4gIGlkOiBcImFpLXRvb2wtZGlzcGxheS1uYW1lXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbERpc3BsYXlOYW1lIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtZGlzcGxheS1uYW1lLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCB9IGZyb20gXCIuL2FpLXRvb2xcIjtcblxuLyoqIFByb3BzIGEgdG9vbCdzIGRlc2NyaXB0aW9uIGNvbXBvbmVudCByZWNlaXZlcywgc28gaXQgY2FuIGFkYXB0IHRvIGRldGVjdGlvbiBzdGF0ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWlUb29sRGVzY3JpcHRpb25Qcm9wcyB7XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIHdhcyBkZXRlY3RlZCBhcyBpbnN0YWxsZWQ7IGxldHMgYSBkZXNjcmlwdGlvbiBzd2FwIGluIGEgXCJOb3QgZm91bmQgaW4gUEFUSFwiIG1lc3NhZ2UuICovXG4gIHJlYWRvbmx5IGlzSW5zdGFsbGVkOiBib29sZWFuO1xufVxuXG4vKiogUmVzb2x2ZXMgYSBraW5kJ3MgZGVzY3JpcHRpb24gY29tcG9uZW50LiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sRGVzY3JpcHRpb24gPSAoKSA9PiBSZWFjdC5Db21wb25lbnRUeXBlPEFpVG9vbERlc2NyaXB0aW9uUHJvcHM+O1xuXG4vKipcbiAqIFBlci1raW5kIGRlc2NyaXB0aW9uIGZvciBhbiBBSSB0b29sIFx1MjAxNCBhIHNob3J0IGJsdXJiIGludHJvZHVjaW5nIHRoZSB0b29sIChlLmcuXG4gKiBcIlRoZSBjb2RpbmcgYXNzaXN0YW50IGJ5IEFudGhyb3BpY1wiKSwgc2hvd24gYXMgdGhlIHNlbGVjdG9yJ3Mgc2Vjb25kYXJ5IGxpbmUuXG4gKiBBIFJlYWN0IGNvbXBvbmVudCAobm90IGEgc3RyaW5nKSByZWNlaXZpbmcgdGhlIHRvb2wncyBkZXRlY3Rpb24gc3RhdGUsIHNvIGl0XG4gKiBtYXkgaW5jbHVkZSBtYXJrdXAvbGlua3MgYW5kIG9wdCB0byBzaG93IGEgXCJOb3QgZm91bmQgaW4gUEFUSFwiIG1lc3NhZ2UgKG9yIGFueVxuICogb3RoZXIgZ3VpZGFuY2UpIHdoZW4gdGhlIHRvb2wgaXMgbm90IGluc3RhbGxlZC4gQ29udHJpYnV0ZSBvbmUgcGVyIHRvb2wga2luZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbERlc2NyaXB0aW9uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xEZXNjcmlwdGlvbiB9Pih7XG4gIGlkOiBcImFpLXRvb2wtZGVzY3JpcHRpb25cIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sRGVzY3JpcHRpb24gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1kZXNjcmlwdGlvbi0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgU3ZnUHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvZWxlbWVudC1jb21wb25lbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgaWNvbiBjb21wb25lbnQgZm9yIGEgZ2l2ZW4gQUkgdG9vbCBraW5kLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sSWNvbiA9ICgpID0+IFJlYWN0LkNvbXBvbmVudFR5cGU8U3ZnUHJvcHM+O1xuXG4vKipcbiAqIFBlci1raW5kIGljb24gZm9yIGFuIEFJIHRvb2wgXHUyMDE0IGEgUmVhY3QgY29tcG9uZW50IChub3QgYW4gaWNvbiBuYW1lKS4gSXRcbiAqIGFjY2VwdHMgYFN2Z1Byb3BzYCBzbyBjYWxsIHNpdGVzIGNhbiBzaXplIGl0IChgJHNpemVgKSwgYnV0IGV2ZXJ5IGZpZWxkIGlzXG4gKiBvcHRpb25hbCwgc28gYSBwcm9wLWxlc3MgY29tcG9uZW50IGlzIGFzc2lnbmFibGUgdG9vLiBTaG93biBiZXNpZGUgdGhlIHRvb2wnc1xuICogbmFtZSBpbiB0aGUgc2VsZWN0b3IgYW5kIHdoZXJldmVyIHRoZSB0b29sIGlzIG9mZmVyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJY29uIH0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pY29uXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbEljb24gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pY29uLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBpY29uIGNvbXBvbmVudCBmb3IgYW4gYXJiaXRyYXJ5IEFJIHRvb2wga2luZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBnZW5lcmljIGljb24gZm9yIGtpbmRzXG4gKiB3aXRob3V0IGEgcmVnaXN0ZXJlZCBvbmUgKGUuZy4gdGhlIGN1c3RvbSBraW5kKS4gVXNlIHRoaXMgdG8gcmVuZGVyIGEgKnNwZWNpZmljKiB0b29sJ3MgaWNvbiBcdTIwMTQgZS5nLiBhblxuICogZW50cnkgcG9pbnQgdGhhdCBtdXN0IHN0YXkgb24gdGhlIHRvb2wgaXQgd2FzIGNyZWF0ZWQgZm9yIHJhdGhlciB0aGFuIGZvbGxvd2luZyB0aGUgbGl2ZSBzZWxlY3Rpb24uXG4gKiBGb3IgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0b29sLCBwcmVmZXIge0BsaW5rIGVmZmVjdGl2ZUFpVG9vbEljb25JbmplY3Rpb25Ub2tlbn0uXG4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEljb25Gb3JLaW5kID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTwoa2luZDogQWlUb29sS2luZCkgPT4gUmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz4+PjtcblxuZXhwb3J0IGNvbnN0IGFpVG9vbEljb25Gb3JLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJY29uRm9yS2luZCB9Pih7XG4gIGlkOiBcImFpLXRvb2wtaWNvbi1mb3Ita2luZFwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgdHlwZSBTdmdQcm9wcywgU3ZnIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuXG4vKipcbiAqIEdlbmVyaWMgZmFsbGJhY2sgaWNvbiBmb3IgYW4gQUkgdG9vbCB0aGF0IGNvbnRyaWJ1dGVzIG5vIGBJY29uYCBvZiBpdHMgb3duIChhXG4gKiB0ZXJtaW5hbCBnbHlwaCkuIFRoZSBidW5jaCBmYWN0b3J5IGZhbGxzIGJhY2sgdG8gdGhpcyBzbyB0aGUgZWZmZWN0aXZlLWljb25cbiAqIHRva2VuIG5ldmVyIHJlc29sdmVzIHRvIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdEFpVG9vbEljb24gPSAocHJvcHM6IFN2Z1Byb3BzKSA9PiAoXG4gIDxTdmcgey4uLnByb3BzfSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICAgIDxwYXRoIGQ9XCJNMyAzYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxOGEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMkgzem0wIDJoMTh2MTRIM1Y1em0zLjUgMi41TDUgOWwyIDItMiAyIDEuNSAxLjVMMTEgMTEgNi41IDcuNXpNMTIgMTRoNXYyaC01di0yelwiIC8+XG4gIDwvU3ZnPlxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIG9yZGVyL3ByaW9yaXR5IG51bWJlciBmb3IgYSBnaXZlbiBBSSB0b29sIGtpbmQuICovXG5leHBvcnQgdHlwZSBBaVRvb2xPcmRlck51bWJlciA9ICgpID0+IG51bWJlcjtcblxuLyoqXG4gKiBQZXIta2luZCBvcmRlcmluZy9wcmlvcml0eSBmb3IgYW4gQUkgdG9vbC4gTG93ZXIgY29tZXMgZmlyc3QgaW4gdGhlIHNlbGVjdG9yO1xuICogdGhlIGxvd2VzdC1udW1iZXJlZCAqaW5zdGFsbGVkKiB0b29sIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbE9yZGVyTnVtYmVySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xPcmRlck51bWJlciB9Pih7XG4gIGlkOiBcImFpLXRvb2wtb3JkZXItbnVtYmVyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEFpVG9vbE9yZGVyTnVtYmVyIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtb3JkZXItbnVtYmVyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gIH0pKCksXG4pO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCB9IGZyb20gXCIuL2FpLXRvb2xcIjtcblxuLyoqIFJlc29sdmVzIGEga2luZCdzIHNldHRpbmdzIGNvbXBvbmVudCwgc2hvd24gYmVsb3cgdGhlIHNlbGVjdG9yIHdoZW4gdGhhdCBraW5kIGlzIHNlbGVjdGVkLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sU2V0dGluZ3MgPSAoKSA9PiBSZWFjdC5Db21wb25lbnRUeXBlO1xuXG4vKipcbiAqIFBlci1raW5kIHNldHRpbmdzIFVJLCByZW5kZXJlZCBiZW5lYXRoIHRoZSBBSS10b29sIHNlbGVjdG9yIHdoZW4gdGhhdCBraW5kIGlzXG4gKiB0aGUgYWN0aXZlIHNlbGVjdGlvbi4gT3B0aW9uYWwgXHUyMDE0IG1vc3QgdG9vbHMgbmVlZCBub25lOyBlLmcuIHRoZSBcImN1c3RvbVwiIGtpbmRcbiAqIGNvbnRyaWJ1dGVzIGEgY29tbWFuZCBpbnB1dCArIGEgcnVuLWV4dGVybmFsbHkgdG9nZ2xlLiBBIFJlYWN0IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbFNldHRpbmdzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xTZXR0aW5ncyB9Pih7XG4gIGlkOiBcImFpLXRvb2wtc2V0dGluZ3NcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sU2V0dGluZ3MgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1zZXR0aW5ncy0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyBhIGtpbmQncyBpbnN0YWxsYXRpb24taW5zdHJ1Y3Rpb25zIGNvbXBvbmVudC4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9ucyA9ICgpID0+IFJlYWN0LkNvbXBvbmVudFR5cGU7XG5cbi8qKlxuICogUGVyLWtpbmQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBVSSwgcmVuZGVyZWQgYmVuZWF0aCB0aGUgQUktdG9vbCBzZWxlY3RvclxuICogd2hlbiB0aGF0IGtpbmQgaXMgZGV0ZWN0ZWQgYXMgbm90IGluc3RhbGxlZCBcdTIwMTQgc28gdGhlIHRvb2wgaXMgc2hvd24gZGlzYWJsZWRcbiAqIGluc3RlYWQgb2YgaGlkZGVuLCB3aXRoIGd1aWRhbmNlIG9uIGhvdyB0byBpbnN0YWxsIGl0LiBPcHRpb25hbDsgYSBSZWFjdFxuICogY29tcG9uZW50LCBzbyBpbnN0cnVjdGlvbnMgbWF5IGluY2x1ZGUgbGlua3MgKGUuZy4gYDxCcm93c2VyTGluaz5gKSBvciBhbnlcbiAqIG90aGVyIG1hcmt1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0luamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zO1xufT4oe1xuICBpZDogXCJhaS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnNcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zIH0+KHtcbiAgICBpZDogYGFpLXRvb2wtaW5zdGFsbGF0aW9uLWluc3RydWN0aW9ucy0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGluc3RydWN0aW9ucyBmaWxlbmFtZSBhIGdpdmVuIEFJIHRvb2wga2luZCByZWFkcyBmcm9tIGl0cyB3b3JraW5nIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lID0gKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBlci1raW5kIGluc3RydWN0aW9ucyBmaWxlbmFtZSBcdTIwMTQgdGhlIGZpbGUgdGhlIHRvb2wgYXV0by1kaXNjb3ZlcnMgaW4gaXRzXG4gKiB3b3JraW5nIGRpcmVjdG9yeSAoZS5nLiBgXCJDTEFVREUubWRcImAgZm9yIENsYXVkZSBDb2RlLCBgXCJHRU1JTkkubWRcImAgZm9yXG4gKiBHZW1pbmkgQ0xJKS4gVGhlIGxhdW5jaGVyIGFsd2F5cyB3cml0ZXMgdGhlIGNhbm9uaWNhbFxuICoge0BsaW5rIGFnZW50c0luc3RydWN0aW9uc0ZpbGVuYW1lfTsgd2hlbiBhIGtpbmQgZGVjbGFyZXMgYSBkaWZmZXJlbnQgZmlsZW5hbWVcbiAqIHRoZSBsYXVuY2hlciBhZGRpdGlvbmFsbHkgd3JpdGVzIHRoYXQgZmlsZSBhcyBhbiBpbmRpcmVjdGlvbiBpbXBvcnRpbmcgdGhlXG4gKiBjYW5vbmljYWwgb25lLiBgdW5kZWZpbmVkYCBmb3Iga2luZHMgdGhhdCByZWFkIG5vIHN1Y2ggZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZTtcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWVcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogQWlUb29sSW5zdHJ1Y3Rpb25zRmlsZW5hbWUgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWUtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuLyoqIFJlc29sdmVzIHRoZSBpbmRpcmVjdGlvbiBpbnN0cnVjdGlvbnMgZmlsZW5hbWVzIHRvIHdyaXRlIGFjcm9zcyBhbGwgcmVnaXN0ZXJlZCBBSSB0b29scy4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbEluc3RydWN0aW9uc0luZGlyZWN0aW9uRmlsZW5hbWVzID0gKCkgPT4gcmVhZG9ubHkgc3RyaW5nW107XG5cbi8qKlxuICogVGhlIGRpc3RpbmN0IHRvb2wtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpbGVuYW1lcyBhY3Jvc3MgKiphbGwqKiByZWdpc3RlcmVkIEFJXG4gKiB0b29sIGtpbmRzIFx1MjAxNCByZWdhcmRsZXNzIG9mIGluc3RhbGxhdGlvbiBzdGF0ZSBcdTIwMTQgZXhjbHVkaW5nIHRoZSBjYW5vbmljYWxcbiAqIHtAbGluayBhZ2VudHNJbnN0cnVjdGlvbnNGaWxlbmFtZX0uIEEgbGF1bmNoZXIgd3JpdGVzIHRoZSBjYW5vbmljYWxcbiAqIGBBR0VOVFMubWRgIHBsdXMgZWFjaCBvZiB0aGVzZSBhcyBhbiBpbmRpcmVjdGlvbiBpbXBvcnRpbmcgaXQsIHNvIHdoaWNoZXZlclxuICogdG9vbCB0aGUgdXNlciBsYXRlciBwaWNrcyBmaW5kcyBpdHMgaW5zdHJ1Y3Rpb25zIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbEluc3RydWN0aW9uc0luZGlyZWN0aW9uRmlsZW5hbWVzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJbnN0cnVjdGlvbnNJbmRpcmVjdGlvbkZpbGVuYW1lcztcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pbnN0cnVjdGlvbnMtaW5kaXJlY3Rpb24tZmlsZW5hbWVzXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBzaGVsbFF1b3RlIH0gZnJvbSBcIkBrOHNsZW5zL3B1YmxpYy11dGlsaXRpZXNcIjtcblxuY29uc3QgcHJvbXB0UGxhY2Vob2xkZXIgPSBcIntwcm9tcHR9XCI7XG5jb25zdCBkaXJQbGFjZWhvbGRlciA9IFwie2Rpcn1cIjtcblxuY29uc3QgZXNjYXBlRm9yUmVnZXggPSAodmFsdWU6IHN0cmluZykgPT4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xuXG5jb25zdCBzdWJzdGl0dXRlID0gKHRlbXBsYXRlOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gXCJcIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5zcGxpdChwbGFjZWhvbGRlcikuam9pbihzaGVsbFF1b3RlKHZhbHVlKSk7XG4gIH1cblxuICAvLyBTdHJpcCB0aGUgcGxhY2Vob2xkZXIgYW5kIG9uZSBsZWFkaW5nIHdoaXRlc3BhY2UgcnVuLCBzbyBgY2xhdWRlIHtwcm9tcHR9YFxuICAvLyBiZWNvbWVzIGBjbGF1ZGVgLCBub3QgYGNsYXVkZSBgLlxuICBjb25zdCBzdHJpcFBhdHRlcm4gPSBuZXcgUmVnRXhwKGBcXFxccyoke2VzY2FwZUZvclJlZ2V4KHBsYWNlaG9sZGVyKX1gLCBcImdcIik7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHN0cmlwUGF0dGVybiwgXCJcIik7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMbG1Db21tYW5kT3B0aW9ucyB7XG4gIC8qKiBTZWVkZWQgaW5pdGlhbCB1c2VyIG1lc3NhZ2UsIHN1YnN0aXR1dGVkIGludG8gYHtwcm9tcHR9YC4gKi9cbiAgcHJvbXB0Pzogc3RyaW5nO1xuICAvKiogV29ya2luZyBkaXJlY3RvcnkgdGhlIGNvbW1hbmQgcnVucyBpbiwgc3Vic3RpdHV0ZWQgKHNoZWxsLWVzY2FwZWQpIGludG8gYHtkaXJ9YC4gKi9cbiAgZGlyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBmcmVlLXRleHQgTExNIGNvbW1hbmQgdGVtcGxhdGUgYnkgc3Vic3RpdHV0aW5nIHRoZSBge3Byb21wdH1gIGFuZFxuICogYHtkaXJ9YCBwbGFjZWhvbGRlcnMgd2l0aCBzaGVsbC1lc2NhcGVkIHZhbHVlcy4gVW5maWxsZWQgcGxhY2Vob2xkZXJzIChhbmQgb25lXG4gKiBsZWFkaW5nIHdoaXRlc3BhY2UgcnVuKSBhcmUgc3RyaXBwZWQuIEEgdmFsdWUgd2l0aCBubyBtYXRjaGluZyBwbGFjZWhvbGRlciBpc1xuICogc2ltcGx5IG9taXR0ZWQgXHUyMDE0IGluIHBhcnRpY3VsYXIsIGEgc2VlZGVkIHByb21wdCBpcyBOT1QgYXBwZW5kZWQgdG8gYSB0ZW1wbGF0ZVxuICogdGhhdCBvbWl0cyBge3Byb21wdH1gIChhIGNvbW1hbmQgc3VjaCBhcyBgb3BlbiAtYSBpVGVybSB7ZGlyfWAgbXVzdCBub3QgcmVjZWl2ZVxuICogdGhlIHByb21wdCBhcyBhIHN0cmF5IGFyZ3VtZW50KS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVMbG1Db21tYW5kID0gKHRlbXBsYXRlOiBzdHJpbmcsIHsgcHJvbXB0LCBkaXIgfTogUmVzb2x2ZUxsbUNvbW1hbmRPcHRpb25zID0ge30pOiBzdHJpbmcgPT4ge1xuICBsZXQgcmVzb2x2ZWQgPSBzdWJzdGl0dXRlKHRlbXBsYXRlLCBkaXJQbGFjZWhvbGRlciwgZGlyKTtcblxuICByZXNvbHZlZCA9IHN1YnN0aXR1dGUocmVzb2x2ZWQsIHByb21wdFBsYWNlaG9sZGVyLCBwcm9tcHQpO1xuXG4gIHJldHVybiByZXNvbHZlZDtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGlubmVyIGNvbW1hbmQgdG8gcnVuLCBpbnNlcnRlZCAqKnJhdyoqIChpdCBpcyBhIGZ1bGwgY29tbWFuZFxuICAgKiBsaW5lLCBub3QgYW4gYXJndW1lbnQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb21tYW5kIHJ1bnMgaW4uIEJ1aWxkZXJzIHF1b3RlIGl0LCBzbyBhIHBhdGggd2l0aCBzcGFjZXMgaXMgc2FmZS4gKi9cbiAgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQZXItbGF1bmNoIGVudmlyb25tZW50IHRvIGFwcGx5LiBBIGZyZXNobHktb3BlbmVkIGV4dGVybmFsIHRlcm1pbmFsIHJ1bnMgaXRzXG4gICAqIG93biBzaGVsbCB0aGF0IGRvZXMgbm90IGluaGVyaXQgdGhlIGxhdW5jaGVyJ3MgZW52LCBzbyBhIGJ1aWxkZXIgaGFzIHRvIGNhcnJ5XG4gICAqIHRoZXNlIGludG8gdGhlIGxhdW5jaGVkIGNvbW1hbmQgaXRzZWxmIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIGFtYmllbnRcbiAgICogZW52aXJvbm1lbnQuIFJlYWxpc3RpY2FsbHkgc21hbGwgKGUuZy4ganVzdCBgS1VCRUNPTkZJR2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIFRoZSB1c2VyLWNvbmZpZ3VyZWQgc2hlbGwgKHRoZSBzYW1lIFwiU2hlbGwgUGF0aFwiIHRoZSBpbi1hcHAgdGVybWluYWwgdXNlcyksIHNvXG4gICAqIHRoZSBleHRlcm5hbCB0ZXJtaW5hbCBydW5zIHRoZSBjb21tYW5kIGluIFx1MjAxNCBhbmQgZHJvcHMgdGhlIHVzZXIgaW50byBcdTIwMTQgdGhhdFxuICAgKiBzaGVsbCByYXRoZXIgdGhhbiB0aGUgT1MvdGVybWluYWwgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsOiBzdHJpbmc7XG59XG5cbi8qKiBCdWlsZHMgdGhlIGZ1bGwgaG9zdCBjb21tYW5kIHRoYXQgb3BlbnMgYGNvbW1hbmRgIGluIGEgZnJlc2ggZXh0ZXJuYWwgdGVybWluYWwgd2luZG93IGZvciBvbmUgT1MuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEJ1aWxkZXIgPSAob3B0aW9uczogRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRPcHRpb25zKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogVGhlIGhvc3QgT1MncyB7QGxpbmsgRXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVyfS4gUmVnaXN0ZXJlZCBwZXItT1MgdmlhXG4gKiBgZ2V0SW5qZWN0YWJsZUZvck9wZXJhdGluZ1N5c3RlbXNgIChob3N0LW9ubHkgYCotb25seWAgdGFncyksIHNvIGluamVjdGluZyB0aGVcbiAqIHRva2VuIHlpZWxkcyB0aGUgYnVpbGRlciBmb3IgdGhlIGN1cnJlbnQgT1MgXHUyMDE0IG5vIHJ1bnRpbWUgcGxhdGZvcm0gc3dpdGNoLlxuICovXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxUZXJtaW5hbENvbW1hbmRCdWlsZGVySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBFeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEJ1aWxkZXI7XG59Pih7XG4gIGlkOiBcImV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmQtYnVpbGRlclwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5IH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU2hlbGxTY29wZWQgfSBmcm9tIFwiQGs4c2xlbnMvcGxhdGZvcm0tc3BlY2lmaWMtaW5qZWN0YWJsZXNcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCwgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKipcbiAqIFBlci1raW5kIGJ1aWxkZXIgZm9yIHRoZSBob3N0IGNvbW1hbmQgdGhhdCBvcGVucyBhbiBBSSB0b29sIGluIGEgZnJlc2ggZXh0ZXJuYWxcbiAqIHRlcm1pbmFsIHdpbmRvdy4gQ29udHJpYnV0ZWQgcGVyIHRvb2wgYnkgYGdldEFpVG9vbEluamVjdGFibGVCdW5jaGAgKHJlc29sdmVkXG4gKiB0byB0aGUgaG9zdCBPUydzIHZhcmlhbnQgZnJvbSB0aGUgdG9vbCdzIGBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmRgXG4gKiBwYXJhbSkuIENvbnN1bWVkIHZpYSB0aGUgZGVyaXZlZCBgc2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEluamVjdGlvblRva2VuYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwib3Blbi10b29sLWluLWV4dGVybmFsLXRlcm1pbmFsLWZvci10b29sXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoKGtpbmQ6IEFpVG9vbEtpbmQpID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPjtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gU2hlbGxTY29wZWQ8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kPj47XG4gIH0+KHtcbiAgICBpZDogYG9wZW4tdG9vbC1pbi1leHRlcm5hbC10ZXJtaW5hbC1mb3ItdG9vbC0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KSgpLFxuKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnkgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBTaGVsbFNjb3BlZCB9IGZyb20gXCJAazhzbGVucy9wbGF0Zm9ybS1zcGVjaWZpYy1pbmplY3RhYmxlc1wiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kLCBHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKlxuICogUGVyLWtpbmQgYnVpbGRlciBmb3IgdGhlIGNvbW1hbmQgdGhhdCBkZXRlY3RzIHdoZXRoZXIgYW4gQUkgdG9vbCBpcyBpbnN0YWxsZWRcbiAqIChlLmcuIGBjb21tYW5kIC12IGNsYXVkZWAgLyBgd2hlcmUgY2xhdWRlYCkuIENvbnRyaWJ1dGVkIHBlciB0b29sIGJ5XG4gKiBgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoYCAodGhlIGhvc3QgT1MncyB2YXJpYW50IHdoZW4gdGhlIHRvb2wnc1xuICogYGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZGAgaXMgb3BlcmF0aW5nLXN5c3RlbSBzcGVjaWZpYykuIFRoZSBkZXRlY3RlZFxuICogdG9vbHMgbGlzdCBydW5zIGl0IHZpYSBgYWlUb29sSW5zdGFsbGVkVmlhQ2xpQ29tbWFuZEluamVjdGlvblRva2VuYCAoZXhpdCBjb2RlXG4gKiAwIFx1MjFEMiBpbnN0YWxsZWQpLiBOb3QgY29udHJpYnV0ZWQgZm9yIGFsd2F5cy1hdmFpbGFibGUgdG9vbHMgKGUuZy4gQ3VzdG9tKSxcbiAqIHdoaWNoIGFyZSB0aGVuIHJlcG9ydGVkIGFzIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gU2hlbGxTY29wZWQ8R2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kPjtcbn0+KHtcbiAgaWQ6IFwiYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmRcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KSgoa2luZDogQWlUb29sS2luZCkgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBTaGVsbFNjb3BlZDxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+O1xuICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBTaGVsbFNjb3BlZDxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+PjtcbiAgfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmQtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoKSxcbik7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSU9ic2VydmFibGVWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5cbi8qKlxuICogVGhlIGdsb2JhbCBcIm9wZW4gQUkgdG9vbHMgaW4gYW4gZXh0ZXJuYWwgdGVybWluYWxcIiB0b2dnbGUuIFdoZW4gYHRydWVgLCB0aGVcbiAqIHNlbGVjdGVkIEFJIHRvb2wgbGF1bmNoZXMgaW4gYSBmcmVzaCBleHRlcm5hbCB0ZXJtaW5hbCB3aW5kb3cgXHUyMDE0IGJ1aWx0IGJ5IHRoZVxuICogaG9zdCBvcGVyYXRpbmcgc3lzdGVtJ3MgZXh0ZXJuYWwtdGVybWluYWwgY29tbWFuZCBidWlsZGVyIChyZXNvbHZlZCB2aWFcbiAqIGBzZWxlY3RlZEFpVG9vbEV4dGVybmFsVGVybWluYWxDb21tYW5kSW5qZWN0aW9uVG9rZW5gKSBhbmQgc3Bhd25lZCBkZXRhY2hlZCBvblxuICogdGhlIGhvc3QgXHUyMDE0IGluc3RlYWQgb2YgYSBMZW5zIHRlcm1pbmFsIHRhYi4gQXBwbGllcyB0byBldmVyeSB0b29sIChDdXN0b21cbiAqIGluY2x1ZGVkKSwgcmVwbGFjaW5nIHRoZSBmb3JtZXIgcGVyLXRvb2wgcnVucy1leHRlcm5hbGx5IGNhbGxiYWNrcy5cbiAqXG4gKiBQZXJzaXN0ZWQ7IHRoZSBib3ggbG9hZHMgYXN5bmNocm9ub3VzbHksIHNvIHRoZSB0b2tlbiByZXNvbHZlcyB0byBhIHByb21pc2VcbiAqIG9mIHRoZSBvYnNlcnZhYmxlLiBTdXBwb3J0ZWQgb24gbWFjT1MgKFRlcm1pbmFsKSwgV2luZG93cyAoV2luZG93cyBUZXJtaW5hbCksIGFuZFxuICogTGludXggKHRoZSBmaXJzdCBhdmFpbGFibGUgdGVybWluYWwgZW11bGF0b3IpLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sc09wZW5FeHRlcm5hbGx5SW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBQcm9taXNlPElPYnNlcnZhYmxlVmFsdWU8Ym9vbGVhbj4+O1xufT4oe1xuICBpZDogXCJhaS10b29scy1vcGVuLWV4dGVybmFsbHlcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGFibGUyLCBnZXRJbmplY3RhYmxlQnVuY2ggfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZHJvcERvd25NZW51SXRlbUluamVjdGlvblRva2VuLCB0eXBlIERyb3BEb3duTWVudUl0ZW0gfSBmcm9tIFwiQGs4c2xlbnMvZHJvcC1kb3duLW1lbnUtY29udHJhY3RzXCI7XG5pbXBvcnQgeyBjb21wdXRlZCwgdHlwZSBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IFN2Z1Byb3BzIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuICBBaVRvb2xLaW5kLFxuICBBaVRvb2xMaXN0RW50cnksXG4gIEdldENsaUNvbW1hbmQsXG4gIEdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZCxcbiAgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kLFxufSBmcm9tIFwiLi9haS10b29sXCI7XG5pbXBvcnQgeyBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlLCB0eXBlIE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYyB9IGZyb20gXCIuL29zLWFuZC1zaGVsbC1zcGVjaWZpY1wiO1xuaW1wb3J0IHsgYWlUb29sSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLWluamVjdGlvbi10b2tlblwiO1xuaW1wb3J0IHsgZ2V0QWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2dldC1haS1jb21tYW5kLWZvci10ZXJtaW5hbFwiO1xuaW1wb3J0IHsgZ2V0UmVzdW1lQWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2dldC1yZXN1bWUtYWktY29tbWFuZC1mb3ItdGVybWluYWxcIjtcbmltcG9ydCB7IGdldE9wZW5Ub29sSW5FeHRlcm5hbFRlcm1pbmFsRm9yVG9vbEluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vZ2V0LW9wZW4tdG9vbC1pbi1leHRlcm5hbC10ZXJtaW5hbC1mb3ItdG9vbFwiO1xuaW1wb3J0IHsgZ2V0QWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9nZXQtYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmRcIjtcbmltcG9ydCB7IGFpVG9vbE5hbWVJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtbmFtZVwiO1xuaW1wb3J0IHsgYWlUb29sRGlzcGxheU5hbWVJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtZGlzcGxheS1uYW1lXCI7XG5pbXBvcnQgeyBhaVRvb2xEZXNjcmlwdGlvbkluamVjdGlvblRva2VuLCB0eXBlIEFpVG9vbERlc2NyaXB0aW9uUHJvcHMgfSBmcm9tIFwiLi9haS10b29sLWRlc2NyaXB0aW9uXCI7XG5pbXBvcnQgeyBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLWljb25cIjtcbmltcG9ydCB7IGFpVG9vbE9yZGVyTnVtYmVySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9haS10b29sLW9yZGVyLW51bWJlclwiO1xuaW1wb3J0IHsgYWlUb29sU2V0dGluZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FpLXRvb2wtc2V0dGluZ3NcIjtcbmltcG9ydCB7IGFpVG9vbEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0luamVjdGlvblRva2VuIH0gZnJvbSBcIi4vYWktdG9vbC1pbnN0YWxsYXRpb24taW5zdHJ1Y3Rpb25zXCI7XG5pbXBvcnQgeyBhaVRvb2xJbnN0cnVjdGlvbnNGaWxlbmFtZUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWVcIjtcbmltcG9ydCB7IEFpVG9vbFNlbGVjdGlvblJvdyB9IGZyb20gXCIuL2FpLXRvb2wtc2VsZWN0aW9uLXJvd1wiO1xuaW1wb3J0IHsgYWlUb29sVG9wQmFyTWVudUtpbmQsIGFpVG9vbFRvcEJhck1lbnVPcmRlck51bWJlcnMgfSBmcm9tIFwiLi9haS10b29sLXRvcC1iYXItbWVudVwiO1xuaW1wb3J0IHsgZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9kZXRlY3RlZC1haS10b29sc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEFpVG9vbEljb24gfSBmcm9tIFwiLi9kZWZhdWx0LWFpLXRvb2wtaWNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbEJ1bmNoUGFyYW1zIHtcbiAgcmVhZG9ubHkga2luZDogQWlUb29sS2luZDtcbiAgLyoqIExvd2VyIGNvbWVzIGZpcnN0OyB0aGUgbG93ZXN0LW51bWJlcmVkIGluc3RhbGxlZCB0b29sIGlzIHRoZSBkZWZhdWx0LiAqL1xuICByZWFkb25seSBvcmRlck51bWJlcjogbnVtYmVyO1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBpbi1hcHAgbGF1bmNoIGNvbW1hbmQgKGtub3dzIGhvdyB0byBwYXNzIGB7cHJvbXB0fWApLiBBIHNpbmdsZVxuICAgKiBPUy1hZ25vc3RpYyBidWlsZGVyLCBvciBvbmUgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRDbGlDb21tYW5kOiBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8R2V0Q2xpQ29tbWFuZD47XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgdGhhdCAqcmVzdW1lcyogdGhlIHRvb2wgd2hlbiBpdHMgdGFiJ3Mgc2Vzc2lvbiBpc1xuICAgKiByZS1lc3RhYmxpc2hlZCAoZS5nLiBhZnRlciBhbiBhcHAgcmVzdGFydCkgcmF0aGVyIHRoYW4gZmlyc3Qgb3BlbmVkIFx1MjAxNCBlLmcuXG4gICAqIGBjbGF1ZGUgLS1jb250aW51ZSB8fCBjbGF1ZGVgLCB3aGljaCBjb250aW51ZXMgdGhlIHByaW9yIHNlc3Npb24gYW5kIGZhbGxzXG4gICAqIGJhY2sgdG8gYSBmcmVzaCBsYXVuY2ggd2hlbiB0aGVyZSBpcyBub25lLiBBIHRvb2wgd2l0aCBubyBkZWRpY2F0ZWQgcmVzdW1lXG4gICAqIGludm9jYXRpb24gcGFzc2VzIGl0cyBsYXVuY2ggY29tbWFuZC4gVXN1YWxseSBpZ25vcmVzIGBwcm9tcHRgLiBPUy1hZ25vc3RpYyxcbiAgICogb3Igb25lIGJ1aWxkZXIgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRSZXN1bWVDbGlDb21tYW5kOiBNYXliZU9wZXJhdGluZ1N5c3RlbUFuZFNoZWxsU3BlY2lmaWM8R2V0Q2xpQ29tbWFuZD47XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgdG9vbCBpcyBpbnN0YWxsZWQgKGUuZy5cbiAgICogYGNvbW1hbmQgLXYgY2xhdWRlYCAvIGB3aGVyZSBjbGF1ZGVgKSwgcnVuIG9uIHRoZSBob3N0IHdpdGggZXhpdCBjb2RlIDBcbiAgICogbWVhbmluZyBpbnN0YWxsZWQuIE9TLWFnbm9zdGljLCBvciBvbmUgYnVpbGRlciBwZXIgb3BlcmF0aW5nIHN5c3RlbS4gT21pdCBmb3JcbiAgICogYW4gYWx3YXlzLWF2YWlsYWJsZSB0b29sIChlLmcuIHRoZSBmcmVlLXRleHQgQ3VzdG9tIGNvbW1hbmQpLCB3aGljaCBpcyB0aGVuXG4gICAqIHJlcG9ydGVkIGFzIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZD86IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxHZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQ+O1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBjb21tYW5kIHRoYXQgb3BlbnMgdGhlIHRvb2wgaW4gYSBmcmVzaCBleHRlcm5hbCB0ZXJtaW5hbCB3aW5kb3cgXHUyMDE0XG4gICAqIHR5cGljYWxseSB3cmFwcGluZyB0aGUgdG9vbCdzIGludm9jYXRpb24gd2l0aCBhIGBidWlsZHtNYWMsV2luZG93cyxMaW51eH1FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZGBcbiAgICogaGVscGVyLiBPUy1hZ25vc3RpYywgb3Igb25lIGJ1aWxkZXIgcGVyIG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQ6IE1heWJlT3BlcmF0aW5nU3lzdGVtQW5kU2hlbGxTcGVjaWZpYzxHZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQ+O1xuICAvKiogQ2Fub25pY2FsIHBsYWluLXRleHQgZGlzcGxheSBuYW1lLCBlLmcuIGBcIkNsYXVkZSBDb2RlXCJgLiBEcml2ZXMgc3RyaW5nLW9ubHkgc2xvdHMgYW5kIHRoZSBkZWZhdWx0IG5hbWUgY29tcG9uZW50LiBEZWZhdWx0cyB0byBga2luZGAuICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCByaWNoIGRpc3BsYXktbmFtZSBjb21wb25lbnQ7IGRlZmF1bHRzIHRvIGEgZnJhZ21lbnQgb2YgdGhlIGRpc3BsYXkgbmFtZS4gKi9cbiAgcmVhZG9ubHkgTmFtZT86IFJlYWN0LkNvbXBvbmVudFR5cGU7XG4gIC8qKiBTaG9ydCBibHVyYiBpbnRyb2R1Y2luZyB0aGUgdG9vbCAoZS5nLiBgXCJUaGUgY29kaW5nIGFzc2lzdGFudCBieSBBbnRocm9waWNcImApLCBzaG93biBhcyB0aGUgc2VsZWN0b3IncyBzZWNvbmRhcnkgbGluZS4gUmVjZWl2ZXMgdGhlIHRvb2wncyBgaXNJbnN0YWxsZWRgIHN0YXRlIHNvIGl0IG1heSBvcHQgdG8gc2hvdyBhIFwiTm90IGZvdW5kIGluIFBBVEhcIiBtZXNzYWdlIGluc3RlYWQuIEEgY29tcG9uZW50IHNvIGl0IG1heSBpbmNsdWRlIG1hcmt1cC9saW5rcy4gRGVmYXVsdHMgdG8gbm90aGluZy4gKi9cbiAgcmVhZG9ubHkgRGVzY3JpcHRpb24/OiBSZWFjdC5Db21wb25lbnRUeXBlPEFpVG9vbERlc2NyaXB0aW9uUHJvcHM+O1xuICAvKiogSWNvbiBjb21wb25lbnQgKGRlZmF1bHRzIHRvIGEgZ2VuZXJpYyB0ZXJtaW5hbCBnbHlwaCkuIEFjY2VwdHMgYFN2Z1Byb3BzYCBzbyBjYWxsIHNpdGVzIGNhbiBzaXplIGl0LiAqL1xuICByZWFkb25seSBJY29uPzogUmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz47XG4gIC8qKiBTZXR0aW5ncyBjb21wb25lbnQgc2hvd24gYmVsb3cgdGhlIHNlbGVjdG9yIHdoZW4gdGhpcyBraW5kIGlzIHNlbGVjdGVkIChlLmcuIHRoZSBjdXN0b20gY29tbWFuZCBpbnB1dCkuICovXG4gIHJlYWRvbmx5IFNldHRpbmdzPzogUmVhY3QuQ29tcG9uZW50VHlwZTtcbiAgLyoqIEluc3RydWN0aW9ucyBzaG93biBiZWxvdyB0aGUgc2VsZWN0b3Igd2hlbiB0aGlzIGtpbmQgaXMgbm90IGluc3RhbGxlZCwgc28gaXQgYXBwZWFycyBkaXNhYmxlZCB3aXRoIGd1aWRhbmNlIGluc3RlYWQgb2YgaGlkZGVuLiBNYXkgY29udGFpbiBsaW5rcy4gKi9cbiAgcmVhZG9ubHkgSW5zdGFsbGF0aW9uSW5zdHJ1Y3Rpb25zPzogUmVhY3QuQ29tcG9uZW50VHlwZTtcbiAgLyoqIEZpbGVuYW1lIHRoZSB0b29sIGF1dG8tZGlzY292ZXJzIGluIGl0cyB3b3JraW5nIGRpcmVjdG9yeSAoZS5nLiBgXCJDTEFVREUubWRcImApLiBPbWl0IHdoZW4gdGhlIHRvb2wgcmVhZHMgbm8gc3VjaCBmaWxlOyB0aGUgbGF1bmNoZXIgYWx3YXlzIHdyaXRlcyB0aGUgY2Fub25pY2FsIGBBR0VOVFMubWRgLiAqL1xuICByZWFkb25seSBpbnN0cnVjdGlvbnNGaWxlbmFtZT86IHN0cmluZztcbn1cblxuLy8gVGhlIHRvb2wncyBpbnN0YWxsIHN0YXRlIGFzIHRoZSBsYXN0IHNjYW4gc2F3IGl0OiB0cnVlL2ZhbHNlIG9uY2Ugc2Nhbm5lZCxcbi8vIHVuZGVmaW5lZCB3aGlsZSBubyBzY2FuIGhhcyBkZXRlcm1pbmVkIGl0IHlldC5cbmNvbnN0IGRldGVjdGVkSW5zdGFsbFN0YXRlID0gKFxuICBkZXRlY3RlZEFpVG9vbHM6IElDb21wdXRlZFZhbHVlPEFpVG9vbExpc3RFbnRyeVtdPixcbiAga2luZDogQWlUb29sS2luZCxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4gZGV0ZWN0ZWRBaVRvb2xzLmdldCgpLmZpbmQoKHRvb2wpID0+IHRvb2wua2luZCA9PT0ga2luZCk/LmlzSW5zdGFsbGVkO1xuXG4vLyBBIHRvb2wncyBvd24gb3JkZXIgbnVtYmVyIG9ubHkgcGxhY2VzIGl0IHdpdGhpbiBpdHMgYmFuZDogQ3VzdG9tIGRlY2xhcmVzXG4vLyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB0byBzb3J0IGxhc3QsIHdoaWNoIG11c3Qgbm90IGxlYWsgaW50byBsYXRlciBiYW5kcy5cbmNvbnN0IGluU2VsZWN0aW9uQmFuZCA9IChiYW5kOiBudW1iZXIsIHRvb2xPcmRlck51bWJlcjogbnVtYmVyKSA9PlxuICBiYW5kICsgTWF0aC5tYXgoMCwgTWF0aC5taW4odG9vbE9yZGVyTnVtYmVyLCBhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzLmJhbmRXaWR0aCAtIDEpKTtcblxuLyoqXG4gKiBSZWdpc3RlciBhIHR5cGljYWwgTExNIENMSSB0b29sOiBpdHMga2luZCwgb3JkZXIsIHRoZSBjb21tYW5kcyAobGF1bmNoLCByZXN1bWUsXG4gKiBpbnN0YWxsLWNoZWNrLCBvcGVuLWV4dGVybmFsbHkpLCBkaXNwbGF5IG5hbWUsIGFuZCBpY29uLiBFYWNoIGNvbW1hbmQgbWF5IGJlIGFcbiAqIHNpbmdsZSBhZ25vc3RpYyBidWlsZGVyLCBvciB2YXJ5IHBlciBvcGVyYXRpbmcgc3lzdGVtIGFuZC9vciBzaGVsbCBcdTIwMTQgcmVnaXN0ZXJlZFxuICogdmlhIGBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlYDogdGhlIE9TIGlzIGZpbHRlcmVkIGF0IHJlZ2lzdHJhdGlvbiAoaG9zdC1vbmx5XG4gKiBgKi1vbmx5YCB0YWdzKSBhbmQgdGhlIHNoZWxsIGlzIHNlbGVjdGVkIGF0IHJ1bnRpbWUgKGByZXNvbHZlRm9yU2hlbGxgKSwgc2luY2VcbiAqIHRoZSBjb25maWd1cmVkIHNoZWxsIGlzIGFzeW5jLiBUaGUgZGV0ZWN0ZWQgdG9vbHMgbGlzdCBydW5zIHRoZSBpbnN0YWxsLWNoZWNrXG4gKiBjb21tYW5kIHZpYVxuICogYGFpVG9vbEluc3RhbGxlZFZpYUNsaUNvbW1hbmRJbmplY3Rpb25Ub2tlbmAgKG9taXQgdGhlIGNvbW1hbmQgZm9yIGFuXG4gKiBhbHdheXMtYXZhaWxhYmxlIHRvb2wpLiBCdW5kbGUgc2V2ZXJhbCB3aXRoXG4gKiBgZ2V0SW5qZWN0YWJsZUJ1bmNoKFsgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoKC4uLiksIC4uLiBdKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBaVRvb2xJbmplY3RhYmxlQnVuY2ggPSAocGFyYW1zOiBBaVRvb2xCdW5jaFBhcmFtcykgPT4ge1xuICAvLyBCdWlsdCBvbmNlIHBlciB0b29sIHNvIHRoZSBjb21wb25lbnQgcmVmcyBhcmUgc3RhYmxlIFx1MjAxNCBhIGZyZXNoIHJlZiBvbiBlYWNoXG4gIC8vIGluamVjdGlvbiB3b3VsZCByZW1vdW50IFJlYWN0IGFuZCBsb3NlIHN0YXRlLlxuICBjb25zdCBkaXNwbGF5TmFtZSA9IHBhcmFtcy5uYW1lID8/IHBhcmFtcy5raW5kO1xuICBjb25zdCBOYW1lQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlID1cbiAgICBwYXJhbXMuTmFtZSA/PyAoKCkgPT4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgZGlzcGxheU5hbWUpKTtcbiAgY29uc3QgRGVzY3JpcHRpb25Db21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8QWlUb29sRGVzY3JpcHRpb25Qcm9wcz4gPSBwYXJhbXMuRGVzY3JpcHRpb24gPz8gKCgpID0+IG51bGwpO1xuICBjb25zdCBJY29uQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFN2Z1Byb3BzPiA9IHBhcmFtcy5JY29uID8/IERlZmF1bHRBaVRvb2xJY29uO1xuICBjb25zdCBTZWxlY3Rpb25Sb3dDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGUgPSAoKSA9PlxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWlUb29sU2VsZWN0aW9uUm93LCB7IGtpbmQ6IHBhcmFtcy5raW5kIH0pO1xuICBjb25zdCBTZXR0aW5nc0NvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZSA9IHBhcmFtcy5TZXR0aW5ncyA/PyAoKCkgPT4gbnVsbCk7XG4gIGNvbnN0IEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZSA9IHBhcmFtcy5JbnN0YWxsYXRpb25JbnN0cnVjdGlvbnMgPz8gKCgpID0+IG51bGwpO1xuXG4gIHJldHVybiBnZXRJbmplY3RhYmxlQnVuY2goe1xuICAgIGFpVG9vbDogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKTogQWlUb29sS2luZCA9PiBwYXJhbXMua2luZCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJbmplY3Rpb25Ub2tlbixcbiAgICB9KSxcblxuICAgIG9yZGVyTnVtYmVyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtb3JkZXItbnVtYmVyLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKTogbnVtYmVyID0+IHBhcmFtcy5vcmRlck51bWJlcixcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xPcmRlck51bWJlckluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBnZXRDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgZ2V0LWFpLWNvbW1hbmQtZm9yLXRlcm1pbmFsLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluamVjdGlvblRva2VuOiBnZXRBaUNvbW1hbmRGb3JUZXJtaW5hbEluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgICB2YWx1ZTogcGFyYW1zLmdldENsaUNvbW1hbmQsXG4gICAgfSksXG5cbiAgICBnZXRSZXN1bWVDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgZ2V0LXJlc3VtZS1haS1jb21tYW5kLWZvci10ZXJtaW5hbC0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbmplY3Rpb25Ub2tlbjogZ2V0UmVzdW1lQWlDb21tYW5kRm9yVGVybWluYWxJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgICAgdmFsdWU6IHBhcmFtcy5nZXRSZXN1bWVDbGlDb21tYW5kLFxuICAgIH0pLFxuXG4gICAgZ2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgIGlkOiBgb3Blbi10b29sLWluLWV4dGVybmFsLXRlcm1pbmFsLWZvci10b29sLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluamVjdGlvblRva2VuOiBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbEZvclRvb2xJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgICAgdmFsdWU6IHBhcmFtcy5nZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbENsaUNvbW1hbmQsXG4gICAgfSksXG5cbiAgICBuYW1lOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtbmFtZS0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbnN0YW50aWF0ZTogKCkgPT4gKCkgPT4gTmFtZUNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIGRpc3BsYXlOYW1lOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtZGlzcGxheS1uYW1lLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKSA9PiBkaXNwbGF5TmFtZSxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xEaXNwbGF5TmFtZUluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBkZXNjcmlwdGlvbjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLWRlc2NyaXB0aW9uLSR7cGFyYW1zLmtpbmR9YCxcbiAgICAgIGluc3RhbnRpYXRlOiAoKSA9PiAoKSA9PiBEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xEZXNjcmlwdGlvbkluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgfSksXG5cbiAgICBpY29uOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtaWNvbi0ke3BhcmFtcy5raW5kfWAsXG4gICAgICBpbnN0YW50aWF0ZTogKCkgPT4gKCkgPT4gSWNvbkNvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIHNldHRpbmdzOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtc2V0dGluZ3MtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBSZWFjdC5Db21wb25lbnRUeXBlID0+IFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgaW5qZWN0aW9uVG9rZW46IGFpVG9vbFNldHRpbmdzSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIGluc3RhbGxhdGlvbkluc3RydWN0aW9uczogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhaS10b29sLWluc3RhbGxhdGlvbi1pbnN0cnVjdGlvbnMtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBSZWFjdC5Db21wb25lbnRUeXBlID0+IEluc3RhbGxhdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCxcbiAgICAgIGluamVjdGlvblRva2VuOiBhaVRvb2xJbnN0YWxsYXRpb25JbnN0cnVjdGlvbnNJbmplY3Rpb25Ub2tlbi5mb3IocGFyYW1zLmtpbmQpLFxuICAgIH0pLFxuXG4gICAgaW5zdHJ1Y3Rpb25zRmlsZW5hbWU6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgYWktdG9vbC1pbnN0cnVjdGlvbnMtZmlsZW5hbWUtJHtwYXJhbXMua2luZH1gLFxuICAgICAgaW5zdGFudGlhdGU6ICgpID0+ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gcGFyYW1zLmluc3RydWN0aW9uc0ZpbGVuYW1lLFxuICAgICAgaW5qZWN0aW9uVG9rZW46IGFpVG9vbEluc3RydWN0aW9uc0ZpbGVuYW1lSW5qZWN0aW9uVG9rZW4uZm9yKHBhcmFtcy5raW5kKSxcbiAgICB9KSxcblxuICAgIC8vIFRoZSB0b29sJ3Mgcm93cyBpbiB0aGUgQUkgdG9vbCBidXR0b24ncyBkcm9wLWRvd24gbWVudTogb25lIHBlciBiYW5kLCB0aGVcbiAgICAvLyB2aXNpYmlsaXR5IHN3aXRjaGluZyBvbiB0aGUgZGV0ZWN0ZWQgaW5zdGFsbCBzdGF0ZSBzbyB0aGUgdG9vbCBzaXRzIGluXG4gICAgLy8gd2hpY2hldmVyIGJhbmQgbWF0Y2hlcyBcdTIwMTQgYW5kIGluIG5laXRoZXIgd2hpbGUgbm8gc2NhbiBoYXMgZGV0ZXJtaW5lZCBpdC5cbiAgICAvLyBXaGF0IGEgcm93IGxvb2tzIGxpa2UgYW5kIGRvZXMgaXMgdGhlIEFpVG9vbFNlbGVjdGlvblJvdyBpbXBsZW1lbnRhdGlvbidzXG4gICAgLy8gYnVzaW5lc3MuXG4gICAgaW5zdGFsbGVkU2VsZWN0aW9uUm93OiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFpLXRvb2wtc2VsZWN0aW9uLXJvdy1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkQWlUb29scyA9IGRpLmluamVjdChkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbikoKTtcblxuICAgICAgICBjb25zdCBpdGVtOiBEcm9wRG93bk1lbnVJdGVtID0ge1xuICAgICAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LWluc3RhbGxlZC0ke3BhcmFtcy5raW5kfWAsXG4gICAgICAgICAgb3JkZXJOdW1iZXI6IGluU2VsZWN0aW9uQmFuZChhaVRvb2xUb3BCYXJNZW51T3JkZXJOdW1iZXJzLmluc3RhbGxlZEFpVG9vbEJhbmQsIHBhcmFtcy5vcmRlck51bWJlciksXG4gICAgICAgICAgaXNWaXNpYmxlOiBjb21wdXRlZCgoKSA9PiBkZXRlY3RlZEluc3RhbGxTdGF0ZShkZXRlY3RlZEFpVG9vbHMsIHBhcmFtcy5raW5kKSA9PT0gdHJ1ZSksXG4gICAgICAgICAgQ29tcG9uZW50OiBTZWxlY3Rpb25Sb3dDb21wb25lbnQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuICgpID0+ICgpID0+IGl0ZW07XG4gICAgICB9LFxuXG4gICAgICBpbmplY3Rpb25Ub2tlbjogZHJvcERvd25NZW51SXRlbUluamVjdGlvblRva2VuLmZvcihhaVRvb2xUb3BCYXJNZW51S2luZCksXG4gICAgfSksXG5cbiAgICBub3RJbnN0YWxsZWRTZWxlY3Rpb25Sb3c6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LW5vdC1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbZGV0ZWN0ZWRBaVRvb2xzSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGVjdGVkQWlUb29scyA9IGRpLmluamVjdChkZXRlY3RlZEFpVG9vbHNJbmplY3Rpb25Ub2tlbikoKTtcblxuICAgICAgICBjb25zdCBpdGVtOiBEcm9wRG93bk1lbnVJdGVtID0ge1xuICAgICAgICAgIGlkOiBgYWktdG9vbC1zZWxlY3Rpb24tcm93LW5vdC1pbnN0YWxsZWQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgICAgIG9yZGVyTnVtYmVyOiBpblNlbGVjdGlvbkJhbmQoYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVycy5ub3RJbnN0YWxsZWRBaVRvb2xCYW5kLCBwYXJhbXMub3JkZXJOdW1iZXIpLFxuICAgICAgICAgIGlzVmlzaWJsZTogY29tcHV0ZWQoKCkgPT4gZGV0ZWN0ZWRJbnN0YWxsU3RhdGUoZGV0ZWN0ZWRBaVRvb2xzLCBwYXJhbXMua2luZCkgPT09IGZhbHNlKSxcbiAgICAgICAgICBDb21wb25lbnQ6IFNlbGVjdGlvblJvd0NvbXBvbmVudCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gKCkgPT4gaXRlbTtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiBkcm9wRG93bk1lbnVJdGVtSW5qZWN0aW9uVG9rZW4uZm9yKGFpVG9vbFRvcEJhck1lbnVLaW5kKSxcbiAgICB9KSxcblxuICAgIC8vIFRoZSBpbnN0YWxsLWRldGVjdGlvbiBjb21tYW5kLCByZWdpc3RlcmVkIG9ubHkgd2hlbiB0aGUgdG9vbCBkZWNsYXJlcyBvbmU7XG4gICAgLy8gdGhlIGRldGVjdGVkLXRvb2xzIGxpc3QgcnVucyBpdCAoZXhpdCAwIFx1MjFEMiBpbnN0YWxsZWQpLiBBIHRvb2wgdGhhdCBkZWNsYXJlc1xuICAgIC8vIG5vbmUgKGUuZy4gQ3VzdG9tKSBpcyByZXBvcnRlZCBhcyBpbnN0YWxsZWQuXG4gICAgLi4uKHBhcmFtcy5nZXRBaVRvb2xJc0luc3RhbGxlZENsaUNvbW1hbmQgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7XG4gICAgICAgICAgYWlUb29sSXNJbnN0YWxsZWRDbGlDb21tYW5kOiBnZXRPc0FuZFNoZWxsQXdhcmVJbmplY3RhYmxlKHtcbiAgICAgICAgICAgIGlkOiBgYWktdG9vbC1pcy1pbnN0YWxsZWQtY2xpLWNvbW1hbmQtJHtwYXJhbXMua2luZH1gLFxuICAgICAgICAgICAgaW5qZWN0aW9uVG9rZW46IGdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZEluamVjdGlvblRva2VuLmZvcihwYXJhbXMua2luZCksXG4gICAgICAgICAgICB2YWx1ZTogcGFyYW1zLmdldEFpVG9vbElzSW5zdGFsbGVkQ2xpQ29tbWFuZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gIH0pO1xufTtcbiIsICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlLXJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEFpVG9vbEtpbmQgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWlUb29sU2VsZWN0aW9uUm93UHJvcHMge1xuICAvKiogVGhlIHRvb2wgdGhlIHJvdyByZXByZXNlbnRzLiAqL1xuICByZWFkb25seSBraW5kOiBBaVRvb2xLaW5kO1xufVxuXG4vKipcbiAqIE9uZSBBSSB0b29sJ3Mgcm93IGluIHRoZSB0b3AgYmFyIG1lbnUncyBzZWxlY3Rpb24gc2VjdGlvbjogaG93IHRoZSByb3cgbG9va3MgYW5kIHdoYXRcbiAqIGNsaWNraW5nIGl0IGRvZXMgKHNlbGVjdGluZyBhbiBpbnN0YWxsZWQgdG9vbCwgZ3VpZGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgbWlzc2luZ1xuICogb25lKS4gUmVnaXN0ZXJlZCBhZ2FpbnN0IHRoZSBtZW51IGF1dG9tYXRpY2FsbHksIHBlciB0b29sLCBieVxuICoge0BsaW5rIGdldEFpVG9vbEluamVjdGFibGVCdW5jaH07IHRoZSBmZWF0dXJlIG93bmluZyB0aGUgQUkgdG9vbCBidXR0b24gcHJvdmlkZXMgdGhlXG4gKiBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBnZW5lcmljIHBhY2thZ2Ugc3RheXMgZnJlZSBvZiBpdHMgdGVsZW1ldHJ5IGFuZCBlbnRpdGxlbWVudFxuICogY29uY2VybnMuXG4gKi9cbmV4cG9ydCBjb25zdCBBaVRvb2xTZWxlY3Rpb25Sb3cgPSBnZXRJbmplY3Rpb25Ub2tlbkNvbXBvbmVudDI8UmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8QWlUb29sU2VsZWN0aW9uUm93UHJvcHM+Pih7XG4gIGlkOiBcImFpLXRvb2wtc2VsZWN0aW9uLXJvd1wiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXREcm9wRG93bk1lbnVLaW5kIH0gZnJvbSBcIkBrOHNsZW5zL2Ryb3AtZG93bi1tZW51LWNvbnRyYWN0c1wiO1xuXG4vKipcbiAqIFRoZSBkcm9wLWRvd24gbWVudSBvZiB0aGUgdG9wIGJhcidzIEFJIHRvb2wgYnV0dG9uLiBUaGUgQUkgdG9vbCBzZWxlY3Rpb24gcm93cyBhcmVcbiAqIGNvbnRyaWJ1dGVkIGF1dG9tYXRpY2FsbHksIG9uZSBwZXIgcmVnaXN0ZXJlZCB0b29sLCBieSBgZ2V0QWlUb29sSW5qZWN0YWJsZUJ1bmNoYCBvZlxuICogYEBrOHNsZW5zL2FpLXRvb2xzLWNvbnRyYWN0c2A7IGFueW9uZSBlbHNlIGNvbnRyaWJ1dGVzIHRoZWlyIG93biBpdGVtcyB3aXRoXG4gKiBgZ2V0RHJvcERvd25NZW51SXRlbUluamVjdGFibGVCdW5jaGAgb2YgYEBrOHNsZW5zL2Ryb3AtZG93bi1tZW51LWNvbnRyYWN0c2AgYWdhaW5zdFxuICogdGhpcyBraW5kLCBwbGFjZWQgd2l0aCB7QGxpbmsgYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVyc30uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZXhwb3J0IGRlZmF1bHQgZ2V0RHJvcERvd25NZW51SXRlbUluamVjdGFibGVCdW5jaCh7XG4gKiAgIGlkOiBcIm15LWFpLW1lbnUtaXRlbVwiLFxuICogICBraW5kOiBhaVRvb2xUb3BCYXJNZW51S2luZCxcbiAqICAgb3JkZXJOdW1iZXI6IGFpVG9vbFRvcEJhck1lbnVPcmRlck51bWJlcnMuc2VjdGlvbkVuZCArIDEwMCxcbiAqICAgQ29tcG9uZW50OiBNeU1lbnVJdGVtLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbFRvcEJhck1lbnVLaW5kID0gZ2V0RHJvcERvd25NZW51S2luZCgpKFwiYWktdG9vbC10b3AtYmFyLW1lbnVcIik7XG5cbi8qKlxuICogV2hlcmUgdGhlIEFJIHRvb2wgc2VsZWN0aW9uIHNlY3Rpb24ncyBvd24gaXRlbXMgc2l0IGluIHRoZSBidXR0b24ncyBtZW51LCBhcyB0aGVcbiAqIGJvdW5kYXJpZXMgdGhleSBhcmUgbGFpZCBvdXQgYWdhaW5zdC4gVGhlIHNlbGVjdGlvbiByb3dzIG9jY3VweSB0d28gYmFuZHMsIGVhY2hcbiAqIGBiYW5kV2lkdGhgIHdpZGUsIHNvIHRoYXQgZXZlcnkgaW5zdGFsbGVkIHRvb2wgY29tZXMgYmVmb3JlIGV2ZXJ5IG5vdC15ZXQtaW5zdGFsbGVkXG4gKiBvbmUgd2hpbGUgZWFjaCBiYW5kIHN0YXlzIHNvcnRlZCBieSB0aGUgdG9vbHMnIG93biBvcmRlciBudW1iZXJzLlxuICpcbiAqIEEgY29udHJpYnV0b3IgcGxhY2VzIGl0c2VsZiByZWxhdGl2ZSB0byB0aGVzZSByYXRoZXIgdGhhbiBhZ2FpbnN0IGEgZ3Vlc3NlZCBudW1iZXIuXG4gKiBUaGUgc2VjdGlvbiBlbmRzIGF0IHtAbGluayBzZWN0aW9uRW5kfTogaXRlbXMgY29udHJpYnV0ZWQgYWZ0ZXIgaXQgcGljayB0aGVpciBvcmRlclxuICogbnVtYmVycyBmcm9tIHRoZXJlIHVwLCBmcmFtaW5nIHRoZWlyIG93biBzZWN0aW9ucyB3aXRoIHNlcGFyYXRvcnMgdGhleSBjb250cmlidXRlXG4gKiB0aGVtc2VsdmVzLlxuICovXG5leHBvcnQgY29uc3QgYWlUb29sVG9wQmFyTWVudU9yZGVyTnVtYmVycyA9IHtcbiAgLyoqIFRoZSBoZWFkaW5nIGFib3ZlIHRoZSBzZWxlY3Rpb24gcm93cy4gKi9cbiAgYWlUb29sc0hlYWRlcjogMTAwLFxuICAvKiogVGhlIHNjYW5uaW5nIGluZGljYXRvciBzaG93biB3aGlsZSB0aGUgZmlyc3QgZGV0ZWN0aW9uIGhhcyBub3Qgc2V0dGxlZC4gKi9cbiAgZGV0ZWN0aW9uUGVuZGluZzogMjAwLFxuICAvKiogVGhlIGZpcnN0IG9yZGVyIG51bWJlciBvZiB0aGUgYmFuZCBob2xkaW5nIHRoZSByb3dzIG9mIGluc3RhbGxlZCB0b29scy4gKi9cbiAgaW5zdGFsbGVkQWlUb29sQmFuZDogMzAwLFxuICAvKiogVGhlIGZpcnN0IG9yZGVyIG51bWJlciBvZiB0aGUgYmFuZCBob2xkaW5nIHRoZSByb3dzIG9mIG5vdC1pbnN0YWxsZWQgdG9vbHMuICovXG4gIG5vdEluc3RhbGxlZEFpVG9vbEJhbmQ6IDQwMCxcbiAgLyoqIEhvdyB3aWRlIGVhY2ggc2VsZWN0aW9uIGJhbmQgaXMsIGFuZCBzbyBob3cgZmFyIGEgdG9vbCdzIG93biBudW1iZXIgbWF5IHJlYWNoLiAqL1xuICBiYW5kV2lkdGg6IDEwMCxcbiAgLyoqIFRoZSBmaXJzdCBvcmRlciBudW1iZXIgcGFzdCB0aGUgd2hvbGUgc2VsZWN0aW9uIHNlY3Rpb24uICovXG4gIHNlY3Rpb25FbmQ6IDUwMCxcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xMaXN0RW50cnkgfSBmcm9tIFwiLi9haS10b29sXCI7XG5cbi8qKiBSZXNvbHZlcyB0aGUgc3luY2hyb25vdXNseSByZWFkYWJsZSBkZXRlY3RlZC10b29scyBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgRGV0ZWN0ZWRBaVRvb2xzID0gKCkgPT4gSUNvbXB1dGVkVmFsdWU8QWlUb29sTGlzdEVudHJ5W10+O1xuXG4vKipcbiAqIFRoZSBBSSB0b29scyB3aXRoIHRoZWlyIGRldGVjdGVkIGluc3RhbGwgc3RhdGUsIGFzIGEgc3luY2hyb25vdXNseSByZWFkYWJsZSByZWFjdGl2ZVxuICogbGlzdCBcdTIwMTQgdGhlIHNhbWUgc3RhdGUgYGFpVG9vbHNJbmplY3Rpb25Ub2tlbmAgZXhwb3NlcyBiZWhpbmQgYSBwcm9taXNlLCBmb3IgY29uc3VtZXJzXG4gKiB0aGF0IG5lZWQgc3luYyByZWFjdGl2aXR5IChlLmcuIHRoZSBgaXNWaXNpYmxlYCBjb21wdXRlZHMgb2YgbWVudSBpdGVtcykuIEVtcHR5IHVudGlsXG4gKiB0aGUgZmlyc3QgZXhwbGljaXQgc2NhbiAoYHJlZnJlc2hBaVRvb2xEZXRlY3Rpb25JbmplY3Rpb25Ub2tlbmApIGhhcyBydW47IGEga2luZFxuICogbWlzc2luZyBmcm9tIHRoZSBsaXN0IGhhcyBub3QgYmVlbiBzY2FubmVkIHlldC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdGVkQWlUb29sc0luamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogRGV0ZWN0ZWRBaVRvb2xzIH0+KHtcbiAgaWQ6IFwiZGV0ZWN0ZWQtYWktdG9vbHNcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sTGlzdEVudHJ5IH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHJlYWN0aXZlIGxpc3Qgb2YgYWxsIGNvbnRyaWJ1dGVkIEFJIHRvb2xzIHdpdGggaW5zdGFsbCBzdGF0ZS4gKi9cbmV4cG9ydCB0eXBlIEFpVG9vbHMgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEFpVG9vbExpc3RFbnRyeVtdPj47XG5cbi8qKlxuICogQWxsIGNvbnRyaWJ1dGVkIEFJIHRvb2wga2luZHMgdG9nZXRoZXIgd2l0aCB0aGVpciBkZXRlY3RlZCBpbnN0YWxsYXRpb25cbiAqIHN0YXRlLCBzb3J0ZWQgYnkgb3JkZXIgbnVtYmVyLiBDb25zdW1lZCBieSB0aGUgcHJlZmVyZW5jZXMgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xzSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xzIH0+KHtcbiAgaWQ6IFwiYWktdG9vbHNcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYXliZVJlc3VsdEZhY3RvcnkgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZ2V0RHJvcERvd25NZW51S2luZCB9IGZyb20gXCJAazhzbGVucy9kcm9wLWRvd24tbWVudS1jb250cmFjdHNcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBBaVRvb2xLaW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKipcbiAqIFRoZSBtZW51IGEgdG9vbCdzIG93biBjb25maWd1cmF0aW9uIGlzIG9mZmVyZWQgaW4sIG9wZW5lZCBmcm9tIHRoZSB0b29sJ3Mgcm93IGluXG4gKiB0aGUgQUkgdG9vbCBidXR0b24ncyBtZW51LiBPbmUga2luZCBmb3IgZXZlcnkgdG9vbDogdGhlIHJvdyBzYXlzIHdoaWNoIHRvb2wgaXRcbiAqIG9wZW5lZCB0aGUgbWVudSBmb3IsIGFuZCB0aGUgaXRlbSByZW5kZXJzIHRoYXQgdG9vbCdzIGBTZXR0aW5nc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xDb25maWd1cmF0aW9uTWVudUtpbmQgPSBnZXREcm9wRG93bk1lbnVLaW5kPHsgcmVhZG9ubHkga2luZDogQWlUb29sS2luZCB9PigpKFxuICBcImFpLXRvb2wtY29uZmlndXJhdGlvbi1tZW51XCIsXG4pO1xuXG4vKiogUmVzb2x2ZXMgd2hldGhlciB0aGUgdG9vbCBoYXMgdGhlIGNvbmZpZ3VyYXRpb24gaXQgbmVlZHMgdG8gcnVuLiAqL1xuZXhwb3J0IHR5cGUgQWlUb29sSXNDb25maWd1cmVkID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPj47XG5cbi8qKlxuICogV2hldGhlciBhIHRvb2wgaGFzIHRoZSBjb25maWd1cmF0aW9uIGl0IG5lZWRzIHRvIHJ1biBcdTIwMTQgdGhlIEN1c3RvbSBraW5kJ3NcbiAqIGZyZWUtdGV4dCBjb21tYW5kLCBmb3IgaW5zdGFuY2UsIGlzIG5vdGhpbmcgdW50aWwgdGhlIHVzZXIgd3JpdGVzIG9uZS5cbiAqXG4gKiBSZWdpc3RlcmVkIG9ubHkgYnkgdGhlIHRvb2xzIHRoYXQgbmVlZCBjb25maWd1cmluZzsgYSB0b29sIHdpdGggbm8gcmVnaXN0cmF0aW9uXG4gKiBuZWVkcyBub25lIGFuZCBpcyBhbHdheXMgcmVhZHkuIFJlZ2lzdGVyaW5nIG9uZSBpcyBhbHNvIHdoYXQgbWFrZXMgYSBzdXJmYWNlXG4gKiBvZmZlciB0aGUgdG9vbCdzIG93biBgU2V0dGluZ3NgLCBzbyBhIHRvb2wgY2FuIGJlIGNvbmZpZ3VyZWQgd2hlcmUgaXQgaXMgcGlja2VkXG4gKiByYXRoZXIgdGhhbiBpbiBvbmUgcGxhY2UgYWxvbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJc0NvbmZpZ3VyZWQgfT4oe1xuICBpZDogXCJhaS10b29sLWlzLWNvbmZpZ3VyZWQtZm9yLWtpbmRcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIixcbn0pKChraW5kOiBBaVRvb2xLaW5kKSA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBBaVRvb2xJc0NvbmZpZ3VyZWQ7IG1heWJlRmFjdG9yeTogTWF5YmVSZXN1bHRGYWN0b3J5PEFpVG9vbElzQ29uZmlndXJlZD4gfT4oe1xuICAgIGlkOiBgYWktdG9vbC1pcy1jb25maWd1cmVkLWZvci1raW5kLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIixcbiAgfSkoKSxcbik7XG5cbi8qKiBXaGF0IG9uZSB0b29sIHNheXMgYWJvdXQgY29uZmlndXJhdGlvbiBvZiBpdHMgb3duLCBhcyB0aGUgc3VyZmFjZXMgdGhhdCBnYXRlIG9uIGl0IG5lZWQgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZSB7XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIGhhcyBjb25maWd1cmF0aW9uIHRvIGZpbGwgaW4gYXQgYWxsLiAqL1xuICByZWFkb25seSBpc0NvbmZpZ3VyYWJsZTogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoYXQgY29uZmlndXJhdGlvbiBpcyB0aGVyZSB5ZXQuICovXG4gIHJlYWRvbmx5IGlzQ29uZmlndXJlZDogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSB0b29sIG1heSBiZSBwaWNrZWQ6IGl0IGVpdGhlciBuZWVkcyBubyBjb25maWd1cmF0aW9uLCBvciBoYXMgaXQuICovXG4gIHJlYWRvbmx5IGlzUmVhZHlUb1NlbGVjdDogSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG59XG5cbi8qKiBSZXNvbHZlcyBvbmUgdG9vbCdzIGNvbmZpZ3VyYXRpb24gc3RhdGUuICovXG5leHBvcnQgdHlwZSBBaVRvb2xDb25maWd1cmF0aW9uU3RhdGVGb3IgPSAoKSA9PiAoa2luZDogQWlUb29sS2luZCkgPT4gQWlUb29sQ29uZmlndXJhdGlvblN0YXRlO1xuXG4vKipcbiAqIFJlYWRzIHtAbGluayBhaVRvb2xJc0NvbmZpZ3VyZWRGb3JLaW5kSW5qZWN0aW9uVG9rZW59IG9uIGJlaGFsZiBvZiBldmVyeSBzdXJmYWNlXG4gKiB0aGF0IGdhdGVzIG9uIGl0IFx1MjAxNCB0aGUgQUkgdG9vbCBidXR0b24ncyBtZW51IGFuZCB0aGUgcHJlZmVyZW5jZXMgc2VsZWN0b3IgXHUyMDE0IHNvXG4gKiBvbmUgcnVsZSBpcyBub3QgZW5mb3JjZWQgaW4gb25lIHBsYWNlIGFuZCBtaXNzZWQgaW4gYW5vdGhlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGFpVG9vbENvbmZpZ3VyYXRpb25TdGF0ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogQWlUb29sQ29uZmlndXJhdGlvblN0YXRlRm9yO1xufT4oe1xuICBpZDogXCJhaS10b29sLWNvbmZpZ3VyYXRpb24tc3RhdGVcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlLCBJT2JzZXJ2YWJsZVZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBTdmdQcm9wcyB9IGZyb20gXCJAazhzbGVucy9lbGVtZW50LWNvbXBvbmVudHNcIjtcbmltcG9ydCB0eXBlIHsgQWlUb29sS2luZCwgR2V0Q2xpQ29tbWFuZCwgR2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIH0gZnJvbSBcIi4vYWktdG9vbFwiO1xuXG4vKiogUmVzb2x2ZXMgdGhlIHBlcnNpc3RlZCByYXcgc2VsZWN0aW9uOiBhIHRvb2wga2luZCwgYGN1c3RvbUFpVG9vbEtpbmRgLCBgbm9BaVRvb2xLaW5kYCwgb3IgYHVuZGVmaW5lZGAgKHVuc2V0KS4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdGVkQWlUb29sS2luZCA9ICgpID0+IFByb21pc2U8SU9ic2VydmFibGVWYWx1ZTxBaVRvb2xLaW5kIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogVGhlIHVzZXIncyBwZXJzaXN0ZWQgQUkgdG9vbCBzZWxlY3Rpb24uIEhvbGRzIGEgY29udHJpYnV0ZWQgdG9vbCBraW5kLCB0aGVcbiAqIGBjdXN0b21BaVRvb2xLaW5kYCBzZW50aW5lbCwgdGhlIGBub0FpVG9vbEtpbmRgIG9wdC1vdXQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmV2ZXJcbiAqIHNldC4gUmVhZC93cml0ZSBcdTIwMTQgdGhlIHByZWZlcmVuY2VzIHNlbGVjdG9yIGJpbmRzIHRvIGl0LlxuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRBaVRvb2xLaW5kSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBTZWxlY3RlZEFpVG9vbEtpbmQgfT4oe1xuICBpZDogXCJzZWxlY3RlZC1haS10b29sLWtpbmRcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSBzZWxlY3Rpb246IHRoZSByYXcgc2VsZWN0aW9uIGlmIGluc3RhbGxlZCwgZWxzZSBgbm9BaVRvb2xLaW5kYC4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbEtpbmQgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEFpVG9vbEtpbmQ+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIEFJIHRvb2wga2luZDogdGhlIHJhdyBzZWxlY3Rpb24gd2hlbiBpdCBpcyBhbiBpbnN0YWxsZWQga2luZCAoYVxuICogcmVhbCB0b29sIG9yIGBjdXN0b21BaVRvb2xLaW5kYCksIG90aGVyd2lzZSBgbm9BaVRvb2xLaW5kYC4gU28gYW4gdW5zZXRcbiAqIHNlbGVjdGlvbiwgYW4gZXhwbGljaXQgXCJObyBBSSB0b29sXCIsIGFuZCBhIHNlbGVjdGVkLWJ1dC11bmluc3RhbGxlZCB0b29sIGFsbFxuICogcmVzb2x2ZSB0byBgbm9BaVRvb2xLaW5kYCBcdTIwMTQgdGhlIGRlZmF1bHQgYW5kIHRoZSBmYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IGVmZmVjdGl2ZUFpVG9vbEtpbmRJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IEVmZmVjdGl2ZUFpVG9vbEtpbmQgfT4oe1xuICBpZDogXCJlZmZlY3RpdmUtYWktdG9vbC1raW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgY29tbWFuZCBidWlsZGVyLCBvciBgdW5kZWZpbmVkYCB3aGVuIEN1c3RvbSBvciBcIk5vIEFJIHRvb2xcIiBpcyBlZmZlY3RpdmUuICovXG5leHBvcnQgdHlwZSBTZWxlY3RlZEFpVG9vbENvbW1hbmQgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPEdldENsaUNvbW1hbmQgfCB1bmRlZmluZWQ+PjtcblxuLyoqXG4gKiBUaGUgY29tbWFuZCBidWlsZGVyIGZvciB0aGUgZWZmZWN0aXZlIHNlbGVjdGlvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVcbiAqIGVmZmVjdGl2ZSBzZWxlY3Rpb24gaXMgYGN1c3RvbUFpVG9vbEtpbmRgICh0aGUgY29uc3VtZXIgdGhlbiB1c2VzIGl0cyBvd25cbiAqIGZyZWUtdGV4dCBjb21tYW5kKSBvciBgbm9BaVRvb2xLaW5kYCAobm90aGluZyB0byBsYXVuY2gpLiBDb25zdW1lZCB3aGVuXG4gKiBsYXVuY2hpbmcgYW4gQUkgdG9vbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQWlUb29sQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xDb21tYW5kIH0+KHtcbiAgaWQ6IFwic2VsZWN0ZWQtYWktdG9vbC1jb21tYW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIHJlc3VtZSBjb21tYW5kIGJ1aWxkZXIsIG9yIGB1bmRlZmluZWRgIHdoZW4gaXQgaGFzIG5vIHJlc3VtZSBpbnZvY2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxHZXRDbGlDb21tYW5kIHwgdW5kZWZpbmVkPj47XG5cbi8qKlxuICogVGhlIGNvbW1hbmQgYnVpbGRlciB0aGF0ICpyZXN1bWVzKiB0aGUgZWZmZWN0aXZlIHNlbGVjdGlvbiAoZS5nLiBidWlsZGluZ1xuICogYGNsYXVkZSAtLWNvbnRpbnVlIHx8IGNsYXVkZWApLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlZmZlY3RpdmUgdG9vbCBkZWNsYXJlcyBub1xuICogcmVzdW1lIGludm9jYXRpb24uIENvbnN1bWVkIHdoZW4gcmUtZXN0YWJsaXNoaW5nIGFuIEFJIHRvb2wncyBzZXNzaW9uIFx1MjAxNCBhXG4gKiB0ZXJtaW5hbCB0YWIgcnVucyB0aGlzIGluc3RlYWQgb2YgdGhlIGxhdW5jaCBjb21tYW5kIGFmdGVyIGEgcmVzdGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQWlUb29sUmVzdW1lQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xSZXN1bWVDb21tYW5kO1xufT4oe1xuICBpZDogXCJzZWxlY3RlZC1haS10b29sLXJlc3VtZS1jb21tYW5kXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIFwib3BlbiBpbiBleHRlcm5hbCB0ZXJtaW5hbFwiIGNvbW1hbmQgYnVpbGRlciBmb3IgdGhlIGhvc3QgT1MuICovXG5leHBvcnQgdHlwZSBTZWxlY3RlZEFpVG9vbE9wZW5JbkV4dGVybmFsVGVybWluYWxDb21tYW5kID0gKCkgPT4gUHJvbWlzZTxcbiAgSUNvbXB1dGVkVmFsdWU8R2V0T3BlblRvb2xJbkV4dGVybmFsVGVybWluYWxDbGlDb21tYW5kIHwgdW5kZWZpbmVkPlxuPjtcblxuLyoqXG4gKiBUaGUgY29tbWFuZCBidWlsZGVyIHRoYXQgb3BlbnMgdGhlIGVmZmVjdGl2ZSBzZWxlY3RlZCB0b29sIGluIGEgZnJlc2ggZXh0ZXJuYWxcbiAqIHRlcm1pbmFsIHdpbmRvdywgZm9yIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIENvbnN1bWVkIHdoZW4gdGhlIGdsb2JhbCBcIm9wZW5cbiAqIEFJIHRvb2xzIGluIGFuIGV4dGVybmFsIHRlcm1pbmFsXCIgdG9nZ2xlIGlzIG9uIFx1MjAxNCB0aGUgY29uc3VtZXIgY2FsbHMgaXQgd2l0aFxuICogYHsgcHJvbXB0LCBkaXIsIGVudiB9YCBhbmQgc3Bhd25zIHRoZSByZXN1bHQgZGV0YWNoZWQuIFJlc29sdmVzIHRoZSB0b29sJ3NcbiAqIGhvc3QtT1MgdmFyaWFudCAobWFjT1MgVGVybWluYWwsIFdpbmRvd3MgVGVybWluYWwsIG9yIGEgTGludXggZmFsbGJhY2sgY2hhaW4pIHZpYVxuICogdGhlIHBlci1raW5kIGBnZXRPcGVuVG9vbEluRXh0ZXJuYWxUZXJtaW5hbEZvclRvb2xgIHRva2VuLlxuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogU2VsZWN0ZWRBaVRvb2xPcGVuSW5FeHRlcm5hbFRlcm1pbmFsQ29tbWFuZDtcbn0+KHtcbiAgaWQ6IFwic2VsZWN0ZWQtYWktdG9vbC1vcGVuLWluLWV4dGVybmFsLXRlcm1pbmFsLWNvbW1hbmRcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuXG4vKiogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSB0b29sJ3MgZGlzcGxheS1uYW1lIFJlYWN0IGNvbXBvbmVudC4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbE5hbWUgPSAoKSA9PiBQcm9taXNlPElDb21wdXRlZFZhbHVlPFJlYWN0LkNvbXBvbmVudFR5cGU+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBkaXNwbGF5LW5hbWUgY29tcG9uZW50IChlLmcuIHJlbmRlcnMgXCJDbGF1ZGVcbiAqIENvZGVcIikuIERyaXZlcyB0aGUgUmVhY3Qgc3VyZmFjZXMgdGhhdCBuYW1lIHRoZSBBSSB0b29sIFx1MjAxNCBcIkFzayA8bmFtZT5cIlxuICogYnV0dG9ucyBhbmQgdGhlIHRvcC1iYXIgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBlZmZlY3RpdmVBaVRvb2xOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xOYW1lIH0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtbmFtZVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG5cbi8qKiBSZXNvbHZlcyB0aGUgZWZmZWN0aXZlIHRvb2wncyBwbGFpbi10ZXh0IGRpc3BsYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lID0gKCkgPT4gUHJvbWlzZTxJQ29tcHV0ZWRWYWx1ZTxzdHJpbmc+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBwbGFpbi10ZXh0IG5hbWUsIGZvciBzdHJpbmctb25seSBzbG90cyB0aGF0XG4gKiBjYW5ub3QgcmVuZGVyIHRoZSBSZWFjdCBuYW1lIGNvbXBvbmVudCAoZS5nLiB0aGUgY29tbWFuZC1wYWxldHRlIGVudHJ5IHRpdGxlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVmZmVjdGl2ZUFpVG9vbERpc3BsYXlOYW1lSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xEaXNwbGF5TmFtZTtcbn0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtZGlzcGxheS1uYW1lXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgdG9vbCdzIGljb24gY29tcG9uZW50LiAqL1xuZXhwb3J0IHR5cGUgRWZmZWN0aXZlQWlUb29sSWNvbiA9ICgpID0+IFByb21pc2U8SUNvbXB1dGVkVmFsdWU8UmVhY3QuQ29tcG9uZW50VHlwZTxTdmdQcm9wcz4+PjtcblxuLyoqXG4gKiBUaGUgZWZmZWN0aXZlIHNlbGVjdGVkIHRvb2wncyBpY29uIGNvbXBvbmVudCwgc2hvd24gd2hlcmV2ZXIgdGhlIHRvb2wgaXMgb2ZmZXJlZFxuICogKHRoZSBcIkFzayA8bmFtZT5cIiBidXR0b25zIGFuZCB0aGUgdG9wLWJhciBidXR0b24pIGluIHBsYWNlIG9mIGEgZml4ZWQgYnJhbmRcbiAqIGljb24uXG4gKi9cbmV4cG9ydCBjb25zdCBlZmZlY3RpdmVBaVRvb2xJY29uSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBFZmZlY3RpdmVBaVRvb2xJY29uIH0+KHtcbiAgaWQ6IFwiZWZmZWN0aXZlLWFpLXRvb2wtaWNvblwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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eEcsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUNmLENBQUMsRUFBRTtBQVdJLElBQU0sd0NBQW9DLHdDQUEyRDtBQUFBLEVBQzFHLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDLEVBQUU7QUFXSSxJQUFNLDBDQUFzQyx3Q0FBNkQ7QUFBQSxFQUM5RyxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBV0ksSUFBTSxnREFBNEMsd0NBRXREO0FBQUEsRUFDRCxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBZUksSUFBTSxnRUFBNEQsd0NBRXRFO0FBQUEsRUFDRCxJQUFJO0FBQUEsRUFDSixhQUFhO0FBQ2YsQ0FBQyxFQUFFO0FBVUksSUFBTSx3Q0FBb0Msd0NBQTJEO0FBQUEsRUFDMUcsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUNmLENBQUMsRUFBRTtBQVNJLElBQU0sK0NBQTJDLHdDQUVyRDtBQUFBLEVBQ0QsSUFBSTtBQUFBLEVBQ0osYUFBYTtBQUNmLENBQUMsRUFBRTtBQVVJLElBQU0sd0NBQW9DLHdDQUEyRDtBQUFBLEVBQzFHLElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDLEVBQUU7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9wdWJsaWNfdXRpbGl0aWVzIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9kcm9wX2Rvd25fbWVudV9jb250cmFjdHMiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiUmVhY3QiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiaW1wb3J0X2luamVjdGFibGUiLCAiaW1wb3J0X2Ryb3BfZG93bl9tZW51X2NvbnRyYWN0cyIsICJpbXBvcnRfaW5qZWN0YWJsZSJdCn0K
@@ -91,7 +91,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
91
91
  textOverflow?: "clip" | "ellipsis" | "default";
92
92
  };
93
93
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
94
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
94
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
95
95
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
96
96
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
97
97
  $grid?: import("@k8slens/element-components").GridProps;
@@ -182,7 +182,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
182
182
  textOverflow?: "clip" | "ellipsis" | "default";
183
183
  };
184
184
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
185
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
185
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
186
186
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
187
187
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
188
188
  $grid?: import("@k8slens/element-components").GridProps;
@@ -273,7 +273,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
273
273
  textOverflow?: "clip" | "ellipsis" | "default";
274
274
  };
275
275
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
276
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
276
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
277
277
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
278
278
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
279
279
  $grid?: import("@k8slens/element-components").GridProps;
@@ -366,7 +366,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
366
366
  textOverflow?: "clip" | "ellipsis" | "default";
367
367
  };
368
368
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
369
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
369
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
370
370
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
371
371
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
372
372
  $grid?: import("@k8slens/element-components").GridProps;
@@ -457,7 +457,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
457
457
  textOverflow?: "clip" | "ellipsis" | "default";
458
458
  };
459
459
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
460
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
460
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
461
461
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
462
462
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
463
463
  $grid?: import("@k8slens/element-components").GridProps;
@@ -548,7 +548,7 @@ export declare const aiToolIconInjectionToken: import("@k8slens/injectable").Inj
548
548
  textOverflow?: "clip" | "ellipsis" | "default";
549
549
  };
550
550
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
551
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
551
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
552
552
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
553
553
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
554
554
  $grid?: import("@k8slens/element-components").GridProps;
@@ -423,7 +423,7 @@ export declare const getAiToolInjectableBunch: (params: AiToolBunchParams) => {
423
423
  textOverflow?: "clip" | "ellipsis" | "default";
424
424
  };
425
425
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
426
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
426
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
427
427
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
428
428
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
429
429
  $grid?: import("@k8slens/element-components").GridProps;
@@ -437,8 +437,8 @@ export declare const getAiToolInjectableBunch: (params: AiToolBunchParams) => {
437
437
  settings: import("@k8slens/injectable").Injectable2<() => React.ComponentType>;
438
438
  installationInstructions: import("@k8slens/injectable").Injectable2<() => React.ComponentType>;
439
439
  instructionsFilename: import("@k8slens/injectable").Injectable2<() => string | undefined>;
440
- installedSelectionRow: import("@k8slens/injectable").Injectable2<() => DropDownMenuItem<void>>;
441
- notInstalledSelectionRow: import("@k8slens/injectable").Injectable2<() => DropDownMenuItem<void>>;
440
+ installedSelectionRow: import("@k8slens/injectable").Injectable2<() => () => DropDownMenuItem>;
441
+ notInstalledSelectionRow: import("@k8slens/injectable").Injectable2<() => () => DropDownMenuItem>;
442
442
  aiToolIsInstalledCliCommand?: {
443
443
  posix: import("@k8slens/injectable").Injectable2<() => {
444
444
  shellFamily: import("@k8slens/public-utilities").ShellFamily;
@@ -165,7 +165,7 @@ export declare const effectiveAiToolIconInjectionToken: import("@k8slens/injecta
165
165
  textOverflow?: "clip" | "ellipsis" | "default";
166
166
  };
167
167
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
168
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
168
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
169
169
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
170
170
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
171
171
  $grid?: import("@k8slens/element-components").GridProps;
@@ -256,7 +256,7 @@ export declare const effectiveAiToolIconInjectionToken: import("@k8slens/injecta
256
256
  textOverflow?: "clip" | "ellipsis" | "default";
257
257
  };
258
258
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
259
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
259
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
260
260
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
261
261
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
262
262
  $grid?: import("@k8slens/element-components").GridProps;
@@ -347,7 +347,7 @@ export declare const effectiveAiToolIconInjectionToken: import("@k8slens/injecta
347
347
  textOverflow?: "clip" | "ellipsis" | "default";
348
348
  };
349
349
  $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
350
- $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
350
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | `${number}%` | import("@k8slens/element-components").$WidthProps;
351
351
  $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
352
352
  $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
353
353
  $grid?: import("@k8slens/element-components").GridProps;