@dbx-tools/appkit-mastra 0.9.54 → 0.9.60

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/README.md CHANGED
@@ -761,7 +761,9 @@ MLflow reporting, OTel tracing, or the official AI SDK chat route.
761
761
  `observability.buildObservability()` wires Mastra tracing when OTLP export is
762
762
  configured. `mlflow.resolveFeedbackEnabled()` turns MLflow feedback on when both
763
763
  trace export and an MLflow experiment are configured, unless the plugin config
764
- forces a value. The plugin also stamps each chat turn's request/response onto
764
+ forces a value. Explicit `feedback: true` requires `MLFLOW_EXPERIMENT_ID` or
765
+ `MLFLOW_EXPERIMENT_NAME` and fails app startup when neither is available. The
766
+ plugin also stamps each chat turn's request/response onto
765
767
  the request's exported root span via `telemetry.attachChatTurnTelemetry()` so
766
768
  MLflow's UC `*_trace_unified` view can show them. It uses AppKit's HTTP server
767
769
  span when present and creates one request-lifetime fallback span otherwise.
@@ -917,6 +919,7 @@ use Mastra's native route surfaces behind the same scoped request-context gate.
917
919
  | `POST` | `/memory/messages/delete` | Native message deletion used before regenerating a response. |
918
920
  | `GET` | `/agents/:agentId/suspended-runs` | Native persisted approval discovery after a reload or restart. |
919
921
  | `POST` | `/route/feedback` | Log a thumbs / comment assessment to the turn's MLflow trace. `404` when feedback is off. |
922
+ | `GET` | `/route/mlflow-experiment` | Return the experiment URL only when the active viewer has effective `CAN_MANAGE`; otherwise `{ "url": null }`. |
920
923
  | `POST` / `GET` | `/mcp`, `/sse`, `/messages` | MCP transports, when `mcp` is enabled. |
921
924
 
922
925
  The UI consumes `/chat/:agentId` with the AI SDK's `DefaultChatTransport`.
@@ -969,6 +972,7 @@ requiring callers to assemble a Mastra server by hand.
969
972
  names are resolved through Databricks Model Serving.
970
973
  - `feedback` controls whether MLflow feedback routes are exposed. The automatic
971
974
  mode enables feedback when tracing and an MLflow experiment are configured.
975
+ Explicit `true` fails startup unless an experiment id or name is configured.
972
976
  - `mcp` controls whether agents are exposed as MCP tools and how that server is
973
977
  named.
974
978
  - `genieIdentity` picks the Databricks identity the agents' workspace calls run
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
6
- export const PACKAGE_VERSION = "0.9.54";
6
+ export const PACKAGE_VERSION = "0.9.60";
7
7
  export * as agents from "./src/agents.ts";
8
8
  export * as chart from "./src/chart.ts";
9
9
  export * as chat from "./src/chat.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
2
- export declare const PACKAGE_VERSION = "0.9.54";
2
+ export declare const PACKAGE_VERSION = "0.9.60";
3
3
  export * as agents from "./src/agents.ts";
4
4
  export * as chart from "./src/chart.ts";
5
5
  export * as chat from "./src/chat.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
5
- export const PACKAGE_VERSION = "0.9.54";
5
+ export const PACKAGE_VERSION = "0.9.60";
6
6
  export * as agents from "./src/agents.js";
7
7
  export * as chart from "./src/chart.js";
8
8
  export * as chat from "./src/chat.js";
@@ -57,4 +57,4 @@ export { TYPOGRAPHY_RULE } from "./src/style.js";
57
57
  export { TITLE_INSTRUCTIONS } from "./src/summarize.js";
58
58
  export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR, CHAT_MESSAGES_ATTR, CHAT_RESPONSE_ATTR, CHAT_IDENTITY_ATTR, CHAT_GENIE_USED_ATTR } from "./src/telemetry.js";
59
59
  export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.js";
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7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LE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNTRcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbFBhdGhzIGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0ICogYXMgc3RhdGVtZW50IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCAqIGFzIHN0b3JhZ2VTY2hlbWEgZnJvbSBcIi4vc3JjL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5leHBvcnQgKiBhcyBzdHlsZSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCAqIGFzIHN1bW1hcml6ZSBmcm9tIFwiLi9zcmMvc3VtbWFyaXplLnRzXCI7XG5leHBvcnQgKiBhcyB0ZWxlbWV0cnkgZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYU1jcENvbmZpZywgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgbW9kZWxDYXRhbG9ndWVEZWZhdWx0cywgZ2VuaWVTdWdnZXN0aW9uRGVmYXVsdHMsIHN0YXRlbWVudERhdGFEZWZhdWx0cywgY2hhcnRGZXRjaERlZmF1bHRzLCBmZWVkYmFja1dyaXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRXZhbERyaXZlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0IHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0dFTklFX0FMSUFTLCBHRU5JRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVTcGFjZUNvbmZpZywgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB7IElERU5USVRZX0VOViwgSURFTlRJVFlfTU9ERVMsIERFRkFVTFRfSURFTlRJVFlfTU9ERSwgVVNFUl9JRF9IRUFERVIsIFVTRVJfRU1BSUxfSEVBREVSLCByZXF1ZXN0VXNlcklkLCByZXF1ZXN0VXNlckVtYWlsLCB1c2VTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXNvbHZlZE1jcCB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB7IE1lbW9yeUJ1aWxkZXIgfSBmcm9tIFwiLi9zcmMvbWVtb3J5LnRzXCI7XG5leHBvcnQgdHlwZSB7IExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBDSEFUX01FU1NBR0VTX0FUVFIsIENIQVRfUkVTUE9OU0VfQVRUUiwgQ0hBVF9JREVOVElUWV9BVFRSLCBDSEFUX0dFTklFX1VTRURfQVRUUiB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFJc3N1ZXMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TS0lMTF9GT0xERVJTIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV29ya3NwYWNlTW91bnRDb250ZXh0LCBTa2lsbEZvbGRlclZhbHVlLCBTa2lsbEZvbGRlck9wdGlvbnMsIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uLCBXb3Jrc3BhY2VNb3VudFJlc29sdmVyLCBEZWZhdWx0U2tpbGxGb2xkZXJOYW1lLCBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uLCBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGFBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNMLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRKLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqTCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3pMLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNjBcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbFBhdGhzIGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0ICogYXMgc3RhdGVtZW50IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCAqIGFzIHN0b3JhZ2VTY2hlbWEgZnJvbSBcIi4vc3JjL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5leHBvcnQgKiBhcyBzdHlsZSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCAqIGFzIHN1bW1hcml6ZSBmcm9tIFwiLi9zcmMvc3VtbWFyaXplLnRzXCI7XG5leHBvcnQgKiBhcyB0ZWxlbWV0cnkgZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYU1jcENvbmZpZywgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgbW9kZWxDYXRhbG9ndWVEZWZhdWx0cywgZ2VuaWVTdWdnZXN0aW9uRGVmYXVsdHMsIHN0YXRlbWVudERhdGFEZWZhdWx0cywgY2hhcnRGZXRjaERlZmF1bHRzLCBmZWVkYmFja1dyaXRlRGVmYXVsdHMgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRXZhbERyaXZlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0IHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0dFTklFX0FMSUFTLCBHRU5JRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVTcGFjZUNvbmZpZywgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB7IElERU5USVRZX0VOViwgSURFTlRJVFlfTU9ERVMsIERFRkFVTFRfSURFTlRJVFlfTU9ERSwgVVNFUl9JRF9IRUFERVIsIFVTRVJfRU1BSUxfSEVBREVSLCByZXF1ZXN0VXNlcklkLCByZXF1ZXN0VXNlckVtYWlsLCB1c2VTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXNvbHZlZE1jcCB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB7IE1lbW9yeUJ1aWxkZXIgfSBmcm9tIFwiLi9zcmMvbWVtb3J5LnRzXCI7XG5leHBvcnQgdHlwZSB7IExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBDSEFUX01FU1NBR0VTX0FUVFIsIENIQVRfUkVTUE9OU0VfQVRUUiwgQ0hBVF9JREVOVElUWV9BVFRSLCBDSEFUX0dFTklFX1VTRURfQVRUUiB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFJc3N1ZXMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TS0lMTF9GT0xERVJTIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV29ya3NwYWNlTW91bnRDb250ZXh0LCBTa2lsbEZvbGRlclZhbHVlLCBTa2lsbEZvbGRlck9wdGlvbnMsIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uLCBXb3Jrc3BhY2VNb3VudFJlc29sdmVyLCBEZWZhdWx0U2tpbGxGb2xkZXJOYW1lLCBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uLCBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbiJdfQ==
@@ -426,9 +426,10 @@ export interface MastraPluginConfig extends BasePluginConfig {
426
426
  * is named (the same signals the observability pipeline needs to
427
427
  * ship traces to MLflow). Otherwise off, since there'd be no trace
428
428
  * to attach feedback to.
429
- * - `true`: force on. Feedback controls show and writes are attempted
430
- * regardless of env detection (use when the env is configured in a
431
- * way the auto-probe doesn't recognize).
429
+ * - `true`: force on. Requires `MLFLOW_EXPERIMENT_ID` or
430
+ * `MLFLOW_EXPERIMENT_NAME`; app startup fails when neither is configured.
431
+ * Use this when trace export is wired in a way the auto-probe does not
432
+ * recognize.
432
433
  * - `false`: force off. No trace-id header, no feedback route, no UI.
433
434
  *
434
435
  * Feedback attaches to a turn's MLflow trace via the OpenTelemetry
package/lib/src/config.js CHANGED
@@ -206,7 +206,7 @@ export const MASTRA_CONFIG_SCHEMA = {
206
206
  },
207
207
  feedback: {
208
208
  type: "boolean",
209
- description: "Log thumbs / comment assessments to MLflow and surface the feedback controls. Defaults to on only when an OTLP endpoint and MLFLOW_EXPERIMENT_ID or MLFLOW_EXPERIMENT_NAME are set.",
209
+ description: "Log thumbs / comment assessments to MLflow and surface the feedback controls. Defaults to on only when an OTLP endpoint and MLFLOW_EXPERIMENT_ID or MLFLOW_EXPERIMENT_NAME are set. Explicit true fails startup unless an experiment id or name is configured.",
210
210
  },
211
211
  mcp: {
212
212
  type: ["boolean", "object"],
@@ -230,4 +230,4 @@ export const MASTRA_CONFIG_SCHEMA = {
230
230
  },
231
231
  },
232
232
  };
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsd0JBQXdCO0NBQ3pCLENBQUM7QUFRRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0M7SUFDekUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7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QUMzQixXQUFXLEVBQ1QscUhBQXFIO1NBQ3hIO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUpBQXFKO1NBQ3hKO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUxBQXFMO1NBQ3hMO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUMzQixXQUFXLEVBQ1QsNEpBQTRKO1NBQy9KO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCwyRUFBMkU7WUFDM0UsMEVBQTBFO1lBQzFFLElBQUksRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ3pCLFdBQVcsRUFDVCw2ZkFBNmY7U0FDaGdCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFDVCxxT0FBcU87U0FDeE87UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCwwSUFBMEk7U0FDN0k7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsdWdpbiBjb25maWd1cmF0aW9uIHR5cGVzIGFuZCBzaGFyZWQgYFJlcXVlc3RDb250ZXh0YCBrZXlzLlxuICpcbiAqIE93bnMgdGhlIHR5cGVkIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0XG4gKiBjb25maWcpIGFuZCB7QGxpbmsgTUFTVFJBX0NPTkZJR19TQ0hFTUF9LCB0aGUgSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0XG4gKiBwdWJsaXNoZXMgZm9yIGl0IHNvIHNjYWZmb2xkaW5nIHRvb2xzIGFuZCBhZ2VudHMgY2FuIHJlYWQgdGhlIG9wdGlvbiBzZXQuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQgaXMgZXhwbGljaXQgcGx1Z2luIGNvbmZpZywgdGhlbiB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlIG5hbWVkIG9uIHRoZSBmaWVsZCwgdGhlbiBhIGJ1aWx0LWluIGRlZmF1bHQuXG4gKlxuICogS2VwdCBpbiBhIGxlYWYgbW9kdWxlIHNvIGBwbHVnaW4udHNgLCBgc2VydmVyLnRzYCwgYG1vZGVsLnRzYCwgYW5kXG4gKiBgbWVtb3J5LnRzYCBjYW4gaW1wb3J0IHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIGN5Y2xlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIEJhc2VQbHVnaW5Db25maWcsIHR5cGUgQ29uZmlnU2NoZW1hIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50Q29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBnVmVjdG9yQ29uZmlnLCBQb3N0Z3Jlc1N0b3JlQ29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVRvb2xzIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vZ2VuaWUudHNcIjtcbmltcG9ydCB7IElERU5USVRZX01PREVTLCB0eXBlIE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlbW90ZVNraWxsc09wdGlvbiB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc2FuZGJveC50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHJlc29sdmVkIEFwcEtpdCB1c2VyLiBgbW9kZWwudHNgIHJlYWRzIGl0IHRvIG1pbnQgdXNlci1zY29wZWRcbiAqIERhdGFicmlja3MgdG9rZW5zLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfS0VZID0gXCJtYXN0cmFfX3VzZXJcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleXMgZm9yIEFwcEtpdCB1c2VyIG1ldGFkYXRhIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBTdXJmYWNlZCBhcyB0cmFjZSBtZXRhZGF0YSB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gdHJhY2VzIGFyZSBmaWx0ZXJhYmxlIGJ5IHdob1xuICogaXNzdWVkIHRoZSByZXF1ZXN0IHdpdGhvdXQgbGVha2luZyB0aGUgZnVsbCB1c2VyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX05BTUVfS0VZID0gXCJtYXN0cmFfX3VzZXJOYW1lXCI7XG4vKiogUmVxdWVzdC1jb250ZXh0IGtleSBjb250YWluaW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0VNQUlMX0tFWSA9IFwibWFzdHJhX191c2VyRW1haWxcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgdGhlIHBlci1IVFRQLXJlcXVlc3QgaWQgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFJlYWRzIGBYLVJlcXVlc3QtSWRgIGZyb20gdGhlIGluY29taW5nXG4gKiBoZWFkZXJzIHdoZW4gcHJlc2VudCAoc28gYW4gdXBzdHJlYW0gbG9hZCBiYWxhbmNlciAvIEFQSSBnYXRld2F5XG4gKiBjYW4ga2VlcCBpdHMgdHJhY2UgY29ycmVsYXRpb24pLCBmYWxscyBiYWNrIHRvIGEgZnJlc2hseSBtaW50ZWRcbiAqIFVVSUQuIEVjaG9lZCBiYWNrIG9uIHRoZSByZXNwb25zZSBhbmQgc3VyZmFjZWQgb24gZXZlcnkgc3BhbiB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gbG9ncyBhbmQgdHJhY2VzIHNoYXJlIGFcbiAqIGpvaW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1JFUVVFU1RfSURfS0VZID0gXCJtYXN0cmFfX3JlcXVlc3RJZFwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IGZvciBPQXV0aCBzY29wZXMgcGFyc2VkIGZyb20gdGhlIGZvcndhcmRlZFxuICogYWNjZXNzIHRva2VuIGJ5IHtAbGluayBNYXN0cmFTZXJ2ZXIuY29uZmlndXJlUmVxdWVzdENvbnRleHRTY29wZXN9LlxuICogV29ya3NwYWNlIG1vdW50cyB0aGF0IHRvdWNoIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzIHJlcXVpcmVcbiAqIGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2AgaW4gdGhpcyBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1NDT1BFU19LRVkgPSBcIm1hc3RyYV9fc2NvcGVzXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIGxpc3Qgb2YgYFJlcXVlc3RDb250ZXh0YCBrZXlzIHdlIHdhbnQgTWFzdHJhIHRvIGV4dHJhY3RcbiAqIGFzIG1ldGFkYXRhIG9uIGV2ZXJ5IG9ic2VydmFiaWxpdHkgc3BhbiAoYWdlbnQgcnVucywgbW9kZWwgY2FsbHMsXG4gKiB0b29sIGludm9jYXRpb25zLCB3b3JrZmxvdyBzdGVwcykuXG4gKlxuICogTWlycm9ycyB7QGxpbmsgaHR0cHM6Ly9tYXN0cmEuYWkvZG9jcy9vYnNlcnZhYmlsaXR5L3RyYWNpbmcvb3ZlcnZpZXcjYXV0b21hdGljLW1ldGFkYXRhLWZyb20tcmVxdWVzdGNvbnRleHR9OlxuICogcGFzc2VkIHZlcmJhdGltIGludG8gYE9ic2VydmFiaWxpdHkuY29uZmlnc1sqXS5yZXF1ZXN0Q29udGV4dEtleXNgLFxuICogc28gYW55IGtleSBsaXN0ZWQgaGVyZSBpcyByZWFkIGZyb20gYFJlcXVlc3RDb250ZXh0YCBhdCB0cmFjZVxuICogc3RhcnQgYW5kIGF0dGFjaGVkIGFzIHNjYWxhciBzcGFuIG1ldGFkYXRhLiBLZWVwIHRoZSBzZXQgdG8gcGxhaW5cbiAqIHNjYWxhcnMgLSBuZXZlciBpbmNsdWRlIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9IChpdCBjYXJyaWVzIHRoZVxuICogZnVsbCBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgd2l0aCBhIGBXb3Jrc3BhY2VDbGllbnRgIHJlZmVyZW5jZSkuXG4gKlxuICogT3JkZXIgaXMgcHVyZWx5IGNvc21ldGljOyBNYXN0cmEgZGUtZHVwZXMgaW50ZXJuYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSxcbiAgTUFTVFJBX1RIUkVBRF9JRF9LRVksXG4gIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgLy8gTW9kZWwgb3ZlcnJpZGUga2V5IGlzIG93bmVkIGJ5IGBzZXJ2aW5nLnRzYDsgc3BlbGxlZCBpbmxpbmUgaGVyZVxuICAvLyBzbyB0aGlzIG1vZHVsZSBzdGF5cyBsZWFmLWxldmVsIChubyBjeWNsZXMgd2l0aCBgc2VydmluZy50c2ApLlxuICBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIixcbl07XG5cbi8qKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgcGx1cyB0aGUgY2Fub25pY2FsIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2U7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGlkZW50aXR5IGZvciBhbiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQ6IHRoZSBPQk8gdXNlciBpZCBvbiBhXG4gKiB1c2VyLXNjb3BlZCBjYWxsLCB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChjb250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQ7XG59XG5cbi8qKlxuICogV2hvIGEgdHVybiBpcyBBVFRSSUJVVEVEIHRvLCB3aGljaCBpcyBub3QgYWx3YXlzIHdob3NlIERhdGFicmlja3MgY3JlZGVudGlhbFxuICogcnVucyBpdC4gQW4gT0JPIGNvbnRleHQncyBvd24gdXNlciBpZCBpcyBhdXRob3JpdGF0aXZlLiBVbmRlciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsLCBldmVyeSBjYWxsZXIgc2hhcmVzIG9uZSBjcmVkZW50aWFsLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgaXNcbiAqIHdoYXQga2VlcHMgbWVtb3J5IHRocmVhZHMgYW5kIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZXMgZGlzdGluY3Q7IHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwgaWQgaXMgdGhlIGZsb29yIHdoZW4gbm8gdXNlciB3YXMgZm9yd2FyZGVkLlxuICpcbiAqIFRoaXMgcnVsZSBoYXMgdG8gYmUgaWRlbnRpY2FsIGV2ZXJ5d2hlcmUgYSBjYWNoZSBrZXkgaXMgYnVpbHQsIHNvIGJvdGggdGhlXG4gKiB3cml0ZSBzaWRlICh0aGUgYFJlcXVlc3RDb250ZXh0YCB1c2VyIHN0YW1wZWQgYnkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYClcbiAqIGFuZCB0aGUgcmVhZCBzaWRlICh0aGUgcGx1Z2luJ3Mgb3duIEFwcEtpdCByb3V0ZXMsIHdoaWNoIGhhdmUgYSByZXF1ZXN0IGJ1dFxuICogbm8gYFJlcXVlc3RDb250ZXh0YCkgZGVyaXZlIHRoZWlyIGtleSBmcm9tIHRoaXMgb25lIGZ1bmN0aW9uLiBXaGVuIHRoZSB0d29cbiAqIGRpc2FncmVlZCwgYSBjaGFydCB3cml0dGVuIHVuZGVyIHRoZSBmb3J3YXJkZWQgdXNlciBpZCB3YXMgcmVhZCBiYWNrIHVuZGVyXG4gKiB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgYW5kIHRoZSBlbWJlZCByb3V0ZSBhbnN3ZXJlZCA0MDQsIHdoaWNoIHRoZSBjaGF0IFVJXG4gKiByZW5kZXJzIGFzIGFuIGV4cGlyZWQgY2hhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVkVXNlcklkKFxuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UsXG4gIGZvcndhcmRlZFVzZXJJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmIChcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0KSByZXR1cm4gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbiAgcmV0dXJuIGZvcndhcmRlZFVzZXJJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGV2ZXJ5IHBlci11c2VyIGNhY2hlIGVudHJ5IGlzIG5hbWVzcGFjZWQgdW5kZXIsIHNvIGFuIE9CTyByZXN1bHRcbiAqIGNhbm5vdCBiZSByZWFkIGJhY2sgYnkgYW5vdGhlciBjYWxsZXIuXG4gKlxuICogUHJlZmVycyB0aGUge0BsaW5rIFVzZXJ9IHRoYXQge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RhbXBzIG9uIHRoZSByZXF1ZXN0XG4gKiBjb250ZXh0LCB3aG9zZSBpZCBhbHJlYWR5IGZvbGxvd3Mge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9LiBUaGUgTUNQIHRyYW5zcG9ydFxuICogcm91dGVzIGRvIG5vdCB0aHJlYWQgdGhhdCBjb250ZXh0IGludG8gdG9vbCBleGVjdXRpb24sIHNvIHRob3NlIGZhbGwgYmFjayB0b1xuICogdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHQgKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsKS4gQSBjYWxsZXIgaG9sZGluZyBhbiBleHByZXNzIHJlcXVlc3Qgc2hvdWxkIGJ1aWxkIGl0cyBrZXkgZnJvbVxuICoge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9IGluc3RlYWQsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpcyBub3QgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIHJldHVybiB1c2VyPy5pZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG59XG5cbi8qKiBQZ1ZlY3RvciBjb25maWcgd2l0aCBhbiBvcHRpb25hbCBNYXN0cmEgc3RvcmUgaWQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFNZW1vcnlDb25maWcgPSBQZ1ZlY3RvckNvbmZpZyAmIHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEZpbmUtZ3JhaW5lZCBjb250cm9sIGZvciB0aGUgb3B0aW9uYWwgTUNQIHNlcnZlciBleHBvc3VyZVxuICogKHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcubWNwfSkuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsOyB0aGUgb2JqZWN0XG4gKiBmb3JtIG9ubHkgbmVlZHMgdG8gc2V0IHdoYXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFNY3BDb25maWcge1xuICAvKipcbiAgICogU2VydmVyIGlkIHVzZWQgaW4gdGhlIHJvdXRlIHBhdGggKGAvbWNwLzxzZXJ2ZXJJZD4vLi4uYCkgYW5kIGFzIHRoZVxuICAgKiBNQ1AgcmVnaXN0cnkgaWQuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyByZWdpc3RlcmVkIG5hbWUuXG4gICAqL1xuICBzZXJ2ZXJJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBhZHZlcnRpc2VkIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBgXCI8ZGlzcGxheU5hbWU+IE1DUFwiYC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFNlbWFudGljIHZlcnNpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiMS4wLjBcImAuICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhZHZlcnRpc2VkIG92ZXIgTUNQLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cG9zZSBldmVyeSByZWdpc3RlcmVkIGFnZW50IGFzIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhpcyBpcyB0aGUgXCJsZXZlcmFnZSB0aGUgTWFzdHJhIGFnZW50cyBvdmVyXG4gICAqIE1DUFwiIGJlaGF2aW9yIG1vc3QgY2FsbGVycyB3YW50LlxuICAgKi9cbiAgYWdlbnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFsc28gZXhwb3NlIHRoZSBwbHVnaW4ncyBhbWJpZW50IHRvb2xzICh0aGUgYnVpbHQtaW4gYHJlbmRlcl9kYXRhYFxuICAgKiBwbHVzIGFueXRoaW5nIGluIGBjb25maWcudG9vbHNgKSBhcyBNQ1AgdG9vbHMuIERlZmF1bHRzIHRvIGBmYWxzZWA6XG4gICAqIHRoZSBhbWJpZW50IHRvb2xzIGFzc3VtZSBhbiBpbi1wcm9jZXNzIGNoYXQgdHVybiAodGhleSBwdWJsaXNoXG4gICAqIHdyaXRlciBldmVudHMgdGhlIGNoYXQgVUkgY29uc3VtZXMpLCBzbyB0aGV5IGFyZW4ndCB1c2VmdWwgdG8gYVxuICAgKiBzdGFuZGFsb25lIE1DUCBjbGllbnQuIFR1cm4gdGhpcyBvbiBvbmx5IHdoZW4gdGhvc2UgdG9vbHMgYXJlIHNhZmVcbiAgICogdG8gY2FsbCBvdXQtb2YtYmFuZC5cbiAgICovXG4gIHRvb2xzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIHRvb2xzIHRvIGV4cG9zZSBvdmVyIE1DUCBiZXlvbmQgdGhlIGFnZW50IC8gYW1iaWVudCBzZXRzLlxuICAgKiBVc2UgdGhpcyBmb3IgdG9vbHMgd3JpdHRlbiBzcGVjaWZpY2FsbHkgZm9yIE1DUCBjb25zdW1lcnMuXG4gICAqL1xuICBleHRyYVRvb2xzPzogTWFzdHJhVG9vbHM7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGFjY2VwdGVkIGJ5IHRoZSBNYXN0cmEgQXBwS2l0IHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKiBNYXN0cmEgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgaWQuIERlZmF1bHRzIHRvIGBcImRhdGFicmlja3NcImA7IG5vIGVudiBmYWxsYmFjay4gKi9cbiAgcHJvdmlkZXJJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc3RncmVzU3RvcmUgZm9yIE1hc3RyYSB0aHJlYWRzL21lc3NhZ2VzLiBgdHJ1ZWAgcmV1c2VzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBib29sZWFuIHwgUG9zdGdyZXNTdG9yZUNvbmZpZztcbiAgLyoqXG4gICAqIFBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgbWVtb3J5IHJlY2FsbC4gYHRydWVgIHJldXNlcyB0aGVcbiAgICogYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuXG4gICAqL1xuICBtZW1vcnk/OiBib29sZWFuIHwgTWFzdHJhTWVtb3J5Q29uZmlnO1xuICAvKipcbiAgICogU2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveC5cbiAgICogYHRydWVgIHNlbGVjdHMgRGF0YWJyaWNrcyB3aXRoIGRlZmF1bHRzLCBhbiBvYmplY3QgY29uZmlndXJlcyBpdHMgbGlmZWN5Y2xlLFxuICAgKiBhbmQgYGZhbHNlYCBkaXNhYmxlcyB3b3Jrc3BhY2UgY29tbWFuZCBleGVjdXRpb24uIEFuIGFnZW50IHdpdGggYW4gZXhwbGljaXRcbiAgICogY3VzdG9tIGB3b3Jrc3BhY2VgIGtlZXBzIHRoYXQgd29ya3NwYWNlIGFuZCBpdHMgc2FuZGJveC5cbiAgICovXG4gIHNhbmRib3g/OiBib29sZWFuIHwgXCJkYXRhYnJpY2tzXCIgfCBcIm1vbnR5XCIgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnM7XG4gIC8qKlxuICAgKiBDb2RlLWRlZmluZWQgYWdlbnRzLiBBY2NlcHRzIHRocmVlIHNoYXBlcyBmb3IgY29udmVuaWVuY2U6XG4gICAqXG4gICAqIC0gKipSZWNvcmQqKjogYHsgYW5hbHlzdDogZGVmLCBoZWxwZXI6IGRlZiB9YCAtIGtleXMgYmVjb21lIHRoZVxuICAgKiAgIHJlZ2lzdGVyZWQgaWRzIGFuZCB0aGUgZmlyc3Qga2V5IGlzIHRoZSBkZWZhdWx0LlxuICAgKiAtICoqU2luZ2xlIGRlZmluaXRpb24qKjogYGRlZmAgLSByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYFwiZGVmYXVsdFwiYCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKSBhbmRcbiAgICogICBhdXRvbWF0aWNhbGx5IG1hcmtlZCBhcyB0aGUgZGVmYXVsdCBhZ2VudC5cbiAgICogLSAqKkFycmF5Kio6IGBbZGVmMSwgZGVmMl1gIC0gZWFjaCByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYGFnZW50XyR7aX1gIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQpO1xuICAgKiAgIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgZGVmYXVsdC5cbiAgICpcbiAgICogRWFjaCBlbnRyeSBiZWNvbWVzIGEgTWFzdHJhIGBBZ2VudGAgcmVhY2hhYmxlIGF0XG4gICAqIGAvYXBpLzxwbHVnaW4+L3JvdXRlL2NoYXQvPGlkPmAgKHRoZSBjaGF0IHJvdXRlIGFsc28gbWF0Y2hlc1xuICAgKiBgOmFnZW50SWRgKS4gV2hlbiBgYWdlbnRzYCBpcyBvbWl0dGVkIGVudGlyZWx5LCB0aGUgcGx1Z2luXG4gICAqIHJlZ2lzdGVycyBhIHNpbmdsZSBidWlsdC1pbiBgZGVmYXVsdGAgYW5hbHlzdCBzbyB0aGUgYmFyZVxuICAgKiBgbWFzdHJhKClgIGNhbGwgc3RpbGwgbW91bnRzIGEgd29ya2luZyBjaGF0IGVuZHBvaW50LlxuICAgKlxuICAgKiBAZXhhbXBsZSBTaW5nbGUtYWdlbnQgc2hvcnRoYW5kXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBBcnJheVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogW1xuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImFuYWx5c3RcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImhlbHBlclwiLCBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBSZWNvcmQgKGV4cGxpY2l0IGlkcylcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IHtcbiAgICogICAgIGFuYWx5c3Q6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgaGVscGVyOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICB9LFxuICAgKiAgIGRlZmF1bHRBZ2VudDogXCJhbmFseXN0XCIsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFnZW50cz86XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24+XG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25cbiAgICB8IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogQW1iaWVudCB0b29scyBzcHJlYWQgaW50byBldmVyeSByZWdpc3RlcmVkIGFnZW50J3MgdG9vbHMgcmVjb3JkO1xuICAgKiBwZXItYWdlbnQgdG9vbHMgd2luIG9uIGtleSBjb2xsaXNpb24uIFVzZSBmb3IgYSBzbWFsbCBzaGFyZWRcbiAgICogbGlicmFyeTsgZm9yIHBlci1hZ2VudCB0b29scyBzZXQgYGFnZW50c1tpZF0udG9vbHNgIGluc3RlYWQuXG4gICAqL1xuICB0b29scz86IE1hc3RyYVRvb2xzO1xuICAvKipcbiAgICogQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgZG9lc24ndCBzcGVjaWZ5IG9uZSAodGhlIGJhcmUsXG4gICAqIHVuLXN1ZmZpeGVkIGhpc3RvcnkgLyBzdWdnZXN0aW9ucyByb3V0ZXMgcmVzb2x2ZSB0byBpdCkuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBrZXkgaW4gYGFnZW50c2AgKG9yIGBcImRlZmF1bHRcImAgd2hlblxuICAgKiBgYWdlbnRzYCBpcyBvbWl0dGVkKS4gTXVzdCBtYXRjaCBhbiBpZCBpbiBgYWdlbnRzYCB3aGVuIGJvdGggYXJlXG4gICAqIHNldDsgYSBtaXNtYXRjaCB0aHJvd3MgYXQgc2V0dXAgd2l0aCB0aGUgYXZhaWxhYmxlIGNhbmRpZGF0ZXMuXG4gICAqL1xuICBkZWZhdWx0QWdlbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbHVnaW4tbGV2ZWwgZGVmYXVsdCBtb2RlbCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzXG4gICAqIG93biBgbW9kZWxgLiBNaXJyb3JzIEFwcEtpdCdzIGBhZ2VudHMoeyBkZWZhdWx0TW9kZWwgfSlgLlxuICAgKlxuICAgKiAtIGBzdHJpbmdgOiBzaG9ydGhhbmQgZm9yIFwidXNlIHRoZSBPQk8gYXV0by1yZXNvbHZlciBidXQgc3dhcCB0aGVcbiAgICogICBgbW9kZWxJZGBcIiAoZS5nLiBgXCJkYXRhYnJpY2tzLWNsYXVkZS1zb25uZXQtNC02XCJgKS5cbiAgICogLSBBbnkgb3RoZXIgTWFzdHJhIGBEeW5hbWljQXJndW1lbnQ8TWFzdHJhTW9kZWxDb25maWc+YDogcGFzc2VkXG4gICAqICAgdGhyb3VnaCB2ZXJiYXRpbS4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCBmdWxsIGNvbnRyb2wgb3ZlciBhdXRoXG4gICAqICAgb3IgYHByb3ZpZGVySWRgLlxuICAgKlxuICAgKiBSZXNvbHV0aW9uIG9yZGVyIHBlciBhZ2VudDogYGRlZi5tb2RlbGAg4oaSIGBkZWZhdWx0TW9kZWxgIOKGklxuICAgKiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgIOKGkiBidWlsdC1pbiBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICAgKiByZXNvbHZlci5cbiAgICovXG4gIGRlZmF1bHRNb2RlbD86IEFnZW50Q29uZmlnW1wibW9kZWxcIl0gfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyAoYFwiY2xhdWRlIHNvbm5ldFwiYCkgYWdhaW5zdCB0aGUgd29ya3NwYWNlJ3NcbiAgICogTW9kZWwgU2VydmluZyBlbmRwb2ludHMuIERlZmF1bHRzIHRvIGB0cnVlYDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBTZXQgYGZhbHNlYCB0byByZXF1aXJlIGV4YWN0IGVuZHBvaW50IG5hbWVzIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKipcbiAgICogRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLlxuICAgKiBEZWZhdWx0cyB0byBgMC40YDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBMb3dlciB2YWx1ZXMgcmVqZWN0IGxvb3NlIG1hdGNoZXM7IHJhaXNlIGl0IGlmIHlvdSBoYXZlIGEgc3ByYXdsaW5nXG4gICAqIGVuZHBvaW50IGNhdGFsb2d1ZSB3aXRoIHNpbWlsYXItbG9va2luZyBuYW1lcy5cbiAgICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBEZWZhdWx0cyB0byA1IG1pbnV0ZXM7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogVGhlIGNhY2hlIGlzIHBlciB3b3Jrc3BhY2UgaG9zdCBhbmQgc2hhcmVkIGFjcm9zcyB1c2VyczsgY29uY3VycmVudFxuICAgKiBjYWxsZXJzIGNvYWxlc2NlIG9uIGEgc2luZ2xlIGluLWZsaWdodCBmZXRjaC5cbiAgICovXG4gIG1vZGVsQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIExldCBjbGllbnRzIHBpY2sgdGhlIGJhY2tpbmcgZW5kcG9pbnQgcGVyIHJlcXVlc3QuIERlZmF1bHRzIHRvIGB0cnVlYDtcbiAgICogbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBSZWFkcyB0aGUgYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIHRoZSBgP21vZGVsPWAgcXVlcnkgc3RyaW5nLCBvciBhXG4gICAqIGBtb2RlbGAgYm9keSBmaWVsZCwgaW4gdGhhdCBvcmRlci4gRGlzYWJsZSB3aGVuIHJ1bm5pbmcgbXVsdGktdGVuYW50XG4gICAqIHdoZXJlIHVudHJ1c3RlZCBjbGllbnRzIHNob3VsZG4ndCBjaG9vc2UgdGhlIGVuZHBvaW50LlxuICAgKi9cbiAgbW9kZWxPdmVycmlkZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmlvcml0eS1vcmRlcmVkIGxpc3Qgb2YgZW5kcG9pbnQgbmFtZXMgdHJpZWQgKmZpcnN0KiB3aGVuIG5vXG4gICAqIGFnZW50IC8gcGx1Z2luIC8gZW52IC8gcmVxdWVzdC1vdmVycmlkZSBtb2RlbCBpZCBpcyBzZXQsIGFoZWFkIG9mXG4gICAqIHRoZSBkeW5hbWljIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLiBUaGUgcmVzb2x2ZXIgcGlja3MgdGhlXG4gICAqIGZpcnN0IGlkIHRoYXQgaXMgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlJ3NcbiAgICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZy5cbiAgICpcbiAgICogV2hlbiB1bnNldCwgcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhlIGxpdmUgRm91bmRhdGlvbiBNb2RlbCBBUElcbiAgICogYHF1YWxpdHlgIC8gYHNwZWVkYCAvIGBjb3N0YCBzY29yZXM6IGVuZHBvaW50cyBhcmUgY2xhc3NpZmllZCBpbnRvXG4gICAqIGNoYXQgY2xhc3NlcyAoYGNsYXNzaWZ5RW5kcG9pbnRzYCkgYW5kIHdhbGtlZCBiZXN0LWZpcnN0XG4gICAqIChDaGF0VGhpbmtpbmcgLT4gQ2hhdEJhbGFuY2VkIC0+IENoYXRGYXN0KS4gVGhlIGF1dG9tYXRpYyBkZWZhdWx0IGlzXG4gICAqIGxpdmUtb25seSBhbmQgZmFpbHMgd2hlbiBubyBtYXRjaGluZyBlbmRwb2ludCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgKiBTZXQgdGhpcyB0byBwaW4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHRvIGFuIGFwcHJvdmVkIHN1YnNldCwgb3IgdG8gcHV0XG4gICAqIGN1c3RvbSBlbmRwb2ludHMgaW4gZnJvbnQgb2YgdGhlIGF1dG8tY2xhc3NpZmllZCBjYXRhbG9ndWUuXG4gICAqL1xuICBkZWZhdWx0TW9kZWxGYWxsYmFja3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgIChkZWZhdWx0KSwgZXZlcnkgYWdlbnQgZ2V0cyBhIGJ1aWx0LWluIGlucHV0XG4gICAqIHByb2Nlc3NvciB0aGF0IHN0cmlwcyBgY2hhcnRJZGAgZmllbGRzIGZyb20gcHJpb3IgYXNzaXN0YW50XG4gICAqIHRvb2wtaW52b2NhdGlvbiByZXN1bHRzIGJlZm9yZSB0aGV5IHJlYWNoIHRoZSBtb2RlbC4gVGhpc1xuICAgKiBwcmV2ZW50cyB0aGUgbW9kZWwgZnJvbSByZXVzaW5nIHR1cm4tc2NvcGVkIGNoYXJ0SWRzIGl0IHNlZXNcbiAgICogaW4gbWVtb3J5IHJlY2FsbCAod2hpY2ggd291bGQgbGVhdmUgYFtjaGFydDo8aWQ+XWAgbWFya2Vyc1xuICAgKiBwb2ludGluZyBhdCB3cml0ZXIgZXZlbnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0KS5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gb3B0IG91dCAtIHVzZWZ1bCBpZiBhIG5vbi1kZWZhdWx0IGFnZW50XG4gICAqIG5lZWRzIGZ1bGwgdmlzaWJpbGl0eSBpbnRvIHByaW9yIGNoYXJ0SWRzIChlLmcuIGFuIGF1ZGl0XG4gICAqIGFnZW50IHJlYXNvbmluZyBhYm91dCBjaGFydCBsaW5lYWdlKS5cbiAgICovXG4gIHN0cmlwU3RhbGVDaGFydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGBpbnN0cnVjdGlvbnNgIHRvIGN1cmJcbiAgICogY29tbW9uIExMTS1pc21zIChlbSBkYXNoZXMsIGVtb2ppcywgc3ljb3BoYW50aWMgb3BlbmVycywgdGhyb3dhd2F5XG4gICAqIGNsb3NlcnMsIGV4Y2Vzc2l2ZSBoZWRnaW5nKS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IHVzZSB0aGUgYnVpbHQtaW5cbiAgICogICBgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlNgIGZyb20gYGFnZW50cy50c2AuXG4gICAqIC0gYHN0cmluZ2A6IHJlcGxhY2UgdGhlIGRlZmF1bHQgd2l0aCB0aGUgc3VwcGxpZWQgYmxvY2suXG4gICAqIC0gYGZhbHNlYDogZGlzYWJsZSBlbnRpcmVseSAoYWdlbnRzIHNlZSBvbmx5IHRoZWlyIGJlc3Bva2VcbiAgICogICBgaW5zdHJ1Y3Rpb25zYCkuXG4gICAqXG4gICAqIEFwcGVuZGVkIChub3QgcHJlcGVuZGVkKSBzbyB0aGUgYWdlbnQncyByb2xlIGFuZCBydWxlcyBjb21lIGZpcnN0XG4gICAqIGFuZCB0aGUgc3R5bGUgYmxvY2sgbGVhbnMgb24gdGhlIG1vZGVsJ3MgcmVjZW5jeSBiaWFzLlxuICAgKi9cbiAgc3R5bGVJbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBmYWxzZTtcbiAgLyoqXG4gICAqIEdlbmllIHNwYWNlcyB0aGlzIHBsdWdpbidzIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8uIE9uZSBNYXN0cmFcbiAgICogdG9vbCBpcyByZWdpc3RlcmVkIHBlciBhbGlhcyAoYGdlbmllYCBmb3IgdGhlIHdlbGwta25vd25cbiAgICogYGRlZmF1bHRgIGFsaWFzLCBgZ2VuaWVfPGFsaWFzPmAgb3RoZXJ3aXNlKS4gRWFjaCB0b29sIHNwaW5zXG4gICAqIHVwIGEgcGVyLXF1ZXN0aW9uIEdlbmllIHN1Yi1hZ2VudCB0aGF0IHJ1bnMgRGF0YWJyaWNrc1xuICAgKiBcImFnZW50IG1vZGVcIiBhZ2FpbnN0IHRoZSBzcGFjZSwgYnJvYWRjYXN0cyB3aXJlIGV2ZW50cyB0byB0aGVcbiAgICogVUksIGZldGNoZXMgc3RhdGVtZW50IHJvd3MgZm9yIG5vbi1lbXB0eSByZXN1bHRzLCBhbmQgcmV0dXJuc1xuICAgKiBhIGAoc3RyaW5nIHwgZGF0YSB8IGNoYXJ0KVtdYCBzdW1tYXJ5IHRoZSBob3N0IFVJIHJlbmRlcnNcbiAgICogaW5saW5lLlxuICAgKlxuICAgKiBFbnRyaWVzIGFjY2VwdCBlaXRoZXIgYSBmdWxsIHtAbGluayBHZW5pZVNwYWNlQ29uZmlnfSBvYmplY3RcbiAgICogb3IgYSBiYXJlIGBzcGFjZV9pZGAgc3RyaW5nIHdoZW4gbm8gZXh0cmFzIGFyZSBuZWVkZWQ6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgZ2VuaWVTcGFjZXM6IHtcbiAgICogICAgIGRlZmF1bHQ6IFwiMDFlZjBkM2MwZTFiMWY0YThkMmMzZTRmNWE2YjdjOGRcIixcbiAgICogICAgIGZvcmVjYXN0czogeyBzcGFjZUlkOiBcIjAxZWYuLi5cIiwgaGludDogXCJ3ZWVrbHkgZGVtYW5kIGZvcmVjYXN0c1wiIH0sXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZWFjaCB0aGUgc3BhY2VzIGZyb20gYW4gYWdlbnQncyBgdG9vbHMocGx1Z2lucylgIGNhbGxiYWNrIHZpYVxuICAgKiBgcGx1Z2lucy5nZW5pZT8udG9vbGtpdCgpYDsgdGhlIHJlc3VsdGluZyB0b29scyBhY2NlcHRcbiAgICogYHsgY29udGVudCwgY29udmVyc2F0aW9uSWQ/IH1gIGFuZCByZXR1cm4gYSBoeWRyYXRlZCBzdW1tYXJ5LlxuICAgKlxuICAgKiAqKkZhbGxiYWNrIGRpc2NvdmVyeSoqIChoaWdoZXN0IHByZWNlZGVuY2UgZmlyc3QpOiBpZiB0aGlzXG4gICAqIGZpZWxkIGlzIG9taXR0ZWQsIHRoZSBHZW5pZSBhZ2VudCBhbHNvIHBpY2tzIHVwIHNwYWNlcyBmcm9tXG4gICAqICgxKSB0aGUgQXBwS2l0IGBnZW5pZSh7IHNwYWNlczogeyAuLi4gfSB9KWAgcGx1Z2luIGluc3RhbmNlXG4gICAqIHdoZW4gcmVnaXN0ZXJlZCwgYW5kICgyKSB0aGUgYERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSURgXG4gICAqIGVudiB2YXIgKHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcykuIFRoaXMga2VlcHNcbiAgICogZXhpc3RpbmcgQXBwS2l0IGRlcGxveW1lbnRzIHdvcmtpbmcgd2l0aG91dCByZXN0YXRpbmcgdGhlXG4gICAqIHNwYWNlcyBjb25maWcgaW4gdHdvIHBsYWNlcy5cbiAgICovXG4gIGdlbmllU3BhY2VzPzogR2VuaWVTcGFjZXNDb25maWc7XG4gIC8qKlxuICAgKiBVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYGFza19nZW5pZWAuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogU2V0IGBmYWxzZWAgdG8gZm9yY2UgdGhlIGxlZ2FjeSBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgZHJpdmVyLiBBXG4gICAqIHByZS1zdHJlYW0gZmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZSBmYWxscyBiYWNrXG4gICAqIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBnZW5pZUFnZW50TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUsIGluXG4gICAqIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLiBUaGUgR2VuaWUgYWdlbnQgY2FsbHNcbiAgICogYGNsaWVudC5nZW5pZS5nZXRTcGFjZSguLi4pYCBvbiBldmVyeSBjb2xkLXN0YXJ0IHRvIGdldCB0aGVcbiAgICogdGl0bGUgLyBkZXNjcmlwdGlvbiAvIHdhcmVob3VzZSBpZDsgY2FjaGVkIHJlc3BvbnNlcyBza2lwIHRoZVxuICAgKiByb3VuZC10cmlwIGFuZCBjb25jdXJyZW50IGNhbGxlcnMgY29hbGVzY2Ugb24gYSBzaW5nbGVcbiAgICogaW4tZmxpZ2h0IGZldGNoLiBEcm9wIHRvIGEgc21hbGxlciB2YWx1ZSB3aGVuIGFuYWx5c3RzIGFyZVxuICAgKiBhY3RpdmVseSBlZGl0aW5nIHNwYWNlIG1ldGFkYXRhIGFuZCB5b3Ugd2FudCBjaGFuZ2VzIHZpc2libGVcbiAgICogd2l0aGluIHNlY29uZHM7IHJhaXNlIGl0IHRvIGFtb3J0aXNlIHRoZSByb3VuZC10cmlwIHdoZW5cbiAgICogc3BhY2UgbWV0YWRhdGEgaXMgZWZmZWN0aXZlbHkgZnJvemVuLlxuICAgKlxuICAgKiBCYWNrZWQgYnkgQXBwS2l0J3MgYENhY2hlTWFuYWdlcmAsIHNvIHRoZSBjYWNoZSBwYXJ0aWNpcGF0ZXNcbiAgICogaW4gdGVsZW1ldHJ5IHNwYW5zIChgY2FjaGUuZ2V0T3JFeGVjdXRlYCkgYW5kIGJlbmVmaXRzIGZyb21cbiAgICogTGFrZWJhc2UgcGVyc2lzdGVuY2Ugd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgd2lyZWQgdXAuXG4gICAqL1xuICBnZW5pZVNwYWNlQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gTExNIHN0ZXBzIGVhY2ggYWdlbnQgZ2V0cyBwZXIgdHVybi4gT25lIHN0ZXAgPSBvbmVcbiAgICogcm91bmQtdHJpcCB0byB0aGUgdW5kZXJseWluZyBtb2RlbCAoYSB0b29sIGNhbGwgY29uc3VtZXMgYVxuICAgKiBzdGVwLCB0aGUgZmluYWwtdGV4dCByZXBseSBjb25zdW1lcyBvbmUgdG9vKS4gQXBwbGllcyB0b1xuICAgKiBldmVyeSBhZ2VudCByZWdpc3RlcmVkIHRocm91Z2gge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5hZ2VudHN9XG4gICAqIC0gcGVyLWFnZW50IG92ZXJyaWRlcyBhcmVuJ3Qgc3VyZmFjZWQgeWV0IGJlY2F1c2UgdGhlIHNhbWVcbiAgICogY2VpbGluZyBoYXMgYmVlbiBzdWZmaWNpZW50IGFjcm9zcyBldmVyeSB3b3JrbG9hZCB3ZSd2ZSBydW4uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX01BWF9TVEVQU30gKDI1KSwgc2l6ZWQgdG8gZml0XG4gICAqIGEgZGVjb21wb3NlZCBHZW5pZSB0dXJuIChncm91bmRpbmcgKyBzZXZlcmFsIGBhc2tfZ2VuaWVgIGNhbGxzXG4gICAqICsgYHByZXBhcmVfY2hhcnRgIHBlciBkYXRhc2V0ICsgdGhlIGZpbmFsLXRleHQgcmVwbHkpIHdpdGhcbiAgICogaGVhZHJvb20gZm9yIHRoZSBtb2RlbCB0byBjaGFpbiBhIGNvdXBsZSBvZiBmb2xsb3ctdXBzIGJlZm9yZVxuICAgKiBhbnN3ZXJpbmcuIE1hc3RyYSdzIG93biBgYWdlbnQuZ2VuZXJhdGVgIGRlZmF1bHQgb2YgNSB3b3VsZFxuICAgKiBjdXQgbXVsdGktc3RlcCBvcmNoZXN0cmF0aW9uIG9mZiBhZnRlciAyLTMgdG9vbCBjYWxscywgc29cbiAgICogZXhwbGljaXRseSByYWlzaW5nIHRoZSBjZWlsaW5nIGhlcmUgaXMgd2hhdCBsZXRzIHRoZVxuICAgKiBhZ2VudC1tb2RlIGxvb3AgcGxheSBvdXQuXG4gICAqXG4gICAqIExvd2VyIHdoZW4gYW4gdW51c3VhbGx5IHNsb3cgb3IgZXhwZW5zaXZlIG1vZGVsIG1ha2VzIGxvbmdcbiAgICogdHVybnMgdW5hZmZvcmRhYmxlOyByYWlzZSBmb3IgZXhwbG9yYXRvcnkgd29ya2xvYWRzIHRoYXQgbmVlZFxuICAgKiB0byBkcmlsbCBkZWVwIGludG8gYSBkYXRhc2V0IHdpdGhpbiBhIHNpbmdsZSB0dXJuLlxuICAgKi9cbiAgYWdlbnRNYXhTdGVwcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdpcmUgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgZ2xvYmFsIE9UZWwgcGlwZWxpbmUgdmlhXG4gICAqIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IG9uIG9ubHkgd2hlblxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldC4gV2hlbiB1bnNldCwgdGhlXG4gICAqICAgYnJpZGdlIGlzIHNraXBwZWQgc28gTWFzdHJhIGRvZXMgbm90IGxvZ1xuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBvYnNlcnZhYmlsaXR5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExvZyB1c2VyIGZlZWRiYWNrICh0aHVtYnMgdXAvZG93biArIGZyZWVmb3JtIGNvbW1lbnRzKSB0byBNTGZsb3cgYXNcbiAgICogdHJhY2UgYXNzZXNzbWVudHMsIGFuZCBzdXJmYWNlIHRoZSBmZWVkYmFjayBjb250cm9scyBpbiB0aGUgY2hhdCBVSS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IGVuYWJsZWQgb25seSB3aGVuIE1MZmxvdyB0cmFjaW5nIGlzXG4gICAqICAgd2lyZWQgLSBhbiBPVExQIGV4cG9ydGVyIGVuZHBvaW50IGlzIHNldCBhbmQgYW4gTUxmbG93IGV4cGVyaW1lbnRcbiAgICogICBpcyBuYW1lZCAodGhlIHNhbWUgc2lnbmFscyB0aGUgb2JzZXJ2YWJpbGl0eSBwaXBlbGluZSBuZWVkcyB0b1xuICAgKiAgIHNoaXAgdHJhY2VzIHRvIE1MZmxvdykuIE90aGVyd2lzZSBvZmYsIHNpbmNlIHRoZXJlJ2QgYmUgbm8gdHJhY2VcbiAgICogICB0byBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbi4gRmVlZGJhY2sgY29udHJvbHMgc2hvdyBhbmQgd3JpdGVzIGFyZSBhdHRlbXB0ZWRcbiAgICogICByZWdhcmRsZXNzIG9mIGVudiBkZXRlY3Rpb24gKHVzZSB3aGVuIHRoZSBlbnYgaXMgY29uZmlndXJlZCBpbiBhXG4gICAqICAgd2F5IHRoZSBhdXRvLXByb2JlIGRvZXNuJ3QgcmVjb2duaXplKS5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuIE5vIHRyYWNlLWlkIGhlYWRlciwgbm8gZmVlZGJhY2sgcm91dGUsIG5vIFVJLlxuICAgKlxuICAgKiBGZWVkYmFjayBhdHRhY2hlcyB0byBhIHR1cm4ncyBNTGZsb3cgdHJhY2UgdmlhIHRoZSBPcGVuVGVsZW1ldHJ5XG4gICAqIHRyYWNlIGlkIHRoZSBzZXJ2ZXIgc3RhbXBzIG9uIGVhY2ggcmVzcG9uc2U7IHNlZSBgbWxmbG93LnRzYC5cbiAgICovXG4gIGZlZWRiYWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4cG9zZSB0aGUgcGx1Z2luJ3MgYWdlbnRzIChhbmQgb3B0aW9uYWxseSB0b29scykgYXMgYSBNYXN0cmEgTUNQXG4gICAqIHNlcnZlciBzbyBleHRlcm5hbCBNQ1AgY2xpZW50cyAtIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIHRoZSBNYXN0cmFcbiAgICogcGxheWdyb3VuZCwgb3IgYW5vdGhlciBhZ2VudCAtIGNhbiBjYWxsIHRoZW0gb3ZlciB0aGUgc3RhbmRhcmQgTUNQXG4gICAqIHRyYW5zcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdCAoYWdlbnRzIG9ubHkpOiB3cmFwcGluZyB0aGVcbiAgICogYWxyZWFkeS1yZWdpc3RlcmVkIGFnZW50cyBjb3N0cyBub3RoaW5nIGV4dHJhLCBzbyB0aGUgZW5kcG9pbnQgaXMgb25cbiAgICogb3V0IG9mIHRoZSBib3g7IG9ubHkgdGhlIGFtYmllbnQgdG9vbHMgKHdoaWNoIGFzc3VtZSBhbiBpbi1wcm9jZXNzXG4gICAqIGNoYXQgdHVybikgc3RheSBvZmYgdW5sZXNzIGV4cGxpY2l0bHkgb3B0ZWQgaW4uXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIC8gYHRydWVgOiBleHBvc2UgZXZlcnkgcmVnaXN0ZXJlZCBhZ2VudCBhc1xuICAgKiAgIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbCB1bmRlciBhIHNlcnZlciB3aG9zZSBpZCBpcyB0aGUgcGx1Z2luXG4gICAqICAgbmFtZS5cbiAgICogLSBgZmFsc2VgOiBubyBNQ1AgZW5kcG9pbnRzLlxuICAgKiAtIHtAbGluayBNYXN0cmFNY3BDb25maWd9OiBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHRoZSBzZXJ2ZXIgaWQsXG4gICAqICAgYWR2ZXJ0aXNlZCBtZXRhZGF0YSwgYW5kIHdoaWNoIGFnZW50cyAvIHRvb2xzIGFyZSBleHBvc2VkLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBzdG9jayBNYXN0cmEgTUNQIHJvdXRlcyBtb3VudCB1bmRlciB0aGUgcGx1Z2luJ3NcbiAgICogYmFzZSBwYXRoIChubyBiZXNwb2tlIHJvdXRlIGlzIGFkZGVkIC0gdGhlIHNlcnZlciBpcyBoYW5kZWQgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHZpYSBgbWNwU2VydmVyc2AsIHdoaWNoIGBAbWFzdHJhL2V4cHJlc3NgIHNlcnZlcyk6XG4gICAqXG4gICAqIC0gU3RyZWFtYWJsZSBIVFRQOiBgUE9TVCAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L21jcGBcbiAgICogLSBTU0UgKGxlZ2FjeSk6ICAgIGBHRVQgIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vc3NlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tZXNzYWdlc2BcbiAgICpcbiAgICogUmVxdWVzdHMgcnVuIHVuZGVyIHRoZSBzYW1lIEFwcEtpdCBPQk8gc2NvcGUgYXMgdGhlIGNoYXQgcm91dGVzLCBzb1xuICAgKiBhbiBhZ2VudCBpbnZva2VkIG92ZXIgTUNQIHJlc29sdmVzIGl0cyBtb2RlbCBhbmQgdG9vbHMgYXMgdGhlXG4gICAqIGNhbGxpbmcgdXNlci5cbiAgICovXG4gIG1jcD86IGJvb2xlYW4gfCBNYXN0cmFNY3BDb25maWc7XG4gIC8qKlxuICAgKiBIb3cgbXVjaCBvZiB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2AgbWFuYWdlbWVudCBBUEkgaXMgcmVhY2hhYmxlXG4gICAqIHRocm91Z2ggdGhlIHBsdWdpbiBtb3VudC4gYEBtYXN0cmEvZXhwcmVzc2AgcmVnaXN0ZXJzIGl0cyBmdWxsIHJvdXRlXG4gICAqIHRhYmxlIChhZ2VudCBpbmZlcmVuY2UgcGx1cyBhZG1pbiAvIG11dGF0aW5nIHJvdXRlczogZGlyZWN0IHRvb2xcbiAgICogZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5IHJlYWQvd3JpdGUsIHRlbGVtZXRyeSwgbG9ncyxcbiAgICogc2NvcmVzKS4gQXBwS2l0IGFscmVhZHkgYXV0aGVudGljYXRlcyBldmVyeSByZXF1ZXN0IGFzIHRoZSBPQk8gdXNlcixcbiAgICogYnV0IG5vdGhpbmcgdGhlcmUgcmVzdHJpY3RzICp3aGljaCogb2YgdGhvc2Ugb3BlcmF0aW9ucyB0aGUgYnJvd3NlclxuICAgKiBjbGllbnQgbWF5IGludm9rZS5cbiAgICpcbiAgICogLSBgXCJzY29wZWRcImAgKGRlZmF1bHQpOiBvbmx5IHRoZSByb3V0ZXMgdGhlIGNoYXQgY2xpZW50IGxlZ2l0aW1hdGVseVxuICAgKiAgIG5lZWRzIGFyZSBkaXNwYXRjaGVkIHRvIE1hc3RyYSAtIGFnZW50IGluZmVyZW5jZVxuICAgKiAgIChgc3RyZWFtYCAvIGBnZW5lcmF0ZWAgLyBgbmV0d29ya2ApLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXNcbiAgICogICBwbHVnaW4ncyBvd24gT0JPLSBhbmQgcmVzb3VyY2Utc2NvcGVkIGAvcm91dGUvKmAgcm91dGVzIChoaXN0b3J5IC9cbiAgICogICB0aHJlYWRzKSwgYW5kLCB3aGVuIHtAbGluayBtY3B9IGlzIGVuYWJsZWQsIHRoZSBNQ1AgdHJhbnNwb3J0LlxuICAgKiAgIEV2ZXJ5dGhpbmcgZWxzZSAodG9vbCBleGVjdXRpb24sIHdvcmtmbG93IGNvbnRyb2wsIHJhdyBtZW1vcnksXG4gICAqICAgdGVsZW1ldHJ5LCBsb2dzLCBzY29yZXMsIGFuZCBvdGhlciBtdXRhdGlvbnMpIGlzIHJlamVjdGVkIHdpdGhcbiAgICogICBgNDAzYCBiZWZvcmUgaXQgcmVhY2hlcyBNYXN0cmEuXG4gICAqIC0gYFwiZnVsbFwiYDogZGlzcGF0Y2ggdGhlIGVudGlyZSBzdG9jayBNYXN0cmEgQVBJLiBVc2Ugb25seSBmb3IgYVxuICAgKiAgIHRydXN0ZWQgZmlyc3QtcGFydHkgY29uc29sZSB0aGF0IGdlbnVpbmVseSBuZWVkcyB0aGUgbWFuYWdlbWVudFxuICAgKiAgIHN1cmZhY2UuXG4gICAqL1xuICBhcGlBY2Nlc3M/OiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKlxuICAgKiBXaGljaCBEYXRhYnJpY2tzIGlkZW50aXR5IHRoZSBhZ2VudHMnIHdvcmtzcGFjZSBjYWxscyBydW4gYXM6IHRoZVxuICAgKiBzZXJ2aW5nLWVuZHBvaW50IGNhdGFsb2d1ZSBiZWhpbmQgdGhlIG1vZGVsIHBpY2tlciwgR2VuaWUgc3VnZ2VzdGlvbnMsXG4gICAqIGBhc2tfZ2VuaWVgLCBhbmQgdGhlIFN0YXRlbWVudCBFeGVjdXRpb24gZmV0Y2ggYmVoaW5kIGEgYFtkYXRhOjxpZD5dYFxuICAgKiBlbWJlZC4gRmFsbHMgYmFjayB0byBgTUFTVFJBX0dFTklFX0lERU5USVRZYCwgdGhlbiBgXCJ1c2VyXCJgLlxuICAgKlxuICAgKiBPbi1iZWhhbGYtb2YgKE9CTykgYXV0aCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIGEgbWVtYmVyIG9mIHRoZVxuICAgKiBXT1JLU1BBQ0UsIG5vdCBqdXN0IG9mIHRoZSBEYXRhYnJpY2tzIGFjY291bnQuIEFuIGFwcCBzaGFyZWQgd2l0aCBhblxuICAgKiBhY2NvdW50LWxldmVsIGdyb3VwIGNhbiBiZSBvcGVuZWQgYnkgc29tZW9uZSB3aG9zZSB0b2tlbiBpcyB2YWxpZCBidXQgd2hvc2VcbiAgICogZXZlcnkgd29ya3NwYWNlIGNhbGwgZmFpbHMgd2l0aCBgVW5hdXRob3JpemVkIGFjY2VzcyB0byBPcmc6IDxpZD5gIC0gYW5kXG4gICAqIGdyYW50aW5nIHdvcmtzcGFjZSBtZW1iZXJzaGlwIGlzIG5vdCBhbHdheXMgcG9zc2libGUsIHNpbmNlIGEgd29ya3NwYWNlXG4gICAqIGNhcHMgbWVtYmVyc2hpcCB3ZWxsIGJlbG93IHRoZSBzaXplIG9mIGEgbGFyZ2UgYWNjb3VudCdzIHVzZXIgZ3JvdXAuIFRoZVxuICAgKiBhcHAncyBzZXJ2aWNlIHByaW5jaXBhbCBhbHJlYWR5IGhvbGRzIHRoZSBncmFudHMgdGhlIGFwcCB3YXMgZGVwbG95ZWQgd2l0aC5cbiAgICpcbiAgICogLSBgXCJ1c2VyXCJgIChkZWZhdWx0KTogYWx3YXlzIE9CTy4gUGVyLXVzZXIgYXR0cmlidXRpb24sIGFuZCBHZW5pZSAvIFVuaXR5XG4gICAqICAgQ2F0YWxvZyByb3cgZmlsdGVycyBhcHBseSBwZXIgdXNlci4gQ29ycmVjdCB3aGVuIGV2ZXJ5IGNhbGxlciBpcyBhXG4gICAqICAgd29ya3NwYWNlIG1lbWJlci5cbiAgICogLSBgXCJzZXJ2aWNlLXByaW5jaXBhbFwiYDogYWx3YXlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwuIE5lZWRzIG5vIE9CT1xuICAgKiAgIHNjb3BlcyBhbmQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIGF0IHRoZSBjb3N0IG9mXG4gICAqICAgcGVyLXVzZXIgYXR0cmlidXRpb24gaW4gR2VuaWUgLyBVbml0eSBDYXRhbG9nLlxuICAgKiAtIGBcImF1dG9cImA6IE9CTyB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgYW4gT0JPIHRva2VuLCB0aGUgc2VydmljZSBwcmluY2lwYWxcbiAgICogICB3aGVuIGl0IGRvZXMgbm90LiBGb3IgYW4gYXBwIHNlcnZpbmcgQk9USCB0aGUgcGxhdGZvcm0gZnJvbnQgZG9vciBhbmQgYVxuICAgKiAgIGRvb3IgdGhhdCBoYXMgbm8gdG9rZW4gdG8gZm9yd2FyZCAtIGEgYEBkYngtdG9vbHMvdHVubmVsYCBnYXRlLCBhXG4gICAqICAgVGVhbXMgY2hhbm5lbCAtIHdoZXJlIEFwcEtpdCdzIGBhc1VzZXJgIHdvdWxkIG90aGVyd2lzZSB0aHJvd1xuICAgKiAgIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlLXByaW5jaXBhbCBwYXRoIGNoYW5nZXMgb25seSB0aGUgRGF0YWJyaWNrcyBDUkVERU5USUFMLiBNZW1vcnlcbiAgICogdGhyZWFkcywgdGhlIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhIHN0aWxsIGtleSBvZmYgdGhlXG4gICAqIGZvcndhcmRlZCB1c2VyLCBzbyBjYWxsZXJzIHNoYXJpbmcgdGhlIHNlcnZpY2UgcHJpbmNpcGFsJ3MgZGF0YSBhY2Nlc3Mga2VlcFxuICAgKiBzZXBhcmF0ZSBjb252ZXJzYXRpb25zIGFuZCBjYW5ub3QgcmVhZCBlYWNoIG90aGVyJ3MgdGhyZWFkcyBvciBjaGFydHMuXG4gICAqXG4gICAqIEBleGFtcGxlIEFuIGFwcCBhbnkgYWNjb3VudCB1c2VyIGNhbiBvcGVuXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwic2VydmljZS1wcmluY2lwYWxcIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV4YW1wbGUgT25lIGFwcCBiZWhpbmQgYm90aCB0aGUgZnJvbnQgZG9vciBhbmQgYSBwdWJsaWMgdHVubmVsXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IGdlbmllSWRlbnRpdHk6IFwiYXV0b1wiLCBnZW5pZVNwYWNlczogeyBkZWZhdWx0OiBzcGFjZUlkIH0gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2VuaWVJZGVudGl0eT86IE1hc3RyYUlkZW50aXR5TW9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIGNvbnRleHQgYXBwbGllZCB0byBjaGFydHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAqIGByZW5kZXJfZGF0YWAgLyBgcHJlcGFyZV9jaGFydGAgdG9vbHMuIFdoZW4gc2V0LCB0aGUgY2hhcnQgcGxhbm5lcidzXG4gICAqIEVjaGFydHMgb3V0cHV0IGlzIHRoZW1lZCB3aXRoIHRoZSBicmFuZCdzIHBhbGV0dGUgKHNlcmllcyBjb2xvcnMgZGVyaXZlZFxuICAgKiBmcm9tIGBjb2xvcnMucHJpbWFyeWAgLyBgY29sb3JzLmFjY2VudGApIGFuZCBzYW5zIGZvbnRcbiAgICogKGB0eXBvZ3JhcGh5LnNhbnNgKSBpbnN0ZWFkIG9mIEVjaGFydHMnIGRlZmF1bHRzLiBPbWl0IGZvciB0aGUgZGVmYXVsdFxuICAgKiBFY2hhcnRzIGxvb2suXG4gICAqXG4gICAqIFBhc3MgdGhlIHBvcnRhYmxlIHtAbGluayBCcmFuZENvbnRleHR9IHNoYXJlZCBhY3Jvc3MgdGhlIFVJIGFuZFxuICAgKiBsaWJyYXJpZXMgKGUuZy4gYGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHRgIGZyb20gYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgLFxuICAgKiBvciBhIGN1c3RvbWVyIGJyYW5kKSAtIHRoZSBzYW1lIG9iamVjdCB0aGUgZW1haWwgYWRkLW9uIGFuZCB0aGUgVUlcbiAgICogYEJyYW5kUHJvdmlkZXJgIGNvbnN1bWUsIHNvIGEgaG9zdCB0aGVtZXMgY2hhcnRzLCBlbWFpbCwgYW5kIFVJIGZyb20gb25lXG4gICAqIHNvdXJjZS5cbiAgICovXG4gIGJyYW5kPzogQnJhbmRDb250ZXh0O1xuICAvKipcbiAgICogUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgbWF0ZXJpYWxpemVkIG9uY2UgYXQgYXBwIHN0YXJ0dXAuIEEgc2luZ2xlXG4gICAqIHNvdXJjZSwgYSBsaXN0LCBvciBhIGB7IHNvdXJjZXMsIGZhaWxPbkVycm9yPywgLi4uIH1gIGJhZy5cbiAgICpcbiAgICogRWFjaCBzb3VyY2UgaXMgYSBHaXRIdWIgYG93bmVyL3JlcG9gLCBhIGdpdCAvIEdpdExhYiBVUkwsIG9yIGEgZGlyZWN0XG4gICAqIGBTS0lMTC5tZGAgLyBhcmNoaXZlIGRvd25sb2FkIFVSTC4gUmVzb2x1dGlvbiBwcmVmZXJzIHRoZSBPUFRJT05BTCBgc2tpbGxzYFxuICAgKiBucG0gQ0xJIChhIHBlZXIgZGVwKSB3aGljaCBpcyBjb3BpZWQgaW50byBhIHRlbXAgZGlyIGFuZCB0aGVuIHBlcnNpc3RlZDtcbiAgICogd2l0aG91dCBpdCwgYSBVUkwgc291cmNlIGlzIGZldGNoZWQgZGlyZWN0bHkuIEEgc291cmNlIHRoYXQgcmVzb2x2ZXNcbiAgICogdGhyb3VnaCBuZWl0aGVyIGZhaWxzIHN0YXJ0dXAgdW5sZXNzIGBmYWlsT25FcnJvcjogZmFsc2VgLlxuICAgKlxuICAgKiBQcm92aXNpb25lZCBza2lsbHMgYXJlIHdyaXR0ZW4gdG8gdGhlIERhdGFicmlja3MgdXNlcidzIEFzc2lzdGFudCBza2lsbHNcbiAgICogZm9sZGVyIChgL1VzZXJzLzxlbWFpbD4vLmFzc2lzdGFudC9za2lsbHNgLCB0aGUgXCJzYXZlIHRoaXMgYXMgYSBza2lsbFwiXG4gICAqIHRhcmdldCkgc28gdGhleSBwZXJzaXN0IGFuZCBhcmUgcGlja2VkIHVwIGJ5IHRoZSBidWlsdC1pbiBBc3Npc3RhbnQtc2tpbGxzXG4gICAqIG1vdW50LiBXaXRoIG5vIHdyaXRhYmxlIHdvcmtzcGFjZSwgdGhleSBnbyB0byBhIGxvY2FsIHRlbXAgZGlyIGluc3RlYWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7IHJlbW90ZVNraWxsczogXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiB9KTtcbiAgICogbWFzdHJhKHtcbiAgICogICByZW1vdGVTa2lsbHM6IHtcbiAgICogICAgIHNvdXJjZXM6IFtcInZlcmNlbC1sYWJzL2FnZW50LXNraWxsc1wiLCBcImh0dHBzOi8vZXhhbXBsZS5jb20vc2tpbGwubWRcIl0sXG4gICAqICAgICBmYWlsT25FcnJvcjogZmFsc2UsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVtb3RlU2tpbGxzPzogUmVtb3RlU2tpbGxzT3B0aW9uO1xufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHB1Ymxpc2hlZCBvbiB0aGUgbWFuaWZlc3QncyBgY29uZmlnLnNjaGVtYWAsIG1pcnJvcmluZyB0aGVcbiAqIGRvY3VtZW50ZWQgZGVmYXVsdHMgYW5kIGVudmlyb25tZW50IGZhbGxiYWNrcyBvZiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnfS5cbiAqXG4gKiBDb3ZlcnMgdGhlIEpTT04tZXhwcmVzc2libGUgb3B0aW9ucyBvbmx5LiBgYWdlbnRzYCwgYHRvb2xzYCwgYW5kIGFcbiAqIGBkZWZhdWx0TW9kZWxgIHBhc3NlZCBhcyBhIE1hc3RyYSBgRHluYW1pY0FyZ3VtZW50YCBhcmUgY29kZS1kZWZpbmVkXG4gKiAoZnVuY3Rpb25zIC8gY2xhc3MgaW5zdGFuY2VzKSwgc28gdGhleSBjYXJyeSBubyBzY2hlbWEgZW50cnk7IHRoZVxuICogYGRlZmF1bHRNb2RlbGAgcHJvcGVydHkgYmVsb3cgZGVzY3JpYmVzIGl0cyBzdHJpbmcgZm9ybS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9DT05GSUdfU0NIRU1BOiBDb25maWdTY2hlbWEgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBwcm92aWRlcklkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdNYXN0cmEgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgaWQuIERlZmF1bHRzIHRvIFwiZGF0YWJyaWNrc1wiLicsXG4gICAgfSxcbiAgICByZW1vdGVTa2lsbHM6IHtcbiAgICAgIHR5cGU6IFtcInN0cmluZ1wiLCBcImFycmF5XCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdSZW1vdGUgQWdlbnQtU2tpbGwgc291cmNlcyBwcm92aXNpb25lZCBhdCBzdGFydHVwOiBcImFpdG9vbHNcIiBmb3IgRGF0YWJyaWNrc1xcJyBvd24gc2tpbGwgc2V0IChyZWFkIGZyb20gdGhlIHB1YmxpYyBkYXRhYnJpY2tzL2RhdGFicmlja3MtYWdlbnQtc2tpbGxzIHJlcG8sIG5vIENMSSBuZWVkZWQpLCBhIEdpdEh1YiBvd25lci9yZXBvLCBhIGdpdC9HaXRMYWIgVVJMLCBvciBhIGRpcmVjdCBTS0lMTC5tZC9hcmNoaXZlIFVSTC4gTm9uLWFpdG9vbHMgc291cmNlcyBwcmVmZXIgdGhlIG9wdGlvbmFsIGBza2lsbHNgIG5wbSBDTEksIGVsc2UgYSBkaXJlY3QgZmV0Y2g7IGZhaWxzIHN0YXJ0dXAgb24gZXJyb3IgdW5sZXNzIGZhaWxPbkVycm9yOmZhbHNlLiBXcml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIgQXNzaXN0YW50IHNraWxscyBmb2xkZXIsIG9yIGEgbG9jYWwgdGVtcCBkaXIgd2hlbiBubyB3b3Jrc3BhY2UgaXMgd3JpdGFibGUuJyxcbiAgICB9LFxuICAgIHN0b3JhZ2U6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQb3N0Z3Jlc1N0b3JlIGZvciBNYXN0cmEgdGhyZWFkcyAvIG1lc3NhZ2VzLiBgdHJ1ZWAgcmV1c2VzIHRoZSBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2wsIGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS4gQXV0by1lbmFibGVkIHdoZW4gdGhlIGBsYWtlYmFzZWAgcGx1Z2luIGlzIHJlZ2lzdGVyZWQuXCIsXG4gICAgfSxcbiAgICBtZW1vcnk6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQZ1ZlY3RvciBzdG9yZSBmb3IgTWFzdHJhIHNlbWFudGljIHJlY2FsbC4gYHRydWVgIHJldXNlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sLCBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgdHlwZTogW1wiYm9vbGVhblwiLCBcInN0cmluZ1wiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnQ29tbWFuZCBzYW5kYm94IGZvciBhdXRvLWNyZWF0ZWQgYWdlbnQgd29ya3NwYWNlcy4gRGVmYXVsdHMgdG8gRGF0YWJyaWNrcyBTYW5kYm94IHdpdGggTW9udHkgZmFsbGJhY2s7IGZhbHNlIGRpc2FibGVzIGNvbW1hbmQgZXhlY3V0aW9uLCBcIm1vbnR5XCIgc2VsZWN0cyBNb250eSBkaXJlY3RseSwgYW5kIGFuIG9iamVjdCBjb25maWd1cmVzIERhdGFicmlja3MgbGlmZWN5Y2xlL2ZhbGxiYWNrIHNldHRpbmdzLicsXG4gICAgfSxcbiAgICBkZWZhdWx0QWdlbnQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBZ2VudCBpZCB1c2VkIHdoZW4gdGhlIGNsaWVudCBuYW1lcyBub25lLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBhZ2VudCwgZWxzZSB0aGUgYnVpbHQtaW4gYGRlZmF1bHRgLlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU2VydmluZyBlbmRwb2ludCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzIG93biBtb2RlbC4gRmFsbHMgYmFjayB0byBEQVRBQlJJQ0tTX1NFUlZJTkdfRU5EUE9JTlRfTkFNRSwgdGhlbiB0aGUgaGlnaGVzdC1yYW5rZWQgY3VycmVudGx5IGF2YWlsYWJsZSBjYXRhbG9ndWUgZW5kcG9pbnQuXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0TW9kZWxGYWxsYmFja3M6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByaW9yaXR5LW9yZGVyZWQgZW5kcG9pbnQgbmFtZXMgdHJpZWQgYmVmb3JlIHRoZSBzY29yZS1jbGFzc2lmaWVkIGNhdGFsb2d1ZSB3aGVuIG5vdGhpbmcgZWxzZSBwaW5zIGEgbW9kZWwuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5TWF0Y2g6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnV6enktbWF0Y2ggbG9vc2UgbW9kZWwgbmFtZXMgYWdhaW5zdCB0aGUgd29ya3NwYWNlIGNhdGFsb2d1ZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIG1vZGVsRnV6enlUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJGdXNlLmpzIHNjb3JlIHRocmVzaG9sZCBmb3IgdGhlIGZ1enp5IG1hdGNoZXIsIDAgKGV4YWN0KSB0byAxIChhbnl0aGluZykuIERlZmF1bHRzIHRvIDAuNC5cIixcbiAgICB9LFxuICAgIG1vZGVsQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRUTCBpbiBtcyBmb3IgdGhlIHNlcnZpbmctZW5kcG9pbnRzIGxpc3QgY2FjaGUsIHBlciB3b3Jrc3BhY2UgaG9zdC4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLlwiLFxuICAgIH0sXG4gICAgbW9kZWxPdmVycmlkZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJIb25vciBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIGZyb20gdGhlIFgtTWFzdHJhLU1vZGVsIGhlYWRlciwgP21vZGVsPSBxdWVyeSwgb3IgYSBgbW9kZWxgIGJvZHkgZmllbGQuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6IFtcInN0cmluZ1wiLCBcIm9iamVjdFwiXSB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiR2VuaWUgc3BhY2VzIHRoZSBhZ2VudHMgY2FuIGRlbGVnYXRlIHRvLCBrZXllZCBieSBhbGlhcyAodGhlIHRvb2wtbmFtZSBzdWZmaXgpLiBFYWNoIHZhbHVlIGlzIGEgc3BhY2UgaWQgb3IgYHsgc3BhY2VJZCwgaGludCB9YC4gRmFsbHMgYmFjayB0byB0aGUgYGdlbmllYCBwbHVnaW4ncyBvd24gYHNwYWNlc2AgY29uZmlnLCB0aGVuIERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSUQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcy5cIixcbiAgICB9LFxuICAgIGdlbmllQWdlbnRNb2RlOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJIGZvciBhc2tfZ2VuaWUuIERlZmF1bHRzIHRvIHRydWU7IGZhbHNlIGZvcmNlcyBsZWdhY3kgcG9sbGluZy4gRmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZXMgZmFsbCBiYWNrIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHN0cmVhbWluZy5cIixcbiAgICB9LFxuICAgIGdlbmllU3BhY2VDYWNoZVR0bE1zOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVFRMIGluIG1zIGZvciB0aGUgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIGFnZW50TWF4U3RlcHM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNYXhpbXVtIExMTSBzdGVwcyBlYWNoIGFnZW50IGdldHMgcGVyIHR1cm4gKGEgdG9vbCBjYWxsIGFuZCB0aGUgZmluYWwgcmVwbHkgZWFjaCBjb25zdW1lIG9uZSkuIERlZmF1bHRzIHRvIDI1LlwiLFxuICAgIH0sXG4gICAgc3RyaXBTdGFsZUNoYXJ0czoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTdHJpcCBjaGFydElkcyBmcm9tIHJlY2FsbGVkIGFzc2lzdGFudCB0b29sIHJlc3VsdHMgc28gdGhlIG1vZGVsIGNhbm5vdCByZXVzZSBhIHR1cm4tc2NvcGVkIGNoYXJ0IG1hcmtlci4gRGVmYXVsdHMgdG8gdHJ1ZS5cIixcbiAgICB9LFxuICAgIHN0eWxlSW5zdHJ1Y3Rpb25zOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJib29sZWFuXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGluc3RydWN0aW9ucy4gQSBzdHJpbmcgcmVwbGFjZXMgdGhlIGJ1aWx0LWluIGJsb2NrLCBgZmFsc2VgIGRpc2FibGVzIGl0LlwiLFxuICAgIH0sXG4gICAgb2JzZXJ2YWJpbGl0eToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmlkZ2UgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgT1RlbCBwaXBlbGluZS4gRGVmYXVsdHMgdG8gb24gb25seSB3aGVuIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBvciBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UIGlzIHNldC5cIixcbiAgICB9LFxuICAgIGZlZWRiYWNrOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxvZyB0aHVtYnMgLyBjb21tZW50IGFzc2Vzc21lbnRzIHRvIE1MZmxvdyBhbmQgc3VyZmFjZSB0aGUgZmVlZGJhY2sgY29udHJvbHMuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBhbiBPVExQIGVuZHBvaW50IGFuZCBNTEZMT1dfRVhQRVJJTUVOVF9JRCBvciBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FIGFyZSBzZXQuXCIsXG4gICAgfSxcbiAgICBtY3A6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFeHBvc2UgdGhlIHJlZ2lzdGVyZWQgYWdlbnRzIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBhZ2VudHMtb25seTsgYW4gb2JqZWN0IHR1bmVzIHRoZSBzZXJ2ZXIgaWQsIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGV0aGVyIGFtYmllbnQgdG9vbHMgYXJlIGV4cG9zZWQuXCIsXG4gICAgfSxcbiAgICBnZW5pZUlkZW50aXR5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgLy8gRGVyaXZlZCBmcm9tIHRoZSByZXNvbHZlcidzIG93biBsaXN0LCBzbyBhIG1vZGUgY2FuIG5ldmVyIGJlIGFjY2VwdGVkIGF0XG4gICAgICAvLyBydW50aW1lIHdoaWxlIHRoZSBwdWJsaXNoZWQgc2NoZW1hIChhbmQgdGhlIFVJIGJ1aWx0IGZyb20gaXQpIG9taXRzIGl0LlxuICAgICAgZW51bTogWy4uLklERU5USVRZX01PREVTXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzXFwnIHdvcmtzcGFjZSBjYWxscyAoc2VydmluZyBjYXRhbG9ndWUsIEdlbmllLCBzdGF0ZW1lbnQgZXhlY3V0aW9uKSBydW4gYXMuIFwidXNlclwiIChkZWZhdWx0KSBpcyBhbHdheXMgT0JPLCBzbyBjYWxsZXJzIG11c3QgYmUgd29ya3NwYWNlIG1lbWJlcnM7IFwic2VydmljZS1wcmluY2lwYWxcIiBhbHdheXMgdXNlcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLCBzbyBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwIHdvcmtzLCBhdCB0aGUgY29zdCBvZiBwZXItdXNlciBhdHRyaWJ1dGlvbjsgXCJhdXRvXCIgdXNlcyBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiBhbmQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIHdoZW4gaXQgZG9lcyBub3QsIGZvciBhbiBhcHAgdGhhdCBhbHNvIHNlcnZlcyBhIHR1bm5lbCBvciB3ZWJob29rIGRvb3IuIEZhbGxzIGJhY2sgdG8gTUFTVFJBX0dFTklFX0lERU5USVRZLicsXG4gICAgfSxcbiAgICBhcGlBY2Nlc3M6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBlbnVtOiBbXCJzY29wZWRcIiwgXCJmdWxsXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgbXVjaCBvZiB0aGUgc3RvY2sgQG1hc3RyYS9leHByZXNzIEFQSSBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgbW91bnQuIFwic2NvcGVkXCIgKGRlZmF1bHQpIGFsbG93cyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgdGhpcyBwbHVnaW5cXCdzIG93biByb3V0ZXMsIGFuZCBNQ1A7IFwiZnVsbFwiIGRpc3BhdGNoZXMgdGhlIGVudGlyZSBtYW5hZ2VtZW50IHN1cmZhY2UuJyxcbiAgICB9LFxuICAgIGJyYW5kOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9ydGFibGUgYnJhbmQgY29udGV4dCBhcHBsaWVkIHRvIGdlbmVyYXRlZCBjaGFydHMgKHNlcmllcyBwYWxldHRlIGZyb20gY29sb3JzLnByaW1hcnkgLyBjb2xvcnMuYWNjZW50LCBiYXNlIGZvbnQgZnJvbSB0eXBvZ3JhcGh5LnNhbnMpLlwiLFxuICAgIH0sXG4gIH0sXG59O1xuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUtuRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs1RixPQUFPLEVBQUUsY0FBYyxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUl4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztBQUV6RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUMzRCxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsd0JBQXdCO0NBQ3pCLENBQUM7QUFRRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0M7SUFDekUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7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QUMzQixXQUFXLEVBQ1QscUhBQXFIO1NBQ3hIO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QscUpBQXFKO1NBQ3hKO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQ1QsZ1FBQWdRO1NBQ25RO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUMzQixXQUFXLEVBQ1QsNEpBQTRKO1NBQy9KO1FBQ0QsYUFBYSxFQUFFO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCwyRUFBMkU7WUFDM0UsMEVBQTBFO1lBQzFFLElBQUksRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ3pCLFdBQVcsRUFDVCw2ZkFBNmY7U0FDaGdCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3hCLFdBQVcsRUFDVCxxT0FBcU87U0FDeE87UUFDRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFDVCwwSUFBMEk7U0FDN0k7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsdWdpbiBjb25maWd1cmF0aW9uIHR5cGVzIGFuZCBzaGFyZWQgYFJlcXVlc3RDb250ZXh0YCBrZXlzLlxuICpcbiAqIE93bnMgdGhlIHR5cGVkIHtAbGluayBNYXN0cmFQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0XG4gKiBjb25maWcpIGFuZCB7QGxpbmsgTUFTVFJBX0NPTkZJR19TQ0hFTUF9LCB0aGUgSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0XG4gKiBwdWJsaXNoZXMgZm9yIGl0IHNvIHNjYWZmb2xkaW5nIHRvb2xzIGFuZCBhZ2VudHMgY2FuIHJlYWQgdGhlIG9wdGlvbiBzZXQuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQgaXMgZXhwbGljaXQgcGx1Z2luIGNvbmZpZywgdGhlbiB0aGUgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlIG5hbWVkIG9uIHRoZSBmaWVsZCwgdGhlbiBhIGJ1aWx0LWluIGRlZmF1bHQuXG4gKlxuICogS2VwdCBpbiBhIGxlYWYgbW9kdWxlIHNvIGBwbHVnaW4udHNgLCBgc2VydmVyLnRzYCwgYG1vZGVsLnRzYCwgYW5kXG4gKiBgbWVtb3J5LnRzYCBjYW4gaW1wb3J0IHRoZW0gd2l0aG91dCBjcmVhdGluZyBhIGN5Y2xlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIEJhc2VQbHVnaW5Db25maWcsIHR5cGUgQ29uZmlnU2NoZW1hIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50Q29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBnVmVjdG9yQ29uZmlnLCBQb3N0Z3Jlc1N0b3JlQ29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvcGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVRvb2xzIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vZ2VuaWUudHNcIjtcbmltcG9ydCB7IElERU5USVRZX01PREVTLCB0eXBlIE1hc3RyYUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlbW90ZVNraWxsc09wdGlvbiB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc2FuZGJveC50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHJlc29sdmVkIEFwcEtpdCB1c2VyLiBgbW9kZWwudHNgIHJlYWRzIGl0IHRvIG1pbnQgdXNlci1zY29wZWRcbiAqIERhdGFicmlja3MgdG9rZW5zLlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1VTRVJfS0VZID0gXCJtYXN0cmFfX3VzZXJcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleXMgZm9yIEFwcEtpdCB1c2VyIG1ldGFkYXRhIHN0YW1wZWQgYnlcbiAqIHtAbGluayBNYXN0cmFTZXJ2ZXJ9LiBTdXJmYWNlZCBhcyB0cmFjZSBtZXRhZGF0YSB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gdHJhY2VzIGFyZSBmaWx0ZXJhYmxlIGJ5IHdob1xuICogaXNzdWVkIHRoZSByZXF1ZXN0IHdpdGhvdXQgbGVha2luZyB0aGUgZnVsbCB1c2VyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX05BTUVfS0VZID0gXCJtYXN0cmFfX3VzZXJOYW1lXCI7XG4vKiogUmVxdWVzdC1jb250ZXh0IGtleSBjb250YWluaW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9VU0VSX0VNQUlMX0tFWSA9IFwibWFzdHJhX191c2VyRW1haWxcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSBmb3IgdGhlIHBlci1IVFRQLXJlcXVlc3QgaWQgc3RhbXBlZCBieVxuICoge0BsaW5rIE1hc3RyYVNlcnZlcn0uIFJlYWRzIGBYLVJlcXVlc3QtSWRgIGZyb20gdGhlIGluY29taW5nXG4gKiBoZWFkZXJzIHdoZW4gcHJlc2VudCAoc28gYW4gdXBzdHJlYW0gbG9hZCBiYWxhbmNlciAvIEFQSSBnYXRld2F5XG4gKiBjYW4ga2VlcCBpdHMgdHJhY2UgY29ycmVsYXRpb24pLCBmYWxscyBiYWNrIHRvIGEgZnJlc2hseSBtaW50ZWRcbiAqIFVVSUQuIEVjaG9lZCBiYWNrIG9uIHRoZSByZXNwb25zZSBhbmQgc3VyZmFjZWQgb24gZXZlcnkgc3BhbiB2aWFcbiAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gc28gbG9ncyBhbmQgdHJhY2VzIHNoYXJlIGFcbiAqIGpvaW4ga2V5LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1JFUVVFU1RfSURfS0VZID0gXCJtYXN0cmFfX3JlcXVlc3RJZFwiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IGZvciBPQXV0aCBzY29wZXMgcGFyc2VkIGZyb20gdGhlIGZvcndhcmRlZFxuICogYWNjZXNzIHRva2VuIGJ5IHtAbGluayBNYXN0cmFTZXJ2ZXIuY29uZmlndXJlUmVxdWVzdENvbnRleHRTY29wZXN9LlxuICogV29ya3NwYWNlIG1vdW50cyB0aGF0IHRvdWNoIERhdGFicmlja3Mgd29ya3NwYWNlIGZpbGVzIHJlcXVpcmVcbiAqIGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2AgaW4gdGhpcyBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX1NDT1BFU19LRVkgPSBcIm1hc3RyYV9fc2NvcGVzXCI7XG5cbi8qKlxuICogQ2Fub25pY2FsIGxpc3Qgb2YgYFJlcXVlc3RDb250ZXh0YCBrZXlzIHdlIHdhbnQgTWFzdHJhIHRvIGV4dHJhY3RcbiAqIGFzIG1ldGFkYXRhIG9uIGV2ZXJ5IG9ic2VydmFiaWxpdHkgc3BhbiAoYWdlbnQgcnVucywgbW9kZWwgY2FsbHMsXG4gKiB0b29sIGludm9jYXRpb25zLCB3b3JrZmxvdyBzdGVwcykuXG4gKlxuICogTWlycm9ycyB7QGxpbmsgaHR0cHM6Ly9tYXN0cmEuYWkvZG9jcy9vYnNlcnZhYmlsaXR5L3RyYWNpbmcvb3ZlcnZpZXcjYXV0b21hdGljLW1ldGFkYXRhLWZyb20tcmVxdWVzdGNvbnRleHR9OlxuICogcGFzc2VkIHZlcmJhdGltIGludG8gYE9ic2VydmFiaWxpdHkuY29uZmlnc1sqXS5yZXF1ZXN0Q29udGV4dEtleXNgLFxuICogc28gYW55IGtleSBsaXN0ZWQgaGVyZSBpcyByZWFkIGZyb20gYFJlcXVlc3RDb250ZXh0YCBhdCB0cmFjZVxuICogc3RhcnQgYW5kIGF0dGFjaGVkIGFzIHNjYWxhciBzcGFuIG1ldGFkYXRhLiBLZWVwIHRoZSBzZXQgdG8gcGxhaW5cbiAqIHNjYWxhcnMgLSBuZXZlciBpbmNsdWRlIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9IChpdCBjYXJyaWVzIHRoZVxuICogZnVsbCBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgd2l0aCBhIGBXb3Jrc3BhY2VDbGllbnRgIHJlZmVyZW5jZSkuXG4gKlxuICogT3JkZXIgaXMgcHVyZWx5IGNvc21ldGljOyBNYXN0cmEgZGUtZHVwZXMgaW50ZXJuYWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSxcbiAgTUFTVFJBX1RIUkVBRF9JRF9LRVksXG4gIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgLy8gTW9kZWwgb3ZlcnJpZGUga2V5IGlzIG93bmVkIGJ5IGBzZXJ2aW5nLnRzYDsgc3BlbGxlZCBpbmxpbmUgaGVyZVxuICAvLyBzbyB0aGlzIG1vZHVsZSBzdGF5cyBsZWFmLWxldmVsIChubyBjeWNsZXMgd2l0aCBgc2VydmluZy50c2ApLlxuICBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIixcbl07XG5cbi8qKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgcGx1cyB0aGUgY2Fub25pY2FsIHVzZXIgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2U7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGlkZW50aXR5IGZvciBhbiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQ6IHRoZSBPQk8gdXNlciBpZCBvbiBhXG4gKiB1c2VyLXNjb3BlZCBjYWxsLCB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChjb250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UpOiBzdHJpbmcge1xuICByZXR1cm4gXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQ7XG59XG5cbi8qKlxuICogV2hvIGEgdHVybiBpcyBBVFRSSUJVVEVEIHRvLCB3aGljaCBpcyBub3QgYWx3YXlzIHdob3NlIERhdGFicmlja3MgY3JlZGVudGlhbFxuICogcnVucyBpdC4gQW4gT0JPIGNvbnRleHQncyBvd24gdXNlciBpZCBpcyBhdXRob3JpdGF0aXZlLiBVbmRlciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsLCBldmVyeSBjYWxsZXIgc2hhcmVzIG9uZSBjcmVkZW50aWFsLCBzbyB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgaXNcbiAqIHdoYXQga2VlcHMgbWVtb3J5IHRocmVhZHMgYW5kIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZXMgZGlzdGluY3Q7IHRoZSBzZXJ2aWNlXG4gKiBwcmluY2lwYWwgaWQgaXMgdGhlIGZsb29yIHdoZW4gbm8gdXNlciB3YXMgZm9yd2FyZGVkLlxuICpcbiAqIFRoaXMgcnVsZSBoYXMgdG8gYmUgaWRlbnRpY2FsIGV2ZXJ5d2hlcmUgYSBjYWNoZSBrZXkgaXMgYnVpbHQsIHNvIGJvdGggdGhlXG4gKiB3cml0ZSBzaWRlICh0aGUgYFJlcXVlc3RDb250ZXh0YCB1c2VyIHN0YW1wZWQgYnkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYClcbiAqIGFuZCB0aGUgcmVhZCBzaWRlICh0aGUgcGx1Z2luJ3Mgb3duIEFwcEtpdCByb3V0ZXMsIHdoaWNoIGhhdmUgYSByZXF1ZXN0IGJ1dFxuICogbm8gYFJlcXVlc3RDb250ZXh0YCkgZGVyaXZlIHRoZWlyIGtleSBmcm9tIHRoaXMgb25lIGZ1bmN0aW9uLiBXaGVuIHRoZSB0d29cbiAqIGRpc2FncmVlZCwgYSBjaGFydCB3cml0dGVuIHVuZGVyIHRoZSBmb3J3YXJkZWQgdXNlciBpZCB3YXMgcmVhZCBiYWNrIHVuZGVyXG4gKiB0aGUgc2VydmljZSBwcmluY2lwYWwgaWQgYW5kIHRoZSBlbWJlZCByb3V0ZSBhbnN3ZXJlZCA0MDQsIHdoaWNoIHRoZSBjaGF0IFVJXG4gKiByZW5kZXJzIGFzIGFuIGV4cGlyZWQgY2hhcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVkVXNlcklkKFxuICBleGVjdXRpb25Db250ZXh0OiBhcHBraXQuRXhlY3V0aW9uQ29udGV4dExpa2UsXG4gIGZvcndhcmRlZFVzZXJJZD86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmIChcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0KSByZXR1cm4gZXhlY3V0aW9uQ29udGV4dFVzZXJJZChleGVjdXRpb25Db250ZXh0KTtcbiAgcmV0dXJuIGZvcndhcmRlZFVzZXJJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGV4ZWN1dGlvbkNvbnRleHQpO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGV2ZXJ5IHBlci11c2VyIGNhY2hlIGVudHJ5IGlzIG5hbWVzcGFjZWQgdW5kZXIsIHNvIGFuIE9CTyByZXN1bHRcbiAqIGNhbm5vdCBiZSByZWFkIGJhY2sgYnkgYW5vdGhlciBjYWxsZXIuXG4gKlxuICogUHJlZmVycyB0aGUge0BsaW5rIFVzZXJ9IHRoYXQge0BsaW5rIE1hc3RyYVNlcnZlcn0gc3RhbXBzIG9uIHRoZSByZXF1ZXN0XG4gKiBjb250ZXh0LCB3aG9zZSBpZCBhbHJlYWR5IGZvbGxvd3Mge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9LiBUaGUgTUNQIHRyYW5zcG9ydFxuICogcm91dGVzIGRvIG5vdCB0aHJlYWQgdGhhdCBjb250ZXh0IGludG8gdG9vbCBleGVjdXRpb24sIHNvIHRob3NlIGZhbGwgYmFjayB0b1xuICogdGhlIGFtYmllbnQgZXhlY3V0aW9uIGNvbnRleHQgKHRoZSBhY3RpdmUgT0JPIHNjb3BlLCBvciB0aGUgc2VydmljZVxuICogcHJpbmNpcGFsKS4gQSBjYWxsZXIgaG9sZGluZyBhbiBleHByZXNzIHJlcXVlc3Qgc2hvdWxkIGJ1aWxkIGl0cyBrZXkgZnJvbVxuICoge0BsaW5rIGF0dHJpYnV0ZWRVc2VySWR9IGluc3RlYWQsIHNvIHRoZSBmb3J3YXJkZWQgdXNlciBpcyBub3QgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gIHJldHVybiB1c2VyPy5pZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKGdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG59XG5cbi8qKiBQZ1ZlY3RvciBjb25maWcgd2l0aCBhbiBvcHRpb25hbCBNYXN0cmEgc3RvcmUgaWQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFNZW1vcnlDb25maWcgPSBQZ1ZlY3RvckNvbmZpZyAmIHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEZpbmUtZ3JhaW5lZCBjb250cm9sIGZvciB0aGUgb3B0aW9uYWwgTUNQIHNlcnZlciBleHBvc3VyZVxuICogKHtAbGluayBNYXN0cmFQbHVnaW5Db25maWcubWNwfSkuIEV2ZXJ5IGZpZWxkIGlzIG9wdGlvbmFsOyB0aGUgb2JqZWN0XG4gKiBmb3JtIG9ubHkgbmVlZHMgdG8gc2V0IHdoYXQgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFNY3BDb25maWcge1xuICAvKipcbiAgICogU2VydmVyIGlkIHVzZWQgaW4gdGhlIHJvdXRlIHBhdGggKGAvbWNwLzxzZXJ2ZXJJZD4vLi4uYCkgYW5kIGFzIHRoZVxuICAgKiBNQ1AgcmVnaXN0cnkgaWQuIERlZmF1bHRzIHRvIHRoZSBwbHVnaW4ncyByZWdpc3RlcmVkIG5hbWUuXG4gICAqL1xuICBzZXJ2ZXJJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBhZHZlcnRpc2VkIG92ZXIgTUNQLiBEZWZhdWx0cyB0byBgXCI8ZGlzcGxheU5hbWU+IE1DUFwiYC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFNlbWFudGljIHZlcnNpb24gYWR2ZXJ0aXNlZCBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYFwiMS4wLjBcImAuICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhZHZlcnRpc2VkIG92ZXIgTUNQLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cG9zZSBldmVyeSByZWdpc3RlcmVkIGFnZW50IGFzIGFuIGBhc2tfPGFnZW50SWQ+YCBNQ1AgdG9vbC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhpcyBpcyB0aGUgXCJsZXZlcmFnZSB0aGUgTWFzdHJhIGFnZW50cyBvdmVyXG4gICAqIE1DUFwiIGJlaGF2aW9yIG1vc3QgY2FsbGVycyB3YW50LlxuICAgKi9cbiAgYWdlbnRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFsc28gZXhwb3NlIHRoZSBwbHVnaW4ncyBhbWJpZW50IHRvb2xzICh0aGUgYnVpbHQtaW4gYHJlbmRlcl9kYXRhYFxuICAgKiBwbHVzIGFueXRoaW5nIGluIGBjb25maWcudG9vbHNgKSBhcyBNQ1AgdG9vbHMuIERlZmF1bHRzIHRvIGBmYWxzZWA6XG4gICAqIHRoZSBhbWJpZW50IHRvb2xzIGFzc3VtZSBhbiBpbi1wcm9jZXNzIGNoYXQgdHVybiAodGhleSBwdWJsaXNoXG4gICAqIHdyaXRlciBldmVudHMgdGhlIGNoYXQgVUkgY29uc3VtZXMpLCBzbyB0aGV5IGFyZW4ndCB1c2VmdWwgdG8gYVxuICAgKiBzdGFuZGFsb25lIE1DUCBjbGllbnQuIFR1cm4gdGhpcyBvbiBvbmx5IHdoZW4gdGhvc2UgdG9vbHMgYXJlIHNhZmVcbiAgICogdG8gY2FsbCBvdXQtb2YtYmFuZC5cbiAgICovXG4gIHRvb2xzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dHJhIHRvb2xzIHRvIGV4cG9zZSBvdmVyIE1DUCBiZXlvbmQgdGhlIGFnZW50IC8gYW1iaWVudCBzZXRzLlxuICAgKiBVc2UgdGhpcyBmb3IgdG9vbHMgd3JpdHRlbiBzcGVjaWZpY2FsbHkgZm9yIE1DUCBjb25zdW1lcnMuXG4gICAqL1xuICBleHRyYVRvb2xzPzogTWFzdHJhVG9vbHM7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGFjY2VwdGVkIGJ5IHRoZSBNYXN0cmEgQXBwS2l0IHBsdWdpbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFzdHJhUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKiBNYXN0cmEgT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgaWQuIERlZmF1bHRzIHRvIGBcImRhdGFicmlja3NcImA7IG5vIGVudiBmYWxsYmFjay4gKi9cbiAgcHJvdmlkZXJJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc3RncmVzU3RvcmUgZm9yIE1hc3RyYSB0aHJlYWRzL21lc3NhZ2VzLiBgdHJ1ZWAgcmV1c2VzIHRoZVxuICAgKiBgbGFrZWJhc2VgIHBsdWdpbidzIHBvb2w7IGFuIG9iamVjdCBvcGVucyBhIGRlZGljYXRlZCBzdG9yZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBib29sZWFuIHwgUG9zdGdyZXNTdG9yZUNvbmZpZztcbiAgLyoqXG4gICAqIFBnVmVjdG9yIHN0b3JlIGZvciBNYXN0cmEgbWVtb3J5IHJlY2FsbC4gYHRydWVgIHJldXNlcyB0aGVcbiAgICogYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sOyBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuXG4gICAqL1xuICBtZW1vcnk/OiBib29sZWFuIHwgTWFzdHJhTWVtb3J5Q29uZmlnO1xuICAvKipcbiAgICogU2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveC5cbiAgICogYHRydWVgIHNlbGVjdHMgRGF0YWJyaWNrcyB3aXRoIGRlZmF1bHRzLCBhbiBvYmplY3QgY29uZmlndXJlcyBpdHMgbGlmZWN5Y2xlLFxuICAgKiBhbmQgYGZhbHNlYCBkaXNhYmxlcyB3b3Jrc3BhY2UgY29tbWFuZCBleGVjdXRpb24uIEFuIGFnZW50IHdpdGggYW4gZXhwbGljaXRcbiAgICogY3VzdG9tIGB3b3Jrc3BhY2VgIGtlZXBzIHRoYXQgd29ya3NwYWNlIGFuZCBpdHMgc2FuZGJveC5cbiAgICovXG4gIHNhbmRib3g/OiBib29sZWFuIHwgXCJkYXRhYnJpY2tzXCIgfCBcIm1vbnR5XCIgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnM7XG4gIC8qKlxuICAgKiBDb2RlLWRlZmluZWQgYWdlbnRzLiBBY2NlcHRzIHRocmVlIHNoYXBlcyBmb3IgY29udmVuaWVuY2U6XG4gICAqXG4gICAqIC0gKipSZWNvcmQqKjogYHsgYW5hbHlzdDogZGVmLCBoZWxwZXI6IGRlZiB9YCAtIGtleXMgYmVjb21lIHRoZVxuICAgKiAgIHJlZ2lzdGVyZWQgaWRzIGFuZCB0aGUgZmlyc3Qga2V5IGlzIHRoZSBkZWZhdWx0LlxuICAgKiAtICoqU2luZ2xlIGRlZmluaXRpb24qKjogYGRlZmAgLSByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYFwiZGVmYXVsdFwiYCB3aGVuIGBuYW1lYCBpcyBvbWl0dGVkKSBhbmRcbiAgICogICBhdXRvbWF0aWNhbGx5IG1hcmtlZCBhcyB0aGUgZGVmYXVsdCBhZ2VudC5cbiAgICogLSAqKkFycmF5Kio6IGBbZGVmMSwgZGVmMl1gIC0gZWFjaCByZWdpc3RlcmVkIHVuZGVyXG4gICAqICAgYHNsdWdpZnkoZGVmLm5hbWUpYCAob3IgYGFnZW50XyR7aX1gIHdoZW4gYG5hbWVgIGlzIG9taXR0ZWQpO1xuICAgKiAgIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgZGVmYXVsdC5cbiAgICpcbiAgICogRWFjaCBlbnRyeSBiZWNvbWVzIGEgTWFzdHJhIGBBZ2VudGAgcmVhY2hhYmxlIGF0XG4gICAqIGAvYXBpLzxwbHVnaW4+L3JvdXRlL2NoYXQvPGlkPmAgKHRoZSBjaGF0IHJvdXRlIGFsc28gbWF0Y2hlc1xuICAgKiBgOmFnZW50SWRgKS4gV2hlbiBgYWdlbnRzYCBpcyBvbWl0dGVkIGVudGlyZWx5LCB0aGUgcGx1Z2luXG4gICAqIHJlZ2lzdGVycyBhIHNpbmdsZSBidWlsdC1pbiBgZGVmYXVsdGAgYW5hbHlzdCBzbyB0aGUgYmFyZVxuICAgKiBgbWFzdHJhKClgIGNhbGwgc3RpbGwgbW91bnRzIGEgd29ya2luZyBjaGF0IGVuZHBvaW50LlxuICAgKlxuICAgKiBAZXhhbXBsZSBTaW5nbGUtYWdlbnQgc2hvcnRoYW5kXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgYWdlbnRzOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBBcnJheVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoe1xuICAgKiAgIGFnZW50czogW1xuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImFuYWx5c3RcIiwgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgY3JlYXRlQWdlbnQoeyBuYW1lOiBcImhlbHBlclwiLCBpbnN0cnVjdGlvbnM6IFwiLi4uXCIgfSksXG4gICAqICAgXSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZSBSZWNvcmQgKGV4cGxpY2l0IGlkcylcbiAgICogYGBgdHNcbiAgICogbWFzdHJhKHtcbiAgICogICBhZ2VudHM6IHtcbiAgICogICAgIGFuYWx5c3Q6IGNyZWF0ZUFnZW50KHsgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiIH0pLFxuICAgKiAgICAgaGVscGVyOiBjcmVhdGVBZ2VudCh7IGluc3RydWN0aW9uczogXCIuLi5cIiB9KSxcbiAgICogICB9LFxuICAgKiAgIGRlZmF1bHRBZ2VudDogXCJhbmFseXN0XCIsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFnZW50cz86XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24+XG4gICAgfCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25cbiAgICB8IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogQW1iaWVudCB0b29scyBzcHJlYWQgaW50byBldmVyeSByZWdpc3RlcmVkIGFnZW50J3MgdG9vbHMgcmVjb3JkO1xuICAgKiBwZXItYWdlbnQgdG9vbHMgd2luIG9uIGtleSBjb2xsaXNpb24uIFVzZSBmb3IgYSBzbWFsbCBzaGFyZWRcbiAgICogbGlicmFyeTsgZm9yIHBlci1hZ2VudCB0b29scyBzZXQgYGFnZW50c1tpZF0udG9vbHNgIGluc3RlYWQuXG4gICAqL1xuICB0b29scz86IE1hc3RyYVRvb2xzO1xuICAvKipcbiAgICogQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgZG9lc24ndCBzcGVjaWZ5IG9uZSAodGhlIGJhcmUsXG4gICAqIHVuLXN1ZmZpeGVkIGhpc3RvcnkgLyBzdWdnZXN0aW9ucyByb3V0ZXMgcmVzb2x2ZSB0byBpdCkuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBrZXkgaW4gYGFnZW50c2AgKG9yIGBcImRlZmF1bHRcImAgd2hlblxuICAgKiBgYWdlbnRzYCBpcyBvbWl0dGVkKS4gTXVzdCBtYXRjaCBhbiBpZCBpbiBgYWdlbnRzYCB3aGVuIGJvdGggYXJlXG4gICAqIHNldDsgYSBtaXNtYXRjaCB0aHJvd3MgYXQgc2V0dXAgd2l0aCB0aGUgYXZhaWxhYmxlIGNhbmRpZGF0ZXMuXG4gICAqL1xuICBkZWZhdWx0QWdlbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbHVnaW4tbGV2ZWwgZGVmYXVsdCBtb2RlbCBhcHBsaWVkIHRvIGV2ZXJ5IGFnZW50IHRoYXQgb21pdHMgaXRzXG4gICAqIG93biBgbW9kZWxgLiBNaXJyb3JzIEFwcEtpdCdzIGBhZ2VudHMoeyBkZWZhdWx0TW9kZWwgfSlgLlxuICAgKlxuICAgKiAtIGBzdHJpbmdgOiBzaG9ydGhhbmQgZm9yIFwidXNlIHRoZSBPQk8gYXV0by1yZXNvbHZlciBidXQgc3dhcCB0aGVcbiAgICogICBgbW9kZWxJZGBcIiAoZS5nLiBgXCJkYXRhYnJpY2tzLWNsYXVkZS1zb25uZXQtNC02XCJgKS5cbiAgICogLSBBbnkgb3RoZXIgTWFzdHJhIGBEeW5hbWljQXJndW1lbnQ8TWFzdHJhTW9kZWxDb25maWc+YDogcGFzc2VkXG4gICAqICAgdGhyb3VnaCB2ZXJiYXRpbS4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCBmdWxsIGNvbnRyb2wgb3ZlciBhdXRoXG4gICAqICAgb3IgYHByb3ZpZGVySWRgLlxuICAgKlxuICAgKiBSZXNvbHV0aW9uIG9yZGVyIHBlciBhZ2VudDogYGRlZi5tb2RlbGAg4oaSIGBkZWZhdWx0TW9kZWxgIOKGklxuICAgKiBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgIOKGkiBidWlsdC1pbiBgL3NlcnZpbmctZW5kcG9pbnRzYFxuICAgKiByZXNvbHZlci5cbiAgICovXG4gIGRlZmF1bHRNb2RlbD86IEFnZW50Q29uZmlnW1wibW9kZWxcIl0gfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdXp6eS1tYXRjaCBsb29zZSBtb2RlbCBuYW1lcyAoYFwiY2xhdWRlIHNvbm5ldFwiYCkgYWdhaW5zdCB0aGUgd29ya3NwYWNlJ3NcbiAgICogTW9kZWwgU2VydmluZyBlbmRwb2ludHMuIERlZmF1bHRzIHRvIGB0cnVlYDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBTZXQgYGZhbHNlYCB0byByZXF1aXJlIGV4YWN0IGVuZHBvaW50IG5hbWVzIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBtb2RlbEZ1enp5TWF0Y2g/OiBib29sZWFuO1xuICAvKipcbiAgICogRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLlxuICAgKiBEZWZhdWx0cyB0byBgMC40YDsgbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBMb3dlciB2YWx1ZXMgcmVqZWN0IGxvb3NlIG1hdGNoZXM7IHJhaXNlIGl0IGlmIHlvdSBoYXZlIGEgc3ByYXdsaW5nXG4gICAqIGVuZHBvaW50IGNhdGFsb2d1ZSB3aXRoIHNpbWlsYXItbG9va2luZyBuYW1lcy5cbiAgICovXG4gIG1vZGVsRnV6enlUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgc2VydmluZy1lbmRwb2ludHMgbGlzdCBjYWNoZSwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBEZWZhdWx0cyB0byA1IG1pbnV0ZXM7IG5vIGVudiBmYWxsYmFjay5cbiAgICpcbiAgICogVGhlIGNhY2hlIGlzIHBlciB3b3Jrc3BhY2UgaG9zdCBhbmQgc2hhcmVkIGFjcm9zcyB1c2VyczsgY29uY3VycmVudFxuICAgKiBjYWxsZXJzIGNvYWxlc2NlIG9uIGEgc2luZ2xlIGluLWZsaWdodCBmZXRjaC5cbiAgICovXG4gIG1vZGVsQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIExldCBjbGllbnRzIHBpY2sgdGhlIGJhY2tpbmcgZW5kcG9pbnQgcGVyIHJlcXVlc3QuIERlZmF1bHRzIHRvIGB0cnVlYDtcbiAgICogbm8gZW52IGZhbGxiYWNrLlxuICAgKlxuICAgKiBSZWFkcyB0aGUgYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIHRoZSBgP21vZGVsPWAgcXVlcnkgc3RyaW5nLCBvciBhXG4gICAqIGBtb2RlbGAgYm9keSBmaWVsZCwgaW4gdGhhdCBvcmRlci4gRGlzYWJsZSB3aGVuIHJ1bm5pbmcgbXVsdGktdGVuYW50XG4gICAqIHdoZXJlIHVudHJ1c3RlZCBjbGllbnRzIHNob3VsZG4ndCBjaG9vc2UgdGhlIGVuZHBvaW50LlxuICAgKi9cbiAgbW9kZWxPdmVycmlkZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmlvcml0eS1vcmRlcmVkIGxpc3Qgb2YgZW5kcG9pbnQgbmFtZXMgdHJpZWQgKmZpcnN0KiB3aGVuIG5vXG4gICAqIGFnZW50IC8gcGx1Z2luIC8gZW52IC8gcmVxdWVzdC1vdmVycmlkZSBtb2RlbCBpZCBpcyBzZXQsIGFoZWFkIG9mXG4gICAqIHRoZSBkeW5hbWljIHNjb3JlLWNsYXNzaWZpZWQgY2F0YWxvZ3VlLiBUaGUgcmVzb2x2ZXIgcGlja3MgdGhlXG4gICAqIGZpcnN0IGlkIHRoYXQgaXMgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgd29ya3NwYWNlJ3NcbiAgICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgbGlzdGluZy5cbiAgICpcbiAgICogV2hlbiB1bnNldCwgcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhlIGxpdmUgRm91bmRhdGlvbiBNb2RlbCBBUElcbiAgICogYHF1YWxpdHlgIC8gYHNwZWVkYCAvIGBjb3N0YCBzY29yZXM6IGVuZHBvaW50cyBhcmUgY2xhc3NpZmllZCBpbnRvXG4gICAqIGNoYXQgY2xhc3NlcyAoYGNsYXNzaWZ5RW5kcG9pbnRzYCkgYW5kIHdhbGtlZCBiZXN0LWZpcnN0XG4gICAqIChDaGF0VGhpbmtpbmcgLT4gQ2hhdEJhbGFuY2VkIC0+IENoYXRGYXN0KS4gVGhlIGF1dG9tYXRpYyBkZWZhdWx0IGlzXG4gICAqIGxpdmUtb25seSBhbmQgZmFpbHMgd2hlbiBubyBtYXRjaGluZyBlbmRwb2ludCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgKiBTZXQgdGhpcyB0byBwaW4gYSByZWd1bGF0ZWQgd29ya3NwYWNlIHRvIGFuIGFwcHJvdmVkIHN1YnNldCwgb3IgdG8gcHV0XG4gICAqIGN1c3RvbSBlbmRwb2ludHMgaW4gZnJvbnQgb2YgdGhlIGF1dG8tY2xhc3NpZmllZCBjYXRhbG9ndWUuXG4gICAqL1xuICBkZWZhdWx0TW9kZWxGYWxsYmFja3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgIChkZWZhdWx0KSwgZXZlcnkgYWdlbnQgZ2V0cyBhIGJ1aWx0LWluIGlucHV0XG4gICAqIHByb2Nlc3NvciB0aGF0IHN0cmlwcyBgY2hhcnRJZGAgZmllbGRzIGZyb20gcHJpb3IgYXNzaXN0YW50XG4gICAqIHRvb2wtaW52b2NhdGlvbiByZXN1bHRzIGJlZm9yZSB0aGV5IHJlYWNoIHRoZSBtb2RlbC4gVGhpc1xuICAgKiBwcmV2ZW50cyB0aGUgbW9kZWwgZnJvbSByZXVzaW5nIHR1cm4tc2NvcGVkIGNoYXJ0SWRzIGl0IHNlZXNcbiAgICogaW4gbWVtb3J5IHJlY2FsbCAod2hpY2ggd291bGQgbGVhdmUgYFtjaGFydDo8aWQ+XWAgbWFya2Vyc1xuICAgKiBwb2ludGluZyBhdCB3cml0ZXIgZXZlbnRzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0KS5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gb3B0IG91dCAtIHVzZWZ1bCBpZiBhIG5vbi1kZWZhdWx0IGFnZW50XG4gICAqIG5lZWRzIGZ1bGwgdmlzaWJpbGl0eSBpbnRvIHByaW9yIGNoYXJ0SWRzIChlLmcuIGFuIGF1ZGl0XG4gICAqIGFnZW50IHJlYXNvbmluZyBhYm91dCBjaGFydCBsaW5lYWdlKS5cbiAgICovXG4gIHN0cmlwU3RhbGVDaGFydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU3R5bGUgZ3VhcmRyYWlscyBhcHBlbmRlZCB0byBldmVyeSBhZ2VudCdzIGBpbnN0cnVjdGlvbnNgIHRvIGN1cmJcbiAgICogY29tbW9uIExMTS1pc21zIChlbSBkYXNoZXMsIGVtb2ppcywgc3ljb3BoYW50aWMgb3BlbmVycywgdGhyb3dhd2F5XG4gICAqIGNsb3NlcnMsIGV4Y2Vzc2l2ZSBoZWRnaW5nKS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCk6IHVzZSB0aGUgYnVpbHQtaW5cbiAgICogICBgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlNgIGZyb20gYGFnZW50cy50c2AuXG4gICAqIC0gYHN0cmluZ2A6IHJlcGxhY2UgdGhlIGRlZmF1bHQgd2l0aCB0aGUgc3VwcGxpZWQgYmxvY2suXG4gICAqIC0gYGZhbHNlYDogZGlzYWJsZSBlbnRpcmVseSAoYWdlbnRzIHNlZSBvbmx5IHRoZWlyIGJlc3Bva2VcbiAgICogICBgaW5zdHJ1Y3Rpb25zYCkuXG4gICAqXG4gICAqIEFwcGVuZGVkIChub3QgcHJlcGVuZGVkKSBzbyB0aGUgYWdlbnQncyByb2xlIGFuZCBydWxlcyBjb21lIGZpcnN0XG4gICAqIGFuZCB0aGUgc3R5bGUgYmxvY2sgbGVhbnMgb24gdGhlIG1vZGVsJ3MgcmVjZW5jeSBiaWFzLlxuICAgKi9cbiAgc3R5bGVJbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBmYWxzZTtcbiAgLyoqXG4gICAqIEdlbmllIHNwYWNlcyB0aGlzIHBsdWdpbidzIGFnZW50cyBjYW4gZGVsZWdhdGUgdG8uIE9uZSBNYXN0cmFcbiAgICogdG9vbCBpcyByZWdpc3RlcmVkIHBlciBhbGlhcyAoYGdlbmllYCBmb3IgdGhlIHdlbGwta25vd25cbiAgICogYGRlZmF1bHRgIGFsaWFzLCBgZ2VuaWVfPGFsaWFzPmAgb3RoZXJ3aXNlKS4gRWFjaCB0b29sIHNwaW5zXG4gICAqIHVwIGEgcGVyLXF1ZXN0aW9uIEdlbmllIHN1Yi1hZ2VudCB0aGF0IHJ1bnMgRGF0YWJyaWNrc1xuICAgKiBcImFnZW50IG1vZGVcIiBhZ2FpbnN0IHRoZSBzcGFjZSwgYnJvYWRjYXN0cyB3aXJlIGV2ZW50cyB0byB0aGVcbiAgICogVUksIGZldGNoZXMgc3RhdGVtZW50IHJvd3MgZm9yIG5vbi1lbXB0eSByZXN1bHRzLCBhbmQgcmV0dXJuc1xuICAgKiBhIGAoc3RyaW5nIHwgZGF0YSB8IGNoYXJ0KVtdYCBzdW1tYXJ5IHRoZSBob3N0IFVJIHJlbmRlcnNcbiAgICogaW5saW5lLlxuICAgKlxuICAgKiBFbnRyaWVzIGFjY2VwdCBlaXRoZXIgYSBmdWxsIHtAbGluayBHZW5pZVNwYWNlQ29uZmlnfSBvYmplY3RcbiAgICogb3IgYSBiYXJlIGBzcGFjZV9pZGAgc3RyaW5nIHdoZW4gbm8gZXh0cmFzIGFyZSBuZWVkZWQ6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIG1hc3RyYSh7XG4gICAqICAgZ2VuaWVTcGFjZXM6IHtcbiAgICogICAgIGRlZmF1bHQ6IFwiMDFlZjBkM2MwZTFiMWY0YThkMmMzZTRmNWE2YjdjOGRcIixcbiAgICogICAgIGZvcmVjYXN0czogeyBzcGFjZUlkOiBcIjAxZWYuLi5cIiwgaGludDogXCJ3ZWVrbHkgZGVtYW5kIGZvcmVjYXN0c1wiIH0sXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBSZWFjaCB0aGUgc3BhY2VzIGZyb20gYW4gYWdlbnQncyBgdG9vbHMocGx1Z2lucylgIGNhbGxiYWNrIHZpYVxuICAgKiBgcGx1Z2lucy5nZW5pZT8udG9vbGtpdCgpYDsgdGhlIHJlc3VsdGluZyB0b29scyBhY2NlcHRcbiAgICogYHsgY29udGVudCwgY29udmVyc2F0aW9uSWQ/IH1gIGFuZCByZXR1cm4gYSBoeWRyYXRlZCBzdW1tYXJ5LlxuICAgKlxuICAgKiAqKkZhbGxiYWNrIGRpc2NvdmVyeSoqIChoaWdoZXN0IHByZWNlZGVuY2UgZmlyc3QpOiBpZiB0aGlzXG4gICAqIGZpZWxkIGlzIG9taXR0ZWQsIHRoZSBHZW5pZSBhZ2VudCBhbHNvIHBpY2tzIHVwIHNwYWNlcyBmcm9tXG4gICAqICgxKSB0aGUgQXBwS2l0IGBnZW5pZSh7IHNwYWNlczogeyAuLi4gfSB9KWAgcGx1Z2luIGluc3RhbmNlXG4gICAqIHdoZW4gcmVnaXN0ZXJlZCwgYW5kICgyKSB0aGUgYERBVEFCUklDS1NfR0VOSUVfU1BBQ0VfSURgXG4gICAqIGVudiB2YXIgKHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGBkZWZhdWx0YCBhbGlhcykuIFRoaXMga2VlcHNcbiAgICogZXhpc3RpbmcgQXBwS2l0IGRlcGxveW1lbnRzIHdvcmtpbmcgd2l0aG91dCByZXN0YXRpbmcgdGhlXG4gICAqIHNwYWNlcyBjb25maWcgaW4gdHdvIHBsYWNlcy5cbiAgICovXG4gIGdlbmllU3BhY2VzPzogR2VuaWVTcGFjZXNDb25maWc7XG4gIC8qKlxuICAgKiBVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYGFza19nZW5pZWAuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogU2V0IGBmYWxzZWAgdG8gZm9yY2UgdGhlIGxlZ2FjeSBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgZHJpdmVyLiBBXG4gICAqIHByZS1zdHJlYW0gZmVhdHVyZS1kaXNhYmxlZCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZSBmYWxscyBiYWNrXG4gICAqIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBnZW5pZUFnZW50TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgR2VuaWUgc3BhY2UgbWV0YWRhdGEgY2FjaGUsIGluXG4gICAqIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gNSBtaW51dGVzLiBUaGUgR2VuaWUgYWdlbnQgY2FsbHNcbiAgICogYGNsaWVudC5nZW5pZS5nZXRTcGFjZSguLi4pYCBvbiBldmVyeSBjb2xkLXN0YXJ0IHRvIGdldCB0aGVcbiAgICogdGl0bGUgLyBkZXNjcmlwdGlvbiAvIHdhcmVob3VzZSBpZDsgY2FjaGVkIHJlc3BvbnNlcyBza2lwIHRoZVxuICAgKiByb3VuZC10cmlwIGFuZCBjb25jdXJyZW50IGNhbGxlcnMgY29hbGVzY2Ugb24gYSBzaW5nbGVcbiAgICogaW4tZmxpZ2h0IGZldGNoLiBEcm9wIHRvIGEgc21hbGxlciB2YWx1ZSB3aGVuIGFuYWx5c3RzIGFyZVxuICAgKiBhY3RpdmVseSBlZGl0aW5nIHNwYWNlIG1ldGFkYXRhIGFuZCB5b3Ugd2FudCBjaGFuZ2VzIHZpc2libGVcbiAgICogd2l0aGluIHNlY29uZHM7IHJhaXNlIGl0IHRvIGFtb3J0aXNlIHRoZSByb3VuZC10cmlwIHdoZW5cbiAgICogc3BhY2UgbWV0YWRhdGEgaXMgZWZmZWN0aXZlbHkgZnJvemVuLlxuICAgKlxuICAgKiBCYWNrZWQgYnkgQXBwS2l0J3MgYENhY2hlTWFuYWdlcmAsIHNvIHRoZSBjYWNoZSBwYXJ0aWNpcGF0ZXNcbiAgICogaW4gdGVsZW1ldHJ5IHNwYW5zIChgY2FjaGUuZ2V0T3JFeGVjdXRlYCkgYW5kIGJlbmVmaXRzIGZyb21cbiAgICogTGFrZWJhc2UgcGVyc2lzdGVuY2Ugd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgd2lyZWQgdXAuXG4gICAqL1xuICBnZW5pZVNwYWNlQ2FjaGVUdGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gTExNIHN0ZXBzIGVhY2ggYWdlbnQgZ2V0cyBwZXIgdHVybi4gT25lIHN0ZXAgPSBvbmVcbiAgICogcm91bmQtdHJpcCB0byB0aGUgdW5kZXJseWluZyBtb2RlbCAoYSB0b29sIGNhbGwgY29uc3VtZXMgYVxuICAgKiBzdGVwLCB0aGUgZmluYWwtdGV4dCByZXBseSBjb25zdW1lcyBvbmUgdG9vKS4gQXBwbGllcyB0b1xuICAgKiBldmVyeSBhZ2VudCByZWdpc3RlcmVkIHRocm91Z2gge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5hZ2VudHN9XG4gICAqIC0gcGVyLWFnZW50IG92ZXJyaWRlcyBhcmVuJ3Qgc3VyZmFjZWQgeWV0IGJlY2F1c2UgdGhlIHNhbWVcbiAgICogY2VpbGluZyBoYXMgYmVlbiBzdWZmaWNpZW50IGFjcm9zcyBldmVyeSB3b3JrbG9hZCB3ZSd2ZSBydW4uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX01BWF9TVEVQU30gKDI1KSwgc2l6ZWQgdG8gZml0XG4gICAqIGEgZGVjb21wb3NlZCBHZW5pZSB0dXJuIChncm91bmRpbmcgKyBzZXZlcmFsIGBhc2tfZ2VuaWVgIGNhbGxzXG4gICAqICsgYHByZXBhcmVfY2hhcnRgIHBlciBkYXRhc2V0ICsgdGhlIGZpbmFsLXRleHQgcmVwbHkpIHdpdGhcbiAgICogaGVhZHJvb20gZm9yIHRoZSBtb2RlbCB0byBjaGFpbiBhIGNvdXBsZSBvZiBmb2xsb3ctdXBzIGJlZm9yZVxuICAgKiBhbnN3ZXJpbmcuIE1hc3RyYSdzIG93biBgYWdlbnQuZ2VuZXJhdGVgIGRlZmF1bHQgb2YgNSB3b3VsZFxuICAgKiBjdXQgbXVsdGktc3RlcCBvcmNoZXN0cmF0aW9uIG9mZiBhZnRlciAyLTMgdG9vbCBjYWxscywgc29cbiAgICogZXhwbGljaXRseSByYWlzaW5nIHRoZSBjZWlsaW5nIGhlcmUgaXMgd2hhdCBsZXRzIHRoZVxuICAgKiBhZ2VudC1tb2RlIGxvb3AgcGxheSBvdXQuXG4gICAqXG4gICAqIExvd2VyIHdoZW4gYW4gdW51c3VhbGx5IHNsb3cgb3IgZXhwZW5zaXZlIG1vZGVsIG1ha2VzIGxvbmdcbiAgICogdHVybnMgdW5hZmZvcmRhYmxlOyByYWlzZSBmb3IgZXhwbG9yYXRvcnkgd29ya2xvYWRzIHRoYXQgbmVlZFxuICAgKiB0byBkcmlsbCBkZWVwIGludG8gYSBkYXRhc2V0IHdpdGhpbiBhIHNpbmdsZSB0dXJuLlxuICAgKi9cbiAgYWdlbnRNYXhTdGVwcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdpcmUgTWFzdHJhIHNwYW5zIGludG8gQXBwS2l0J3MgZ2xvYmFsIE9UZWwgcGlwZWxpbmUgdmlhXG4gICAqIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IG9uIG9ubHkgd2hlblxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldC4gV2hlbiB1bnNldCwgdGhlXG4gICAqICAgYnJpZGdlIGlzIHNraXBwZWQgc28gTWFzdHJhIGRvZXMgbm90IGxvZ1xuICAgKiAgIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCBvbiB0aGUgbm9vcCB0cmFjZXIuXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbiBldmVuIHdpdGhvdXQgYW4gT1RMUCBlbmRwb2ludC5cbiAgICogLSBgZmFsc2VgOiBmb3JjZSBvZmYuXG4gICAqL1xuICBvYnNlcnZhYmlsaXR5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExvZyB1c2VyIGZlZWRiYWNrICh0aHVtYnMgdXAvZG93biArIGZyZWVmb3JtIGNvbW1lbnRzKSB0byBNTGZsb3cgYXNcbiAgICogdHJhY2UgYXNzZXNzbWVudHMsIGFuZCBzdXJmYWNlIHRoZSBmZWVkYmFjayBjb250cm9scyBpbiB0aGUgY2hhdCBVSS5cbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoZGVmYXVsdCwgYXV0byk6IGVuYWJsZWQgb25seSB3aGVuIE1MZmxvdyB0cmFjaW5nIGlzXG4gICAqICAgd2lyZWQgLSBhbiBPVExQIGV4cG9ydGVyIGVuZHBvaW50IGlzIHNldCBhbmQgYW4gTUxmbG93IGV4cGVyaW1lbnRcbiAgICogICBpcyBuYW1lZCAodGhlIHNhbWUgc2lnbmFscyB0aGUgb2JzZXJ2YWJpbGl0eSBwaXBlbGluZSBuZWVkcyB0b1xuICAgKiAgIHNoaXAgdHJhY2VzIHRvIE1MZmxvdykuIE90aGVyd2lzZSBvZmYsIHNpbmNlIHRoZXJlJ2QgYmUgbm8gdHJhY2VcbiAgICogICB0byBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gICAqIC0gYHRydWVgOiBmb3JjZSBvbi4gUmVxdWlyZXMgYE1MRkxPV19FWFBFUklNRU5UX0lEYCBvclxuICAgKiAgIGBNTEZMT1dfRVhQRVJJTUVOVF9OQU1FYDsgYXBwIHN0YXJ0dXAgZmFpbHMgd2hlbiBuZWl0aGVyIGlzIGNvbmZpZ3VyZWQuXG4gICAqICAgVXNlIHRoaXMgd2hlbiB0cmFjZSBleHBvcnQgaXMgd2lyZWQgaW4gYSB3YXkgdGhlIGF1dG8tcHJvYmUgZG9lcyBub3RcbiAgICogICByZWNvZ25pemUuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLiBObyB0cmFjZS1pZCBoZWFkZXIsIG5vIGZlZWRiYWNrIHJvdXRlLCBubyBVSS5cbiAgICpcbiAgICogRmVlZGJhY2sgYXR0YWNoZXMgdG8gYSB0dXJuJ3MgTUxmbG93IHRyYWNlIHZpYSB0aGUgT3BlblRlbGVtZXRyeVxuICAgKiB0cmFjZSBpZCB0aGUgc2VydmVyIHN0YW1wcyBvbiBlYWNoIHJlc3BvbnNlOyBzZWUgYG1sZmxvdy50c2AuXG4gICAqL1xuICBmZWVkYmFjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIHBsdWdpbidzIGFnZW50cyAoYW5kIG9wdGlvbmFsbHkgdG9vbHMpIGFzIGEgTWFzdHJhIE1DUFxuICAgKiBzZXJ2ZXIgc28gZXh0ZXJuYWwgTUNQIGNsaWVudHMgLSBDbGF1ZGUgRGVza3RvcCwgQ3Vyc29yLCB0aGUgTWFzdHJhXG4gICAqIHBsYXlncm91bmQsIG9yIGFub3RoZXIgYWdlbnQgLSBjYW4gY2FsbCB0aGVtIG92ZXIgdGhlIHN0YW5kYXJkIE1DUFxuICAgKiB0cmFuc3BvcnRzLiBFbmFibGVkIGJ5IGRlZmF1bHQgKGFnZW50cyBvbmx5KTogd3JhcHBpbmcgdGhlXG4gICAqIGFscmVhZHktcmVnaXN0ZXJlZCBhZ2VudHMgY29zdHMgbm90aGluZyBleHRyYSwgc28gdGhlIGVuZHBvaW50IGlzIG9uXG4gICAqIG91dCBvZiB0aGUgYm94OyBvbmx5IHRoZSBhbWJpZW50IHRvb2xzICh3aGljaCBhc3N1bWUgYW4gaW4tcHJvY2Vzc1xuICAgKiBjaGF0IHR1cm4pIHN0YXkgb2ZmIHVubGVzcyBleHBsaWNpdGx5IG9wdGVkIGluLlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0KSAvIGB0cnVlYDogZXhwb3NlIGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgYXNcbiAgICogICBhbiBgYXNrXzxhZ2VudElkPmAgTUNQIHRvb2wgdW5kZXIgYSBzZXJ2ZXIgd2hvc2UgaWQgaXMgdGhlIHBsdWdpblxuICAgKiAgIG5hbWUuXG4gICAqIC0gYGZhbHNlYDogbm8gTUNQIGVuZHBvaW50cy5cbiAgICogLSB7QGxpbmsgTWFzdHJhTWNwQ29uZmlnfTogZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgc2VydmVyIGlkLFxuICAgKiAgIGFkdmVydGlzZWQgbWV0YWRhdGEsIGFuZCB3aGljaCBhZ2VudHMgLyB0b29scyBhcmUgZXhwb3NlZC5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB0aGUgc3RvY2sgTWFzdHJhIE1DUCByb3V0ZXMgbW91bnQgdW5kZXIgdGhlIHBsdWdpbidzXG4gICAqIGJhc2UgcGF0aCAobm8gYmVzcG9rZSByb3V0ZSBpcyBhZGRlZCAtIHRoZSBzZXJ2ZXIgaXMgaGFuZGVkIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB2aWEgYG1jcFNlcnZlcnNgLCB3aGljaCBgQG1hc3RyYS9leHByZXNzYCBzZXJ2ZXMpOlxuICAgKlxuICAgKiAtIFN0cmVhbWFibGUgSFRUUDogYFBPU1QgL2FwaS88cGx1Z2luPi9tY3AvPHNlcnZlcklkPi9tY3BgXG4gICAqIC0gU1NFIChsZWdhY3kpOiAgICBgR0VUICAvYXBpLzxwbHVnaW4+L21jcC88c2VydmVySWQ+L3NzZWBcbiAgICogICAgICAgICAgICAgICAgICAgIGBQT1NUIC9hcGkvPHBsdWdpbj4vbWNwLzxzZXJ2ZXJJZD4vbWVzc2FnZXNgXG4gICAqXG4gICAqIFJlcXVlc3RzIHJ1biB1bmRlciB0aGUgc2FtZSBBcHBLaXQgT0JPIHNjb3BlIGFzIHRoZSBjaGF0IHJvdXRlcywgc29cbiAgICogYW4gYWdlbnQgaW52b2tlZCBvdmVyIE1DUCByZXNvbHZlcyBpdHMgbW9kZWwgYW5kIHRvb2xzIGFzIHRoZVxuICAgKiBjYWxsaW5nIHVzZXIuXG4gICAqL1xuICBtY3A/OiBib29sZWFuIHwgTWFzdHJhTWNwQ29uZmlnO1xuICAvKipcbiAgICogSG93IG11Y2ggb2YgdGhlIHN0b2NrIGBAbWFzdHJhL2V4cHJlc3NgIG1hbmFnZW1lbnQgQVBJIGlzIHJlYWNoYWJsZVxuICAgKiB0aHJvdWdoIHRoZSBwbHVnaW4gbW91bnQuIGBAbWFzdHJhL2V4cHJlc3NgIHJlZ2lzdGVycyBpdHMgZnVsbCByb3V0ZVxuICAgKiB0YWJsZSAoYWdlbnQgaW5mZXJlbmNlIHBsdXMgYWRtaW4gLyBtdXRhdGluZyByb3V0ZXM6IGRpcmVjdCB0b29sXG4gICAqIGV4ZWN1dGlvbiwgd29ya2Zsb3cgY29udHJvbCwgcmF3IG1lbW9yeSByZWFkL3dyaXRlLCB0ZWxlbWV0cnksIGxvZ3MsXG4gICAqIHNjb3JlcykuIEFwcEtpdCBhbHJlYWR5IGF1dGhlbnRpY2F0ZXMgZXZlcnkgcmVxdWVzdCBhcyB0aGUgT0JPIHVzZXIsXG4gICAqIGJ1dCBub3RoaW5nIHRoZXJlIHJlc3RyaWN0cyAqd2hpY2gqIG9mIHRob3NlIG9wZXJhdGlvbnMgdGhlIGJyb3dzZXJcbiAgICogY2xpZW50IG1heSBpbnZva2UuXG4gICAqXG4gICAqIC0gYFwic2NvcGVkXCJgIChkZWZhdWx0KTogb25seSB0aGUgcm91dGVzIHRoZSBjaGF0IGNsaWVudCBsZWdpdGltYXRlbHlcbiAgICogICBuZWVkcyBhcmUgZGlzcGF0Y2hlZCB0byBNYXN0cmEgLSBhZ2VudCBpbmZlcmVuY2VcbiAgICogICAoYHN0cmVhbWAgLyBgZ2VuZXJhdGVgIC8gYG5ldHdvcmtgKSwgcmVhZC1vbmx5IGFnZW50IG1ldGFkYXRhLCB0aGlzXG4gICAqICAgcGx1Z2luJ3Mgb3duIE9CTy0gYW5kIHJlc291cmNlLXNjb3BlZCBgL3JvdXRlLypgIHJvdXRlcyAoaGlzdG9yeSAvXG4gICAqICAgdGhyZWFkcyksIGFuZCwgd2hlbiB7QGxpbmsgbWNwfSBpcyBlbmFibGVkLCB0aGUgTUNQIHRyYW5zcG9ydC5cbiAgICogICBFdmVyeXRoaW5nIGVsc2UgKHRvb2wgZXhlY3V0aW9uLCB3b3JrZmxvdyBjb250cm9sLCByYXcgbWVtb3J5LFxuICAgKiAgIHRlbGVtZXRyeSwgbG9ncywgc2NvcmVzLCBhbmQgb3RoZXIgbXV0YXRpb25zKSBpcyByZWplY3RlZCB3aXRoXG4gICAqICAgYDQwM2AgYmVmb3JlIGl0IHJlYWNoZXMgTWFzdHJhLlxuICAgKiAtIGBcImZ1bGxcImA6IGRpc3BhdGNoIHRoZSBlbnRpcmUgc3RvY2sgTWFzdHJhIEFQSS4gVXNlIG9ubHkgZm9yIGFcbiAgICogICB0cnVzdGVkIGZpcnN0LXBhcnR5IGNvbnNvbGUgdGhhdCBnZW51aW5lbHkgbmVlZHMgdGhlIG1hbmFnZW1lbnRcbiAgICogICBzdXJmYWNlLlxuICAgKi9cbiAgYXBpQWNjZXNzPzogXCJzY29wZWRcIiB8IFwiZnVsbFwiO1xuICAvKipcbiAgICogV2hpY2ggRGF0YWJyaWNrcyBpZGVudGl0eSB0aGUgYWdlbnRzJyB3b3Jrc3BhY2UgY2FsbHMgcnVuIGFzOiB0aGVcbiAgICogc2VydmluZy1lbmRwb2ludCBjYXRhbG9ndWUgYmVoaW5kIHRoZSBtb2RlbCBwaWNrZXIsIEdlbmllIHN1Z2dlc3Rpb25zLFxuICAgKiBgYXNrX2dlbmllYCwgYW5kIHRoZSBTdGF0ZW1lbnQgRXhlY3V0aW9uIGZldGNoIGJlaGluZCBhIGBbZGF0YTo8aWQ+XWBcbiAgICogZW1iZWQuIEZhbGxzIGJhY2sgdG8gYE1BU1RSQV9HRU5JRV9JREVOVElUWWAsIHRoZW4gYFwidXNlclwiYC5cbiAgICpcbiAgICogT24tYmVoYWxmLW9mIChPQk8pIGF1dGggcmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIG1lbWJlciBvZiB0aGVcbiAgICogV09SS1NQQUNFLCBub3QganVzdCBvZiB0aGUgRGF0YWJyaWNrcyBhY2NvdW50LiBBbiBhcHAgc2hhcmVkIHdpdGggYW5cbiAgICogYWNjb3VudC1sZXZlbCBncm91cCBjYW4gYmUgb3BlbmVkIGJ5IHNvbWVvbmUgd2hvc2UgdG9rZW4gaXMgdmFsaWQgYnV0IHdob3NlXG4gICAqIGV2ZXJ5IHdvcmtzcGFjZSBjYWxsIGZhaWxzIHdpdGggYFVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gT3JnOiA8aWQ+YCAtIGFuZFxuICAgKiBncmFudGluZyB3b3Jrc3BhY2UgbWVtYmVyc2hpcCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlLCBzaW5jZSBhIHdvcmtzcGFjZVxuICAgKiBjYXBzIG1lbWJlcnNoaXAgd2VsbCBiZWxvdyB0aGUgc2l6ZSBvZiBhIGxhcmdlIGFjY291bnQncyB1c2VyIGdyb3VwLiBUaGVcbiAgICogYXBwJ3Mgc2VydmljZSBwcmluY2lwYWwgYWxyZWFkeSBob2xkcyB0aGUgZ3JhbnRzIHRoZSBhcHAgd2FzIGRlcGxveWVkIHdpdGguXG4gICAqXG4gICAqIC0gYFwidXNlclwiYCAoZGVmYXVsdCk6IGFsd2F5cyBPQk8uIFBlci11c2VyIGF0dHJpYnV0aW9uLCBhbmQgR2VuaWUgLyBVbml0eVxuICAgKiAgIENhdGFsb2cgcm93IGZpbHRlcnMgYXBwbHkgcGVyIHVzZXIuIENvcnJlY3Qgd2hlbiBldmVyeSBjYWxsZXIgaXMgYVxuICAgKiAgIHdvcmtzcGFjZSBtZW1iZXIuXG4gICAqIC0gYFwic2VydmljZS1wcmluY2lwYWxcImA6IGFsd2F5cyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsLiBOZWVkcyBubyBPQk9cbiAgICogICBzY29wZXMgYW5kIHdvcmtzIGZvciBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwLCBhdCB0aGUgY29zdCBvZlxuICAgKiAgIHBlci11c2VyIGF0dHJpYnV0aW9uIGluIEdlbmllIC8gVW5pdHkgQ2F0YWxvZy5cbiAgICogLSBgXCJhdXRvXCJgOiBPQk8gd2hlbiB0aGUgcmVxdWVzdCBjYXJyaWVzIGFuIE9CTyB0b2tlbiwgdGhlIHNlcnZpY2UgcHJpbmNpcGFsXG4gICAqICAgd2hlbiBpdCBkb2VzIG5vdC4gRm9yIGFuIGFwcCBzZXJ2aW5nIEJPVEggdGhlIHBsYXRmb3JtIGZyb250IGRvb3IgYW5kIGFcbiAgICogICBkb29yIHRoYXQgaGFzIG5vIHRva2VuIHRvIGZvcndhcmQgLSBhIGBAZGJ4LXRvb2xzL3R1bm5lbGAgZ2F0ZSwgYVxuICAgKiAgIFRlYW1zIGNoYW5uZWwgLSB3aGVyZSBBcHBLaXQncyBgYXNVc2VyYCB3b3VsZCBvdGhlcndpc2UgdGhyb3dcbiAgICogICBgQXV0aGVudGljYXRpb25FcnJvcmAgb3V0c2lkZSBgTk9ERV9FTlY9ZGV2ZWxvcG1lbnRgLlxuICAgKlxuICAgKiBUaGUgc2VydmljZS1wcmluY2lwYWwgcGF0aCBjaGFuZ2VzIG9ubHkgdGhlIERhdGFicmlja3MgQ1JFREVOVElBTC4gTWVtb3J5XG4gICAqIHRocmVhZHMsIHRoZSBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2UsIGFuZCB0cmFjZSBtZXRhZGF0YSBzdGlsbCBrZXkgb2ZmIHRoZVxuICAgKiBmb3J3YXJkZWQgdXNlciwgc28gY2FsbGVycyBzaGFyaW5nIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCdzIGRhdGEgYWNjZXNzIGtlZXBcbiAgICogc2VwYXJhdGUgY29udmVyc2F0aW9ucyBhbmQgY2Fubm90IHJlYWQgZWFjaCBvdGhlcidzIHRocmVhZHMgb3IgY2hhcnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBBbiBhcHAgYW55IGFjY291bnQgdXNlciBjYW4gb3BlblxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcInNlcnZpY2UtcHJpbmNpcGFsXCIsIGdlbmllU3BhY2VzOiB7IGRlZmF1bHQ6IHNwYWNlSWQgfSB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBleGFtcGxlIE9uZSBhcHAgYmVoaW5kIGJvdGggdGhlIGZyb250IGRvb3IgYW5kIGEgcHVibGljIHR1bm5lbFxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyBnZW5pZUlkZW50aXR5OiBcImF1dG9cIiwgZ2VuaWVTcGFjZXM6IHsgZGVmYXVsdDogc3BhY2VJZCB9IH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGdlbmllSWRlbnRpdHk/OiBNYXN0cmFJZGVudGl0eU1vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBicmFuZCBjb250ZXh0IGFwcGxpZWQgdG8gY2hhcnRzIHByb2R1Y2VkIGJ5IHRoZSBidWlsdC1pblxuICAgKiBgcmVuZGVyX2RhdGFgIC8gYHByZXBhcmVfY2hhcnRgIHRvb2xzLiBXaGVuIHNldCwgdGhlIGNoYXJ0IHBsYW5uZXInc1xuICAgKiBFY2hhcnRzIG91dHB1dCBpcyB0aGVtZWQgd2l0aCB0aGUgYnJhbmQncyBwYWxldHRlIChzZXJpZXMgY29sb3JzIGRlcml2ZWRcbiAgICogZnJvbSBgY29sb3JzLnByaW1hcnlgIC8gYGNvbG9ycy5hY2NlbnRgKSBhbmQgc2FucyBmb250XG4gICAqIChgdHlwb2dyYXBoeS5zYW5zYCkgaW5zdGVhZCBvZiBFY2hhcnRzJyBkZWZhdWx0cy4gT21pdCBmb3IgdGhlIGRlZmF1bHRcbiAgICogRWNoYXJ0cyBsb29rLlxuICAgKlxuICAgKiBQYXNzIHRoZSBwb3J0YWJsZSB7QGxpbmsgQnJhbmRDb250ZXh0fSBzaGFyZWQgYWNyb3NzIHRoZSBVSSBhbmRcbiAgICogbGlicmFyaWVzIChlLmcuIGBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0YCBmcm9tIGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYCxcbiAgICogb3IgYSBjdXN0b21lciBicmFuZCkgLSB0aGUgc2FtZSBvYmplY3QgdGhlIGVtYWlsIGFkZC1vbiBhbmQgdGhlIFVJXG4gICAqIGBCcmFuZFByb3ZpZGVyYCBjb25zdW1lLCBzbyBhIGhvc3QgdGhlbWVzIGNoYXJ0cywgZW1haWwsIGFuZCBVSSBmcm9tIG9uZVxuICAgKiBzb3VyY2UuXG4gICAqL1xuICBicmFuZD86IEJyYW5kQ29udGV4dDtcbiAgLyoqXG4gICAqIFJlbW90ZSBBZ2VudC1Ta2lsbCBzb3VyY2VzIG1hdGVyaWFsaXplZCBvbmNlIGF0IGFwcCBzdGFydHVwLiBBIHNpbmdsZVxuICAgKiBzb3VyY2UsIGEgbGlzdCwgb3IgYSBgeyBzb3VyY2VzLCBmYWlsT25FcnJvcj8sIC4uLiB9YCBiYWcuXG4gICAqXG4gICAqIEVhY2ggc291cmNlIGlzIGEgR2l0SHViIGBvd25lci9yZXBvYCwgYSBnaXQgLyBHaXRMYWIgVVJMLCBvciBhIGRpcmVjdFxuICAgKiBgU0tJTEwubWRgIC8gYXJjaGl2ZSBkb3dubG9hZCBVUkwuIFJlc29sdXRpb24gcHJlZmVycyB0aGUgT1BUSU9OQUwgYHNraWxsc2BcbiAgICogbnBtIENMSSAoYSBwZWVyIGRlcCkgd2hpY2ggaXMgY29waWVkIGludG8gYSB0ZW1wIGRpciBhbmQgdGhlbiBwZXJzaXN0ZWQ7XG4gICAqIHdpdGhvdXQgaXQsIGEgVVJMIHNvdXJjZSBpcyBmZXRjaGVkIGRpcmVjdGx5LiBBIHNvdXJjZSB0aGF0IHJlc29sdmVzXG4gICAqIHRocm91Z2ggbmVpdGhlciBmYWlscyBzdGFydHVwIHVubGVzcyBgZmFpbE9uRXJyb3I6IGZhbHNlYC5cbiAgICpcbiAgICogUHJvdmlzaW9uZWQgc2tpbGxzIGFyZSB3cml0dGVuIHRvIHRoZSBEYXRhYnJpY2tzIHVzZXIncyBBc3Npc3RhbnQgc2tpbGxzXG4gICAqIGZvbGRlciAoYC9Vc2Vycy88ZW1haWw+Ly5hc3Npc3RhbnQvc2tpbGxzYCwgdGhlIFwic2F2ZSB0aGlzIGFzIGEgc2tpbGxcIlxuICAgKiB0YXJnZXQpIHNvIHRoZXkgcGVyc2lzdCBhbmQgYXJlIHBpY2tlZCB1cCBieSB0aGUgYnVpbHQtaW4gQXNzaXN0YW50LXNraWxsc1xuICAgKiBtb3VudC4gV2l0aCBubyB3cml0YWJsZSB3b3Jrc3BhY2UsIHRoZXkgZ28gdG8gYSBsb2NhbCB0ZW1wIGRpciBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBtYXN0cmEoeyByZW1vdGVTa2lsbHM6IFwidmVyY2VsLWxhYnMvYWdlbnQtc2tpbGxzXCIgfSk7XG4gICAqIG1hc3RyYSh7XG4gICAqICAgcmVtb3RlU2tpbGxzOiB7XG4gICAqICAgICBzb3VyY2VzOiBbXCJ2ZXJjZWwtbGFicy9hZ2VudC1za2lsbHNcIiwgXCJodHRwczovL2V4YW1wbGUuY29tL3NraWxsLm1kXCJdLFxuICAgKiAgICAgZmFpbE9uRXJyb3I6IGZhbHNlLFxuICAgKiAgIH0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW90ZVNraWxscz86IFJlbW90ZVNraWxsc09wdGlvbjtcbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLCBtaXJyb3JpbmcgdGhlXG4gKiBkb2N1bWVudGVkIGRlZmF1bHRzIGFuZCBlbnZpcm9ubWVudCBmYWxsYmFja3Mgb2Yge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZ30uXG4gKlxuICogQ292ZXJzIHRoZSBKU09OLWV4cHJlc3NpYmxlIG9wdGlvbnMgb25seS4gYGFnZW50c2AsIGB0b29sc2AsIGFuZCBhXG4gKiBgZGVmYXVsdE1vZGVsYCBwYXNzZWQgYXMgYSBNYXN0cmEgYER5bmFtaWNBcmd1bWVudGAgYXJlIGNvZGUtZGVmaW5lZFxuICogKGZ1bmN0aW9ucyAvIGNsYXNzIGluc3RhbmNlcyksIHNvIHRoZXkgY2Fycnkgbm8gc2NoZW1hIGVudHJ5OyB0aGVcbiAqIGBkZWZhdWx0TW9kZWxgIHByb3BlcnR5IGJlbG93IGRlc2NyaWJlcyBpdHMgc3RyaW5nIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBNQVNUUkFfQ09ORklHX1NDSEVNQTogQ29uZmlnU2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgcHJvdmlkZXJJZDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTWFzdHJhIE9wZW5BSS1jb21wYXRpYmxlIHByb3ZpZGVyIGlkLiBEZWZhdWx0cyB0byBcImRhdGFicmlja3NcIi4nLFxuICAgIH0sXG4gICAgcmVtb3RlU2tpbGxzOiB7XG4gICAgICB0eXBlOiBbXCJzdHJpbmdcIiwgXCJhcnJheVwiLCBcIm9iamVjdFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnUmVtb3RlIEFnZW50LVNraWxsIHNvdXJjZXMgcHJvdmlzaW9uZWQgYXQgc3RhcnR1cDogXCJhaXRvb2xzXCIgZm9yIERhdGFicmlja3NcXCcgb3duIHNraWxsIHNldCAocmVhZCBmcm9tIHRoZSBwdWJsaWMgZGF0YWJyaWNrcy9kYXRhYnJpY2tzLWFnZW50LXNraWxscyByZXBvLCBubyBDTEkgbmVlZGVkKSwgYSBHaXRIdWIgb3duZXIvcmVwbywgYSBnaXQvR2l0TGFiIFVSTCwgb3IgYSBkaXJlY3QgU0tJTEwubWQvYXJjaGl2ZSBVUkwuIE5vbi1haXRvb2xzIHNvdXJjZXMgcHJlZmVyIHRoZSBvcHRpb25hbCBgc2tpbGxzYCBucG0gQ0xJLCBlbHNlIGEgZGlyZWN0IGZldGNoOyBmYWlscyBzdGFydHVwIG9uIGVycm9yIHVubGVzcyBmYWlsT25FcnJvcjpmYWxzZS4gV3JpdHRlbiB0byB0aGUgRGF0YWJyaWNrcyB1c2VyIEFzc2lzdGFudCBza2lsbHMgZm9sZGVyLCBvciBhIGxvY2FsIHRlbXAgZGlyIHdoZW4gbm8gd29ya3NwYWNlIGlzIHdyaXRhYmxlLicsXG4gICAgfSxcbiAgICBzdG9yYWdlOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUG9zdGdyZXNTdG9yZSBmb3IgTWFzdHJhIHRocmVhZHMgLyBtZXNzYWdlcy4gYHRydWVgIHJldXNlcyB0aGUgYGxha2ViYXNlYCBwbHVnaW4ncyBwb29sLCBhbiBvYmplY3Qgb3BlbnMgYSBkZWRpY2F0ZWQgc3RvcmUuIEF1dG8tZW5hYmxlZCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpbiBpcyByZWdpc3RlcmVkLlwiLFxuICAgIH0sXG4gICAgbWVtb3J5OiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUGdWZWN0b3Igc3RvcmUgZm9yIE1hc3RyYSBzZW1hbnRpYyByZWNhbGwuIGB0cnVlYCByZXVzZXMgdGhlIGBsYWtlYmFzZWAgcGx1Z2luJ3MgcG9vbCwgYW4gb2JqZWN0IG9wZW5zIGEgZGVkaWNhdGVkIHN0b3JlLiBBdXRvLWVuYWJsZWQgd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW4gaXMgcmVnaXN0ZXJlZC5cIixcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIHR5cGU6IFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0NvbW1hbmQgc2FuZGJveCBmb3IgYXV0by1jcmVhdGVkIGFnZW50IHdvcmtzcGFjZXMuIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveCB3aXRoIE1vbnR5IGZhbGxiYWNrOyBmYWxzZSBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbiwgXCJtb250eVwiIHNlbGVjdHMgTW9udHkgZGlyZWN0bHksIGFuZCBhbiBvYmplY3QgY29uZmlndXJlcyBEYXRhYnJpY2tzIGxpZmVjeWNsZS9mYWxsYmFjayBzZXR0aW5ncy4nLFxuICAgIH0sXG4gICAgZGVmYXVsdEFnZW50OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQWdlbnQgaWQgdXNlZCB3aGVuIHRoZSBjbGllbnQgbmFtZXMgbm9uZS4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IHJlZ2lzdGVyZWQgYWdlbnQsIGVsc2UgdGhlIGJ1aWx0LWluIGBkZWZhdWx0YC5cIixcbiAgICB9LFxuICAgIGRlZmF1bHRNb2RlbDoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlNlcnZpbmcgZW5kcG9pbnQgYXBwbGllZCB0byBldmVyeSBhZ2VudCB0aGF0IG9taXRzIGl0cyBvd24gbW9kZWwuIEZhbGxzIGJhY2sgdG8gREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUUsIHRoZW4gdGhlIGhpZ2hlc3QtcmFua2VkIGN1cnJlbnRseSBhdmFpbGFibGUgY2F0YWxvZ3VlIGVuZHBvaW50LlwiLFxuICAgIH0sXG4gICAgZGVmYXVsdE1vZGVsRmFsbGJhY2tzOiB7XG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICBpdGVtczogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQcmlvcml0eS1vcmRlcmVkIGVuZHBvaW50IG5hbWVzIHRyaWVkIGJlZm9yZSB0aGUgc2NvcmUtY2xhc3NpZmllZCBjYXRhbG9ndWUgd2hlbiBub3RoaW5nIGVsc2UgcGlucyBhIG1vZGVsLlwiLFxuICAgIH0sXG4gICAgbW9kZWxGdXp6eU1hdGNoOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZ1enp5LW1hdGNoIGxvb3NlIG1vZGVsIG5hbWVzIGFnYWluc3QgdGhlIHdvcmtzcGFjZSBjYXRhbG9ndWUuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBtb2RlbEZ1enp5VGhyZXNob2xkOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRnVzZS5qcyBzY29yZSB0aHJlc2hvbGQgZm9yIHRoZSBmdXp6eSBtYXRjaGVyLCAwIChleGFjdCkgdG8gMSAoYW55dGhpbmcpLiBEZWZhdWx0cyB0byAwLjQuXCIsXG4gICAgfSxcbiAgICBtb2RlbENhY2hlVHRsTXM6IHtcbiAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJUVEwgaW4gbXMgZm9yIHRoZSBzZXJ2aW5nLWVuZHBvaW50cyBsaXN0IGNhY2hlLCBwZXIgd29ya3NwYWNlIGhvc3QuIERlZmF1bHRzIHRvIDUgbWludXRlcy5cIixcbiAgICB9LFxuICAgIG1vZGVsT3ZlcnJpZGU6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiSG9ub3IgYSBwZXItcmVxdWVzdCBtb2RlbCBvdmVycmlkZSBmcm9tIHRoZSBYLU1hc3RyYS1Nb2RlbCBoZWFkZXIsID9tb2RlbD0gcXVlcnksIG9yIGEgYG1vZGVsYCBib2R5IGZpZWxkLiBEZWZhdWx0cyB0byB0cnVlLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVTcGFjZXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiBbXCJzdHJpbmdcIiwgXCJvYmplY3RcIl0gfSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkdlbmllIHNwYWNlcyB0aGUgYWdlbnRzIGNhbiBkZWxlZ2F0ZSB0bywga2V5ZWQgYnkgYWxpYXMgKHRoZSB0b29sLW5hbWUgc3VmZml4KS4gRWFjaCB2YWx1ZSBpcyBhIHNwYWNlIGlkIG9yIGB7IHNwYWNlSWQsIGhpbnQgfWAuIEZhbGxzIGJhY2sgdG8gdGhlIGBnZW5pZWAgcGx1Z2luJ3Mgb3duIGBzcGFjZXNgIGNvbmZpZywgdGhlbiBEQVRBQlJJQ0tTX0dFTklFX1NQQUNFX0lEIHVuZGVyIHRoZSBgZGVmYXVsdGAgYWxpYXMuXCIsXG4gICAgfSxcbiAgICBnZW5pZUFnZW50TW9kZToge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJVc2UgdGhlIHN0cmVhbWluZyBHZW5pZSBBZ2VudCBNb2RlIEFQSSBmb3IgYXNrX2dlbmllLiBEZWZhdWx0cyB0byB0cnVlOyBmYWxzZSBmb3JjZXMgbGVnYWN5IHBvbGxpbmcuIEZlYXR1cmUtZGlzYWJsZWQgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2VzIGZhbGwgYmFjayBhdXRvbWF0aWNhbGx5IGJlZm9yZSBzdHJlYW1pbmcuXCIsXG4gICAgfSxcbiAgICBnZW5pZVNwYWNlQ2FjaGVUdGxNczoge1xuICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRUTCBpbiBtcyBmb3IgdGhlIEdlbmllIHNwYWNlIG1ldGFkYXRhIGNhY2hlLiBEZWZhdWx0cyB0byA1IG1pbnV0ZXMuXCIsXG4gICAgfSxcbiAgICBhZ2VudE1heFN0ZXBzOiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTWF4aW11bSBMTE0gc3RlcHMgZWFjaCBhZ2VudCBnZXRzIHBlciB0dXJuIChhIHRvb2wgY2FsbCBhbmQgdGhlIGZpbmFsIHJlcGx5IGVhY2ggY29uc3VtZSBvbmUpLiBEZWZhdWx0cyB0byAyNS5cIixcbiAgICB9LFxuICAgIHN0cmlwU3RhbGVDaGFydHM6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiU3RyaXAgY2hhcnRJZHMgZnJvbSByZWNhbGxlZCBhc3Npc3RhbnQgdG9vbCByZXN1bHRzIHNvIHRoZSBtb2RlbCBjYW5ub3QgcmV1c2UgYSB0dXJuLXNjb3BlZCBjaGFydCBtYXJrZXIuIERlZmF1bHRzIHRvIHRydWUuXCIsXG4gICAgfSxcbiAgICBzdHlsZUluc3RydWN0aW9uczoge1xuICAgICAgdHlwZTogW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlN0eWxlIGd1YXJkcmFpbHMgYXBwZW5kZWQgdG8gZXZlcnkgYWdlbnQncyBpbnN0cnVjdGlvbnMuIEEgc3RyaW5nIHJlcGxhY2VzIHRoZSBidWlsdC1pbiBibG9jaywgYGZhbHNlYCBkaXNhYmxlcyBpdC5cIixcbiAgICB9LFxuICAgIG9ic2VydmFiaWxpdHk6IHtcbiAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQnJpZGdlIE1hc3RyYSBzcGFucyBpbnRvIEFwcEtpdCdzIE9UZWwgcGlwZWxpbmUuIERlZmF1bHRzIHRvIG9uIG9ubHkgd2hlbiBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQgb3IgT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCBpcyBzZXQuXCIsXG4gICAgfSxcbiAgICBmZWVkYmFjazoge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMb2cgdGh1bWJzIC8gY29tbWVudCBhc3Nlc3NtZW50cyB0byBNTGZsb3cgYW5kIHN1cmZhY2UgdGhlIGZlZWRiYWNrIGNvbnRyb2xzLiBEZWZhdWx0cyB0byBvbiBvbmx5IHdoZW4gYW4gT1RMUCBlbmRwb2ludCBhbmQgTUxGTE9XX0VYUEVSSU1FTlRfSUQgb3IgTUxGTE9XX0VYUEVSSU1FTlRfTkFNRSBhcmUgc2V0LiBFeHBsaWNpdCB0cnVlIGZhaWxzIHN0YXJ0dXAgdW5sZXNzIGFuIGV4cGVyaW1lbnQgaWQgb3IgbmFtZSBpcyBjb25maWd1cmVkLlwiLFxuICAgIH0sXG4gICAgbWNwOiB7XG4gICAgICB0eXBlOiBbXCJib29sZWFuXCIsIFwib2JqZWN0XCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRXhwb3NlIHRoZSByZWdpc3RlcmVkIGFnZW50cyBvdmVyIE1DUC4gRGVmYXVsdHMgdG8gYWdlbnRzLW9ubHk7IGFuIG9iamVjdCB0dW5lcyB0aGUgc2VydmVyIGlkLCBhZHZlcnRpc2VkIG1ldGFkYXRhLCBhbmQgd2hldGhlciBhbWJpZW50IHRvb2xzIGFyZSBleHBvc2VkLlwiLFxuICAgIH0sXG4gICAgZ2VuaWVJZGVudGl0eToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIC8vIERlcml2ZWQgZnJvbSB0aGUgcmVzb2x2ZXIncyBvd24gbGlzdCwgc28gYSBtb2RlIGNhbiBuZXZlciBiZSBhY2NlcHRlZCBhdFxuICAgICAgLy8gcnVudGltZSB3aGlsZSB0aGUgcHVibGlzaGVkIHNjaGVtYSAoYW5kIHRoZSBVSSBidWlsdCBmcm9tIGl0KSBvbWl0cyBpdC5cbiAgICAgIGVudW06IFsuLi5JREVOVElUWV9NT0RFU10sXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1doaWNoIERhdGFicmlja3MgaWRlbnRpdHkgdGhlIGFnZW50c1xcJyB3b3Jrc3BhY2UgY2FsbHMgKHNlcnZpbmcgY2F0YWxvZ3VlLCBHZW5pZSwgc3RhdGVtZW50IGV4ZWN1dGlvbikgcnVuIGFzLiBcInVzZXJcIiAoZGVmYXVsdCkgaXMgYWx3YXlzIE9CTywgc28gY2FsbGVycyBtdXN0IGJlIHdvcmtzcGFjZSBtZW1iZXJzOyBcInNlcnZpY2UtcHJpbmNpcGFsXCIgYWx3YXlzIHVzZXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCwgc28gYW55IGNhbGxlciB3aG8gY2FuIG9wZW4gdGhlIGFwcCB3b3JrcywgYXQgdGhlIGNvc3Qgb2YgcGVyLXVzZXIgYXR0cmlidXRpb247IFwiYXV0b1wiIHVzZXMgT0JPIHdoZW4gdGhlIHJlcXVlc3QgY2FycmllcyBhbiBPQk8gdG9rZW4gYW5kIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCB3aGVuIGl0IGRvZXMgbm90LCBmb3IgYW4gYXBwIHRoYXQgYWxzbyBzZXJ2ZXMgYSB0dW5uZWwgb3Igd2ViaG9vayBkb29yLiBGYWxscyBiYWNrIHRvIE1BU1RSQV9HRU5JRV9JREVOVElUWS4nLFxuICAgIH0sXG4gICAgYXBpQWNjZXNzOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZW51bTogW1wic2NvcGVkXCIsIFwiZnVsbFwiXSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSG93IG11Y2ggb2YgdGhlIHN0b2NrIEBtYXN0cmEvZXhwcmVzcyBBUEkgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIG1vdW50LiBcInNjb3BlZFwiIChkZWZhdWx0KSBhbGxvd3MgYWdlbnQgaW5mZXJlbmNlLCByZWFkLW9ubHkgYWdlbnQgbWV0YWRhdGEsIHRoaXMgcGx1Z2luXFwncyBvd24gcm91dGVzLCBhbmQgTUNQOyBcImZ1bGxcIiBkaXNwYXRjaGVzIHRoZSBlbnRpcmUgbWFuYWdlbWVudCBzdXJmYWNlLicsXG4gICAgfSxcbiAgICBicmFuZDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlBvcnRhYmxlIGJyYW5kIGNvbnRleHQgYXBwbGllZCB0byBnZW5lcmF0ZWQgY2hhcnRzIChzZXJpZXMgcGFsZXR0ZSBmcm9tIGNvbG9ycy5wcmltYXJ5IC8gY29sb3JzLmFjY2VudCwgYmFzZSBmb250IGZyb20gdHlwb2dyYXBoeS5zYW5zKS5cIixcbiAgICB9LFxuICB9LFxufTtcbiJdfQ==
package/lib/src/memory.js CHANGED
@@ -33,6 +33,7 @@
33
33
  */
34
34
  import { getUsernameWithApiLookup } from "@databricks/appkit";
35
35
  import { migration as appkitMigration } from "@dbx-tools/appkit";
36
+ import { postgresConnectionOptions } from "@dbx-tools/postgres";
36
37
  import { hash, log } from "@dbx-tools/shared-core";
37
38
  import { fastembed } from "@mastra/fastembed";
38
39
  import { Memory } from "@mastra/memory";
@@ -111,7 +112,7 @@ export async function createServicePrincipalPool(pgConfig) {
111
112
  // lookup (e.g. local dev authenticating via PAT) so the pool always
112
113
  // has an identity to connect with.
113
114
  const user = pgConfig.user ?? (await getUsernameWithApiLookup());
114
- return new Pool({ ...pgConfig, user });
115
+ return new Pool(postgresConnectionOptions({ ...pgConfig, user }));
115
116
  }
116
117
  /**
117
118
  * True when any plugin-level or per-agent setting could need the
@@ -321,4 +322,4 @@ function collectAgentDefinitions(config) {
321
322
  function withId(value, fallback) {
322
323
  return value.id ? value : { ...value, id: fallback };
323
324
  }
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxJQUFJLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFtQixNQUFNLElBQUksQ0FBQztBQUkzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFvQjtJQUN0RCxNQUFNLElBQUksR0FBRyxLQUtaLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLGVBQTBDLENBQUM7SUFFL0MsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtRQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUMvQixlQUFlLEtBQUssQ0FB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bkIsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxhQUFhLENBQUMsT0FBbUM7SUFDeEQsT0FBTyxJQUFJLFFBQVEsQ0FDakIsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUE4QyxDQUN4RixDQUFDO0FBQ0osQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxTQUFTLHNCQUFzQixDQUFDLE9BQW1EO0lBQ2pGLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQztBQUMxQixDQUFDO0FBRUQsaUVBQWlFO0FBQ2pFLFNBQVMsdUJBQXVCLENBQUMsTUFBMEI7SUFDekQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN6QyxJQUFJLGNBQWMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBa0MsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxTQUFTLE1BQU0sQ0FBNEIsS0FBUSxFQUFFLFFBQWdCO0lBQ25FLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYWtlYmFzZS1iYWNrZWQgTWFzdHJhIG1lbW9yeSB3aXJpbmcuXG4gKlxuICogUHJvdmlkZXMgYSB7QGxpbmsgTWVtb3J5QnVpbGRlcn0gdGhhdCBtaW50cyBvbmUgYE1lbW9yeWAgcGVyIGFnZW50XG4gKiB3aXRoIHR3byBpbmRlcGVuZGVudCBrbm9iczpcbiAqXG4gKiAtICoqU3RvcmFnZSoqICh0aHJlYWRzIC8gbWVzc2FnZXMgdmlhIGBQb3N0Z3Jlc1N0b3JlYCk6IGRlZmF1bHRzIHRvXG4gKiAgICoqcGVyLWFnZW50KiogbmFtZXNwYWNpbmcgdmlhIHtAbGluayBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lfSBzb1xuICogICBjb252ZXJzYXRpb24gaGlzdG9yeSBzdGF5cyBpc29sYXRlZCBiZXR3ZWVuIGFnZW50cyBpbiB0aGUgc2FtZVxuICogICBkYXRhYmFzZS4gYFBvc3RncmVzU3RvcmVgIGF1dG8tY3JlYXRlcyB0aGUgc2NoZW1hIHdpdGhcbiAqICAgYENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUU2Agb24gaW5pdC4gQSBmYWlsZWQgbWlncmF0aW9uIChjb21tb24gb25cbiAqICAgTGFrZWJhc2Ugd2hlbiB0aGUgY29ubmVjdGluZyByb2xlIGlzIG5vdCB0aGUgdGFibGUgb3duZXIpIGlzIGxvZ2dlZFxuICogICBhbmQgc2tpcHBlZCB2aWEge0BsaW5rIHdpdGhTb2Z0U3RvcmFnZUluaXR9IHNvIGV4aXN0aW5nIHRhYmxlcyBrZWVwXG4gKiAgIHNlcnZpbmcgaW5zdGVhZCBvZiByZXRyeWluZyBEREwgb24gZXZlcnkgcmVxdWVzdC5cbiAqIC0gKipNZW1vcnkqKiAoc2VtYW50aWMgcmVjYWxsIHZpYSBgUGdWZWN0b3JgKTogZGVmYXVsdHMgdG8gYSBzaW5nbGVcbiAqICAgKipzaGFyZWQqKiBpbnN0YW5jZSBhY3Jvc3MgZXZlcnkgYWdlbnQuIENyb3NzLWFnZW50IHJlY2FsbCBvbiBvbmVcbiAqICAgaW5kZXggaXMgYWxtb3N0IGFsd2F5cyB3aGF0IHVzZXJzIHdhbnQ7IG9wdCBpbnRvIHBlci1hZ2VudCByZWNhbGxcbiAqICAgYnkgcGFzc2luZyBhIHtAbGluayBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZX0gb24gdGhlIGFnZW50LlxuICpcbiAqIEFkZGl0aW9uYWxseSwge0BsaW5rIE1lbW9yeUJ1aWxkZXIuaW5zdGFuY2VTdG9yYWdlfSByZXR1cm5zIGFcbiAqICoqTWFzdHJhLWluc3RhbmNlLWxldmVsKiogYFBvc3RncmVzU3RvcmVgIChzY2hlbWEgYG1hc3RyYV9pbnN0YW5jZWApXG4gKiB1c2VkIGZvciB3b3JrZmxvdyBzbmFwc2hvdHMgLSB0aGUgcGVyc2lzdGVuY2UgbGF5ZXJcbiAqIGBhZ2VudC5yZXN1bWVTdHJlYW0oKWAgcmVhZHMgZnJvbSB3aGVuIHdha2luZyBhIHN1c3BlbmRlZFxuICogYHJlcXVpcmVBcHByb3ZhbGAgdG9vbCBjYWxsLiBQZXItYWdlbnQgc3RvcmVzIGFyZSBub3QgZW5vdWdoIGZvclxuICogdGhpczogd29ya2Zsb3cgcnVucyBhcmUgc2NvcGVkIHRvIHRoZSBNYXN0cmEgaW5zdGFuY2UsIG5vdCBhblxuICogaW5kaXZpZHVhbCBhZ2VudCdzIGBNZW1vcnlgLlxuICpcbiAqIFBsdWdpbi1sZXZlbCBgY29uZmlnLnN0b3JhZ2VgIC8gYGNvbmZpZy5tZW1vcnlgIGFjdCBhcyB0aGUgYmFzZWxpbmVcbiAqIChhdXRvLWRlZmF1bHRlZCB0byBgdHJ1ZWAgaW4gYHBsdWdpbi50c2Agd2hlbiB0aGUgYGxha2ViYXNlYCBwbHVnaW5cbiAqIGlzIHJlZ2lzdGVyZWQpOyBwZXItYWdlbnQgc2V0dGluZ3MgY2FzY2FkZSBvbiB0b3Agb2YgdGhhdC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0VXNlcm5hbWVXaXRoQXBpTG9va3VwIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbWlncmF0aW9uIGFzIGFwcGtpdE1pZ3JhdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgaGFzaCwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGZhc3RlbWJlZCB9IGZyb20gXCJAbWFzdHJhL2Zhc3RlbWJlZFwiO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSBcIkBtYXN0cmEvbWVtb3J5XCI7XG5pbXBvcnQgeyBQZ1ZlY3RvciwgUG9zdGdyZXNTdG9yZSB9IGZyb20gXCJAbWFzdHJhL3BnXCI7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDb25maWcgfSBmcm9tIFwicGdcIjtcblxuaW1wb3J0IHR5cGUgeyBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlIH0gZnJvbSBcIi4vYWdlbnRzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3N0b3JhZ2Utc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBzdW1tYXJ5TW9kZWwsIFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3N1bW1hcml6ZS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21lbW9yeVwiKTtcblxuLyoqXG4gKiBTb2Z0ZW4ge0BsaW5rIFBvc3RncmVzU3RvcmUuaW5pdH0gc28gYSBmYWlsZWQgbWlncmF0aW9uIChlLmcuIExha2ViYXNlXG4gKiBgbXVzdCBiZSBvd25lciBvZiB0YWJsZSDigKZgIG9uIGBBTFRFUmApIGlzIGxvZ2dlZCBvbmNlIGluc3RlYWQgb2YgcmV0aHJvd25cbiAqIG9uIGV2ZXJ5IHN0b3JhZ2UgY2FsbC5cbiAqXG4gKiBNYXN0cmEncyBgYXVnbWVudFdpdGhJbml0YCByZXRyaWVzIGluaXQgZm9yZXZlciB3aGVuIGl0IHRocm93cywgc28gdGhlXG4gKiBvbmx5IHdheSB0byBrZWVwIHNlcnZpbmcgYWdhaW5zdCBhbiBhbHJlYWR5LXVzYWJsZSBzY2hlbWEgaXMgdG8gdHJlYXRcbiAqIG1pZ3JhdGlvbiBmYWlsdXJlIGFzIHN1Y2Nlc3MgYW5kIG1hcmsgdGhlIHN0b3JlIGluaXRpYWxpemVkLlxuICpcbiAqIENvbmN1cnJlbnQgZmlyc3QgY2FsbGVycyBzaGFyZSBvbmUgc29mdCBhdHRlbXB0LiBOb24tb3duZXJzaGlwIGZhaWx1cmVzIHN0YXlcbiAqIGZhdGFsIHNvIG1pc3Npbmcgc2NoZW1hcy90YWJsZXMgYXJlIHJldHJpZWQgb3Igc3VyZmFjZWQgaW5zdGVhZCBvZiBoaWRkZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU29mdFN0b3JhZ2VJbml0KHN0b3JlOiBQb3N0Z3Jlc1N0b3JlKTogUG9zdGdyZXNTdG9yZSB7XG4gIGNvbnN0IHNvZnQgPSBzdG9yZSBhcyB1bmtub3duIGFzIHtcbiAgICBpbml0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2NoZW1hPzogc3RyaW5nO1xuICAgIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIH07XG4gIGNvbnN0IG9yaWdpbmFsSW5pdCA9IHNvZnQuaW5pdC5iaW5kKHNvZnQpO1xuICBsZXQgc29mdEluaXRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIHNvZnQuaW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc29mdC5pc0luaXRpYWxpemVkKSByZXR1cm47XG4gICAgc29mdEluaXRQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3JpZ2luYWxJbml0KCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFhcHBraXRNaWdyYXRpb24uaGFuZGxlT3duZXJzaGlwTWlncmF0aW9uRXJyb3IoZXJyLCB7XG4gICAgICAgICAgICBzY29wZTogXCJtYXN0cmEtc3RvcmFnZVwiLFxuICAgICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgICAgZXZlbnQ6IFwibWFzdHJhIHN0b3JhZ2UgbWlncmF0aW9uIGZhaWxlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogeyBzdG9yZUlkOiBzb2Z0LmlkLCBzY2hlbWE6IHNvZnQuc2NoZW1hIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc29mdEluaXRQcm9taXNlO1xuICAgICAgc29mdC5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNvZnRJbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBzdG9yZTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGRlZGljYXRlZCAqKnNlcnZpY2UtcHJpbmNpcGFsKiogTGFrZWJhc2UgcG9vbCBmb3IgTWFzdHJhXG4gKiBtZW1vcnkgZnJvbSB0aGUgbGFrZWJhc2UgcGx1Z2luJ3MgcmVzb2x2ZWQgU1AgcGcgY29uZmlnLlxuICpcbiAqIFRoZSBwbHVnaW4ncyBgZXhwb3J0cygpLnBvb2xgIGlzIGEgYFJvdXRpbmdQb29sYCB0aGF0IHN3aXRjaGVzIHRvXG4gKiB0aGUgcGVyLXVzZXIgKE9CTykgcG9vbCB3aGVuZXZlciBhIHF1ZXJ5IHJ1bnMgaW5zaWRlIGFuIGBhc1VzZXJgXG4gKiBzY29wZSAtIGV4YWN0bHkgdGhlIGNvbnRleHQgdGhlIG1hc3RyYSBwbHVnaW4gZXN0YWJsaXNoZXMgYXJvdW5kXG4gKiBldmVyeSBjaGF0IHR1cm4uIE1lbW9yeSAodGhyZWFkcyAvIG1lc3NhZ2VzICsgc2VtYW50aWMgcmVjYWxsKSBtdXN0XG4gKiBpbnN0ZWFkIGFsd2F5cyBhY3QgYXMgdGhlIGFwcCBzZXJ2aWNlIHByaW5jaXBhbDogaXQgb3ducyB0aGVcbiAqIGF1dG8tY3JlYXRlZCBgbWFzdHJhXypgIHNjaGVtYXMgKGEgcGVyLXVzZXIgcm9sZSB1c3VhbGx5IGNhbid0XG4gKiBgQ1JFQVRFIFNDSEVNQWApIGFuZCBpcyBzaGFyZWQgYWNyb3NzIHVzZXJzLCBzbyBpdCBjYW5ub3QgaW5oZXJpdCBhXG4gKiByZXF1ZXN0J3MgT0JPIGlkZW50aXR5LlxuICpcbiAqIGBwZ0NvbmZpZ2AgbXVzdCBiZSB0aGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5nZXRQZ0NvbmZpZygpYCBldmFsdWF0ZWRcbiAqICoqb3V0c2lkZSoqIGFueSBgYXNVc2VyYCBzY29wZSAoaS5lLiBkdXJpbmcgc2V0dXApLCBzbyBpdCBjYXJyaWVzXG4gKiB0aGUgU1AgY29ubmVjdGlvbiB0YXJnZXQsIE9BdXRoIHRva2VuLXJlZnJlc2ggYHBhc3N3b3JkYCBjYWxsYmFjayxcbiAqIGFuZCBhbnkgYGxha2ViYXNlKHsgcG9vbCB9KWAgdHVuaW5nIG92ZXJyaWRlcyAtIGFsbCBvZiB3aGljaCB0aGlzXG4gKiBwb29sIGluaGVyaXRzLiBTZWUgdGhlIGNhbGwgc2l0ZSBpbiBgcGx1Z2luLnRzYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VQcmluY2lwYWxQb29sKHBnQ29uZmlnOiBQb29sQ29uZmlnKTogUHJvbWlzZTxQb29sPiB7XG4gIC8vIGBnZXRQZ0NvbmZpZygpYCByZXNvbHZlcyB0aGUgU1AgdXNlcm5hbWUgc3luY2hyb25vdXNseSBmcm9tXG4gIC8vIGBQR1VTRVJgIC8gYERBVEFCUklDS1NfQ0xJRU5UX0lEYDsgZmFsbCBiYWNrIHRvIHRoZSBhc3luYyBBUElcbiAgLy8gbG9va3VwIChlLmcuIGxvY2FsIGRldiBhdXRoZW50aWNhdGluZyB2aWEgUEFUKSBzbyB0aGUgcG9vbCBhbHdheXNcbiAgLy8gaGFzIGFuIGlkZW50aXR5IHRvIGNvbm5lY3Qgd2l0aC5cbiAgY29uc3QgdXNlciA9IHBnQ29uZmlnLnVzZXIgPz8gKGF3YWl0IGdldFVzZXJuYW1lV2l0aEFwaUxvb2t1cCgpKTtcbiAgcmV0dXJuIG5ldyBQb29sKHsgLi4ucGdDb25maWcsIHVzZXIgfSk7XG59XG5cbi8qKiBFZmZlY3RpdmUgcGVyLWtub2Igc2V0dGluZyBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuICovXG50eXBlIFN0b3JhZ2VTZXR0aW5nID0gQW55TWFzdHJhQWdlbnREZWZpbml0aW9uW1wic3RvcmFnZVwiXTtcbnR5cGUgTWVtb3J5U2V0dGluZyA9IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltcIm1lbW9yeVwiXTtcblxuLyoqXG4gKiBUcnVlIHdoZW4gYW55IHBsdWdpbi1sZXZlbCBvciBwZXItYWdlbnQgc2V0dGluZyBjb3VsZCBuZWVkIHRoZVxuICogTGFrZWJhc2UgcG9vbC4gVXNlZCBieSBgcGx1Z2luLnRzYCB0byBnYXRlIGNyZWF0aW9uIG9mIHRoZVxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCBhbmQgdGhlIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IGNvbnN1bWVzXG4gKiBpdDsgd2hlbiBmYWxzZSBuZWl0aGVyIGlzIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNMYWtlYmFzZShjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IGJvb2xlYW4ge1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcuc3RvcmFnZSkpIHJldHVybiB0cnVlO1xuICBpZiAoc2V0dGluZ05lZWRzU2hhcmVkUG9vbChjb25maWcubWVtb3J5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGRlZnMgPSBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWcpO1xuICByZXR1cm4gZGVmcy5zb21lKChkKSA9PiBzZXR0aW5nTmVlZHNTaGFyZWRQb29sKGQuc3RvcmFnZSkgfHwgc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLm1lbW9yeSkpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHBlci1hZ2VudCB7QGxpbmsgTWVtb3J5fSBmYWN0b3J5IGJvdW5kIHRvIHRoZSBzdXBwbGllZFxuICogc2VydmljZS1wcmluY2lwYWwgcG9vbCAoc2VlIHtAbGluayBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbH0pLlxuICogQ2FjaGVzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBzaW5nbGV0b24gKGJ1aWx0IG9uIGZpcnN0IG5lZWQpIHNvIGVhY2hcbiAqIGFnZW50IGJ1aWxkIGlzIE8oMSkgYWZ0ZXIgdGhlIGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5QnVpbGRlcihcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHNlcnZpY2VQcmluY2lwYWxQb29sOiBQb29sLFxuKTogTWVtb3J5QnVpbGRlciB7XG4gIHJldHVybiBuZXcgTWVtb3J5QnVpbGRlcihjb25maWcsIHNlcnZpY2VQcmluY2lwYWxQb29sKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgb25lIGBNZW1vcnlgIHBlciBhZ2VudCBhZ2FpbnN0IGEgc2hhcmVkIHNlcnZpY2UtcHJpbmNpcGFsXG4gKiBMYWtlYmFzZSBwb29sLiBQZXItaW5zdGFuY2Ugc3RhdGUga2VlcHMgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIGFsaXZlXG4gKiBhY3Jvc3MgY2FsbHMgc28gcmVnaXN0ZXJpbmcgTiBhZ2VudHMgc3RheXMgY2hlYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzaGFyZWRWZWN0b3I6IFBnVmVjdG9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgTWFzdHJhLWluc3RhbmNlLWxldmVsIHN0b3JhZ2UgdXNlZCBmb3Igd29ya2Zsb3dcbiAgICogc25hcHNob3RzLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gcGx1Z2luLWxldmVsIGBzdG9yYWdlYCBpc1xuICAgKiBkaXNhYmxlZCwgaW4gd2hpY2ggY2FzZSBgYWdlbnQucmVzdW1lU3RyZWFtKClgIChhbmQgdGhlcmVmb3JlXG4gICAqIHRoZSBgcmVxdWlyZUFwcHJvdmFsYCBmbG93KSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIFRoZSBzdG9yZSBsaXZlcyBpbiBhIGRlZGljYXRlZCBgbWFzdHJhX2luc3RhbmNlYCBzY2hlbWEgc28gaXRcbiAgICogbmV2ZXIgY29sbGlkZXMgd2l0aCBwZXItYWdlbnQge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IG5hbWVzcGFjZXMuXG4gICAqIFdvcmtmbG93IHNuYXBzaG90cyBhcmUgbm90IHBlci1hZ2VudCBzdGF0ZTsgdGhleSBiZWxvbmcgdG8gdGhlXG4gICAqIGBNYXN0cmFgIGluc3RhbmNlIHRoYXQgb3ducyB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uLlxuICAgKi9cbiAgaW5zdGFuY2VTdG9yYWdlKCk6IFBvc3RncmVzU3RvcmUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgICB3aXRoSWQoc2V0dGluZywgXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIpIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczxcbiAgICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgICAgPlswXSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoe1xuICAgICAgICBpZDogXCJtYXN0cmEtc3RvcmVfX2luc3RhbmNlXCIsXG4gICAgICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgICAgIHBvb2w6IHRoaXMuc2VydmljZVByaW5jaXBhbFBvb2wsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYE1lbW9yeWAgZm9yIGBhZ2VudElkYCBhZnRlciB0aGUgcGx1Z2luL2FnZW50IGNhc2NhZGUuXG4gICAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgYWdlbnQgaGFzIG5laXRoZXIgc3RvcmFnZSBub3IgYVxuICAgKiB2ZWN0b3Igc3RvcmUgZW5hYmxlZCAtIE1hc3RyYSBhY2NlcHRzIGEgbWlzc2luZyBgbWVtb3J5YCBmaWVsZFxuICAgKiBhbmQgdHJlYXRzIHRoZSBhZ2VudCBhcyBzdGF0ZWxlc3MuXG4gICAqL1xuICBmb3JBZ2VudChhZ2VudElkOiBzdHJpbmcsIGRlZjogQW55TWFzdHJhQWdlbnREZWZpbml0aW9uKTogTWVtb3J5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdG9yYWdlU2V0dGluZyA9IGRlZi5zdG9yYWdlID8/IHRoaXMuY29uZmlnLnN0b3JhZ2U7XG4gICAgY29uc3QgbWVtb3J5U2V0dGluZyA9IGRlZi5tZW1vcnkgPz8gdGhpcy5jb25maWcubWVtb3J5O1xuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYnVpbGRTdG9yYWdlKGFnZW50SWQsIHN0b3JhZ2VTZXR0aW5nKTtcbiAgICBjb25zdCB2ZWN0b3IgPSB0aGlzLmJ1aWxkVmVjdG9yKG1lbW9yeVNldHRpbmcpO1xuICAgIGlmICghc3RvcmFnZSAmJiAhdmVjdG9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpzdGF0ZWxlc3NcIiwgeyBhZ2VudElkIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJhZ2VudDpjb25maWd1cmVkXCIsIHtcbiAgICAgIGFnZW50SWQsXG4gICAgICBzdG9yYWdlOiBzdG9yYWdlICE9PSB1bmRlZmluZWQsXG4gICAgICB2ZWN0b3I6IHZlY3RvciAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yTW9kZTpcbiAgICAgICAgdmVjdG9yID09PSB1bmRlZmluZWQgPyBcIm9mZlwiIDogdHlwZW9mIG1lbW9yeVNldHRpbmcgPT09IFwib2JqZWN0XCIgPyBcImRlZGljYXRlZFwiIDogXCJzaGFyZWRcIixcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgTWVtb3J5KHtcbiAgICAgIC4uLihzdG9yYWdlID8geyBzdG9yYWdlIH0gOiB7fSksXG4gICAgICAuLi4odmVjdG9yID8geyB2ZWN0b3IsIGVtYmVkZGVyOiBmYXN0ZW1iZWQgfSA6IHt9KSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbGFzdE1lc3NhZ2VzOiAxMCxcbiAgICAgICAgLi4uKHZlY3RvciA/IHsgc2VtYW50aWNSZWNhbGw6IHsgdG9wSzogMywgbWVzc2FnZVJhbmdlOiAyIH0gfSA6IHt9KSxcbiAgICAgICAgLy8gQXV0by1uYW1lIGVhY2ggdGhyZWFkIGZyb20gaXRzIG9wZW5pbmcgdHVybiBzbyB0aGVcbiAgICAgICAgLy8gY29udmVyc2F0aW9uIGxpc3QgdGhlIFVJIHJlbmRlcnMgc2hvd3MgbWVhbmluZ2Z1bCB0aXRsZXNcbiAgICAgICAgLy8gaW5zdGVhZCBvZiByYXcgaWRzLiBUaXRsaW5nIHJ1bnMgb24gdGhlIHNtYWxsIC8gZmFzdCBjaGF0XG4gICAgICAgIC8vIHRpZXIgKHNlZSBgc3VtbWFyaXplLnRzYCkgcmF0aGVyIHRoYW4gdGhlIGFnZW50J3MgcHJpbWFyeVxuICAgICAgICAvLyBtb2RlbCwgc28gbmFtaW5nIGEgdGhyZWFkIG5ldmVyIHNwZW5kcyB0aGUgaGVhdnl3ZWlnaHQgbW9kZWwuXG4gICAgICAgIC8vIE9ubHkgbWVhbmluZ2Z1bCB3aGVuIHN0b3JhZ2UgaXMgb247IGhhcm1sZXNzIG90aGVyd2lzZS5cbiAgICAgICAgLi4uKHN0b3JhZ2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZ2VuZXJhdGVUaXRsZToge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBzdW1tYXJ5TW9kZWwodGhpcy5jb25maWcpLFxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uczogVElUTEVfSU5TVFJVQ1RJT05TLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdG9yYWdlKGFnZW50SWQ6IHN0cmluZywgc2V0dGluZzogU3RvcmFnZVNldHRpbmcpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgICBpZDogYG1hc3RyYS1zdG9yZV9fJHthZ2VudElkfWAsXG4gICAgICAgICAgc2NoZW1hTmFtZTogYWdlbnRTdG9yYWdlU2NoZW1hTmFtZShhZ2VudElkKSxcbiAgICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENhc3Q6IGB3aXRoSWRgIGd1YXJhbnRlZXMgYGlkYCBpcyBzZXQsIGJ1dCB0aGUgZGlzdHJpYnV0aXZlXG4gICAgLy8gT21pdCArIGBpZD86IHN0cmluZ2Agc2hhcGUgZG9lc24ndCBzdHJ1Y3R1cmFsbHkgbmFycm93IHRvIHRoZVxuICAgIC8vIGRpc2NyaW1pbmF0ZWQgdW5pb24gbWVtYmVycy4gUnVudGltZSBzaGFwZSBpcyBpZGVudGljYWwuXG4gICAgcmV0dXJuIHdpdGhTb2Z0U3RvcmFnZUluaXQoXG4gICAgICBuZXcgUG9zdGdyZXNTdG9yZShcbiAgICAgICAgd2l0aElkKHNldHRpbmcsIGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIFBvc3RncmVzU3RvcmVcbiAgICAgICAgPlswXSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBhZ2VudCdzIHZlY3RvciBzdG9yZS4gQ2FzY2FkZTpcbiAgICpcbiAgICogLSBmYWxzeTogbm8gdmVjdG9yLlxuICAgKiAtIGBib29sZWFuYCAvIGB1bmRlZmluZWQtaW5oZXJpdGluZy10cnVlYDogcmV0dXJuIHRoZSBzaGFyZWRcbiAgICogICBzaW5nbGV0b24gKGJ1aWx0IGxhemlseSBvbiBmaXJzdCBjYWxsKS4gQWxsIGFnZW50cyB0aGF0XG4gICAqICAgZGVmYXVsdC1lbmFibGUgbWVtb3J5IHdyaXRlIGludG8gYW5kIHJlY2FsbCBmcm9tIG9uZSBpbmRleC5cbiAgICogLSBvYmplY3Q6IGJ1aWxkIGEgZGVkaWNhdGVkIGBQZ1ZlY3RvcmAgZm9yIHRoaXMgYWdlbnQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmVjdG9yKHNldHRpbmc6IE1lbW9yeVNldHRpbmcpOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHJldHVybiB0aGlzLmdldFNoYXJlZFZlY3RvcigpO1xuICAgIHJldHVybiBidWlsZFBnVmVjdG9yKHNldHRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGFyZWRWZWN0b3IoKTogUGdWZWN0b3Ige1xuICAgIGlmICghdGhpcy5zaGFyZWRWZWN0b3IpIHtcbiAgICAgIHRoaXMuc2hhcmVkVmVjdG9yID0gYnVpbGRTaGFyZWRQZ1ZlY3Rvcih0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkVmVjdG9yO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHNoYXJlZCBgUGdWZWN0b3JgIHRoYXQgYmFja3MgdGhlIGRlZmF1bHRcbiAqIGBkZWYubWVtb3J5ID09PSB0cnVlYCBjYXNlIGFjcm9zcyBldmVyeSBhZ2VudC5cbiAqXG4gKiBgUGdWZWN0b3JgJ3MgY29uc3RydWN0b3IgYWNjZXB0cyBvbmx5IGNvbm5lY3Rpb24tc3R5bGUgY29uZmlnc1xuICogKGBIb3N0Q29uZmlnYCAvIGBDb25uZWN0aW9uU3RyaW5nQ29uZmlnYCAvIGBDbGllbnRDb25maWdgKTsgdGhlcmUgaXNcbiAqIG5vIGB7IHBvb2wgfWAgc2hvcnRoYW5kIHRoZSB3YXkgYFBvc3RncmVzU3RvcmVgIGhhcyBvbmUuIFdvcnNlLCB0aGVcbiAqIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkga2lja3Mgb2ZmIGEgYGNhY2hlV2FybXVwUHJvbWlzZWAgSUlGRSB0aGF0XG4gKiBjYWxscyBgdGhpcy5wb29sLmNvbm5lY3QoKWAgYmVmb3JlIHJldHVybmluZywgc28gd2UgY2FuJ3QgY2xlYW5seVxuICogaGFuZCBpdCBhbiBpbmVydCBjb25maWcgYW5kIHBhdGNoIHRoZSBwb29sIGFmdGVyd2FyZHMuXG4gKlxuICogVGhlIHRyaWNrOiBwYXNzIGlsbGVnYWwtYnV0LXZhbGlkYXRpb24tcGFzc2luZyBwbGFjZWhvbGRlcnMgc28gdGhlXG4gKiB3YXJtdXAncyBgbmV0LmNvbm5lY3QoKWAgcmVqZWN0cyBzeW5jaHJvbm91c2x5IHdpdGggYFJhbmdlRXJyb3JgXG4gKiAoTm9kZSB2YWxpZGF0ZXMgYDAgPD0gcG9ydCA8IDY1NTM2YCkuIFRoZSBJSUZFJ3MgYGNhdGNoIHt9YCBzd2FsbG93c1xuICogaXQsIG5vIEROUyBsb29rdXAgb3IgVENQIGF0dGVtcHQgaGFwcGVucywgYW5kIHdlIHRoZW4gc3dhcFxuICogYHBnVmVjdG9yLnBvb2xgIHRvIHRoZSBsYWtlYmFzZSBwb29sLiBFdmVyeSBzdWJzZXF1ZW50IGBQZ1ZlY3RvcmBcbiAqIG1ldGhvZCByZWFkcyBgdGhpcy5wb29sYCBhdCBjYWxsIHRpbWUsIHNvIGFsbCByZWFsIEkvTyBnb2VzIHRocm91Z2hcbiAqIHRoZSBsYWtlYmFzZSBwb29sIGZyb20gdGhlbiBvbi4gVGhlIHBsYWNlaG9sZGVyIHBvb2wgaXMgYC5lbmQoKWAnZFxuICogc28gaXRzIHNvY2tldCBib29rLWtlZXBpbmcgaXMgcmVsZWFzZWQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2hhcmVkUGdWZWN0b3IocG9vbDogUG9vbCk6IFBnVmVjdG9yIHtcbiAgY29uc3QgdmVjdG9yID0gbmV3IFBnVmVjdG9yKHtcbiAgICBpZDogYHBnJHtoYXNoLmlkKCl9YCxcbiAgICAvLyBLZWVwIHRoZSByZWNhbGwgaW5kZXggb3V0IG9mIGBwdWJsaWNgOiBvbiBhIExha2ViYXNlIGRhdGFiYXNlIHRoZSBhcHBcbiAgICAvLyBzZXJ2aWNlIHByaW5jaXBhbCBoYXMgbm8gQ1JFQVRFIG9uIGBwdWJsaWNgIChQRzE1KyBsb2NrcyBpdCBkb3duKSwgc28gYVxuICAgIC8vIGRlZmF1bHQtc2NoZW1hIFBnVmVjdG9yIGZhaWxzIG9uIENSRUFURSBJTkRFWCB3aXRoIFwicGVybWlzc2lvbiBkZW5pZWQgZm9yXG4gICAgLy8gc2NoZW1hIHB1YmxpY1wiLiBQZ1ZlY3RvciBydW5zIENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBmb3IgYSBuYW1lZFxuICAgIC8vIHNjaGVtYSwgc28gdGhlIFNQIGNyZWF0ZXMgYW5kIG93bnMgYG1hc3RyYV9pbnN0YW5jZWAgKHRoZSBzYW1lXG4gICAgLy8gaW5zdGFuY2UtbGV2ZWwgc2NoZW1hIHRoZSB3b3JrZmxvdy1zbmFwc2hvdCBzdG9yZSB1c2VzKSBhbmQgdGhlIGluZGV4XG4gICAgLy8gbGFuZHMgdGhlcmUuIFRhYmxlIG5hbWVzIGRvbid0IGNvbGxpZGUgd2l0aCB0aGUgc3RvcmFnZSB0YWJsZXMuXG4gICAgc2NoZW1hTmFtZTogXCJtYXN0cmFfaW5zdGFuY2VcIixcbiAgICBob3N0OiBcIi0xXCIsXG4gICAgcG9ydDogLTEsXG4gICAgZGF0YWJhc2U6IFwiX1wiLFxuICAgIHVzZXI6IFwiX1wiLFxuICAgIHBhc3N3b3JkOiBcIl9cIixcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gdmVjdG9yLnBvb2w7XG4gIHZlY3Rvci5wb29sID0gcG9vbDtcbiAgdm9pZCBwbGFjZWhvbGRlci5lbmQoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICByZXR1cm4gdmVjdG9yO1xufVxuXG4vKiogUGVyLWFnZW50IGRlZGljYXRlZCBgUGdWZWN0b3JgIChyYXJlOyBvcHQtaW4gdmlhIG9iamVjdCBvdmVycmlkZSkuICovXG5mdW5jdGlvbiBidWlsZFBnVmVjdG9yKHNldHRpbmc6IE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlKTogUGdWZWN0b3Ige1xuICByZXR1cm4gbmV3IFBnVmVjdG9yKFxuICAgIHdpdGhJZChzZXR0aW5nLCBgcGctdmVjdG9yX18ke2hhc2guaWQoKX1gKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFBnVmVjdG9yPlswXSxcbiAgKTtcbn1cblxuLyoqIFRydWUgd2hlbiB0aGlzIHNldHRpbmcgcmVxdWlyZXMgdGhlIHNoYXJlZCBMYWtlYmFzZSBwb29sLiAqL1xuZnVuY3Rpb24gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChzZXR0aW5nOiBTdG9yYWdlU2V0dGluZyB8IE1lbW9yeVNldHRpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKiBXYWxrIHRoZSB0aHJlZSBzaGFwZXMgb2YgYGNvbmZpZy5hZ2VudHNgIGludG8gYSBmbGF0IGxpc3QuICovXG5mdW5jdGlvbiBjb2xsZWN0QWdlbnREZWZpbml0aW9ucyhjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltdIHtcbiAgY29uc3QgYWdlbnRzID0gY29uZmlnLmFnZW50cztcbiAgaWYgKCFhZ2VudHMpIHJldHVybiBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYWdlbnRzKSkgcmV0dXJuIGFnZW50cztcbiAgaWYgKFwiaW5zdHJ1Y3Rpb25zXCIgaW4gYWdlbnRzKSB7XG4gICAgcmV0dXJuIFthZ2VudHMgYXMgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uXTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhZ2VudHMpO1xufVxuXG4vKiogRmlsbCBpbiBhIGRlZmF1bHQgYGlkYCB3aGVuIHRoZSBjYWxsZXIgZGlkbid0IHN1cHBseSBvbmUuICovXG5mdW5jdGlvbiB3aXRoSWQ8VCBleHRlbmRzIHsgaWQ/OiBzdHJpbmcgfT4odmFsdWU6IFQsIGZhbGxiYWNrOiBzdHJpbmcpOiBUIHtcbiAgcmV0dXJuIHZhbHVlLmlkID8gdmFsdWUgOiB7IC4uLnZhbHVlLCBpZDogZmFsbGJhY2sgfTtcbn1cbiJdfQ==
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxJQUFJLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFtQixNQUFNLElBQUksQ0FBQztBQUkzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFvQjtJQUN0RCxNQUFNLElBQUksR0FBRyxLQUtaLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLGVBQTBDLENBQUM7SUFFL0MsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtRQUNyQixJQUFJ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KipcbiAqIExha2ViYXNlLWJhY2tlZCBNYXN0cmEgbWVtb3J5IHdpcmluZy5cbiAqXG4gKiBQcm92aWRlcyBhIHtAbGluayBNZW1vcnlCdWlsZGVyfSB0aGF0IG1pbnRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnRcbiAqIHdpdGggdHdvIGluZGVwZW5kZW50IGtub2JzOlxuICpcbiAqIC0gKipTdG9yYWdlKiogKHRocmVhZHMgLyBtZXNzYWdlcyB2aWEgYFBvc3RncmVzU3RvcmVgKTogZGVmYXVsdHMgdG9cbiAqICAgKipwZXItYWdlbnQqKiBuYW1lc3BhY2luZyB2aWEge0BsaW5rIGFnZW50U3RvcmFnZVNjaGVtYU5hbWV9IHNvXG4gKiAgIGNvbnZlcnNhdGlvbiBoaXN0b3J5IHN0YXlzIGlzb2xhdGVkIGJldHdlZW4gYWdlbnRzIGluIHRoZSBzYW1lXG4gKiAgIGRhdGFiYXNlLiBgUG9zdGdyZXNTdG9yZWAgYXV0by1jcmVhdGVzIHRoZSBzY2hlbWEgd2l0aFxuICogICBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTYCBvbiBpbml0LiBBIGZhaWxlZCBtaWdyYXRpb24gKGNvbW1vbiBvblxuICogICBMYWtlYmFzZSB3aGVuIHRoZSBjb25uZWN0aW5nIHJvbGUgaXMgbm90IHRoZSB0YWJsZSBvd25lcikgaXMgbG9nZ2VkXG4gKiAgIGFuZCBza2lwcGVkIHZpYSB7QGxpbmsgd2l0aFNvZnRTdG9yYWdlSW5pdH0gc28gZXhpc3RpbmcgdGFibGVzIGtlZXBcbiAqICAgc2VydmluZyBpbnN0ZWFkIG9mIHJldHJ5aW5nIERETCBvbiBldmVyeSByZXF1ZXN0LlxuICogLSAqKk1lbW9yeSoqIChzZW1hbnRpYyByZWNhbGwgdmlhIGBQZ1ZlY3RvcmApOiBkZWZhdWx0cyB0byBhIHNpbmdsZVxuICogICAqKnNoYXJlZCoqIGluc3RhbmNlIGFjcm9zcyBldmVyeSBhZ2VudC4gQ3Jvc3MtYWdlbnQgcmVjYWxsIG9uIG9uZVxuICogICBpbmRleCBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgdXNlcnMgd2FudDsgb3B0IGludG8gcGVyLWFnZW50IHJlY2FsbFxuICogICBieSBwYXNzaW5nIGEge0BsaW5rIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlfSBvbiB0aGUgYWdlbnQuXG4gKlxuICogQWRkaXRpb25hbGx5LCB7QGxpbmsgTWVtb3J5QnVpbGRlci5pbnN0YW5jZVN0b3JhZ2V9IHJldHVybnMgYVxuICogKipNYXN0cmEtaW5zdGFuY2UtbGV2ZWwqKiBgUG9zdGdyZXNTdG9yZWAgKHNjaGVtYSBgbWFzdHJhX2luc3RhbmNlYClcbiAqIHVzZWQgZm9yIHdvcmtmbG93IHNuYXBzaG90cyAtIHRoZSBwZXJzaXN0ZW5jZSBsYXllclxuICogYGFnZW50LnJlc3VtZVN0cmVhbSgpYCByZWFkcyBmcm9tIHdoZW4gd2FraW5nIGEgc3VzcGVuZGVkXG4gKiBgcmVxdWlyZUFwcHJvdmFsYCB0b29sIGNhbGwuIFBlci1hZ2VudCBzdG9yZXMgYXJlIG5vdCBlbm91Z2ggZm9yXG4gKiB0aGlzOiB3b3JrZmxvdyBydW5zIGFyZSBzY29wZWQgdG8gdGhlIE1hc3RyYSBpbnN0YW5jZSwgbm90IGFuXG4gKiBpbmRpdmlkdWFsIGFnZW50J3MgYE1lbW9yeWAuXG4gKlxuICogUGx1Z2luLWxldmVsIGBjb25maWcuc3RvcmFnZWAgLyBgY29uZmlnLm1lbW9yeWAgYWN0IGFzIHRoZSBiYXNlbGluZVxuICogKGF1dG8tZGVmYXVsdGVkIHRvIGB0cnVlYCBpbiBgcGx1Z2luLnRzYCB3aGVuIHRoZSBgbGFrZWJhc2VgIHBsdWdpblxuICogaXMgcmVnaXN0ZXJlZCk7IHBlci1hZ2VudCBzZXR0aW5ncyBjYXNjYWRlIG9uIHRvcCBvZiB0aGF0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBtaWdyYXRpb24gYXMgYXBwa2l0TWlncmF0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmltcG9ydCB7IGhhc2gsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBmYXN0ZW1iZWQgfSBmcm9tIFwiQG1hc3RyYS9mYXN0ZW1iZWRcIjtcbmltcG9ydCB7IE1lbW9yeSB9IGZyb20gXCJAbWFzdHJhL21lbW9yeVwiO1xuaW1wb3J0IHsgUGdWZWN0b3IsIFBvc3RncmVzU3RvcmUgfSBmcm9tIFwiQG1hc3RyYS9wZ1wiO1xuaW1wb3J0IHsgUG9vbCwgdHlwZSBQb29sQ29uZmlnIH0gZnJvbSBcInBnXCI7XG5cbmltcG9ydCB0eXBlIHsgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uLCBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSB9IGZyb20gXCIuL2FnZW50cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IGFnZW50U3RvcmFnZVNjaGVtYU5hbWUgfSBmcm9tIFwiLi9zdG9yYWdlLXNjaGVtYS50c1wiO1xuaW1wb3J0IHsgc3VtbWFyeU1vZGVsLCBUSVRMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zdW1tYXJpemUudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9tZW1vcnlcIik7XG5cbi8qKlxuICogU29mdGVuIHtAbGluayBQb3N0Z3Jlc1N0b3JlLmluaXR9IHNvIGEgZmFpbGVkIG1pZ3JhdGlvbiAoZS5nLiBMYWtlYmFzZVxuICogYG11c3QgYmUgb3duZXIgb2YgdGFibGUg4oCmYCBvbiBgQUxURVJgKSBpcyBsb2dnZWQgb25jZSBpbnN0ZWFkIG9mIHJldGhyb3duXG4gKiBvbiBldmVyeSBzdG9yYWdlIGNhbGwuXG4gKlxuICogTWFzdHJhJ3MgYGF1Z21lbnRXaXRoSW5pdGAgcmV0cmllcyBpbml0IGZvcmV2ZXIgd2hlbiBpdCB0aHJvd3MsIHNvIHRoZVxuICogb25seSB3YXkgdG8ga2VlcCBzZXJ2aW5nIGFnYWluc3QgYW4gYWxyZWFkeS11c2FibGUgc2NoZW1hIGlzIHRvIHRyZWF0XG4gKiBtaWdyYXRpb24gZmFpbHVyZSBhcyBzdWNjZXNzIGFuZCBtYXJrIHRoZSBzdG9yZSBpbml0aWFsaXplZC5cbiAqXG4gKiBDb25jdXJyZW50IGZpcnN0IGNhbGxlcnMgc2hhcmUgb25lIHNvZnQgYXR0ZW1wdC4gTm9uLW93bmVyc2hpcCBmYWlsdXJlcyBzdGF5XG4gKiBmYXRhbCBzbyBtaXNzaW5nIHNjaGVtYXMvdGFibGVzIGFyZSByZXRyaWVkIG9yIHN1cmZhY2VkIGluc3RlYWQgb2YgaGlkZGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNvZnRTdG9yYWdlSW5pdChzdG9yZTogUG9zdGdyZXNTdG9yZSk6IFBvc3RncmVzU3RvcmUge1xuICBjb25zdCBzb2Z0ID0gc3RvcmUgYXMgdW5rbm93biBhcyB7XG4gICAgaW5pdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNjaGVtYT86IHN0cmluZztcbiAgICBpc0luaXRpYWxpemVkOiBib29sZWFuO1xuICB9O1xuICBjb25zdCBvcmlnaW5hbEluaXQgPSBzb2Z0LmluaXQuYmluZChzb2Z0KTtcbiAgbGV0IHNvZnRJbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcblxuICBzb2Z0LmluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNvZnQuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIHNvZnRJbml0UHJvbWlzZSA/Pz0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9yaWdpbmFsSW5pdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYXBwa2l0TWlncmF0aW9uLmhhbmRsZU93bmVyc2hpcE1pZ3JhdGlvbkVycm9yKGVyciwge1xuICAgICAgICAgICAgc2NvcGU6IFwibWFzdHJhLXN0b3JhZ2VcIixcbiAgICAgICAgICAgIGxvZ2dlcixcbiAgICAgICAgICAgIGV2ZW50OiBcIm1hc3RyYSBzdG9yYWdlIG1pZ3JhdGlvbiBmYWlsZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgc3RvcmVJZDogc29mdC5pZCwgc2NoZW1hOiBzb2Z0LnNjaGVtYSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNvZnRJbml0UHJvbWlzZTtcbiAgICAgIHNvZnQuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzb2Z0SW5pdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xuICByZXR1cm4gc3RvcmU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBkZWRpY2F0ZWQgKipzZXJ2aWNlLXByaW5jaXBhbCoqIExha2ViYXNlIHBvb2wgZm9yIE1hc3RyYVxuICogbWVtb3J5IGZyb20gdGhlIGxha2ViYXNlIHBsdWdpbidzIHJlc29sdmVkIFNQIHBnIGNvbmZpZy5cbiAqXG4gKiBUaGUgcGx1Z2luJ3MgYGV4cG9ydHMoKS5wb29sYCBpcyBhIGBSb3V0aW5nUG9vbGAgdGhhdCBzd2l0Y2hlcyB0b1xuICogdGhlIHBlci11c2VyIChPQk8pIHBvb2wgd2hlbmV2ZXIgYSBxdWVyeSBydW5zIGluc2lkZSBhbiBgYXNVc2VyYFxuICogc2NvcGUgLSBleGFjdGx5IHRoZSBjb250ZXh0IHRoZSBtYXN0cmEgcGx1Z2luIGVzdGFibGlzaGVzIGFyb3VuZFxuICogZXZlcnkgY2hhdCB0dXJuLiBNZW1vcnkgKHRocmVhZHMgLyBtZXNzYWdlcyArIHNlbWFudGljIHJlY2FsbCkgbXVzdFxuICogaW5zdGVhZCBhbHdheXMgYWN0IGFzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWw6IGl0IG93bnMgdGhlXG4gKiBhdXRvLWNyZWF0ZWQgYG1hc3RyYV8qYCBzY2hlbWFzIChhIHBlci11c2VyIHJvbGUgdXN1YWxseSBjYW4ndFxuICogYENSRUFURSBTQ0hFTUFgKSBhbmQgaXMgc2hhcmVkIGFjcm9zcyB1c2Vycywgc28gaXQgY2Fubm90IGluaGVyaXQgYVxuICogcmVxdWVzdCdzIE9CTyBpZGVudGl0eS5cbiAqXG4gKiBgcGdDb25maWdgIG11c3QgYmUgdGhlIHBsdWdpbidzIGBleHBvcnRzKCkuZ2V0UGdDb25maWcoKWAgZXZhbHVhdGVkXG4gKiAqKm91dHNpZGUqKiBhbnkgYGFzVXNlcmAgc2NvcGUgKGkuZS4gZHVyaW5nIHNldHVwKSwgc28gaXQgY2Fycmllc1xuICogdGhlIFNQIGNvbm5lY3Rpb24gdGFyZ2V0LCBPQXV0aCB0b2tlbi1yZWZyZXNoIGBwYXNzd29yZGAgY2FsbGJhY2ssXG4gKiBhbmQgYW55IGBsYWtlYmFzZSh7IHBvb2wgfSlgIHR1bmluZyBvdmVycmlkZXMgLSBhbGwgb2Ygd2hpY2ggdGhpc1xuICogcG9vbCBpbmhlcml0cy4gU2VlIHRoZSBjYWxsIHNpdGUgaW4gYHBsdWdpbi50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlUHJpbmNpcGFsUG9vbChwZ0NvbmZpZzogUG9vbENvbmZpZyk6IFByb21pc2U8UG9vbD4ge1xuICAvLyBgZ2V0UGdDb25maWcoKWAgcmVzb2x2ZXMgdGhlIFNQIHVzZXJuYW1lIHN5bmNocm9ub3VzbHkgZnJvbVxuICAvLyBgUEdVU0VSYCAvIGBEQVRBQlJJQ0tTX0NMSUVOVF9JRGA7IGZhbGwgYmFjayB0byB0aGUgYXN5bmMgQVBJXG4gIC8vIGxvb2t1cCAoZS5nLiBsb2NhbCBkZXYgYXV0aGVudGljYXRpbmcgdmlhIFBBVCkgc28gdGhlIHBvb2wgYWx3YXlzXG4gIC8vIGhhcyBhbiBpZGVudGl0eSB0byBjb25uZWN0IHdpdGguXG4gIGNvbnN0IHVzZXIgPSBwZ0NvbmZpZy51c2VyID8/IChhd2FpdCBnZXRVc2VybmFtZVdpdGhBcGlMb29rdXAoKSk7XG4gIHJldHVybiBuZXcgUG9vbChwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHsgLi4ucGdDb25maWcsIHVzZXIgfSkpO1xufVxuXG4vKiogRWZmZWN0aXZlIHBlci1rbm9iIHNldHRpbmcgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLiAqL1xudHlwZSBTdG9yYWdlU2V0dGluZyA9IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbltcInN0b3JhZ2VcIl07XG50eXBlIE1lbW9yeVNldHRpbmcgPSBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXCJtZW1vcnlcIl07XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGFueSBwbHVnaW4tbGV2ZWwgb3IgcGVyLWFnZW50IHNldHRpbmcgY291bGQgbmVlZCB0aGVcbiAqIExha2ViYXNlIHBvb2wuIFVzZWQgYnkgYHBsdWdpbi50c2AgdG8gZ2F0ZSBjcmVhdGlvbiBvZiB0aGVcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgYW5kIHRoZSB7QGxpbmsgTWVtb3J5QnVpbGRlcn0gdGhhdCBjb25zdW1lc1xuICogaXQ7IHdoZW4gZmFsc2UgbmVpdGhlciBpcyBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5lZWRzTGFrZWJhc2UoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBib29sZWFuIHtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLnN0b3JhZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHNldHRpbmdOZWVkc1NoYXJlZFBvb2woY29uZmlnLm1lbW9yeSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBkZWZzID0gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnKTtcbiAgcmV0dXJuIGRlZnMuc29tZSgoZCkgPT4gc2V0dGluZ05lZWRzU2hhcmVkUG9vbChkLnN0b3JhZ2UpIHx8IHNldHRpbmdOZWVkc1NoYXJlZFBvb2woZC5tZW1vcnkpKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwZXItYWdlbnQge0BsaW5rIE1lbW9yeX0gZmFjdG9yeSBib3VuZCB0byB0aGUgc3VwcGxpZWRcbiAqIHNlcnZpY2UtcHJpbmNpcGFsIHBvb2wgKHNlZSB7QGxpbmsgY3JlYXRlU2VydmljZVByaW5jaXBhbFBvb2x9KS5cbiAqIENhY2hlcyB0aGUgc2hhcmVkIGBQZ1ZlY3RvcmAgc2luZ2xldG9uIChidWlsdCBvbiBmaXJzdCBuZWVkKSBzbyBlYWNoXG4gKiBhZ2VudCBidWlsZCBpcyBPKDEpIGFmdGVyIHRoZSBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUJ1aWxkZXIoXG4gIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICBzZXJ2aWNlUHJpbmNpcGFsUG9vbDogUG9vbCxcbik6IE1lbW9yeUJ1aWxkZXIge1xuICByZXR1cm4gbmV3IE1lbW9yeUJ1aWxkZXIoY29uZmlnLCBzZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG59XG5cbi8qKlxuICogQnVpbGRzIG9uZSBgTWVtb3J5YCBwZXIgYWdlbnQgYWdhaW5zdCBhIHNoYXJlZCBzZXJ2aWNlLXByaW5jaXBhbFxuICogTGFrZWJhc2UgcG9vbC4gUGVyLWluc3RhbmNlIHN0YXRlIGtlZXBzIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCBhbGl2ZVxuICogYWNyb3NzIGNhbGxzIHNvIHJlZ2lzdGVyaW5nIE4gYWdlbnRzIHN0YXlzIGNoZWFwLlxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5QnVpbGRlciB7XG4gIHByaXZhdGUgc2hhcmVkVmVjdG9yOiBQZ1ZlY3RvciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbFBvb2w6IFBvb2wsXG4gICkge31cblxuICAvKipcbiAgICogQnVpbGQgdGhlIE1hc3RyYS1pbnN0YW5jZS1sZXZlbCBzdG9yYWdlIHVzZWQgZm9yIHdvcmtmbG93XG4gICAqIHNuYXBzaG90cy4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHBsdWdpbi1sZXZlbCBgc3RvcmFnZWAgaXNcbiAgICogZGlzYWJsZWQsIGluIHdoaWNoIGNhc2UgYGFnZW50LnJlc3VtZVN0cmVhbSgpYCAoYW5kIHRoZXJlZm9yZVxuICAgKiB0aGUgYHJlcXVpcmVBcHByb3ZhbGAgZmxvdykgd2lsbCBub3QgYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBUaGUgc3RvcmUgbGl2ZXMgaW4gYSBkZWRpY2F0ZWQgYG1hc3RyYV9pbnN0YW5jZWAgc2NoZW1hIHNvIGl0XG4gICAqIG5ldmVyIGNvbGxpZGVzIHdpdGggcGVyLWFnZW50IHtAbGluayBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lfSBuYW1lc3BhY2VzLlxuICAgKiBXb3JrZmxvdyBzbmFwc2hvdHMgYXJlIG5vdCBwZXItYWdlbnQgc3RhdGU7IHRoZXkgYmVsb25nIHRvIHRoZVxuICAgKiBgTWFzdHJhYCBpbnN0YW5jZSB0aGF0IG93bnMgdGhlIHdvcmtmbG93IGV4ZWN1dGlvbi5cbiAgICovXG4gIGluc3RhbmNlU3RvcmFnZSgpOiBQb3N0Z3Jlc1N0b3JlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZXR0aW5nID0gdGhpcy5jb25maWcuc3RvcmFnZTtcbiAgICBpZiAoIXNldHRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgICAgd2l0aElkKHNldHRpbmcsIFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiKSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8XG4gICAgICAgICAgICB0eXBlb2YgUG9zdGdyZXNTdG9yZVxuICAgICAgICAgID5bMF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gd2l0aFNvZnRTdG9yYWdlSW5pdChcbiAgICAgIG5ldyBQb3N0Z3Jlc1N0b3JlKHtcbiAgICAgICAgaWQ6IFwibWFzdHJhLXN0b3JlX19pbnN0YW5jZVwiLFxuICAgICAgICBzY2hlbWFOYW1lOiBcIm1hc3RyYV9pbnN0YW5jZVwiLFxuICAgICAgICBwb29sOiB0aGlzLnNlcnZpY2VQcmluY2lwYWxQb29sLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGBNZW1vcnlgIGZvciBgYWdlbnRJZGAgYWZ0ZXIgdGhlIHBsdWdpbi9hZ2VudCBjYXNjYWRlLlxuICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGFnZW50IGhhcyBuZWl0aGVyIHN0b3JhZ2Ugbm9yIGFcbiAgICogdmVjdG9yIHN0b3JlIGVuYWJsZWQgLSBNYXN0cmEgYWNjZXB0cyBhIG1pc3NpbmcgYG1lbW9yeWAgZmllbGRcbiAgICogYW5kIHRyZWF0cyB0aGUgYWdlbnQgYXMgc3RhdGVsZXNzLlxuICAgKi9cbiAgZm9yQWdlbnQoYWdlbnRJZDogc3RyaW5nLCBkZWY6IEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbik6IE1lbW9yeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RvcmFnZVNldHRpbmcgPSBkZWYuc3RvcmFnZSA/PyB0aGlzLmNvbmZpZy5zdG9yYWdlO1xuICAgIGNvbnN0IG1lbW9yeVNldHRpbmcgPSBkZWYubWVtb3J5ID8/IHRoaXMuY29uZmlnLm1lbW9yeTtcblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmJ1aWxkU3RvcmFnZShhZ2VudElkLCBzdG9yYWdlU2V0dGluZyk7XG4gICAgY29uc3QgdmVjdG9yID0gdGhpcy5idWlsZFZlY3RvcihtZW1vcnlTZXR0aW5nKTtcbiAgICBpZiAoIXN0b3JhZ2UgJiYgIXZlY3Rvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6c3RhdGVsZXNzXCIsIHsgYWdlbnRJZCB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiYWdlbnQ6Y29uZmlndXJlZFwiLCB7XG4gICAgICBhZ2VudElkLFxuICAgICAgc3RvcmFnZTogc3RvcmFnZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgdmVjdG9yOiB2ZWN0b3IgIT09IHVuZGVmaW5lZCxcbiAgICAgIHZlY3Rvck1vZGU6XG4gICAgICAgIHZlY3RvciA9PT0gdW5kZWZpbmVkID8gXCJvZmZcIiA6IHR5cGVvZiBtZW1vcnlTZXR0aW5nID09PSBcIm9iamVjdFwiID8gXCJkZWRpY2F0ZWRcIiA6IFwic2hhcmVkXCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IE1lbW9yeSh7XG4gICAgICAuLi4oc3RvcmFnZSA/IHsgc3RvcmFnZSB9IDoge30pLFxuICAgICAgLi4uKHZlY3RvciA/IHsgdmVjdG9yLCBlbWJlZGRlcjogZmFzdGVtYmVkIH0gOiB7fSksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhc3RNZXNzYWdlczogMTAsXG4gICAgICAgIC4uLih2ZWN0b3IgPyB7IHNlbWFudGljUmVjYWxsOiB7IHRvcEs6IDMsIG1lc3NhZ2VSYW5nZTogMiB9IH0gOiB7fSksXG4gICAgICAgIC8vIEF1dG8tbmFtZSBlYWNoIHRocmVhZCBmcm9tIGl0cyBvcGVuaW5nIHR1cm4gc28gdGhlXG4gICAgICAgIC8vIGNvbnZlcnNhdGlvbiBsaXN0IHRoZSBVSSByZW5kZXJzIHNob3dzIG1lYW5pbmdmdWwgdGl0bGVzXG4gICAgICAgIC8vIGluc3RlYWQgb2YgcmF3IGlkcy4gVGl0bGluZyBydW5zIG9uIHRoZSBzbWFsbCAvIGZhc3QgY2hhdFxuICAgICAgICAvLyB0aWVyIChzZWUgYHN1bW1hcml6ZS50c2ApIHJhdGhlciB0aGFuIHRoZSBhZ2VudCdzIHByaW1hcnlcbiAgICAgICAgLy8gbW9kZWwsIHNvIG5hbWluZyBhIHRocmVhZCBuZXZlciBzcGVuZHMgdGhlIGhlYXZ5d2VpZ2h0IG1vZGVsLlxuICAgICAgICAvLyBPbmx5IG1lYW5pbmdmdWwgd2hlbiBzdG9yYWdlIGlzIG9uOyBoYXJtbGVzcyBvdGhlcndpc2UuXG4gICAgICAgIC4uLihzdG9yYWdlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdlbmVyYXRlVGl0bGU6IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogc3VtbWFyeU1vZGVsKHRoaXMuY29uZmlnKSxcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnM6IFRJVExFX0lOU1RSVUNUSU9OUyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RvcmFnZShhZ2VudElkOiBzdHJpbmcsIHNldHRpbmc6IFN0b3JhZ2VTZXR0aW5nKTogUG9zdGdyZXNTdG9yZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZXR0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgICBuZXcgUG9zdGdyZXNTdG9yZSh7XG4gICAgICAgICAgaWQ6IGBtYXN0cmEtc3RvcmVfXyR7YWdlbnRJZH1gLFxuICAgICAgICAgIHNjaGVtYU5hbWU6IGFnZW50U3RvcmFnZVNjaGVtYU5hbWUoYWdlbnRJZCksXG4gICAgICAgICAgcG9vbDogdGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBDYXN0OiBgd2l0aElkYCBndWFyYW50ZWVzIGBpZGAgaXMgc2V0LCBidXQgdGhlIGRpc3RyaWJ1dGl2ZVxuICAgIC8vIE9taXQgKyBgaWQ/OiBzdHJpbmdgIHNoYXBlIGRvZXNuJ3Qgc3RydWN0dXJhbGx5IG5hcnJvdyB0byB0aGVcbiAgICAvLyBkaXNjcmltaW5hdGVkIHVuaW9uIG1lbWJlcnMuIFJ1bnRpbWUgc2hhcGUgaXMgaWRlbnRpY2FsLlxuICAgIHJldHVybiB3aXRoU29mdFN0b3JhZ2VJbml0KFxuICAgICAgbmV3IFBvc3RncmVzU3RvcmUoXG4gICAgICAgIHdpdGhJZChzZXR0aW5nLCBgbWFzdHJhLXN0b3JlX18ke2FnZW50SWR9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiBQb3N0Z3Jlc1N0b3JlXG4gICAgICAgID5bMF0sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYWdlbnQncyB2ZWN0b3Igc3RvcmUuIENhc2NhZGU6XG4gICAqXG4gICAqIC0gZmFsc3k6IG5vIHZlY3Rvci5cbiAgICogLSBgYm9vbGVhbmAgLyBgdW5kZWZpbmVkLWluaGVyaXRpbmctdHJ1ZWA6IHJldHVybiB0aGUgc2hhcmVkXG4gICAqICAgc2luZ2xldG9uIChidWlsdCBsYXppbHkgb24gZmlyc3QgY2FsbCkuIEFsbCBhZ2VudHMgdGhhdFxuICAgKiAgIGRlZmF1bHQtZW5hYmxlIG1lbW9yeSB3cml0ZSBpbnRvIGFuZCByZWNhbGwgZnJvbSBvbmUgaW5kZXguXG4gICAqIC0gb2JqZWN0OiBidWlsZCBhIGRlZGljYXRlZCBgUGdWZWN0b3JgIGZvciB0aGlzIGFnZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFZlY3RvcihzZXR0aW5nOiBNZW1vcnlTZXR0aW5nKTogUGdWZWN0b3IgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2V0dGluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIHNldHRpbmcgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gdGhpcy5nZXRTaGFyZWRWZWN0b3IoKTtcbiAgICByZXR1cm4gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhcmVkVmVjdG9yKCk6IFBnVmVjdG9yIHtcbiAgICBpZiAoIXRoaXMuc2hhcmVkVmVjdG9yKSB7XG4gICAgICB0aGlzLnNoYXJlZFZlY3RvciA9IGJ1aWxkU2hhcmVkUGdWZWN0b3IodGhpcy5zZXJ2aWNlUHJpbmNpcGFsUG9vbCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYXJlZFZlY3RvcjtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBzaGFyZWQgYFBnVmVjdG9yYCB0aGF0IGJhY2tzIHRoZSBkZWZhdWx0XG4gKiBgZGVmLm1lbW9yeSA9PT0gdHJ1ZWAgY2FzZSBhY3Jvc3MgZXZlcnkgYWdlbnQuXG4gKlxuICogYFBnVmVjdG9yYCdzIGNvbnN0cnVjdG9yIGFjY2VwdHMgb25seSBjb25uZWN0aW9uLXN0eWxlIGNvbmZpZ3NcbiAqIChgSG9zdENvbmZpZ2AgLyBgQ29ubmVjdGlvblN0cmluZ0NvbmZpZ2AgLyBgQ2xpZW50Q29uZmlnYCk7IHRoZXJlIGlzXG4gKiBubyBgeyBwb29sIH1gIHNob3J0aGFuZCB0aGUgd2F5IGBQb3N0Z3Jlc1N0b3JlYCBoYXMgb25lLiBXb3JzZSwgdGhlXG4gKiBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGtpY2tzIG9mZiBhIGBjYWNoZVdhcm11cFByb21pc2VgIElJRkUgdGhhdFxuICogY2FsbHMgYHRoaXMucG9vbC5jb25uZWN0KClgIGJlZm9yZSByZXR1cm5pbmcsIHNvIHdlIGNhbid0IGNsZWFubHlcbiAqIGhhbmQgaXQgYW4gaW5lcnQgY29uZmlnIGFuZCBwYXRjaCB0aGUgcG9vbCBhZnRlcndhcmRzLlxuICpcbiAqIFRoZSB0cmljazogcGFzcyBpbGxlZ2FsLWJ1dC12YWxpZGF0aW9uLXBhc3NpbmcgcGxhY2Vob2xkZXJzIHNvIHRoZVxuICogd2FybXVwJ3MgYG5ldC5jb25uZWN0KClgIHJlamVjdHMgc3luY2hyb25vdXNseSB3aXRoIGBSYW5nZUVycm9yYFxuICogKE5vZGUgdmFsaWRhdGVzIGAwIDw9IHBvcnQgPCA2NTUzNmApLiBUaGUgSUlGRSdzIGBjYXRjaCB7fWAgc3dhbGxvd3NcbiAqIGl0LCBubyBETlMgbG9va3VwIG9yIFRDUCBhdHRlbXB0IGhhcHBlbnMsIGFuZCB3ZSB0aGVuIHN3YXBcbiAqIGBwZ1ZlY3Rvci5wb29sYCB0byB0aGUgbGFrZWJhc2UgcG9vbC4gRXZlcnkgc3Vic2VxdWVudCBgUGdWZWN0b3JgXG4gKiBtZXRob2QgcmVhZHMgYHRoaXMucG9vbGAgYXQgY2FsbCB0aW1lLCBzbyBhbGwgcmVhbCBJL08gZ29lcyB0aHJvdWdoXG4gKiB0aGUgbGFrZWJhc2UgcG9vbCBmcm9tIHRoZW4gb24uIFRoZSBwbGFjZWhvbGRlciBwb29sIGlzIGAuZW5kKClgJ2RcbiAqIHNvIGl0cyBzb2NrZXQgYm9vay1rZWVwaW5nIGlzIHJlbGVhc2VkLlxuICovXG5mdW5jdGlvbiBidWlsZFNoYXJlZFBnVmVjdG9yKHBvb2w6IFBvb2wpOiBQZ1ZlY3RvciB7XG4gIGNvbnN0IHZlY3RvciA9IG5ldyBQZ1ZlY3Rvcih7XG4gICAgaWQ6IGBwZyR7aGFzaC5pZCgpfWAsXG4gICAgLy8gS2VlcCB0aGUgcmVjYWxsIGluZGV4IG91dCBvZiBgcHVibGljYDogb24gYSBMYWtlYmFzZSBkYXRhYmFzZSB0aGUgYXBwXG4gICAgLy8gc2VydmljZSBwcmluY2lwYWwgaGFzIG5vIENSRUFURSBvbiBgcHVibGljYCAoUEcxNSsgbG9ja3MgaXQgZG93biksIHNvIGFcbiAgICAvLyBkZWZhdWx0LXNjaGVtYSBQZ1ZlY3RvciBmYWlscyBvbiBDUkVBVEUgSU5ERVggd2l0aCBcInBlcm1pc3Npb24gZGVuaWVkIGZvclxuICAgIC8vIHNjaGVtYSBwdWJsaWNcIi4gUGdWZWN0b3IgcnVucyBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgZm9yIGEgbmFtZWRcbiAgICAvLyBzY2hlbWEsIHNvIHRoZSBTUCBjcmVhdGVzIGFuZCBvd25zIGBtYXN0cmFfaW5zdGFuY2VgICh0aGUgc2FtZVxuICAgIC8vIGluc3RhbmNlLWxldmVsIHNjaGVtYSB0aGUgd29ya2Zsb3ctc25hcHNob3Qgc3RvcmUgdXNlcykgYW5kIHRoZSBpbmRleFxuICAgIC8vIGxhbmRzIHRoZXJlLiBUYWJsZSBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGggdGhlIHN0b3JhZ2UgdGFibGVzLlxuICAgIHNjaGVtYU5hbWU6IFwibWFzdHJhX2luc3RhbmNlXCIsXG4gICAgaG9zdDogXCItMVwiLFxuICAgIHBvcnQ6IC0xLFxuICAgIGRhdGFiYXNlOiBcIl9cIixcbiAgICB1c2VyOiBcIl9cIixcbiAgICBwYXNzd29yZDogXCJfXCIsXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IHZlY3Rvci5wb29sO1xuICB2ZWN0b3IucG9vbCA9IHBvb2w7XG4gIHZvaWQgcGxhY2Vob2xkZXIuZW5kKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyoqIFBlci1hZ2VudCBkZWRpY2F0ZWQgYFBnVmVjdG9yYCAocmFyZTsgb3B0LWluIHZpYSBvYmplY3Qgb3ZlcnJpZGUpLiAqL1xuZnVuY3Rpb24gYnVpbGRQZ1ZlY3RvcihzZXR0aW5nOiBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSk6IFBnVmVjdG9yIHtcbiAgcmV0dXJuIG5ldyBQZ1ZlY3RvcihcbiAgICB3aXRoSWQoc2V0dGluZywgYHBnLXZlY3Rvcl9fJHtoYXNoLmlkKCl9YCkgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBQZ1ZlY3Rvcj5bMF0sXG4gICk7XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhpcyBzZXR0aW5nIHJlcXVpcmVzIHRoZSBzaGFyZWQgTGFrZWJhc2UgcG9vbC4gKi9cbmZ1bmN0aW9uIHNldHRpbmdOZWVkc1NoYXJlZFBvb2woc2V0dGluZzogU3RvcmFnZVNldHRpbmcgfCBNZW1vcnlTZXR0aW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBzZXR0aW5nID09PSB0cnVlO1xufVxuXG4vKiogV2FsayB0aGUgdGhyZWUgc2hhcGVzIG9mIGBjb25maWcuYWdlbnRzYCBpbnRvIGEgZmxhdCBsaXN0LiAqL1xuZnVuY3Rpb24gY29sbGVjdEFnZW50RGVmaW5pdGlvbnMoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBbnlNYXN0cmFBZ2VudERlZmluaXRpb25bXSB7XG4gIGNvbnN0IGFnZW50cyA9IGNvbmZpZy5hZ2VudHM7XG4gIGlmICghYWdlbnRzKSByZXR1cm4gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGFnZW50cykpIHJldHVybiBhZ2VudHM7XG4gIGlmIChcImluc3RydWN0aW9uc1wiIGluIGFnZW50cykge1xuICAgIHJldHVybiBbYWdlbnRzIGFzIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbl07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoYWdlbnRzKTtcbn1cblxuLyoqIEZpbGwgaW4gYSBkZWZhdWx0IGBpZGAgd2hlbiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgb25lLiAqL1xuZnVuY3Rpb24gd2l0aElkPFQgZXh0ZW5kcyB7IGlkPzogc3RyaW5nIH0+KHZhbHVlOiBULCBmYWxsYmFjazogc3RyaW5nKTogVCB7XG4gIHJldHVybiB2YWx1ZS5pZCA/IHZhbHVlIDogeyAuLi52YWx1ZSwgaWQ6IGZhbGxiYWNrIH07XG59XG4iXX0=
@@ -41,6 +41,18 @@ export declare function mlflowEnabled(): boolean;
41
41
  * the two never disagree.
42
42
  */
43
43
  export declare function resolveFeedbackEnabled(explicit: boolean | undefined): boolean;
44
+ /**
45
+ * Reject an explicitly enabled feedback surface when no MLflow experiment is
46
+ * configured. Auto mode remains non-fatal and simply disables feedback.
47
+ */
48
+ export declare function validateFeedbackConfig(explicit: boolean | undefined): void;
49
+ /**
50
+ * Return the configured experiment URL only when the active Databricks
51
+ * principal has effective `CAN_MANAGE` permission. Permission lookup is
52
+ * intentionally best-effort so Apps environments that do not expose the
53
+ * required APIs simply omit the debug affordance.
54
+ */
55
+ export declare function mlflowExperimentManagerUrl(client: WorkspaceClient): Promise<string | undefined>;
44
56
  /** Parameters for {@link logFeedback}. */
45
57
  export interface LogFeedbackParams {
46
58
  /** MLflow trace id the assessment attaches to (`tr-<hex>`). */