@k8slens/hotbar-contracts 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -21
- package/dist/src/hotbar-item-menu.d.ts +74 -0
- package/dist/src/hotbar-item-menu.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/hotbar-item-context-menu-item.d.ts +0 -48
- package/dist/src/hotbar-item-context-menu-item.d.ts.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { getHotbarItemKindInjectableBunch, type HotbarItemKindBunchParams, type
|
|
|
5
5
|
export { addToHotbarInjectionToken, type AddToHotbar, type AddToHotbarTokenFor, type AddToHotbarTokenForKind, } from "./src/add-to-hotbar";
|
|
6
6
|
export { removeFromHotbarInjectionToken, type RemoveFromHotbar, type RemoveFromHotbarTokenFor, type RemoveFromHotbarTokenForKind, } from "./src/remove-from-hotbar";
|
|
7
7
|
export { isInHotbarInjectionToken, isInHotbarReactiveInjectionToken, type IsInHotbar, type IsInHotbarReactive, type IsInHotbarReactiveTokenFor, type IsInHotbarReactiveTokenForKind, type IsInHotbarTokenFor, type IsInHotbarTokenForKind, } from "./src/is-in-hotbar";
|
|
8
|
-
export {
|
|
8
|
+
export { getHotbarItemMenuItemInjectableBunch, hotbarItemMenuKind, hotbarItemMenuOrderNumbers, type HotbarItemMenuItemBunchParams, } from "./src/hotbar-item-menu";
|
|
9
9
|
/**
|
|
10
10
|
* The hotbar's side of the contract: implemented by the hotbar, built on by
|
|
11
11
|
* `getHotbarItemKindInjectableBunch`. A kind has no reason to touch these directly.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,gCAAgC,EAChC,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAChC,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,gCAAgC,EAChC,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAChC,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oCAAoC,EACpC,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,6BAA6B,GACnC,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,GACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,qCAAqC,EACrC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,GACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,6BAA6B,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -26,10 +26,12 @@ __export(index_exports, {
|
|
|
26
26
|
getHotbarItemKind: () => getHotbarItemKind,
|
|
27
27
|
getHotbarItemKindId: () => getHotbarItemKindId,
|
|
28
28
|
getHotbarItemKindInjectableBunch: () => getHotbarItemKindInjectableBunch,
|
|
29
|
+
getHotbarItemMenuItemInjectableBunch: () => getHotbarItemMenuItemInjectableBunch,
|
|
29
30
|
hasHotbarItemInjectionToken: () => hasHotbarItemInjectionToken,
|
|
30
31
|
hasHotbarItemReactiveInjectionToken: () => hasHotbarItemReactiveInjectionToken,
|
|
31
32
|
hotbarItemComponentInjectionToken: () => hotbarItemComponentInjectionToken,
|
|
32
|
-
|
|
33
|
+
hotbarItemMenuKind: () => hotbarItemMenuKind,
|
|
34
|
+
hotbarItemMenuOrderNumbers: () => hotbarItemMenuOrderNumbers,
|
|
33
35
|
hotbarItemPersistedDataInjectionToken: () => hotbarItemPersistedDataInjectionToken,
|
|
34
36
|
insertHotbarItemInjectionToken: () => insertHotbarItemInjectionToken,
|
|
35
37
|
isInHotbarInjectionToken: () => isInHotbarInjectionToken,
|
|
@@ -268,24 +270,38 @@ var getHotbarItemKindInjectableBunch = ({
|
|
|
268
270
|
});
|
|
269
271
|
};
|
|
270
272
|
|
|
271
|
-
// src/hotbar-item-
|
|
272
|
-
var
|
|
273
|
-
var
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
)
|
|
288
|
-
);
|
|
273
|
+
// src/hotbar-item-menu.ts
|
|
274
|
+
var import_drop_down_menu_contracts = require("@k8slens/drop-down-menu-contracts");
|
|
275
|
+
var hotbarItemMenuKind = (0, import_drop_down_menu_contracts.getDropDownMenuKind)()("hotbar-item-menu");
|
|
276
|
+
var hotbarItemMenuOrderNumbers = {
|
|
277
|
+
/** Where the items contributed for the hotbar item's own kind begin. */
|
|
278
|
+
forTheItemsOwnKind: 10,
|
|
279
|
+
/** Removing the item the menu was opened over from the hotbar. */
|
|
280
|
+
removeFromHotbar: 100,
|
|
281
|
+
/** The first order number past everything Lens puts in a hotbar item's menu. */
|
|
282
|
+
sectionEnd: 200
|
|
283
|
+
};
|
|
284
|
+
var getHotbarItemMenuItemInjectableBunch = (params) => (0, import_drop_down_menu_contracts.getDropDownMenuItemsInjectableBunch)({
|
|
285
|
+
id: params.id,
|
|
286
|
+
kind: hotbarItemMenuKind,
|
|
287
|
+
// The kind's id is built from the scopes this row is registered under, which is what makes the
|
|
288
|
+
// narrowing say "an item of my kind" rather than "an item whose specifier reads like mine".
|
|
289
|
+
instantiate: (di) => {
|
|
290
|
+
const kindId = getHotbarItemKindId(params.forItemsOfKind, di.scopeIds);
|
|
291
|
+
return (item) => {
|
|
292
|
+
var _a;
|
|
293
|
+
if (item.kind !== kindId) {
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
id: params.id,
|
|
298
|
+
orderNumber: params.orderNumber,
|
|
299
|
+
isVisible: (_a = params.isVisible) == null ? void 0 : _a.call(params, item),
|
|
300
|
+
Component: params.Component
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
});
|
|
289
305
|
// Annotate the CommonJS export names for ESM import in node:
|
|
290
306
|
0 && (module.exports = {
|
|
291
307
|
HotbarItemFrame,
|
|
@@ -294,10 +310,12 @@ var hotbarItemContextMenuItemInjectionToken = (0, import_injectable11.getInjecti
|
|
|
294
310
|
getHotbarItemKind,
|
|
295
311
|
getHotbarItemKindId,
|
|
296
312
|
getHotbarItemKindInjectableBunch,
|
|
313
|
+
getHotbarItemMenuItemInjectableBunch,
|
|
297
314
|
hasHotbarItemInjectionToken,
|
|
298
315
|
hasHotbarItemReactiveInjectionToken,
|
|
299
316
|
hotbarItemComponentInjectionToken,
|
|
300
|
-
|
|
317
|
+
hotbarItemMenuKind,
|
|
318
|
+
hotbarItemMenuOrderNumbers,
|
|
301
319
|
hotbarItemPersistedDataInjectionToken,
|
|
302
320
|
insertHotbarItemInjectionToken,
|
|
303
321
|
isInHotbarInjectionToken,
|
|
@@ -305,4 +323,4 @@ var hotbarItemContextMenuItemInjectionToken = (0, import_injectable11.getInjecti
|
|
|
305
323
|
parseHotbarItemKindId,
|
|
306
324
|
removeFromHotbarInjectionToken
|
|
307
325
|
});
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWtpbmQudHMiLCAiLi4vc3JjL2dldC1ob3RiYXItaXRlbS1raW5kLWluamVjdGFibGUtYnVuY2gudHN4IiwgIi4uL3NyYy9hZGQtdG8taG90YmFyLnRzIiwgIi4uL3NyYy9lamVjdC1ob3RiYXItaXRlbS50cyIsICIuLi9zcmMvaGFzLWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1jb21wb25lbnQudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWZyYW1lLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YS50cyIsICIuLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9pcy1pbi1ob3RiYXIudHMiLCAiLi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhci50cyIsICIuLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vc3JjL2hvdGJhci1pdGVtLWlkXCI7XG5leHBvcnQge1xuICBnZXRIb3RiYXJJdGVtS2luZCxcbiAgZ2V0SG90YmFySXRlbUtpbmRJZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZElkLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhLFxuICBwYXJzZUhvdGJhckl0ZW1LaW5kSWQsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1raW5kXCI7XG5leHBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW1cIjtcblxuZXhwb3J0IHtcbiAgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2gsXG4gIHR5cGUgSG90YmFySXRlbUtpbmRCdW5jaFBhcmFtcyxcbiAgdHlwZSBIb3RiYXJJdGVtUHJvcHMsXG59IGZyb20gXCIuL3NyYy9nZXQtaG90YmFyLWl0ZW0ta2luZC1pbmplY3RhYmxlLWJ1bmNoXCI7XG5leHBvcnQge1xuICBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLFxuICB0eXBlIEFkZFRvSG90YmFyLFxuICB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9hZGQtdG8taG90YmFyXCI7XG5leHBvcnQge1xuICByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhcixcbiAgdHlwZSBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCxcbn0gZnJvbSBcIi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhclwiO1xuZXhwb3J0IHtcbiAgaXNJbkhvdGJhckluamVjdGlvblRva2VuLFxuICBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBJc0luSG90YmFyLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZSxcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQsXG4gIHR5cGUgSXNJbkhvdGJhclRva2VuRm9yLFxuICB0eXBlIElzSW5Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9pcy1pbi1ob3RiYXJcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yLFxuICB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgc2lkZSBvZiB0aGUgY29udHJhY3Q6IGltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIsIGJ1aWx0IG9uIGJ5XG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLiBBIGtpbmQgaGFzIG5vIHJlYXNvbiB0byB0b3VjaCB0aGVzZSBkaXJlY3RseS5cbiAqL1xuZXhwb3J0IHtcbiAgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQsXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnksXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29tcG9uZW50XCI7XG5leHBvcnQgeyBIb3RiYXJJdGVtRnJhbWUsIHR5cGUgSG90YmFySXRlbUZyYW1lUHJvcHMgfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tZnJhbWVcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGFFbnRyeSxcbiAgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiO1xuZXhwb3J0IHsgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuLCB0eXBlIEluc2VydEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtXCI7XG5leHBvcnQgeyBlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgdHlwZSBFamVjdEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvZWplY3QtaG90YmFyLWl0ZW1cIjtcbmV4cG9ydCB7XG4gIGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSGFzSG90YmFySXRlbSxcbiAgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUsXG59IGZyb20gXCIuL3NyYy9oYXMtaG90YmFyLWl0ZW1cIjtcbiIsICJpbXBvcnQgeyBnZXRUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllclR5cGUgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuXG4vKipcbiAqIElkZW50aWZpZXMgb25lIGtpbmQgb2YgaG90YmFyIGl0ZW06IHdoYXQgYW4gaXRlbSBpcywgYXMgb3Bwb3NlZCB0byB3aGljaCBpdGVtIGl0IGlzLlxuICogRXZlcnkgaXRlbSBpbiB0aGUgaG90YmFyIGlzIHBlcnNpc3RlZCBhcyBgeyBpZCwga2luZCB9YCwgYW5kIHRoZSBraW5kIGRlY2lkZXMgaG93IHRoZVxuICogaXRlbSByZW5kZXJzLlxuICpcbiAqIGBQZXJzaXN0ZWREYXRhYCBpcyB3aGF0IHRoZSBob3RiYXIgcGVyc2lzdHMgbmV4dCB0byB0aGUgaXRlbSdzIGlkIHdoZW4gdGhlIGl0ZW0gaXNcbiAqIGFkZGVkLCBhbmQgaGFuZHMgYmFjayB0byB0aGUga2luZCdzIGNvbXBvbmVudCB3aGVuZXZlciB0aGUgaXRlbSByZW5kZXJzLiBBIGtpbmRcbiAqIGNyZWF0ZWQgd2l0aG91dCBgUGVyc2lzdGVkRGF0YWAgcGVyc2lzdHMgbm90aGluZyBiZXlvbmQgdGhlIGlkLlxuICpcbiAqIEF0IHJ1bnRpbWUgYSBraW5kIGlzIGEgYnJhbmRlZCBzdHJpbmcsIHNvIGl0IGlzIHVzYWJsZSBhcyBhIGAuZm9yKClgIGtleS5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmQ8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+ID0gVHlwZWRTcGVjaWZpZXI8c3RyaW5nLCB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT47XG5cbi8qKlxuICogUmVjb3ZlcnMgdGhlIHBlcnNpc3RlZCBkYXRhIHR5cGUgYm91bmQgdG8gYSB7QGxpbmsgSG90YmFySXRlbUtpbmR9IG9yIGEge0BsaW5rIEhvdGJhckl0ZW1LaW5kSWR9LlxuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55PiB8IEhvdGJhckl0ZW1LaW5kSWQ8YW55Pj4gPSBUeXBlZFNwZWNpZmllclR5cGU8XG4gIFwicGVyc2lzdGVkRGF0YVwiLFxuICBLXG4+O1xuXG4vKipcbiAqIFdoYXQgdGhlIGhvdGJhciBrbm93cyBhIGtpbmQgYnk6IHRoZSBraW5kJ3Mgc3BlY2lmaWVyLCBzY29wZWQgdG8gd2hvZXZlciByZWdpc3RlcmVkIGl0LCBhc1xuICogb25lIHN0cmluZy4gSXQgaXMgd2hhdCB0aGUgaG90YmFyIHBlcnNpc3RzIGFzIGFuIGl0ZW0ncyBga2luZGAgYW5kIHdoYXQga2V5cyB0aGUga2luZCdzXG4gKiBwZXJzaXN0ZWQgZGF0YS4gVHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lIHNwZWNpZmllciBnZXQgdHdvIGlkcywgYmVjYXVzZVxuICogdGhlaXIgc2NvcGVzIGRpZmZlcjsgdGhlIHNwZWNpZmllciBhbG9uZSBpcyBuZXZlciBhbiBpZGVudGl0eS5cbiAqXG4gKiBUaGUgdG9rZW5zIHRha2UgdGhlIHR3byBwYXJ0cyBzZXBhcmF0ZWx5LCBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgOyB0aGUgaWQgaXMgdGhlXG4gKiBob3RiYXIncyBzaWRlIG9mIHRoZSBzYW1lIGlkZW50aXR5LiBNYWRlIGJ5IHtAbGluayBnZXRIb3RiYXJJdGVtS2luZElkfSwgdGFrZW4gYXBhcnQgYnlcbiAqIHtAbGluayBwYXJzZUhvdGJhckl0ZW1LaW5kSWR9LiBUeXBlZCBieSB0aGUga2luZCdzIHBlcnNpc3RlZCBkYXRhLCBsaWtlIHRoZSBraW5kIGl0c2VsZi5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmRJZDxQZXJzaXN0ZWREYXRhID0gdW5rbm93bj4gPSBUeXBlZFNwZWNpZmllcjxcbiAgc3RyaW5nLFxuICB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7IHNjb3BlZEhvdGJhckl0ZW1LaW5kOiB0cnVlIH1cbj47XG5cbi8qKlxuICogVGhlIGlkIG9mIGEga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRoZSBnaXZlbiBzY29wZXM6IHRoZSBzY29wZSBpZHMsIHRoZW4gdGhlIHNwZWNpZmllcixcbiAqIGpvaW5lZCB3aXRoIFwiOlwiLCB3aGljaCBpcyB3aHkgYSBzcGVjaWZpZXIgbWF5IG5vdCBjb250YWluIG9uZS4gVGhlIHNhbWUga2luZCB1bmRlciB0aGUgc2FtZVxuICogc2NvcGVzIGFsd2F5cyB5aWVsZHMgdGhlIHNhbWUgaWQuIFRoZSBob3RiYXIgY29tcHV0ZXMgaXQgZnJvbSBhbiBpdGVtJ3Mga2luZCBhbmQgc2NvcGVzO1xuICogYSBraW5kJ3Mgb3duIGNvZGUgaGFzIG5vIG5lZWQgZm9yIGl0LCB0aGUgdG9rZW5zIHRha2UgdGhlIHBhcnRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0SG90YmFySXRlbUtpbmRJZCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oXG4gIGtpbmQ6IEssXG4gIHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IEhvdGJhckl0ZW1LaW5kSWQ8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+ID0+XG4gIFsuLi5zY29wZUlkcywga2luZF0uam9pbihcIjpcIikgYXMgSG90YmFySXRlbUtpbmRJZDxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj47XG5cbi8qKlxuICogVGhlIHR3byBwYXJ0cyBvZiBhIGtpbmQgaWQ6IHRoZSBzY29wZXMgdGhlIGtpbmQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIgYW5kIHRoZSBraW5kIGl0c2VsZixcbiAqIGFzIHRoZSB0b2tlbnMgdGFrZSB0aGVtOiBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLiBUaGUgaW52ZXJzZSBvZlxuICoge0BsaW5rIGdldEhvdGJhckl0ZW1LaW5kSWR9LiBBIGtpbmQgcmVnaXN0ZXJlZCBhdCBjb250YWluZXIgbGV2ZWwsIG9yIHBlcnNpc3RlZCBiZWZvcmUga2luZHNcbiAqIHdlcmUgc2NvcGVkLCBwYXJzZXMgdG8gbm8gc2NvcGVzLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VIb3RiYXJJdGVtS2luZElkID0gPERhdGE+KFxuICBraW5kSWQ6IEhvdGJhckl0ZW1LaW5kSWQ8RGF0YT4sXG4pOiB7IHJlYWRvbmx5IGtpbmQ6IEhvdGJhckl0ZW1LaW5kPERhdGE+OyByZWFkb25seSBzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10gfSA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gU3RyaW5nKGtpbmRJZCkuc3BsaXQoXCI6XCIpO1xuXG4gIHJldHVybiB7XG4gICAga2luZDogc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gYXMgSG90YmFySXRlbUtpbmQ8RGF0YT4sXG4gICAgc2NvcGVJZHM6IHNlZ21lbnRzLnNsaWNlKDAsIC0xKSxcbiAgfTtcbn07XG5cbi8qKlxuICogQ3VycmllZCBjcmVhdG9yIGZvciBhIHtAbGluayBIb3RiYXJJdGVtS2luZH0uIFRoZSBmaXJzdCBjYWxsIGJpbmRzIHRoZSBwZXJzaXN0ZWQgZGF0YVxuICogdHlwZTsgdGhlIHNlY29uZCB0aGUgZ2xvYmFsbHkgdW5pcXVlIHNwZWNpZmllciBzdHJpbmcuIFJlZ2lzdGVyIHRoZSBraW5kIHdpdGhcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHRoZW4gYWRkIGl0ZW1zIG9mIGl0IHdpdGhcbiAqIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgY2FycnkgYSBVUkw6XG4gKiBleHBvcnQgY29uc3QgYm9va21hcmtIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kPHsgdXJsOiBzdHJpbmcgfT4oKShcIm15LWV4dGVuc2lvbi1ib29rbWFya1wiKTtcbiAqXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgbmVlZCBub3RoaW5nIGJleW9uZCB0aGVpciBpZDpcbiAqIGV4cG9ydCBjb25zdCBkYXNoYm9hcmRIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kKCkoXCJteS1leHRlbnNpb24tZGFzaGJvYXJkXCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZCA9XG4gIDxQZXJzaXN0ZWREYXRhID0gdm9pZD4oKSA9PlxuICA8UyBleHRlbmRzIHN0cmluZz4oc3BlY2lmaWVyOiBTKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNyZWF0ZSBob3RiYXIgaXRlbSBraW5kIFwiJHtzcGVjaWZpZXJ9XCIsIGJ1dCBcIjpcIiBpcyByZXNlcnZlZCBmb3Igc2NvcGluZyB0aGUga2luZCB0byBpdHMgcmVnaXN0cmF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRUeXBlZFNwZWNpZmllcjx7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT4oKShzcGVjaWZpZXIpO1xuICB9O1xuIiwgImltcG9ydCB7IGdldEluamVjdGFibGUyLCBnZXRJbmplY3RhYmxlQnVuY2ggfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZ2V0SW5qZWN0YWJsZUNvbXBvbmVudDIsIHVzZURpIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGUtcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmVyIH0gZnJvbSBcIm1vYngtcmVhY3RcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdHlwZSBBZGRUb0hvdGJhciwgYWRkVG9Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FkZC10by1ob3RiYXJcIjtcbmltcG9ydCB7IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vZWplY3QtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9oYXMtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLCBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEhvdGJhckl0ZW1GcmFtZSB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWZyYW1lXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kLCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHsgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2hvdGJhci1pdGVtLXBlcnNpc3RlZC1kYXRhXCI7XG5pbXBvcnQgeyBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pbnNlcnQtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSXNJbkhvdGJhcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUsXG4gIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbixcbiAgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG59IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuaW1wb3J0IHsgdHlwZSBSZW1vdmVGcm9tSG90YmFyLCByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9yZW1vdmUtZnJvbS1ob3RiYXJcIjtcblxuLyoqXG4gKiBXaGF0IGEga2luZCdzIGNvbXBvbmVudCByZWNlaXZlczogd2hpY2ggaXRlbSBpdCByZW5kZXJzLCBhbmQgdGhlIGRhdGEgdGhhdCB3YXNcbiAqIHBlcnNpc3RlZCB3aGVuIHRoZSBpdGVtIHdhcyBhZGRlZC4gVHlwZWQgYnkgdGhlIGtpbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbVByb3BzPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1LaW5kQnVuY2hQYXJhbXM8SyBleHRlbmRzIEhvdGJhckl0ZW1LaW5kPGFueT4+IHtcbiAgLyoqIFRoZSBraW5kIGJlaW5nIHJlZ2lzdGVyZWQsIGZyb20gYGdldEhvdGJhckl0ZW1LaW5kYC4gKi9cbiAgcmVhZG9ubHkga2luZDogSztcbiAgLyoqXG4gICAqIFJlbmRlcnMgYW4gaXRlbSBvZiB0aGUga2luZCwgaW5zaWRlIHRoZSBzbG90J3MgZnJhbWUuIFJlY2VpdmVzIHRoZSBpdGVtJ3MgaWQgYW5kIGl0c1xuICAgKiBwZXJzaXN0ZWQgZGF0YSwgYW5kIGRlY2lkZXMgZXZlcnl0aGluZyBlbHNlOiB3aGF0IHRoZSBpdGVtIGxvb2tzIGxpa2UsIGFuZCB3aGF0XG4gICAqIGNsaWNraW5nIGl0IGRvZXMuIE11c3QgYmUgZGVmaW5lZCBhdCBtb2R1bGUgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8SG90YmFySXRlbVByb3BzPEs+Pjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGtpbmQgb2YgaG90YmFyIGl0ZW0uIE9uZSBjYWxsIGRlY2xhcmVzIGhvdyBpdGVtcyBvZiB0aGUga2luZCByZW5kZXIsIHdpcmVzXG4gKiB0aGVpciBwZXJzaXN0ZWQgZGF0YSwgYW5kIGdpdmVzIHRoZSBraW5kIGl0cyB0eXBlZCBhZGRlciwgYGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLFxuICogYWxvbmcgd2l0aCBpdHMgb3duIG1lbWJlcnNoaXAgcXVlcmllcyBhbmQgcmVtb3ZlciwgYGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAsXG4gKiBgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIGFuZCBgcmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC5cbiAqXG4gKiBUaGUgbGFzdCBgLmZvcigpYCBpcyB0aGUgc2NvcGUgb2YgdGhlIHJlZ2lzdHJhdGlvbjogZXZlcnkgdG9rZW4gaGVyZSBpcyByZWdpc3RlcmVkIHVuZGVyXG4gKiB0aGUgc2NvcGVzIG9mIHdob2V2ZXIgcmVnaXN0ZXJzIHRoZSBidW5jaCwgc28gdHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lXG4gKiBzcGVjaWZpZXIgbmV2ZXIgbWVldC4gSXRlbXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIga2luZCwgaXRzIHNjb3BlcywgYW5kIHRoZW4gdGhlaXIgb3duXG4gKiBpZCwgbmV2ZXIgYnkgdGhlIGlkIGFsb25lLlxuICpcbiAqIFRoZSBob3RiYXIgZnJhbWVzIGVhY2ggaXRlbSwgcGVyc2lzdHMgaXRzIGB7IGlkLCBraW5kIH1gIGFuZCBkYXRhLCBwYWdlcyBhbmQgZHJhZ3MgaXQsXG4gKiBhbmQgZ2l2ZXMgaXRzIHJpZ2h0LWNsaWNrIG1lbnUgYSB3YXkgdG8gcmVtb3ZlIGl0LiBUaGUgY29tcG9uZW50IG93bnMgdGhlIHJlc3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZXhwb3J0IGNvbnN0IGJvb2ttYXJrSG90YmFySXRlbUtpbmQgPSBnZXRIb3RiYXJJdGVtS2luZDx7IHVybDogc3RyaW5nIH0+KCkoXCJteS1leHRlbnNpb24tYm9va21hcmtcIik7XG4gKlxuICogY29uc3QgQm9va21hcmsgPSAoeyBwZXJzaXN0ZWREYXRhIH06IEhvdGJhckl0ZW1Qcm9wczx0eXBlb2YgYm9va21hcmtIb3RiYXJJdGVtS2luZD4pID0+IChcbiAqICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBvcGVuKHBlcnNpc3RlZERhdGEudXJsKX0+e25ldyBVUkwocGVyc2lzdGVkRGF0YS51cmwpLmhvc3R9PC9CdXR0b24+XG4gKiApO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoKHtcbiAqICAga2luZDogYm9va21hcmtIb3RiYXJJdGVtS2luZCxcbiAqICAgQ29tcG9uZW50OiBCb29rbWFyayxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oe1xuICBraW5kLFxuICBDb21wb25lbnQsXG59OiBIb3RiYXJJdGVtS2luZEJ1bmNoUGFyYW1zPEs+KSA9PiB7XG4gIC8vIEJ1aWx0IG9uY2UgcGVyIGtpbmQgc28gdGhlIGNvbXBvbmVudCByZWZlcmVuY2UgaXMgc3RhYmxlIGFjcm9zcyBpbmplY3Rpb25zOyBhIGZyZXNoXG4gIC8vIHJlZmVyZW5jZSBvbiBlYWNoIGluamVjdGlvbiB3b3VsZCByZW1vdW50IHRoZSBpdGVtIGFuZCBsb3NlIGl0cyBzdGF0ZS5cbiAgY29uc3QgSG90YmFySXRlbU9mS2luZCA9IG9ic2VydmVyKCh7IGl0ZW0gfTogSG90YmFySXRlbUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgY29uc3QgZGkgPSB1c2VEaSgpO1xuICAgIC8vIFJlc29sdmVkIHN0cmFpZ2h0IGZyb20gdGhlIGNvbnRhaW5lcjogdGhlIHN0b3JlIGlzIGEgc2luZ2xldG9uIHBlciBraW5kLCBhbmQgYVxuICAgIC8vIHN1c3BlbmRpbmcgaG9vayBoYXMgbm8gcGxhY2UgYXJvdW5kIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IG9uIHNjcmVlbi4gVGhlIGl0ZW0gY2Fycmllc1xuICAgIC8vIHRoZSBraW5kJ3MgaWQsIHdoaWNoIGlzIHdoYXQgdGhlIHN0b3JlIGlzIGtleWVkIGJ5LlxuICAgIGNvbnN0IHBlcnNpc3RlZERhdGEgPSB1c2VNZW1vKCgpID0+IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuLCBpdGVtLmtpbmQpLCBbZGksIGl0ZW0ua2luZF0pO1xuICAgIGNvbnN0IGVudHJ5ID0gcGVyc2lzdGVkRGF0YS5nZXQoaXRlbS5pZCkuZ2V0KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhvdGJhckl0ZW1GcmFtZSBpdGVtPXtpdGVtfT5cbiAgICAgICAge2VudHJ5ID8gPENvbXBvbmVudCBpZD17aXRlbS5pZH0gcGVyc2lzdGVkRGF0YT17ZW50cnkucGVyc2lzdGVkRGF0YSBhcyBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPn0gLz4gOiBudWxsfVxuICAgICAgPC9Ib3RiYXJJdGVtRnJhbWU+XG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gVGhlIHRva2VucyBhcmUga2V5ZWQgYnkgdGhlIHNjb3BlcyBvZiB3aG9ldmVyIHJlZ2lzdGVycyB0aGlzIGJ1bmNoICh0aGUgYGluamVjdGlvblRva2VuYFxuICAvLyBmdW5jdGlvbnMpLCBhbmQgdGhlIGluc3RhbmNlcyBjb21wdXRlIHRoZSBob3RiYXIncyBpZCBvZiB0aGUga2luZCBmcm9tIHRoZWlyIG93blxuICAvLyBgZGkuc2NvcGVJZHNgLCBzbyB0aGUgdHdvIGFsd2F5cyBhZ3JlZS5cbiAgcmV0dXJuIGdldEluamVjdGFibGVCdW5jaCh7XG4gICAgY29tcG9uZW50OiBnZXRJbmplY3RhYmxlQ29tcG9uZW50Mih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbXBvbmVudC0ke2tpbmR9YCxcbiAgICAgIENvbXBvbmVudDogSG90YmFySXRlbU9mS2luZCxcbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBhZGRUb0hvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhZGQtdG8taG90YmFyLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbXG4gICAgICAgIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gICAgICAgIGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgICAgICAgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuLFxuICAgICAgXSxcblxuICAgICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgICBjb25zdCBraW5kSWQgPSBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIGRpLnNjb3BlSWRzKTtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkRGF0YSA9IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuKShraW5kSWQpO1xuICAgICAgICBjb25zdCBpbnNlcnRIb3RiYXJJdGVtID0gZGkuaW5qZWN0KGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgaGFzSG90YmFySXRlbSA9IGRpLmluamVjdChoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4pKCk7XG5cbiAgICAgICAgY29uc3QgYWRkVG9Ib3RiYXI6IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9IGFzeW5jICh7IGlkLCBwZXJzaXN0ZWREYXRhOiBkYXRhIH0pID0+IHtcbiAgICAgICAgICAvLyBDaGVja2VkIGJlZm9yZSBwZXJzaXN0aW5nLCBzbyBhIHJlamVjdGVkIGFkZCBsZWF2ZXMgdGhlIGl0ZW0ncyBkYXRhIGFzIGl0IHdhcy5cbiAgICAgICAgICBpZiAoYXdhaXQgaGFzSG90YmFySXRlbSh7IGlkLCBraW5kOiBraW5kSWQgfSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gYWRkIGhvdGJhciBpdGVtIFwiJHtpZH1cIiBvZiBraW5kIFwiJHtraW5kSWR9XCIsIGJ1dCBpdCBpcyBhbHJlYWR5IGluIHRoZSBob3RiYXIuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgcGVyc2lzdGVkRGF0YS5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgIGF3YWl0IGluc2VydEhvdGJhckl0ZW0oeyBpZCwga2luZDoga2luZElkIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoKSA9PiBhZGRUb0hvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgLy8gVGhlIGhvdGJhciBhbnN3ZXJzIGZvciBldmVyeSBraW5kIGF0IG9uY2UsIGdpdmVuIHRoZSB3aG9sZSB7IGlkLCBraW5kIH07IHRoZXNlIGJpbmQgdGhlXG4gICAgLy8ga2luZCwgc28gYSBjb25zdW1lciBhZGRyZXNzZXMgaXRlbXMgYnkga2luZCBmaXJzdCBhbmQgaWQgc2Vjb25kLCBuZXZlciBieSBpZCBhbG9uZS5cbiAgICBpc0luSG90YmFyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICAgIGNvbnN1bXB0aW9uczogW2hhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGhhc0hvdGJhckl0ZW0gPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuKSgpO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyOiBJc0luSG90YmFyID0gKGlkKSA9PiBoYXNIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gaXNJbkhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBpc0luSG90YmFyUmVhY3RpdmU6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgaXMtaW4taG90YmFyLXJlYWN0aXZlLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpbmRJZCA9IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgZGkuc2NvcGVJZHMpO1xuICAgICAgICBjb25zdCBoYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4pO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyUmVhY3RpdmU6IElzSW5Ib3RiYXJSZWFjdGl2ZSA9IChpZCkgPT4gaGFzSG90YmFySXRlbVJlYWN0aXZlKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gaXNJbkhvdGJhclJlYWN0aXZlO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgcmVtb3ZlRnJvbUhvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGByZW1vdmUtZnJvbS1ob3RiYXItJHtraW5kfWAsXG4gICAgICBjb25zdW1wdGlvbnM6IFtlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGVqZWN0SG90YmFySXRlbSA9IGRpLmluamVjdChlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlRnJvbUhvdGJhcjogUmVtb3ZlRnJvbUhvdGJhciA9IChpZCkgPT4gZWplY3RIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gcmVtb3ZlRnJvbUhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG4gIH0pO1xufTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZCwgSG90YmFySXRlbVBlcnNpc3RlZERhdGEgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHR5cGUgeyBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pcy1pbi1ob3RiYXJcIjtcblxuLyoqXG4gKiBBZGRzIGFuIGl0ZW0gb2Ygb25lIGtpbmQgdG8gdGhlIGhvdGJhcjogcGVyc2lzdHMgaXRzIGRhdGEgdW5kZXIgaXRzIGlkLCB0aGVuIHB1dHMgaXRcbiAqIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBwYWdlLiBUZWxscyB0aGUgdXNlciB3aGVuIHRoZXJlIGlzIG5vIGZyZWUgc2xvdC5cbiAqXG4gKiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kIHRoZW4gaXRzIGlkLCBzbyB0aGUgaWQgbmVlZHMgdG8gYmUgdW5pcXVlIG9ubHkgYW1vbmdcbiAqIGl0ZW1zIG9mIHRoZSBraW5kLiBUaHJvd3Mgd2hlbiBhbiBpdGVtIG9mIHRoZSBraW5kIHdpdGggdGhlIGlkIGlzIGFscmVhZHkgb24gdGhlIGN1cnJlbnRcbiAqIHBhZ2UsIGxlYXZpbmcgdGhlIGhvdGJhciBhbmQgdGhlIGl0ZW0ncyBwZXJzaXN0ZWQgZGF0YSBhcyB0aGV5IHdlcmUuIEEgdG9nZ2xlIGFza3NcbiAqIHtAbGluayBpc0luSG90YmFySW5qZWN0aW9uVG9rZW59IGZpcnN0LlxuICovXG5leHBvcnQgdHlwZSBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPiA9IChpdGVtOiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7XG59KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIGFkZGVyIHBlciBraW5kIHBlciBzY29wZSwgdHlwZWQgYnkgaXRzIHBlcnNpc3RlZCBkYXRhLiAqL1xuZXhwb3J0IHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcjxQZXJzaXN0ZWREYXRhPiA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8UGVyc2lzdGVkRGF0YT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgYWRkZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPFBlcnNpc3RlZERhdGE+ID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPFBlcnNpc3RlZERhdGE+PjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IEFkZFRvSG90YmFyVG9rZW5Gb3I8UGVyc2lzdGVkRGF0YT47XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIGAuZm9yKClgIGZhY3RvcmllcywgYW5ub3RhdGVkIHNvIGEga2luZCdzIG93biBwZXJzaXN0ZWQgZGF0YSB0eXBlIHN1cnZpdmVzIGJvdGggbGV2ZWxzLlxuICogSW5mZXJlbmNlIGZyb20gdGhlIHZhbHVlIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBhIHJldHVybiB0eXBlIHRoYXQgbWVudGlvbnMgdGhlXG4gKiBzcGVjaWZpZXIncyBvd24gdHlwZSBwYXJhbWV0ZXIuXG4gKi9cbmNvbnN0IGFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kID0gPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PihcbiAga2luZDogSyxcbik6IEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PjtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+PjtcbiAgfT4oe1xuICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogQWRkVG9Ib3RiYXJUb2tlbkZvcjxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj4gPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiB9Pih7XG4gICAgICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogQWRkIGFuIGl0ZW0gdG8gdGhlIGhvdGJhciwgdHlwZWQgYnkgaXRzIGtpbmQ6IGAuZm9yKGtpbmQpYCBuYXJyb3dzIHRvIHRoZSBraW5kLCB3aG9zZVxuICogYHBlcnNpc3RlZERhdGFgIGlzIHdoYXQgdGhlIGtpbmQgd2FzIGNyZWF0ZWQgZm9yLCBhbmQgYC5mb3Ioc2NvcGVJZHMpYCB0byB0aGUgcmVnaXN0cmF0aW9uXG4gKiBvZiBpdCwgd2l0aCB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuIFJlZ2lzdGVyZWQgYnlcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgYWRkQm9va21hcmtUb0hvdGJhciA9IGRpLmluamVjdChhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihib29rbWFya0hvdGJhckl0ZW1LaW5kKS5mb3IoZGkuc2NvcGVJZHMpKSgpO1xuICpcbiAqIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZDogYGJvb2ttYXJrKCR7dXJsfSlgLCBwZXJzaXN0ZWREYXRhOiB7IHVybCB9IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUb0hvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8YW55PjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPGFueT4+O1xufT4oe1xuICBpZDogXCJhZGQtdG8taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoYWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuXG4vKipcbiAqIFRha2VzIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgb3V0IG9mIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLiBUaHJvd3Mgd2hlbiBubyBzdWNoIGl0ZW1cbiAqIGlzIHRoZXJlLlxuICovXG5leHBvcnQgdHlwZSBFamVjdEhvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIHJlbW92YWwsIHRoZSBjb3VudGVycGFydCBvZiBgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuYDogb25lXG4gKiBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgZ2l2ZW4gdGhlIHdob2xlIGB7IGlkLCBraW5kIH1gLlxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCBidWlsZHMgYHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gRWplY3RIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiZWplY3QtaG90YmFyLWl0ZW1cIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIGFzIG9mIG5vdy4gKi9cbmV4cG9ydCB0eXBlIEhhc0hvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIG1lbWJlcnNoaXAgcXVlcnk6IG9uZSBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgYXNrZWQgd2l0aCB0aGUgd2hvbGVcbiAqIGB7IGlkLCBraW5kIH1gLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIGJ1aWxkcyBgaXNJbkhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWBcbiAqIG9uIGl0LCBzbyByZWFjaCBmb3IgdGhhdCBvbmUgaW5zdGVhZC5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSGFzSG90YmFySXRlbSB9Pih7XG4gIGlkOiBcImhhcy1ob3RiYXItaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSAoaXRlbTogSG90YmFySXRlbSkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKlxuICogVGhlIGhvdGJhcidzIG93biByZWFjdGl2ZSBtZW1iZXJzaGlwIHF1ZXJ5LCBhc2tlZCB3aXRoIHRoZSB3aG9sZSBgeyBpZCwga2luZCB9YC5cbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgYnVpbGRzIGBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0hvdGJhckl0ZW1SZWFjdGl2ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSGFzSG90YmFySXRlbVJlYWN0aXZlIH0+KHtcbiAgaWQ6IFwiaGFzLWhvdGJhci1pdGVtLXJlYWN0aXZlXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQge1xuICBnZXRJbmplY3Rpb25Ub2tlbjIsXG4gIHR5cGUgTWFueUZhY3RvcnksXG4gIHR5cGUgTWF5YmVSZXN1bHRGYWN0b3J5LFxuICB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yLFxufSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHsgZ2V0SG90YmFySXRlbUtpbmRJZCwgdHlwZSBIb3RiYXJJdGVtS2luZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWtpbmRcIjtcblxuLyoqIFdoYXQgdGhlIGhvdGJhciBoYW5kcyBhIGtpbmQncyBjb21wb25lbnQ6IHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcyA9IHsgaXRlbTogSG90YmFySXRlbSB9O1xuXG4vKipcbiAqIFJlbmRlcnMgb25lIGl0ZW0gb2YgYSBraW5kIGluc2lkZSBpdHMgaG90YmFyIHNsb3QuIFRoZSBob3RiYXIgaGFuZHMgaXQgdGhlIGl0ZW0gb25seTtcbiAqIHRoZSBjb21wb25lbnQgcmVzb2x2ZXMgd2hhdGV2ZXIgZWxzZSBpdCBuZWVkcyBmcm9tIHRoZSBpdGVtJ3MgaWQgYW5kIGtpbmQuXG4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRUeXBlPEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcz47XG5cbi8qKiBIb3cgdGhlIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkOiBhIHYyIHRva2VuIG1vZGVscyBhIGZhY3RvcnksIHNvIGEgY29tcG9uZW50IGlzIHdyYXBwZWQgaW4gb25lLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnkgPSAoKSA9PiBIb3RiYXJJdGVtQ29tcG9uZW50O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGF0IG1vc3Qgb25lIGNvbXBvbmVudCBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCI7XG59PjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZClgIHlpZWxkczogdGhlIGtpbmQncyBjb21wb25lbnRzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gSG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG5jb25zdCBob3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5PjtcbiAgfT4oe1xuICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICAgICAgICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gICAgICB9Pih7XG4gICAgICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIEhvdyB0aGUgaG90YmFyIHJlbmRlcnMgYW4gaXRlbTogdGhlIGNvbXBvbmVudCByZWdpc3RlcmVkIGZvciB0aGUgaXRlbSdzIGtpbmQsIHZpYVxuICogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAuIEEga2luZCB3aXRoIG5vIGNvbXBvbmVudCBpcyB1bmtub3duIHRvIHRoZSBob3RiYXIsIGFuZCBpdHMgaXRlbXNcbiAqIHJlbmRlciBhcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHJlZ2lzdGVycyB0aGlzIGZvciBhIGtpbmQ7IHByZWZlciBpdCBvdmVyIGJpbmRpbmdcbiAqIHRvIHRoZSB0b2tlbiBieSBoYW5kLCBzaW5jZSBpdCBhbHNvIHdpcmVzIHRoZSBwZXJzaXN0ZWQgZGF0YSBhbmQgdGhlIGFkZGVyLlxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG59Pih7XG4gIGlkOiBcImhvdGJhci1pdGVtLWNvbXBvbmVudFwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlLXJlYWN0XCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbUZyYW1lUHJvcHMge1xuICByZWFkb25seSBpdGVtOiBIb3RiYXJJdGVtO1xuICByZWFkb25seSBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBXaGF0IGV2ZXJ5IGhvdGJhciBpdGVtIHNpdHMgaW46IHRoZSBzbG90J3MgY2hyb21lLCBwbHVzIHRoZSBpdGVtJ3MgcmlnaHQtY2xpY2sgbWVudSxcbiAqIHdoaWNoIGlzIHdoZXJlIHRoZSBob3RiYXIgb2ZmZXJzIHRvIHJlbW92ZSB0aGUgaXRlbS4gV2hhdGV2ZXIgaXMgcmVuZGVyZWQgaW5zaWRlIGRlY2lkZXNcbiAqIHdoYXQgY2xpY2tpbmcgdGhlIGl0ZW0gZG9lcy5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHdyYXBzIGEga2luZCdzIGNvbXBvbmVudFxuICogaW4gaXQsIHNvIGEga2luZCBuZWVkcyB0byByZW5kZXIgb25seSBpdHMgb3duIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBIb3RiYXJJdGVtRnJhbWUgPSBnZXRJbmplY3Rpb25Ub2tlbkNvbXBvbmVudDI8UmVhY3QuQ29tcG9uZW50VHlwZTxIb3RiYXJJdGVtRnJhbWVQcm9wcz4+KHtcbiAgaWQ6IFwiaG90YmFyLWl0ZW0tZnJhbWVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKipcbiAqIFRoZSBwZXJzaXN0ZWQgZGF0YSBvZiBvbmUgaXRlbSwgd3JhcHBlZCBzbyB0aGF0IFwibm8gZGF0YSBwZXJzaXN0ZWRcIiBhbmQgXCJwZXJzaXN0ZWRcbiAqIGB1bmRlZmluZWRgXCIgKGEga2luZCB3aXRob3V0IGRhdGEpIHN0YXkgZGlzdGluZ3Vpc2hhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YTtcbn1cblxuLyoqXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgZXZlcnkgaXRlbSBvZiBvbmUga2luZCwga2V5ZWQgYnkgaXRlbSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlPFBlcnNpc3RlZERhdGEgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgaXRlbSdzIGVudHJ5LCBgdW5kZWZpbmVkYCB1bnRpbCB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgd2hpbGUgdGhlIGl0ZW0gaGFzIG5vbmUuICovXG4gIHJlYWRvbmx5IGdldDogKGlkOiBIb3RiYXJJdGVtSWQpID0+IElDb21wdXRlZFZhbHVlPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YT4gfCB1bmRlZmluZWQ+O1xuICAvKiogUGVyc2lzdHMgdGhlIGl0ZW0ncyBkYXRhLCByZXNvbHZpbmcgb25jZSB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgdGFrZW4gaXQuICovXG4gIHJlYWRvbmx5IHNldDogKGlkOiBIb3RiYXJJdGVtSWQsIHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBXaGF0IHtAbGluayBob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VufSB5aWVsZHM6IHRoZSBzdG9yZSBvZiBvbmUga2luZCwgYnkgdGhlIGtpbmQncyBpZC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IgPSAoa2luZElkOiBIb3RiYXJJdGVtS2luZElkPGFueT4pID0+IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmU7XG5cbi8qKlxuICogV2hlcmUgdGhlIGhvdGJhciBrZWVwcyB0aGUgcGVyc2lzdGVkIGRhdGEgb2YgaXRlbXMsIG9uZSBzdG9yZSBwZXIga2luZC4gVGhlIGRhdGEgaXNcbiAqIHR5cGVkIGJ5IHRoZSBraW5kLCB3aGljaCBpcyB3aHkgdGhlIHN0b3JlIGl0c2VsZiBpcyB1bnR5cGVkOiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgXG4gKiBiaW5kcyB0aGUgdHlwZSBvbiBib3RoIHRoZSB3YXkgaW4gKHRoZSBhZGRlcikgYW5kIHRoZSB3YXkgb3V0ICh0aGUgY29tcG9uZW50KSwgc28gYSBraW5kXG4gKiBuZXZlciB0b3VjaGVzIHRoaXMgZGlyZWN0bHkuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlRm9yO1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKlxuICogUHV0cyBhbiBpdGVtIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGVsbHMgdGhlIHVzZXIgd2hlblxuICogdGhlcmUgaXMgbm9uZSwgb3Igd2hlbiB0aGUgaXRlbSdzIGtpbmQgaXMgdW5rbm93biwgaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0SG90YmFySXRlbSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBvd24gaW5zZXJ0aW9uOiBpZCBhbmQga2luZCBvbmx5LCBubyBwZXJzaXN0ZWQgZGF0YS4gVGhlIHR5cGVkIGFkZGVyIGEga2luZFxuICogZ2V0cyBmcm9tIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAgcGVyc2lzdHMgdGhlIGRhdGEgZmlyc3QgYW5kIHRoZW4gY29tZXNcbiAqIGhlcmUsIHNvIHJlYWNoIGZvciB0aGF0IG9uZSBpbnN0ZWFkLlxuICpcbiAqIEltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJbnNlcnRIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiaW5zZXJ0LWhvdGJhci1pdGVtXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogV2hldGhlciB0aGUgaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgYXMgb2Ygbm93LiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIG1lbWJlcnNoaXAgcXVlcnkgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gSXNJbkhvdGJhcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbmNvbnN0IGlzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPSAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IElzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjsgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+IH0+KHtcbiAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogSXNJbkhvdGJhclRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyIH0+KHtcbiAgICAgICAgaWQ6IGBpcy1pbi1ob3RiYXItJHtnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKX1gLFxuICAgICAgICBzcGVjaWFsaXR5OiBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKSxcbiAgICAgICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIFdoZXRoZXIgYW4gaXRlbSBpcyBpbiB0aGUgaG90YmFyLCBhc2tlZCBvbmNlOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHF1ZXJ5XG4gKiBvZiB0aGF0IGtpbmQgYXMgcmVnaXN0ZXJlZCB1bmRlciB0aG9zZSBzY29wZXMsIHdoaWNoIHRha2VzIHRoZSBpZC4gQW4gaXRlbSBpcyBpZGVudGlmaWVkIGJ5XG4gKiBpdHMga2luZCBhbmQgdGhlbiBpdHMgaWQsIG5ldmVyIGJ5IHRoZSBpZCBhbG9uZSwgc28gdHdvIGtpbmRzIHVzaW5nIHRoZSBzYW1lIGlkIG5ldmVyIGFuc3dlclxuICogZm9yIGVhY2ggb3RoZXI7IHRoZSBzY29wZXMgY29tZSBmcm9tIHRoZSBgZGkuc2NvcGVJZHNgIG9mIHRoZSBpbmplY3RhYmxlIGFza2luZy4gRm9yXG4gKiBkZWNpZGluZyBpbiBhIGhhbmRsZXIsIHNheSB3aGV0aGVyIGEgY2xpY2sgc2hvdWxkIGFkZCB0aGUgaXRlbSBvciByZW1vdmUgaXQuXG4gKlxuICogQSBwcm9taXNlIHJhdGhlciB0aGFuIGEgYm9vbGVhbiBiZWNhdXNlIHRoZSBob3RiYXIgbG9hZHMgd2hhdCBpdCBwZXJzaXN0ZWQgbGF6aWx5OiBhc2tlZFxuICogYmVmb3JlIHRoYXQsIGEgYm9vbGVhbiBjb3VsZCBvbmx5IGJlIGEgZ3Vlc3MuIEZvciBmb2xsb3dpbmcgdGhlIGFuc3dlciBhcyBpdCBjaGFuZ2VzLCBzZWVcbiAqIHtAbGluayBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGlzQm9va21hcmtJbkhvdGJhciA9IGRpLmluamVjdChpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihkaS5zY29wZUlkcykpKCk7XG4gKlxuICogaWYgKGF3YWl0IGlzQm9va21hcmtJbkhvdGJhcihpZCkpIHtcbiAqICAgYXdhaXQgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyKGlkKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZCwgcGVyc2lzdGVkRGF0YTogeyB1cmwgfSB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaXNJbkhvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+O1xufT4oe1xuICBpZDogXCJpcy1pbi1ob3RiYXJcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KShpc0luSG90YmFyVG9rZW5Gb3JLaW5kKTtcblxuLyoqIFdoZXRoZXIgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgcmVhY3RpdmUgbWVtYmVyc2hpcCBxdWVyeSBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlYWN0aXZlIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgaXNJbkhvdGJhclJlYWN0aXZlVG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SXNJbkhvdGJhclJlYWN0aXZlPiB9Pih7XG4gICAgaWQ6IGBpcy1pbi1ob3RiYXItcmVhY3RpdmUtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoXG4gICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBJc0luSG90YmFyUmVhY3RpdmUgfT4oe1xuICAgICAgICBpZDogYGlzLWluLWhvdGJhci1yZWFjdGl2ZS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogV2hldGhlciBhbiBpdGVtIGlzIGluIHRoZSBob3RiYXIsIGFzIGEgTW9iWCBjb21wdXRlZDogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzIHRoZVxuICogcXVlcnkgb2YgdGhhdCBraW5kIGFzIHJlZ2lzdGVyZWQgdW5kZXIgdGhvc2Ugc2NvcGVzLCB3aGljaCB0YWtlcyB0aGUgaWQuIFJlYWQgaXQgdW5kZXIgYW5cbiAqIG9ic2VydmVyIChvciBhIHJlYWN0aW9uKSB0byBmb2xsb3cgdGhlIHVzZXIgcGlubmluZyBhbmQgdW5waW5uaW5nLiBgZmFsc2VgIHVudGlsIHRoZSBob3RiYXJcbiAqIGhhcyBsb2FkZWQgd2hhdCBpdCBwZXJzaXN0ZWQuIEZvciBhIG9uZS1vZmYgYW5zd2VyLCBzZWUge0BsaW5rIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS4gQVxuICogY29tcG9uZW50IGhhcyBubyBzY29wZSBvZiBpdHMgb3duLCBzbyBpdCB0YWtlcyB0aGUgcXVlcnkgZnJvbSBhbiBpbmplY3RhYmxlIHRoYXQgcmVhY2hlZCBpdFxuICogd2l0aCBpdHMgYGRpLnNjb3BlSWRzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBQaW5TdGF0ZSA9IG9ic2VydmVyKCh7IHVybCB9OiB7IHVybDogc3RyaW5nIH0pID0+IHtcbiAqICAgY29uc3QgaXNJbkhvdGJhciA9IHVzZUluamVjdChpc0Jvb2ttYXJrSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGFibGUpKGlkT2YodXJsKSkuZ2V0KCk7XG4gKlxuICogICByZXR1cm4gPHNwYW4+e2lzSW5Ib3RiYXIgPyBcIlBpbm5lZFwiIDogXCJOb3QgcGlubmVkXCJ9PC9zcGFuPjtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG59Pih7XG4gIGlkOiBcImlzLWluLWhvdGJhci1yZWFjdGl2ZVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGlzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0taWRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgdHlwZSB7IGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgZnJvbSB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGhyb3dzIHdoZW4gbm9cbiAqIHN1Y2ggaXRlbSBpcyB0aGVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIHJlbW92ZXIgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlbW92ZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgcmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9IChraW5kOiBIb3RiYXJJdGVtS2luZDxhbnk+KTogUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gUmVtb3ZlRnJvbUhvdGJhcj4gfT4oe1xuICAgIGlkOiBgcmVtb3ZlLWZyb20taG90YmFyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXIgfT4oe1xuICAgICAgICBpZDogYHJlbW92ZS1mcm9tLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgaG90YmFyOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHJlbW92ZXIgb2YgdGhhdCBraW5kXG4gKiBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcywgd2hpY2ggdGFrZXMgdGhlIGlkLiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kXG4gKiB0aGVuIGl0cyBpZCwgc28gcmVtb3Zpbmcgb25lIGtpbmQncyBpdGVtIGxlYXZlcyBhbm90aGVyIGtpbmQncyBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxvbmUuXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgdGhlIGl0ZW0gaXMgbGVmdCBpbiBwbGFjZSwgc28gYWRkaW5nIHRoZSBzYW1lIGlkIGJhY2sgZmluZHMgaXQgYWdhaW4uXG4gKiBUaGUgc2NvcGVzIGNvbWUgZnJvbSB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuXG4gKlxuICogVGhyb3dzIHdoZW4gbm8gaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBwYWdlOiByZW1vdmluZyBpcyBzb21ldGhpbmdcbiAqIGRvbmUgdG8gYW4gaXRlbSBrbm93biB0byBiZSB0aGVyZSwgc28gYSB0b2dnbGUgYXNrcyB7QGxpbmsgaXNJbkhvdGJhckluamVjdGlvblRva2VufSBmaXJzdC5cbiAqXG4gKiBSZWdpc3RlcmVkIGJ5IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyID0gZGkuaW5qZWN0KHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3IoYm9va21hcmtIb3RiYXJJdGVtS2luZCkuZm9yKGRpLnNjb3BlSWRzKSkoKTtcbiAqXG4gKiBhd2FpdCByZW1vdmVCb29rbWFya0Zyb21Ib3RiYXIoYG15LWV4dGVuc2lvbi1ib29rbWFyaygke3VybH0pYCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbn0+KHtcbiAgaWQ6IFwicmVtb3ZlLWZyb20taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkocmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgTWVudUl0ZW0gfSBmcm9tIFwiQGs4c2xlbnMvZHJvcC1kb3duLW1lbnUtY29udHJhY3RzXCI7XG5pbXBvcnQgdHlwZSB7IE1heWJlUHJvbWlzZSB9IGZyb20gXCJAazhzbGVucy9wdWJsaWMtdXRpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogUHJvZHVjZXMgdGhlIG1lbnUgaXRlbSBmb3Igb25lIGhvdGJhciBpdGVtLCBwb3NzaWJseSBsYXRlci4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3IgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gTWF5YmVQcm9taXNlPE1lbnVJdGVtPjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzOiB0aGUgbWVudSBpdGVtcyBjb250cmlidXRlZCB0byBvbmUga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcy4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbnUgaXRlbXMsIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIHJpZ2h0LWNsaWNrIG1lbnUgb2YgYSBob3RiYXIgaXRlbTogb25lIGVudHJ5IHBlciBjb250cmlidXRpb24sIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGVcbiAqIGl0ZW0ncyBraW5kIHZpYSBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC4gVGhlIHNjb3BlcyBhcmUgdGhvc2Ugb2YgdGhlIHJlZ2lzdHJhdGlvbiwgc28gdGhlXG4gKiBgaW5qZWN0aW9uVG9rZW5gIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gb2YgdGhlbS4gVGhlIGhvdGJhciBjb250cmlidXRlcyB0aGUgd2F5IHRvIHJlbW92ZVxuICogdGhlIGl0ZW0gdG8gZXZlcnkga2luZCBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBleHBvcnQgY29uc3Qgb3BlbkJvb2ttYXJrSW5Ccm93c2VySW5qZWN0YWJsZSA9IGdldEluamVjdGFibGUyKHtcbiAqICAgaWQ6IFwib3Blbi1ib29rbWFyay1pbi1icm93c2VyXCIsXG4gKiAgIGluc3RhbnRpYXRlOiAoKSA9PiAoaWQpOiBNZW51SXRlbSA9PiAoe1xuICogICAgIGlkOiBcIm9wZW4taW4tYnJvd3NlclwiLFxuICogICAgIGtpbmQ6IFwiYWN0aW9uXCIsXG4gKiAgICAgbGFiZWxUZXh0OiBcIk9wZW4gaW4gYnJvd3NlclwiLFxuICogICAgIG9uQ2xpY2s6ICgpID0+IG9wZW5JbkJyb3dzZXIodXJsT2YoaWQpKSxcbiAqICAgICBvcmRlck51bWJlcjogMTAsXG4gKiAgICAgcGFyZW50SWQ6IHVuZGVmaW5lZCxcbiAqICAgfSksXG4gKiAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtSW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihzY29wZUlkcyksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbnRleHRNZW51SXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKFxuICAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcktpbmQgPT5cbiAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yPjtcbiAgICB9Pih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbnRleHQtbWVudS1pdGVtLSR7a2luZH1gLFxuICAgICAgc3BlY2lhbGl0eToga2luZCxcbiAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICAgIH0pKFxuICAgICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9PlxuICAgICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I7XG4gICAgICAgICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICAgICAgICB9Pih7XG4gICAgICAgICAgaWQ6IGBob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgICAgY2FyZGluYWxpdHk6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QSxNQUNqQyxjQUFjLENBQUMsbUNBQW1DO0FBQUEsTUFFbEQsYUFBYSxDQUFDLE9BQU87QUFDbkIsY0FBTSxTQUFTLG9CQUFvQixNQUFNLEdBQUcsUUFBUTtBQUNwRCxjQUFNLHdCQUF3QixHQUFHLE9BQU8sbUNBQW1DO0FBQzNFLGNBQU0scUJBQXlDLENBQUMsT0FBTyxzQkFBc0IsRUFBRSxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBRWpHLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSxpQ0FBaUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDM0YsQ0FBQztBQUFBLElBRUQsc0JBQWtCLG9DQUFlO0FBQUEsTUFDL0IsSUFBSSxzQkFBc0IsSUFBSTtBQUFBLE1BQzlCLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxNQUU1QyxhQUFhLENBQUMsT0FBTztBQUNuQixjQUFNLFNBQVMsb0JBQW9CLE1BQU0sR0FBRyxRQUFRO0FBQ3BELGNBQU0sa0JBQWtCLEdBQUcsT0FBTyw2QkFBNkIsRUFBRTtBQUNqRSxjQUFNLG1CQUFxQyxDQUFDLE9BQU8sZ0JBQWdCLEVBQUUsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUV2RixlQUFPLE1BQU07QUFBQSxNQUNmO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSwrQkFBK0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDekYsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOzs7QVVsTEEsSUFBQUMsc0JBQW1GO0FBK0M1RSxJQUFNLDhDQUEwQyx3Q0FHcEQ7QUFBQSxFQUNELElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDO0FBQUEsRUFDQyxDQUFDLGFBQ0Msd0NBR0c7QUFBQSxJQUNELElBQUksaUNBQWlDLElBQUk7QUFBQSxJQUN6QyxZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQUEsSUFDQyxDQUFDLGlCQUNDLHdDQUdHO0FBQUEsTUFDRCxJQUFJLGlDQUFpQyxvQkFBb0IsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUN4RSxZQUFZLG9CQUFvQixNQUFNLFFBQVE7QUFBQSxNQUM5QyxhQUFhO0FBQUEsSUFDZixDQUFDLEVBQUU7QUFBQSxFQUNQO0FBQ0o7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlX3JlYWN0IiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIl0KfQo=
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWtpbmQudHMiLCAiLi4vc3JjL2dldC1ob3RiYXItaXRlbS1raW5kLWluamVjdGFibGUtYnVuY2gudHN4IiwgIi4uL3NyYy9hZGQtdG8taG90YmFyLnRzIiwgIi4uL3NyYy9lamVjdC1ob3RiYXItaXRlbS50cyIsICIuLi9zcmMvaGFzLWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1jb21wb25lbnQudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWZyYW1lLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YS50cyIsICIuLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9pcy1pbi1ob3RiYXIudHMiLCAiLi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhci50cyIsICIuLi9zcmMvaG90YmFyLWl0ZW0tbWVudS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0taWRcIjtcbmV4cG9ydCB7XG4gIGdldEhvdGJhckl0ZW1LaW5kLFxuICBnZXRIb3RiYXJJdGVtS2luZElkLFxuICB0eXBlIEhvdGJhckl0ZW1LaW5kLFxuICB0eXBlIEhvdGJhckl0ZW1LaW5kSWQsXG4gIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGEsXG4gIHBhcnNlSG90YmFySXRlbUtpbmRJZCxcbn0gZnJvbSBcIi4vc3JjL2hvdGJhci1pdGVtLWtpbmRcIjtcbmV4cG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbVwiO1xuXG5leHBvcnQge1xuICBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZEJ1bmNoUGFyYW1zLFxuICB0eXBlIEhvdGJhckl0ZW1Qcm9wcyxcbn0gZnJvbSBcIi4vc3JjL2dldC1ob3RiYXItaXRlbS1raW5kLWluamVjdGFibGUtYnVuY2hcIjtcbmV4cG9ydCB7XG4gIGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgQWRkVG9Ib3RiYXIsXG4gIHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcixcbiAgdHlwZSBBZGRUb0hvdGJhclRva2VuRm9yS2luZCxcbn0gZnJvbSBcIi4vc3JjL2FkZC10by1ob3RiYXJcIjtcbmV4cG9ydCB7XG4gIHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBSZW1vdmVGcm9tSG90YmFyLFxuICB0eXBlIFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcixcbiAgdHlwZSBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvcmVtb3ZlLWZyb20taG90YmFyXCI7XG5leHBvcnQge1xuICBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4sXG4gIGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuLFxuICB0eXBlIElzSW5Ib3RiYXIsXG4gIHR5cGUgSXNJbkhvdGJhclJlYWN0aXZlLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCxcbiAgdHlwZSBJc0luSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgSXNJbkhvdGJhclRva2VuRm9yS2luZCxcbn0gZnJvbSBcIi4vc3JjL2lzLWluLWhvdGJhclwiO1xuZXhwb3J0IHtcbiAgZ2V0SG90YmFySXRlbU1lbnVJdGVtSW5qZWN0YWJsZUJ1bmNoLFxuICBob3RiYXJJdGVtTWVudUtpbmQsXG4gIGhvdGJhckl0ZW1NZW51T3JkZXJOdW1iZXJzLFxuICB0eXBlIEhvdGJhckl0ZW1NZW51SXRlbUJ1bmNoUGFyYW1zLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tbWVudVwiO1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBzaWRlIG9mIHRoZSBjb250cmFjdDogaW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhciwgYnVpbHQgb24gYnlcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAuIEEga2luZCBoYXMgbm8gcmVhc29uIHRvIHRvdWNoIHRoZXNlIGRpcmVjdGx5LlxuICovXG5leHBvcnQge1xuICBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudCxcbiAgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeSxcbiAgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50UHJvcHMsXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1jb21wb25lbnRcIjtcbmV4cG9ydCB7IEhvdGJhckl0ZW1GcmFtZSwgdHlwZSBIb3RiYXJJdGVtRnJhbWVQcm9wcyB9IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1mcmFtZVwiO1xuZXhwb3J0IHtcbiAgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YUVudHJ5LFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmUsXG4gIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGFTdG9yZUZvcixcbn0gZnJvbSBcIi4vc3JjL2hvdGJhci1pdGVtLXBlcnNpc3RlZC1kYXRhXCI7XG5leHBvcnQgeyBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4sIHR5cGUgSW5zZXJ0SG90YmFySXRlbSB9IGZyb20gXCIuL3NyYy9pbnNlcnQtaG90YmFyLWl0ZW1cIjtcbmV4cG9ydCB7IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuLCB0eXBlIEVqZWN0SG90YmFySXRlbSB9IGZyb20gXCIuL3NyYy9lamVjdC1ob3RiYXItaXRlbVwiO1xuZXhwb3J0IHtcbiAgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuLFxuICBoYXNIb3RiYXJJdGVtUmVhY3RpdmVJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBIYXNIb3RiYXJJdGVtLFxuICB0eXBlIEhhc0hvdGJhckl0ZW1SZWFjdGl2ZSxcbn0gZnJvbSBcIi4vc3JjL2hhcy1ob3RiYXItaXRlbVwiO1xuIiwgImltcG9ydCB7IGdldFR5cGVkU3BlY2lmaWVyLCB0eXBlIFR5cGVkU3BlY2lmaWVyLCB0eXBlIFR5cGVkU3BlY2lmaWVyVHlwZSB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5cbi8qKlxuICogSWRlbnRpZmllcyBvbmUga2luZCBvZiBob3RiYXIgaXRlbTogd2hhdCBhbiBpdGVtIGlzLCBhcyBvcHBvc2VkIHRvIHdoaWNoIGl0ZW0gaXQgaXMuXG4gKiBFdmVyeSBpdGVtIGluIHRoZSBob3RiYXIgaXMgcGVyc2lzdGVkIGFzIGB7IGlkLCBraW5kIH1gLCBhbmQgdGhlIGtpbmQgZGVjaWRlcyBob3cgdGhlXG4gKiBpdGVtIHJlbmRlcnMuXG4gKlxuICogYFBlcnNpc3RlZERhdGFgIGlzIHdoYXQgdGhlIGhvdGJhciBwZXJzaXN0cyBuZXh0IHRvIHRoZSBpdGVtJ3MgaWQgd2hlbiB0aGUgaXRlbSBpc1xuICogYWRkZWQsIGFuZCBoYW5kcyBiYWNrIHRvIHRoZSBraW5kJ3MgY29tcG9uZW50IHdoZW5ldmVyIHRoZSBpdGVtIHJlbmRlcnMuIEEga2luZFxuICogY3JlYXRlZCB3aXRob3V0IGBQZXJzaXN0ZWREYXRhYCBwZXJzaXN0cyBub3RoaW5nIGJleW9uZCB0aGUgaWQuXG4gKlxuICogQXQgcnVudGltZSBhIGtpbmQgaXMgYSBicmFuZGVkIHN0cmluZywgc28gaXQgaXMgdXNhYmxlIGFzIGEgYC5mb3IoKWAga2V5LlxuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtS2luZDxQZXJzaXN0ZWREYXRhID0gdW5rbm93bj4gPSBUeXBlZFNwZWNpZmllcjxzdHJpbmcsIHsgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YSB9PjtcblxuLyoqXG4gKiBSZWNvdmVycyB0aGUgcGVyc2lzdGVkIGRhdGEgdHlwZSBib3VuZCB0byBhIHtAbGluayBIb3RiYXJJdGVtS2luZH0gb3IgYSB7QGxpbmsgSG90YmFySXRlbUtpbmRJZH0uXG4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+IHwgSG90YmFySXRlbUtpbmRJZDxhbnk+PiA9IFR5cGVkU3BlY2lmaWVyVHlwZTxcbiAgXCJwZXJzaXN0ZWREYXRhXCIsXG4gIEtcbj47XG5cbi8qKlxuICogV2hhdCB0aGUgaG90YmFyIGtub3dzIGEga2luZCBieTogdGhlIGtpbmQncyBzcGVjaWZpZXIsIHNjb3BlZCB0byB3aG9ldmVyIHJlZ2lzdGVyZWQgaXQsIGFzXG4gKiBvbmUgc3RyaW5nLiBJdCBpcyB3aGF0IHRoZSBob3RiYXIgcGVyc2lzdHMgYXMgYW4gaXRlbSdzIGBraW5kYCBhbmQgd2hhdCBrZXlzIHRoZSBraW5kJ3NcbiAqIHBlcnNpc3RlZCBkYXRhLiBUd28gZXh0ZW5zaW9ucyBkZWNsYXJpbmcgYSBraW5kIHdpdGggdGhlIHNhbWUgc3BlY2lmaWVyIGdldCB0d28gaWRzLCBiZWNhdXNlXG4gKiB0aGVpciBzY29wZXMgZGlmZmVyOyB0aGUgc3BlY2lmaWVyIGFsb25lIGlzIG5ldmVyIGFuIGlkZW50aXR5LlxuICpcbiAqIFRoZSB0b2tlbnMgdGFrZSB0aGUgdHdvIHBhcnRzIHNlcGFyYXRlbHksIGB0b2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWA7IHRoZSBpZCBpcyB0aGVcbiAqIGhvdGJhcidzIHNpZGUgb2YgdGhlIHNhbWUgaWRlbnRpdHkuIE1hZGUgYnkge0BsaW5rIGdldEhvdGJhckl0ZW1LaW5kSWR9LCB0YWtlbiBhcGFydCBieVxuICoge0BsaW5rIHBhcnNlSG90YmFySXRlbUtpbmRJZH0uIFR5cGVkIGJ5IHRoZSBraW5kJ3MgcGVyc2lzdGVkIGRhdGEsIGxpa2UgdGhlIGtpbmQgaXRzZWxmLlxuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtS2luZElkPFBlcnNpc3RlZERhdGEgPSB1bmtub3duPiA9IFR5cGVkU3BlY2lmaWVyPFxuICBzdHJpbmcsXG4gIHsgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YTsgc2NvcGVkSG90YmFySXRlbUtpbmQ6IHRydWUgfVxuPjtcblxuLyoqXG4gKiBUaGUgaWQgb2YgYSBraW5kIGFzIHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGdpdmVuIHNjb3BlczogdGhlIHNjb3BlIGlkcywgdGhlbiB0aGUgc3BlY2lmaWVyLFxuICogam9pbmVkIHdpdGggXCI6XCIsIHdoaWNoIGlzIHdoeSBhIHNwZWNpZmllciBtYXkgbm90IGNvbnRhaW4gb25lLiBUaGUgc2FtZSBraW5kIHVuZGVyIHRoZSBzYW1lXG4gKiBzY29wZXMgYWx3YXlzIHlpZWxkcyB0aGUgc2FtZSBpZC4gVGhlIGhvdGJhciBjb21wdXRlcyBpdCBmcm9tIGFuIGl0ZW0ncyBraW5kIGFuZCBzY29wZXM7XG4gKiBhIGtpbmQncyBvd24gY29kZSBoYXMgbm8gbmVlZCBmb3IgaXQsIHRoZSB0b2tlbnMgdGFrZSB0aGUgcGFydHMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZElkID0gPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PihcbiAga2luZDogSyxcbiAgc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogSG90YmFySXRlbUtpbmRJZDxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj4gPT5cbiAgWy4uLnNjb3BlSWRzLCBraW5kXS5qb2luKFwiOlwiKSBhcyBIb3RiYXJJdGVtS2luZElkPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PjtcblxuLyoqXG4gKiBUaGUgdHdvIHBhcnRzIG9mIGEga2luZCBpZDogdGhlIHNjb3BlcyB0aGUga2luZCB3YXMgcmVnaXN0ZXJlZCB1bmRlciBhbmQgdGhlIGtpbmQgaXRzZWxmLFxuICogYXMgdGhlIHRva2VucyB0YWtlIHRoZW06IGB0b2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAuIFRoZSBpbnZlcnNlIG9mXG4gKiB7QGxpbmsgZ2V0SG90YmFySXRlbUtpbmRJZH0uIEEga2luZCByZWdpc3RlcmVkIGF0IGNvbnRhaW5lciBsZXZlbCwgb3IgcGVyc2lzdGVkIGJlZm9yZSBraW5kc1xuICogd2VyZSBzY29wZWQsIHBhcnNlcyB0byBubyBzY29wZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUhvdGJhckl0ZW1LaW5kSWQgPSA8RGF0YT4oXG4gIGtpbmRJZDogSG90YmFySXRlbUtpbmRJZDxEYXRhPixcbik6IHsgcmVhZG9ubHkga2luZDogSG90YmFySXRlbUtpbmQ8RGF0YT47IHJlYWRvbmx5IHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSB9ID0+IHtcbiAgY29uc3Qgc2VnbWVudHMgPSBTdHJpbmcoa2luZElkKS5zcGxpdChcIjpcIik7XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSBhcyBIb3RiYXJJdGVtS2luZDxEYXRhPixcbiAgICBzY29wZUlkczogc2VnbWVudHMuc2xpY2UoMCwgLTEpLFxuICB9O1xufTtcblxuLyoqXG4gKiBDdXJyaWVkIGNyZWF0b3IgZm9yIGEge0BsaW5rIEhvdGJhckl0ZW1LaW5kfS4gVGhlIGZpcnN0IGNhbGwgYmluZHMgdGhlIHBlcnNpc3RlZCBkYXRhXG4gKiB0eXBlOyB0aGUgc2Vjb25kIHRoZSBnbG9iYWxseSB1bmlxdWUgc3BlY2lmaWVyIHN0cmluZy4gUmVnaXN0ZXIgdGhlIGtpbmQgd2l0aFxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCwgdGhlbiBhZGQgaXRlbXMgb2YgaXQgd2l0aFxuICogYGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEEga2luZCB3aG9zZSBpdGVtcyBjYXJyeSBhIFVSTDpcbiAqIGV4cG9ydCBjb25zdCBib29rbWFya0hvdGJhckl0ZW1LaW5kID0gZ2V0SG90YmFySXRlbUtpbmQ8eyB1cmw6IHN0cmluZyB9PigpKFwibXktZXh0ZW5zaW9uLWJvb2ttYXJrXCIpO1xuICpcbiAqIC8vIEEga2luZCB3aG9zZSBpdGVtcyBuZWVkIG5vdGhpbmcgYmV5b25kIHRoZWlyIGlkOlxuICogZXhwb3J0IGNvbnN0IGRhc2hib2FyZEhvdGJhckl0ZW1LaW5kID0gZ2V0SG90YmFySXRlbUtpbmQoKShcIm15LWV4dGVuc2lvbi1kYXNoYm9hcmRcIik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhvdGJhckl0ZW1LaW5kID1cbiAgPFBlcnNpc3RlZERhdGEgPSB2b2lkPigpID0+XG4gIDxTIGV4dGVuZHMgc3RyaW5nPihzcGVjaWZpZXI6IFMpID0+IHtcbiAgICBpZiAoc3BlY2lmaWVyLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHJpZWQgdG8gY3JlYXRlIGhvdGJhciBpdGVtIGtpbmQgXCIke3NwZWNpZmllcn1cIiwgYnV0IFwiOlwiIGlzIHJlc2VydmVkIGZvciBzY29waW5nIHRoZSBraW5kIHRvIGl0cyByZWdpc3RyYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFR5cGVkU3BlY2lmaWVyPHsgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YSB9PigpKHNwZWNpZmllcik7XG4gIH07XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0YWJsZTIsIGdldEluamVjdGFibGVCdW5jaCB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgeyBnZXRJbmplY3RhYmxlQ29tcG9uZW50MiwgdXNlRGkgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZS1yZWFjdFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwibW9ieC1yZWFjdFwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB0eXBlIEFkZFRvSG90YmFyLCBhZGRUb0hvdGJhckluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vYWRkLXRvLWhvdGJhclwiO1xuaW1wb3J0IHsgZWplY3RIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9lamVjdC1ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHsgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuLCBoYXNIb3RiYXJJdGVtUmVhY3RpdmVJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2hhcy1ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHsgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50UHJvcHMsIGhvdGJhckl0ZW1Db21wb25lbnRJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSG90YmFySXRlbUZyYW1lIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0tZnJhbWVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0taWRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQsIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGEgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgeyBob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0tcGVyc2lzdGVkLWRhdGFcIjtcbmltcG9ydCB7IGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2luc2VydC1ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJc0luSG90YmFyLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZSxcbiAgaXNJbkhvdGJhckluamVjdGlvblRva2VuLFxuICBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbixcbn0gZnJvbSBcIi4vaXMtaW4taG90YmFyXCI7XG5pbXBvcnQgeyB0eXBlIFJlbW92ZUZyb21Ib3RiYXIsIHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL3JlbW92ZS1mcm9tLWhvdGJhclwiO1xuXG4vKipcbiAqIFdoYXQgYSBraW5kJ3MgY29tcG9uZW50IHJlY2VpdmVzOiB3aGljaCBpdGVtIGl0IHJlbmRlcnMsIGFuZCB0aGUgZGF0YSB0aGF0IHdhc1xuICogcGVyc2lzdGVkIHdoZW4gdGhlIGl0ZW0gd2FzIGFkZGVkLiBUeXBlZCBieSB0aGUga2luZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtUHJvcHM8SyBleHRlbmRzIEhvdGJhckl0ZW1LaW5kPGFueT4+IHtcbiAgcmVhZG9ubHkgaWQ6IEhvdGJhckl0ZW1JZDtcbiAgcmVhZG9ubHkgcGVyc2lzdGVkRGF0YTogSG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbUtpbmRCdW5jaFBhcmFtczxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4ge1xuICAvKiogVGhlIGtpbmQgYmVpbmcgcmVnaXN0ZXJlZCwgZnJvbSBgZ2V0SG90YmFySXRlbUtpbmRgLiAqL1xuICByZWFkb25seSBraW5kOiBLO1xuICAvKipcbiAgICogUmVuZGVycyBhbiBpdGVtIG9mIHRoZSBraW5kLCBpbnNpZGUgdGhlIHNsb3QncyBmcmFtZS4gUmVjZWl2ZXMgdGhlIGl0ZW0ncyBpZCBhbmQgaXRzXG4gICAqIHBlcnNpc3RlZCBkYXRhLCBhbmQgZGVjaWRlcyBldmVyeXRoaW5nIGVsc2U6IHdoYXQgdGhlIGl0ZW0gbG9va3MgbGlrZSwgYW5kIHdoYXRcbiAgICogY2xpY2tpbmcgaXQgZG9lcy4gTXVzdCBiZSBkZWZpbmVkIGF0IG1vZHVsZSBzY29wZS5cbiAgICovXG4gIHJlYWRvbmx5IENvbXBvbmVudDogUmVhY3QuQ29tcG9uZW50VHlwZTxIb3RiYXJJdGVtUHJvcHM8Sz4+O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEga2luZCBvZiBob3RiYXIgaXRlbS4gT25lIGNhbGwgZGVjbGFyZXMgaG93IGl0ZW1zIG9mIHRoZSBraW5kIHJlbmRlciwgd2lyZXNcbiAqIHRoZWlyIHBlcnNpc3RlZCBkYXRhLCBhbmQgZ2l2ZXMgdGhlIGtpbmQgaXRzIHR5cGVkIGFkZGVyLCBgYWRkVG9Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAsXG4gKiBhbG9uZyB3aXRoIGl0cyBvd24gbWVtYmVyc2hpcCBxdWVyaWVzIGFuZCByZW1vdmVyLCBgaXNJbkhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCxcbiAqIGBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgYW5kIGByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLlxuICpcbiAqIFRoZSBsYXN0IGAuZm9yKClgIGlzIHRoZSBzY29wZSBvZiB0aGUgcmVnaXN0cmF0aW9uOiBldmVyeSB0b2tlbiBoZXJlIGlzIHJlZ2lzdGVyZWQgdW5kZXJcbiAqIHRoZSBzY29wZXMgb2Ygd2hvZXZlciByZWdpc3RlcnMgdGhlIGJ1bmNoLCBzbyB0d28gZXh0ZW5zaW9ucyBkZWNsYXJpbmcgYSBraW5kIHdpdGggdGhlIHNhbWVcbiAqIHNwZWNpZmllciBuZXZlciBtZWV0LiBJdGVtcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBraW5kLCBpdHMgc2NvcGVzLCBhbmQgdGhlbiB0aGVpciBvd25cbiAqIGlkLCBuZXZlciBieSB0aGUgaWQgYWxvbmUuXG4gKlxuICogVGhlIGhvdGJhciBmcmFtZXMgZWFjaCBpdGVtLCBwZXJzaXN0cyBpdHMgYHsgaWQsIGtpbmQgfWAgYW5kIGRhdGEsIHBhZ2VzIGFuZCBkcmFncyBpdCxcbiAqIGFuZCBnaXZlcyBpdHMgcmlnaHQtY2xpY2sgbWVudSBhIHdheSB0byByZW1vdmUgaXQuIFRoZSBjb21wb25lbnQgb3ducyB0aGUgcmVzdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBleHBvcnQgY29uc3QgYm9va21hcmtIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kPHsgdXJsOiBzdHJpbmcgfT4oKShcIm15LWV4dGVuc2lvbi1ib29rbWFya1wiKTtcbiAqXG4gKiBjb25zdCBCb29rbWFyayA9ICh7IHBlcnNpc3RlZERhdGEgfTogSG90YmFySXRlbVByb3BzPHR5cGVvZiBib29rbWFya0hvdGJhckl0ZW1LaW5kPikgPT4gKFxuICogICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IG9wZW4ocGVyc2lzdGVkRGF0YS51cmwpfT57bmV3IFVSTChwZXJzaXN0ZWREYXRhLnVybCkuaG9zdH08L0J1dHRvbj5cbiAqICk7XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2goe1xuICogICBraW5kOiBib29rbWFya0hvdGJhckl0ZW1LaW5kLFxuICogICBDb21wb25lbnQ6IEJvb2ttYXJrLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoID0gPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+Pih7XG4gIGtpbmQsXG4gIENvbXBvbmVudCxcbn06IEhvdGJhckl0ZW1LaW5kQnVuY2hQYXJhbXM8Sz4pID0+IHtcbiAgLy8gQnVpbHQgb25jZSBwZXIga2luZCBzbyB0aGUgY29tcG9uZW50IHJlZmVyZW5jZSBpcyBzdGFibGUgYWNyb3NzIGluamVjdGlvbnM7IGEgZnJlc2hcbiAgLy8gcmVmZXJlbmNlIG9uIGVhY2ggaW5qZWN0aW9uIHdvdWxkIHJlbW91bnQgdGhlIGl0ZW0gYW5kIGxvc2UgaXRzIHN0YXRlLlxuICBjb25zdCBIb3RiYXJJdGVtT2ZLaW5kID0gb2JzZXJ2ZXIoKHsgaXRlbSB9OiBIb3RiYXJJdGVtQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICBjb25zdCBkaSA9IHVzZURpKCk7XG4gICAgLy8gUmVzb2x2ZWQgc3RyYWlnaHQgZnJvbSB0aGUgY29udGFpbmVyOiB0aGUgc3RvcmUgaXMgYSBzaW5nbGV0b24gcGVyIGtpbmQsIGFuZCBhXG4gICAgLy8gc3VzcGVuZGluZyBob29rIGhhcyBubyBwbGFjZSBhcm91bmQgYW4gaXRlbSB0aGF0IGlzIGFscmVhZHkgb24gc2NyZWVuLiBUaGUgaXRlbSBjYXJyaWVzXG4gICAgLy8gdGhlIGtpbmQncyBpZCwgd2hpY2ggaXMgd2hhdCB0aGUgc3RvcmUgaXMga2V5ZWQgYnkuXG4gICAgY29uc3QgcGVyc2lzdGVkRGF0YSA9IHVzZU1lbW8oKCkgPT4gZGkuaW5qZWN0KGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sIGl0ZW0ua2luZCksIFtkaSwgaXRlbS5raW5kXSk7XG4gICAgY29uc3QgZW50cnkgPSBwZXJzaXN0ZWREYXRhLmdldChpdGVtLmlkKS5nZXQoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8SG90YmFySXRlbUZyYW1lIGl0ZW09e2l0ZW19PlxuICAgICAgICB7ZW50cnkgPyA8Q29tcG9uZW50IGlkPXtpdGVtLmlkfSBwZXJzaXN0ZWREYXRhPXtlbnRyeS5wZXJzaXN0ZWREYXRhIGFzIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+fSAvPiA6IG51bGx9XG4gICAgICA8L0hvdGJhckl0ZW1GcmFtZT5cbiAgICApO1xuICB9KTtcblxuICAvLyBUaGUgdG9rZW5zIGFyZSBrZXllZCBieSB0aGUgc2NvcGVzIG9mIHdob2V2ZXIgcmVnaXN0ZXJzIHRoaXMgYnVuY2ggKHRoZSBgaW5qZWN0aW9uVG9rZW5gXG4gIC8vIGZ1bmN0aW9ucyksIGFuZCB0aGUgaW5zdGFuY2VzIGNvbXB1dGUgdGhlIGhvdGJhcidzIGlkIG9mIHRoZSBraW5kIGZyb20gdGhlaXIgb3duXG4gIC8vIGBkaS5zY29wZUlkc2AsIHNvIHRoZSB0d28gYWx3YXlzIGFncmVlLlxuICByZXR1cm4gZ2V0SW5qZWN0YWJsZUJ1bmNoKHtcbiAgICBjb21wb25lbnQ6IGdldEluamVjdGFibGVDb21wb25lbnQyKHtcbiAgICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7a2luZH1gLFxuICAgICAgQ29tcG9uZW50OiBIb3RiYXJJdGVtT2ZLaW5kLFxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGhvdGJhckl0ZW1Db21wb25lbnRJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKSxcbiAgICB9KSxcblxuICAgIGFkZFRvSG90YmFyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGFkZC10by1ob3RiYXItJHtraW5kfWAsXG4gICAgICBjb25zdW1wdGlvbnM6IFtcbiAgICAgICAgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbixcbiAgICAgICAgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuLFxuICAgICAgICBoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4sXG4gICAgICBdLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpbmRJZCA9IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgZGkuc2NvcGVJZHMpO1xuICAgICAgICBjb25zdCBwZXJzaXN0ZWREYXRhID0gZGkuaW5qZWN0KGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4pKGtpbmRJZCk7XG4gICAgICAgIGNvbnN0IGluc2VydEhvdGJhckl0ZW0gPSBkaS5pbmplY3QoaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuKSgpO1xuICAgICAgICBjb25zdCBoYXNIb3RiYXJJdGVtID0gZGkuaW5qZWN0KGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcblxuICAgICAgICBjb25zdCBhZGRUb0hvdGJhcjogQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+ID0gYXN5bmMgKHsgaWQsIHBlcnNpc3RlZERhdGE6IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIC8vIENoZWNrZWQgYmVmb3JlIHBlcnNpc3RpbmcsIHNvIGEgcmVqZWN0ZWQgYWRkIGxlYXZlcyB0aGUgaXRlbSdzIGRhdGEgYXMgaXQgd2FzLlxuICAgICAgICAgIGlmIChhd2FpdCBoYXNIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmllZCB0byBhZGQgaG90YmFyIGl0ZW0gXCIke2lkfVwiIG9mIGtpbmQgXCIke2tpbmRJZH1cIiwgYnV0IGl0IGlzIGFscmVhZHkgaW4gdGhlIGhvdGJhci5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBwZXJzaXN0ZWREYXRhLnNldChpZCwgZGF0YSk7XG4gICAgICAgICAgYXdhaXQgaW5zZXJ0SG90YmFySXRlbSh7IGlkLCBraW5kOiBraW5kSWQgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuICgpID0+IGFkZFRvSG90YmFyO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICAvLyBUaGUgaG90YmFyIGFuc3dlcnMgZm9yIGV2ZXJ5IGtpbmQgYXQgb25jZSwgZ2l2ZW4gdGhlIHdob2xlIHsgaWQsIGtpbmQgfTsgdGhlc2UgYmluZCB0aGVcbiAgICAvLyBraW5kLCBzbyBhIGNvbnN1bWVyIGFkZHJlc3NlcyBpdGVtcyBieSBraW5kIGZpcnN0IGFuZCBpZCBzZWNvbmQsIG5ldmVyIGJ5IGlkIGFsb25lLlxuICAgIGlzSW5Ib3RiYXI6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgaXMtaW4taG90YmFyLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuXSxcblxuICAgICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgICBjb25zdCBraW5kSWQgPSBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIGRpLnNjb3BlSWRzKTtcbiAgICAgICAgY29uc3QgaGFzSG90YmFySXRlbSA9IGRpLmluamVjdChoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4pKCk7XG4gICAgICAgIGNvbnN0IGlzSW5Ib3RiYXI6IElzSW5Ib3RiYXIgPSAoaWQpID0+IGhhc0hvdGJhckl0ZW0oeyBpZCwga2luZDoga2luZElkIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiBpc0luSG90YmFyO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKSxcbiAgICB9KSxcblxuICAgIGlzSW5Ib3RiYXJSZWFjdGl2ZTogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBpcy1pbi1ob3RiYXItcmVhY3RpdmUtJHtraW5kfWAsXG4gICAgICBjb25zdW1wdGlvbnM6IFtoYXNIb3RiYXJJdGVtUmVhY3RpdmVJbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGhhc0hvdGJhckl0ZW1SZWFjdGl2ZSA9IGRpLmluamVjdChoYXNIb3RiYXJJdGVtUmVhY3RpdmVJbmplY3Rpb25Ub2tlbik7XG4gICAgICAgIGNvbnN0IGlzSW5Ib3RiYXJSZWFjdGl2ZTogSXNJbkhvdGJhclJlYWN0aXZlID0gKGlkKSA9PiBoYXNIb3RiYXJJdGVtUmVhY3RpdmUoeyBpZCwga2luZDoga2luZElkIH0pO1xuXG4gICAgICAgIHJldHVybiBpc0luSG90YmFyUmVhY3RpdmU7XG4gICAgICB9LFxuXG4gICAgICBpbmplY3Rpb25Ub2tlbjogKHsgc2NvcGVJZHMgfSkgPT4gaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICByZW1vdmVGcm9tSG90YmFyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYHJlbW92ZS1mcm9tLWhvdGJhci0ke2tpbmR9YCxcbiAgICAgIGNvbnN1bXB0aW9uczogW2VqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuXSxcblxuICAgICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgICBjb25zdCBraW5kSWQgPSBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIGRpLnNjb3BlSWRzKTtcbiAgICAgICAgY29uc3QgZWplY3RIb3RiYXJJdGVtID0gZGkuaW5qZWN0KGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuKSgpO1xuICAgICAgICBjb25zdCByZW1vdmVGcm9tSG90YmFyOiBSZW1vdmVGcm9tSG90YmFyID0gKGlkKSA9PiBlamVjdEhvdGJhckl0ZW0oeyBpZCwga2luZDoga2luZElkIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiByZW1vdmVGcm9tSG90YmFyO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKSxcbiAgICB9KSxcbiAgfSk7XG59O1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSwgdHlwZSBTcGVjaWZpY0luamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1LaW5kLCBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YSB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWtpbmRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgdHlwZSB7IGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuXG4vKipcbiAqIEFkZHMgYW4gaXRlbSBvZiBvbmUga2luZCB0byB0aGUgaG90YmFyOiBwZXJzaXN0cyBpdHMgZGF0YSB1bmRlciBpdHMgaWQsIHRoZW4gcHV0cyBpdFxuICogaW50byB0aGUgZmlyc3QgZnJlZSBzbG90IG9mIHRoZSBjdXJyZW50IHBhZ2UuIFRlbGxzIHRoZSB1c2VyIHdoZW4gdGhlcmUgaXMgbm8gZnJlZSBzbG90LlxuICpcbiAqIEFuIGl0ZW0gaXMgaWRlbnRpZmllZCBieSBpdHMga2luZCBhbmQgdGhlbiBpdHMgaWQsIHNvIHRoZSBpZCBuZWVkcyB0byBiZSB1bmlxdWUgb25seSBhbW9uZ1xuICogaXRlbXMgb2YgdGhlIGtpbmQuIFRocm93cyB3aGVuIGFuIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgaXMgYWxyZWFkeSBvbiB0aGUgY3VycmVudFxuICogcGFnZSwgbGVhdmluZyB0aGUgaG90YmFyIGFuZCB0aGUgaXRlbSdzIHBlcnNpc3RlZCBkYXRhIGFzIHRoZXkgd2VyZS4gQSB0b2dnbGUgYXNrc1xuICoge0BsaW5rIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbn0gZmlyc3QuXG4gKi9cbmV4cG9ydCB0eXBlIEFkZFRvSG90YmFyPFBlcnNpc3RlZERhdGE+ID0gKGl0ZW06IHtcbiAgcmVhZG9ubHkgaWQ6IEhvdGJhckl0ZW1JZDtcbiAgcmVhZG9ubHkgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YTtcbn0pID0+IFByb21pc2U8dm9pZD47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgYWRkZXIgcGVyIGtpbmQgcGVyIHNjb3BlLCB0eXBlZCBieSBpdHMgcGVyc2lzdGVkIGRhdGEuICovXG5leHBvcnQgdHlwZSBBZGRUb0hvdGJhclRva2VuRm9yPFBlcnNpc3RlZERhdGE+ID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IHVuZGVmaW5lZDtcbiAgY2FyZGluYWxpdHk6IFwib25lXCI7XG59PjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZClgIHlpZWxkczogdGhlIGtpbmQncyBhZGRlcnMsIG9uZSBwZXIgc2NvcGUsIHJlYWNoZWQgd2l0aCBgLmZvcihzY29wZUlkcylgLiAqL1xuZXhwb3J0IHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQ8UGVyc2lzdGVkRGF0YT4gPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPFBlcnNpc3RlZERhdGE+O1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gQWRkVG9Ib3RiYXI8UGVyc2lzdGVkRGF0YT4+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gQWRkVG9Ib3RiYXJUb2tlbkZvcjxQZXJzaXN0ZWREYXRhPjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuLyoqXG4gKiBUaGUgYC5mb3IoKWAgZmFjdG9yaWVzLCBhbm5vdGF0ZWQgc28gYSBraW5kJ3Mgb3duIHBlcnNpc3RlZCBkYXRhIHR5cGUgc3Vydml2ZXMgYm90aCBsZXZlbHMuXG4gKiBJbmZlcmVuY2UgZnJvbSB0aGUgdmFsdWUgYWxvbmUgY2Fubm90IHJlY29uc3RydWN0IGEgcmV0dXJuIHR5cGUgdGhhdCBtZW50aW9ucyB0aGVcbiAqIHNwZWNpZmllcidzIG93biB0eXBlIHBhcmFtZXRlci5cbiAqL1xuY29uc3QgYWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQgPSA8SyBleHRlbmRzIEhvdGJhckl0ZW1LaW5kPGFueT4+KFxuICBraW5kOiBLLFxuKTogQWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQ8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+ID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+O1xuICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBBZGRUb0hvdGJhcjxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj4+O1xuICB9Pih7XG4gICAgaWQ6IGBhZGQtdG8taG90YmFyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBBZGRUb0hvdGJhclRva2VuRm9yPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9PlxuICAgICAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+IH0+KHtcbiAgICAgICAgaWQ6IGBhZGQtdG8taG90YmFyLSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICAgICAgfSkoKSxcbiAgKTtcblxuLyoqXG4gKiBBZGQgYW4gaXRlbSB0byB0aGUgaG90YmFyLCB0eXBlZCBieSBpdHMga2luZDogYC5mb3Ioa2luZClgIG5hcnJvd3MgdG8gdGhlIGtpbmQsIHdob3NlXG4gKiBgcGVyc2lzdGVkRGF0YWAgaXMgd2hhdCB0aGUga2luZCB3YXMgY3JlYXRlZCBmb3IsIGFuZCBgLmZvcihzY29wZUlkcylgIHRvIHRoZSByZWdpc3RyYXRpb25cbiAqIG9mIGl0LCB3aXRoIHRoZSBgZGkuc2NvcGVJZHNgIG9mIHRoZSBpbmplY3RhYmxlIGFza2luZy4gUmVnaXN0ZXJlZCBieVxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCwgc28gZXZlcnkgcmVnaXN0ZXJlZCBraW5kIGhhcyBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBhZGRCb29rbWFya1RvSG90YmFyID0gZGkuaW5qZWN0KGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihkaS5zY29wZUlkcykpKCk7XG4gKlxuICogYXdhaXQgYWRkQm9va21hcmtUb0hvdGJhcih7IGlkOiBgYm9va21hcmsoJHt1cmx9KWAsIHBlcnNpc3RlZERhdGE6IHsgdXJsIH0gfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBBZGRUb0hvdGJhcjxhbnk+O1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gQWRkVG9Ib3RiYXI8YW55Pj47XG59Pih7XG4gIGlkOiBcImFkZC10by1ob3RiYXJcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KShhZGRUb0hvdGJhclRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKlxuICogVGFrZXMgdGhlIGl0ZW0sIGFzIGB7IGlkLCBraW5kIH1gLCBvdXQgb2YgdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UuIFRocm93cyB3aGVuIG5vIHN1Y2ggaXRlbVxuICogaXMgdGhlcmUuXG4gKi9cbmV4cG9ydCB0eXBlIEVqZWN0SG90YmFySXRlbSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBvd24gcmVtb3ZhbCwgdGhlIGNvdW50ZXJwYXJ0IG9mIGBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW5gOiBvbmVcbiAqIGltcGxlbWVudGF0aW9uIGZvciBldmVyeSBraW5kLCBnaXZlbiB0aGUgd2hvbGUgYHsgaWQsIGtpbmQgfWAuXG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIGJ1aWxkcyBgcmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAgb24gaXQsXG4gKiBzbyByZWFjaCBmb3IgdGhhdCBvbmUgaW5zdGVhZC5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgZWplY3RIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBFamVjdEhvdGJhckl0ZW0gfT4oe1xuICBpZDogXCJlamVjdC1ob3RiYXItaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW1cIjtcblxuLyoqIFdoZXRoZXIgdGhlIGl0ZW0sIGFzIGB7IGlkLCBraW5kIH1gLCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgYXMgb2Ygbm93LiAqL1xuZXhwb3J0IHR5cGUgSGFzSG90YmFySXRlbSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBvd24gbWVtYmVyc2hpcCBxdWVyeTogb25lIGltcGxlbWVudGF0aW9uIGZvciBldmVyeSBraW5kLCBhc2tlZCB3aXRoIHRoZSB3aG9sZVxuICogYHsgaWQsIGtpbmQgfWAuIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgYnVpbGRzIGBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpYFxuICogb24gaXQsIHNvIHJlYWNoIGZvciB0aGF0IG9uZSBpbnN0ZWFkLlxuICpcbiAqIEltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBIYXNIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiaGFzLWhvdGJhci1pdGVtXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcblxuLyoqIFdoZXRoZXIgdGhlIGl0ZW0sIGFzIGB7IGlkLCBraW5kIH1gLCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgcmVhY3RpdmVseS4gKi9cbmV4cG9ydCB0eXBlIEhhc0hvdGJhckl0ZW1SZWFjdGl2ZSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIHJlYWN0aXZlIG1lbWJlcnNoaXAgcXVlcnksIGFza2VkIHdpdGggdGhlIHdob2xlIGB7IGlkLCBraW5kIH1gLlxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCBidWlsZHMgYGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuLmZvcihraW5kKWAgb24gaXQsXG4gKiBzbyByZWFjaCBmb3IgdGhhdCBvbmUgaW5zdGVhZC5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBIYXNIb3RiYXJJdGVtUmVhY3RpdmUgfT4oe1xuICBpZDogXCJoYXMtaG90YmFyLWl0ZW0tcmVhY3RpdmVcIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7XG4gIGdldEluamVjdGlvblRva2VuMixcbiAgdHlwZSBNYW55RmFjdG9yeSxcbiAgdHlwZSBNYXliZVJlc3VsdEZhY3RvcnksXG4gIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIsXG59IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogV2hhdCB0aGUgaG90YmFyIGhhbmRzIGEga2luZCdzIGNvbXBvbmVudDogdGhlIGl0ZW0sIGFzIGB7IGlkLCBraW5kIH1gLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzID0geyBpdGVtOiBIb3RiYXJJdGVtIH07XG5cbi8qKlxuICogUmVuZGVycyBvbmUgaXRlbSBvZiBhIGtpbmQgaW5zaWRlIGl0cyBob3RiYXIgc2xvdC4gVGhlIGhvdGJhciBoYW5kcyBpdCB0aGUgaXRlbSBvbmx5O1xuICogdGhlIGNvbXBvbmVudCByZXNvbHZlcyB3aGF0ZXZlciBlbHNlIGl0IG5lZWRzIGZyb20gdGhlIGl0ZW0ncyBpZCBhbmQga2luZC5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudCA9IFJlYWN0LkNvbXBvbmVudFR5cGU8SG90YmFySXRlbUNvbXBvbmVudFByb3BzPjtcblxuLyoqIEhvdyB0aGUgY29tcG9uZW50IGlzIHJlZ2lzdGVyZWQ6IGEgdjIgdG9rZW4gbW9kZWxzIGEgZmFjdG9yeSwgc28gYSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBvbmUuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeSA9ICgpID0+IEhvdGJhckl0ZW1Db21wb25lbnQ7XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogYXQgbW9zdCBvbmUgY29tcG9uZW50IHBlciBraW5kIHBlciBzY29wZS4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gIG1heWJlRmFjdG9yeTogTWF5YmVSZXN1bHRGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5PjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IHVuZGVmaW5lZDtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIGNvbXBvbmVudHMsIG9uZSBwZXIgc2NvcGUsIHJlYWNoZWQgd2l0aCBgLmZvcihzY29wZUlkcylgLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yS2luZCA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbmNvbnN0IGhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQgPSAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeTtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk+O1xuICB9Pih7XG4gICAgaWQ6IGBob3RiYXItaXRlbS1jb21wb25lbnQtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoXG4gICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvciA9PlxuICAgICAgZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgICAgICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gICAgICAgIG1heWJlRmFjdG9yeTogTWF5YmVSZXN1bHRGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5PjtcbiAgICAgIH0+KHtcbiAgICAgICAgaWQ6IGBob3RiYXItaXRlbS1jb21wb25lbnQtJHtnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKX1gLFxuICAgICAgICBzcGVjaWFsaXR5OiBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKSxcbiAgICAgICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1vbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogSG93IHRoZSBob3RiYXIgcmVuZGVycyBhbiBpdGVtOiB0aGUgY29tcG9uZW50IHJlZ2lzdGVyZWQgZm9yIHRoZSBpdGVtJ3Mga2luZCwgdmlhXG4gKiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC4gQSBraW5kIHdpdGggbm8gY29tcG9uZW50IGlzIHVua25vd24gdG8gdGhlIGhvdGJhciwgYW5kIGl0cyBpdGVtc1xuICogcmVuZGVyIGFzIHVuYXZhaWxhYmxlLlxuICpcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgcmVnaXN0ZXJzIHRoaXMgZm9yIGEga2luZDsgcHJlZmVyIGl0IG92ZXIgYmluZGluZ1xuICogdG8gdGhlIHRva2VuIGJ5IGhhbmQsIHNpbmNlIGl0IGFsc28gd2lyZXMgdGhlIHBlcnNpc3RlZCBkYXRhIGFuZCB0aGUgYWRkZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5Pjtcbn0+KHtcbiAgaWQ6IFwiaG90YmFyLWl0ZW0tY29tcG9uZW50XCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoaG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW5Db21wb25lbnQyIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGUtcmVhY3RcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtRnJhbWVQcm9wcyB7XG4gIHJlYWRvbmx5IGl0ZW06IEhvdGJhckl0ZW07XG4gIHJlYWRvbmx5IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFdoYXQgZXZlcnkgaG90YmFyIGl0ZW0gc2l0cyBpbjogdGhlIHNsb3QncyBjaHJvbWUsIHBsdXMgdGhlIGl0ZW0ncyByaWdodC1jbGljayBtZW51LFxuICogd2hpY2ggaXMgd2hlcmUgdGhlIGhvdGJhciBvZmZlcnMgdG8gcmVtb3ZlIHRoZSBpdGVtLiBXaGF0ZXZlciBpcyByZW5kZXJlZCBpbnNpZGUgZGVjaWRlc1xuICogd2hhdCBjbGlja2luZyB0aGUgaXRlbSBkb2VzLlxuICpcbiAqIEltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIuIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgd3JhcHMgYSBraW5kJ3MgY29tcG9uZW50XG4gKiBpbiBpdCwgc28gYSBraW5kIG5lZWRzIHRvIHJlbmRlciBvbmx5IGl0cyBvd24gY29udGVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvdGJhckl0ZW1GcmFtZSA9IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MjxSZWFjdC5Db21wb25lbnRUeXBlPEhvdGJhckl0ZW1GcmFtZVByb3BzPj4oe1xuICBpZDogXCJob3RiYXItaXRlbS1mcmFtZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1LaW5kSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5cbi8qKlxuICogVGhlIHBlcnNpc3RlZCBkYXRhIG9mIG9uZSBpdGVtLCB3cmFwcGVkIHNvIHRoYXQgXCJubyBkYXRhIHBlcnNpc3RlZFwiIGFuZCBcInBlcnNpc3RlZFxuICogYHVuZGVmaW5lZGBcIiAoYSBraW5kIHdpdGhvdXQgZGF0YSkgc3RheSBkaXN0aW5ndWlzaGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbVBlcnNpc3RlZERhdGFFbnRyeTxQZXJzaXN0ZWREYXRhID0gdW5rbm93bj4ge1xuICByZWFkb25seSBwZXJzaXN0ZWREYXRhOiBQZXJzaXN0ZWREYXRhO1xufVxuXG4vKipcbiAqIFRoZSBwZXJzaXN0ZWQgZGF0YSBvZiBldmVyeSBpdGVtIG9mIG9uZSBraW5kLCBrZXllZCBieSBpdGVtIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmU8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+IHtcbiAgLyoqIFRoZSBpdGVtJ3MgZW50cnksIGB1bmRlZmluZWRgIHVudGlsIHRoZSBzdG9yZSBoYXMgbG9hZGVkIGFuZCB3aGlsZSB0aGUgaXRlbSBoYXMgbm9uZS4gKi9cbiAgcmVhZG9ubHkgZ2V0OiAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gSUNvbXB1dGVkVmFsdWU8SG90YmFySXRlbVBlcnNpc3RlZERhdGFFbnRyeTxQZXJzaXN0ZWREYXRhPiB8IHVuZGVmaW5lZD47XG4gIC8qKiBQZXJzaXN0cyB0aGUgaXRlbSdzIGRhdGEsIHJlc29sdmluZyBvbmNlIHRoZSBzdG9yZSBoYXMgbG9hZGVkIGFuZCB0YWtlbiBpdC4gKi9cbiAgcmVhZG9ubHkgc2V0OiAoaWQ6IEhvdGJhckl0ZW1JZCwgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIFdoYXQge0BsaW5rIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW59IHlpZWxkczogdGhlIHN0b3JlIG9mIG9uZSBraW5kLCBieSB0aGUga2luZCdzIGlkLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGFTdG9yZUZvciA9IChraW5kSWQ6IEhvdGJhckl0ZW1LaW5kSWQ8YW55PikgPT4gSG90YmFySXRlbVBlcnNpc3RlZERhdGFTdG9yZTtcblxuLyoqXG4gKiBXaGVyZSB0aGUgaG90YmFyIGtlZXBzIHRoZSBwZXJzaXN0ZWQgZGF0YSBvZiBpdGVtcywgb25lIHN0b3JlIHBlciBraW5kLiBUaGUgZGF0YSBpc1xuICogdHlwZWQgYnkgdGhlIGtpbmQsIHdoaWNoIGlzIHdoeSB0aGUgc3RvcmUgaXRzZWxmIGlzIHVudHlwZWQ6IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGBcbiAqIGJpbmRzIHRoZSB0eXBlIG9uIGJvdGggdGhlIHdheSBpbiAodGhlIGFkZGVyKSBhbmQgdGhlIHdheSBvdXQgKHRoZSBjb21wb25lbnQpLCBzbyBhIGtpbmRcbiAqIG5ldmVyIHRvdWNoZXMgdGhpcyBkaXJlY3RseS5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3I7XG59Pih7XG4gIGlkOiBcImhvdGJhci1pdGVtLXBlcnNpc3RlZC1kYXRhXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW1cIjtcblxuLyoqXG4gKiBQdXRzIGFuIGl0ZW0gaW50byB0aGUgZmlyc3QgZnJlZSBzbG90IG9mIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLiBUZWxscyB0aGUgdXNlciB3aGVuXG4gKiB0aGVyZSBpcyBub25lLCBvciB3aGVuIHRoZSBpdGVtJ3Mga2luZCBpcyB1bmtub3duLCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICovXG5leHBvcnQgdHlwZSBJbnNlcnRIb3RiYXJJdGVtID0gKGl0ZW06IEhvdGJhckl0ZW0pID0+IFByb21pc2U8dm9pZD47XG5cbi8qKlxuICogVGhlIGhvdGJhcidzIG93biBpbnNlcnRpb246IGlkIGFuZCBraW5kIG9ubHksIG5vIHBlcnNpc3RlZCBkYXRhLiBUaGUgdHlwZWQgYWRkZXIgYSBraW5kXG4gKiBnZXRzIGZyb20gYGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpYCBwZXJzaXN0cyB0aGUgZGF0YSBmaXJzdCBhbmQgdGhlbiBjb21lc1xuICogaGVyZSwgc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IEluc2VydEhvdGJhckl0ZW0gfT4oe1xuICBpZDogXCJpbnNlcnQtaG90YmFyLWl0ZW1cIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiwgdHlwZSBNYW55RmFjdG9yeSwgdHlwZSBTcGVjaWZpY0luamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0taWRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtIG9mIHRoZSBraW5kIHdpdGggdGhlIGlkIGlzIG9uIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLCBhcyBvZiBub3cuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyID0gKGlkOiBIb3RiYXJJdGVtSWQpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgbWVtYmVyc2hpcCBxdWVyeSBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyVG9rZW5Gb3IgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IElzSW5Ib3RiYXI7XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgbWVtYmVyc2hpcCBxdWVyaWVzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIElzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IElzSW5Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBJc0luSG90YmFyPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IElzSW5Ib3RiYXJUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgaXNJbkhvdGJhclRva2VuRm9yS2luZCA9IChraW5kOiBIb3RiYXJJdGVtS2luZDxhbnk+KTogSXNJbkhvdGJhclRva2VuRm9yS2luZCA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gSXNJbkhvdGJhcj4gfT4oe1xuICAgIGlkOiBgaXMtaW4taG90YmFyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBJc0luSG90YmFyVG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IElzSW5Ib3RiYXIgfT4oe1xuICAgICAgICBpZDogYGlzLWluLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogV2hldGhlciBhbiBpdGVtIGlzIGluIHRoZSBob3RiYXIsIGFza2VkIG9uY2U6IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkcyB0aGUgcXVlcnlcbiAqIG9mIHRoYXQga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcywgd2hpY2ggdGFrZXMgdGhlIGlkLiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnlcbiAqIGl0cyBraW5kIGFuZCB0aGVuIGl0cyBpZCwgbmV2ZXIgYnkgdGhlIGlkIGFsb25lLCBzbyB0d28ga2luZHMgdXNpbmcgdGhlIHNhbWUgaWQgbmV2ZXIgYW5zd2VyXG4gKiBmb3IgZWFjaCBvdGhlcjsgdGhlIHNjb3BlcyBjb21lIGZyb20gdGhlIGBkaS5zY29wZUlkc2Agb2YgdGhlIGluamVjdGFibGUgYXNraW5nLiBGb3JcbiAqIGRlY2lkaW5nIGluIGEgaGFuZGxlciwgc2F5IHdoZXRoZXIgYSBjbGljayBzaG91bGQgYWRkIHRoZSBpdGVtIG9yIHJlbW92ZSBpdC5cbiAqXG4gKiBBIHByb21pc2UgcmF0aGVyIHRoYW4gYSBib29sZWFuIGJlY2F1c2UgdGhlIGhvdGJhciBsb2FkcyB3aGF0IGl0IHBlcnNpc3RlZCBsYXppbHk6IGFza2VkXG4gKiBiZWZvcmUgdGhhdCwgYSBib29sZWFuIGNvdWxkIG9ubHkgYmUgYSBndWVzcy4gRm9yIGZvbGxvd2luZyB0aGUgYW5zd2VyIGFzIGl0IGNoYW5nZXMsIHNlZVxuICoge0BsaW5rIGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VufS5cbiAqXG4gKiBSZWdpc3RlcmVkIGJ5IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgaXNCb29rbWFya0luSG90YmFyID0gZGkuaW5qZWN0KGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3IoYm9va21hcmtIb3RiYXJJdGVtS2luZCkuZm9yKGRpLnNjb3BlSWRzKSkoKTtcbiAqXG4gKiBpZiAoYXdhaXQgaXNCb29rbWFya0luSG90YmFyKGlkKSkge1xuICogICBhd2FpdCByZW1vdmVCb29rbWFya0Zyb21Ib3RiYXIoaWQpO1xuICogfSBlbHNlIHtcbiAqICAgYXdhaXQgYWRkQm9va21hcmtUb0hvdGJhcih7IGlkLCBwZXJzaXN0ZWREYXRhOiB7IHVybCB9IH0pO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gSXNJbkhvdGJhcj47XG59Pih7XG4gIGlkOiBcImlzLWluLWhvdGJhclwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGlzSW5Ib3RiYXJUb2tlbkZvcktpbmQpO1xuXG4vKiogV2hldGhlciB0aGUgaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgcmVhY3RpdmVseS4gKi9cbmV4cG9ydCB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZSA9IChpZDogSG90YmFySXRlbUlkKSA9PiBJQ29tcHV0ZWRWYWx1ZTxib29sZWFuPjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzOiBleGFjdGx5IG9uZSByZWFjdGl2ZSBtZW1iZXJzaGlwIHF1ZXJ5IHBlciBraW5kIHBlciBzY29wZS4gKi9cbmV4cG9ydCB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBJc0luSG90YmFyUmVhY3RpdmU7XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgcmVhY3RpdmUgbWVtYmVyc2hpcCBxdWVyaWVzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SXNJbkhvdGJhclJlYWN0aXZlPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG5jb25zdCBpc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPSAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBJc0luSG90YmFyUmVhY3RpdmU7IG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxJc0luSG90YmFyUmVhY3RpdmU+IH0+KHtcbiAgICBpZDogYGlzLWluLWhvdGJhci1yZWFjdGl2ZS0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogSXNJbkhvdGJhclJlYWN0aXZlVG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZSB9Pih7XG4gICAgICAgIGlkOiBgaXMtaW4taG90YmFyLXJlYWN0aXZlLSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICAgICAgfSkoKSxcbiAgKTtcblxuLyoqXG4gKiBXaGV0aGVyIGFuIGl0ZW0gaXMgaW4gdGhlIGhvdGJhciwgYXMgYSBNb2JYIGNvbXB1dGVkOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlXG4gKiBxdWVyeSBvZiB0aGF0IGtpbmQgYXMgcmVnaXN0ZXJlZCB1bmRlciB0aG9zZSBzY29wZXMsIHdoaWNoIHRha2VzIHRoZSBpZC4gUmVhZCBpdCB1bmRlciBhblxuICogb2JzZXJ2ZXIgKG9yIGEgcmVhY3Rpb24pIHRvIGZvbGxvdyB0aGUgdXNlciBwaW5uaW5nIGFuZCB1bnBpbm5pbmcuIGBmYWxzZWAgdW50aWwgdGhlIGhvdGJhclxuICogaGFzIGxvYWRlZCB3aGF0IGl0IHBlcnNpc3RlZC4gRm9yIGEgb25lLW9mZiBhbnN3ZXIsIHNlZSB7QGxpbmsgaXNJbkhvdGJhckluamVjdGlvblRva2VufS5cbiAqXG4gKiBSZWdpc3RlcmVkIGJ5IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLiBBXG4gKiBjb21wb25lbnQgaGFzIG5vIHNjb3BlIG9mIGl0cyBvd24sIHNvIGl0IHRha2VzIHRoZSBxdWVyeSBmcm9tIGFuIGluamVjdGFibGUgdGhhdCByZWFjaGVkIGl0XG4gKiB3aXRoIGl0cyBgZGkuc2NvcGVJZHNgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IFBpblN0YXRlID0gb2JzZXJ2ZXIoKHsgdXJsIH06IHsgdXJsOiBzdHJpbmcgfSkgPT4ge1xuICogICBjb25zdCBpc0luSG90YmFyID0gdXNlSW5qZWN0KGlzQm9va21hcmtJbkhvdGJhclJlYWN0aXZlSW5qZWN0YWJsZSkoaWRPZih1cmwpKS5nZXQoKTtcbiAqXG4gKiAgIHJldHVybiA8c3Bhbj57aXNJbkhvdGJhciA/IFwiUGlubmVkXCIgOiBcIk5vdCBwaW5uZWRcIn08L3NwYW4+O1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SXNJbkhvdGJhclJlYWN0aXZlPjtcbn0+KHtcbiAgaWQ6IFwiaXMtaW4taG90YmFyLXJlYWN0aXZlXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoaXNJbkhvdGJhclJlYWN0aXZlVG9rZW5Gb3JLaW5kKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHsgZ2V0SG90YmFySXRlbUtpbmRJZCwgdHlwZSBIb3RiYXJJdGVtS2luZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWtpbmRcIjtcbmltcG9ydCB0eXBlIHsgaXNJbkhvdGJhckluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vaXMtaW4taG90YmFyXCI7XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBmcm9tIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLiBUaHJvd3Mgd2hlbiBub1xuICogc3VjaCBpdGVtIGlzIHRoZXJlLlxuICovXG5leHBvcnQgdHlwZSBSZW1vdmVGcm9tSG90YmFyID0gKGlkOiBIb3RiYXJJdGVtSWQpID0+IFByb21pc2U8dm9pZD47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgcmVtb3ZlciBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgcmVtb3ZlcnMsIG9uZSBwZXIgc2NvcGUsIHJlYWNoZWQgd2l0aCBgLmZvcihzY29wZUlkcylgLiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gUmVtb3ZlRnJvbUhvdGJhcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IFJlbW92ZUZyb21Ib3RiYXI+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG5jb25zdCByZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3JLaW5kID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7IG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPiB9Pih7XG4gICAgaWQ6IGByZW1vdmUtZnJvbS1ob3RiYXItJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoXG4gICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvciA9PlxuICAgICAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gUmVtb3ZlRnJvbUhvdGJhciB9Pih7XG4gICAgICAgIGlkOiBgcmVtb3ZlLWZyb20taG90YmFyLSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxuICAgICAgfSkoKSxcbiAgKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBob3RiYXI6IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkcyB0aGUgcmVtb3ZlciBvZiB0aGF0IGtpbmRcbiAqIGFzIHJlZ2lzdGVyZWQgdW5kZXIgdGhvc2Ugc2NvcGVzLCB3aGljaCB0YWtlcyB0aGUgaWQuIEFuIGl0ZW0gaXMgaWRlbnRpZmllZCBieSBpdHMga2luZCBhbmRcbiAqIHRoZW4gaXRzIGlkLCBzbyByZW1vdmluZyBvbmUga2luZCdzIGl0ZW0gbGVhdmVzIGFub3RoZXIga2luZCdzIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhbG9uZS5cbiAqIFRoZSBwZXJzaXN0ZWQgZGF0YSBvZiB0aGUgaXRlbSBpcyBsZWZ0IGluIHBsYWNlLCBzbyBhZGRpbmcgdGhlIHNhbWUgaWQgYmFjayBmaW5kcyBpdCBhZ2Fpbi5cbiAqIFRoZSBzY29wZXMgY29tZSBmcm9tIHRoZSBgZGkuc2NvcGVJZHNgIG9mIHRoZSBpbmplY3RhYmxlIGFza2luZy5cbiAqXG4gKiBUaHJvd3Mgd2hlbiBubyBpdGVtIG9mIHRoZSBraW5kIHdpdGggdGhlIGlkIGlzIG9uIHRoZSBjdXJyZW50IHBhZ2U6IHJlbW92aW5nIGlzIHNvbWV0aGluZ1xuICogZG9uZSB0byBhbiBpdGVtIGtub3duIHRvIGJlIHRoZXJlLCBzbyBhIHRvZ2dsZSBhc2tzIHtAbGluayBpc0luSG90YmFySW5qZWN0aW9uVG9rZW59IGZpcnN0LlxuICpcbiAqIFJlZ2lzdGVyZWQgYnkgYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCwgc28gZXZlcnkgcmVnaXN0ZXJlZCBraW5kIGhhcyBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCByZW1vdmVCb29rbWFya0Zyb21Ib3RiYXIgPSBkaS5pbmplY3QocmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuLmZvcihib29rbWFya0hvdGJhckl0ZW1LaW5kKS5mb3IoZGkuc2NvcGVJZHMpKSgpO1xuICpcbiAqIGF3YWl0IHJlbW92ZUJvb2ttYXJrRnJvbUhvdGJhcihgbXktZXh0ZW5zaW9uLWJvb2ttYXJrKCR7dXJsfSlgKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gUmVtb3ZlRnJvbUhvdGJhcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IFJlbW92ZUZyb21Ib3RiYXI+O1xufT4oe1xuICBpZDogXCJyZW1vdmUtZnJvbS1ob3RiYXJcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KShyZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3JLaW5kKTtcbiIsICJpbXBvcnQgeyBnZXREcm9wRG93bk1lbnVJdGVtc0luamVjdGFibGVCdW5jaCwgZ2V0RHJvcERvd25NZW51S2luZCB9IGZyb20gXCJAazhzbGVucy9kcm9wLWRvd24tbWVudS1jb250cmFjdHNcIjtcbmltcG9ydCB0eXBlIHsgTWF5YmVDb21wdXRlZCB9IGZyb20gXCJAazhzbGVucy9jb21wb3NhYmxlLXJlc3BvbnNpYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5cbi8qKlxuICogVGhlIG1lbnUgb2YgYSBob3RiYXIgaXRlbSwgb3BlbmVkIGJ5IHJpZ2h0LWNsaWNraW5nIHRoZSBpdGVtLiBJdHMgaXRlbXMgZ2V0IHRoZSBob3RiYXIgaXRlbSB0aGV5XG4gKiB3ZXJlIG9wZW5lZCBvdmVyLCBzbyBhbiBpdGVtIG1lYW50IGZvciBvbmUga2luZCBvZiBob3RiYXIgaXRlbSBzYXlzIHNvIHdpdGggaXRzIG93biBgaXNWaXNpYmxlYFxuICogcmF0aGVyIHRoYW4gYmVpbmcgY29udHJpYnV0ZWQgYWdhaW5zdCBhIG1lbnUgb2YgaXRzIG93bi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBleHBvcnQgZGVmYXVsdCBnZXREcm9wRG93bk1lbnVJdGVtSW5qZWN0YWJsZUJ1bmNoKHtcbiAqICAgaWQ6IFwibXktZXh0ZW5zaW9uLW9wZW4tY2x1c3Rlci1pbi1icm93c2VyXCIsXG4gKiAgIGtpbmQ6IGhvdGJhckl0ZW1NZW51S2luZCxcbiAqICAgb3JkZXJOdW1iZXI6IGhvdGJhckl0ZW1NZW51T3JkZXJOdW1iZXJzLnNlY3Rpb25FbmQgKyAxMDAsXG4gKiAgIGlzVmlzaWJsZTogKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gY2x1c3RlckhvdGJhckl0ZW1LaW5kLFxuICogICBDb21wb25lbnQ6IE9wZW5DbHVzdGVySW5Ccm93c2VyLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGhvdGJhckl0ZW1NZW51S2luZCA9IGdldERyb3BEb3duTWVudUtpbmQ8SG90YmFySXRlbT4oKShcImhvdGJhci1pdGVtLW1lbnVcIik7XG5cbi8qKlxuICogV2hlcmUgdGhlIGhvdGJhciBpdGVtIG1lbnUncyBvd24gaXRlbXMgc2l0LCBhcyB0aGUgYm91bmRhcmllcyBhIGNvbnRyaWJ1dG9yIHBsYWNlcyBpdHNlbGYgYWdhaW5zdFxuICogcmF0aGVyIHRoYW4gYWdhaW5zdCBhIGd1ZXNzZWQgbnVtYmVyLiBXaGF0IHRoZSB0aGluZyBiZWhpbmQgdGhlIGl0ZW0gY2FuIGJlIHRvbGQgdG8gZG8gY29tZXNcbiAqIGZpcnN0LCBjb250cmlidXRlZCBmb3IgdGhlIGl0ZW0ncyBvd24ga2luZDsgcmVtb3ZpbmcgdGhlIGl0ZW0gaXRzZWxmIGZyb20gdGhlIGhvdGJhciBjb21lcyBhZnRlclxuICogaXQuIEl0ZW1zIGNvbnRyaWJ1dGVkIHBhc3QgYWxsIG9mIHRoYXQgcGljayB0aGVpciBvcmRlciBudW1iZXJzIGZyb21cbiAqIHtAbGluayBob3RiYXJJdGVtTWVudU9yZGVyTnVtYmVycy5zZWN0aW9uRW5kfS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvdGJhckl0ZW1NZW51T3JkZXJOdW1iZXJzID0ge1xuICAvKiogV2hlcmUgdGhlIGl0ZW1zIGNvbnRyaWJ1dGVkIGZvciB0aGUgaG90YmFyIGl0ZW0ncyBvd24ga2luZCBiZWdpbi4gKi9cbiAgZm9yVGhlSXRlbXNPd25LaW5kOiAxMCxcbiAgLyoqIFJlbW92aW5nIHRoZSBpdGVtIHRoZSBtZW51IHdhcyBvcGVuZWQgb3ZlciBmcm9tIHRoZSBob3RiYXIuICovXG4gIHJlbW92ZUZyb21Ib3RiYXI6IDEwMCxcbiAgLyoqIFRoZSBmaXJzdCBvcmRlciBudW1iZXIgcGFzdCBldmVyeXRoaW5nIExlbnMgcHV0cyBpbiBhIGhvdGJhciBpdGVtJ3MgbWVudS4gKi9cbiAgc2VjdGlvbkVuZDogMjAwLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtTWVudUl0ZW1CdW5jaFBhcmFtczxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4ge1xuICAvKiogVW5pcXVlIGlkIGZvciB0aGUgcmVnaXN0ZXJlZCBpbmplY3RhYmxlOyBkb3VibGVzIGFzIHRoZSBpdGVtJ3MgaWQuICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUga2luZCBvZiBob3RiYXIgaXRlbSB0aGUgcm93IGFwcGxpZXMgdG87IGl0IGlzIHNob3duIG92ZXIgbm8gb3RoZXIuICovXG4gIHJlYWRvbmx5IGZvckl0ZW1zT2ZLaW5kOiBLO1xuICAvKiogTG93ZXIgY29tZXMgZmlyc3QgYW1vbmcgdGhlIG1lbnUncyBpdGVtczsgc2VlIHtAbGluayBob3RiYXJJdGVtTWVudU9yZGVyTnVtYmVyc30uICovXG4gIHJlYWRvbmx5IG9yZGVyTnVtYmVyOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSByb3cgaXMgc2hvd24gYXQgYWxsLCBvbiB0b3Agb2YgdGhlIGl0ZW0gYmVpbmcgb2YgdGhhdCBraW5kLiAqL1xuICByZWFkb25seSBpc1Zpc2libGU/OiAoaXRlbTogSG90YmFySXRlbSkgPT4gTWF5YmVDb21wdXRlZDxib29sZWFuPjtcbiAgLyoqIFJlbmRlcnMgdGhlIHJvdy4gUmVjZWl2ZXMgdGhlIGhvdGJhciBpdGVtIHRoZSBtZW51IHdhcyBvcGVuZWQgb3Zlci4gKi9cbiAgcmVhZG9ubHkgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPHsgcmVhZG9ubHkgZGF0YTogSG90YmFySXRlbSB9Pjtcbn1cblxuLyoqXG4gKiBDb250cmlidXRlIGEgcm93IHRvIHtAbGluayBob3RiYXJJdGVtTWVudUtpbmR9IGZvciBvbmUga2luZCBvZiBob3RiYXIgaXRlbSwgc28gdGhlIG5hcnJvd2luZyBpc1xuICogd3JpdHRlbiBvbmNlIHJhdGhlciB0aGFuIGluIHRoZSByb3cncyBvd24gdmlzaWJpbGl0eS5cbiAqXG4gKiBBIGtpbmQgaXMgaWRlbnRpZmllZCBieSBpdHMgc3BlY2lmaWVyICphbmQqIHRoZSBzY29wZXMgaXQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIsIGFuZCBhIHJvd1xuICogcmVnaXN0ZXJlZCBoZXJlIGlzIHNjb3BlZCB0aGUgc2FtZSB3YXkgXHUyMDE0IHNvIHR3byBleHRlbnNpb25zIGRlY2xhcmluZyBhIGtpbmQgd2l0aCB0aGUgc2FtZVxuICogc3BlY2lmaWVyIGdldCByb3dzIG9uIHRoZWlyIG93biBpdGVtcyBvbmx5LCBhbmQgbmV2ZXIgb24gZWFjaCBvdGhlcidzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGV4cG9ydCBkZWZhdWx0IGdldEhvdGJhckl0ZW1NZW51SXRlbUluamVjdGFibGVCdW5jaCh7XG4gKiAgIGlkOiBcIm15LWV4dGVuc2lvbi1vcGVuLWJvb2ttYXJrLWluLWJyb3dzZXJcIixcbiAqICAgZm9ySXRlbXNPZktpbmQ6IGJvb2ttYXJrSG90YmFySXRlbUtpbmQsXG4gKiAgIG9yZGVyTnVtYmVyOiBob3RiYXJJdGVtTWVudU9yZGVyTnVtYmVycy5mb3JUaGVJdGVtc093bktpbmQsXG4gKiAgIENvbXBvbmVudDogT3BlbkJvb2ttYXJrSW5Ccm93c2VyLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhvdGJhckl0ZW1NZW51SXRlbUluamVjdGFibGVCdW5jaCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oXG4gIHBhcmFtczogSG90YmFySXRlbU1lbnVJdGVtQnVuY2hQYXJhbXM8Sz4sXG4pID0+XG4gIGdldERyb3BEb3duTWVudUl0ZW1zSW5qZWN0YWJsZUJ1bmNoKHtcbiAgICBpZDogcGFyYW1zLmlkLFxuICAgIGtpbmQ6IGhvdGJhckl0ZW1NZW51S2luZCxcblxuICAgIC8vIFRoZSBraW5kJ3MgaWQgaXMgYnVpbHQgZnJvbSB0aGUgc2NvcGVzIHRoaXMgcm93IGlzIHJlZ2lzdGVyZWQgdW5kZXIsIHdoaWNoIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAgLy8gbmFycm93aW5nIHNheSBcImFuIGl0ZW0gb2YgbXkga2luZFwiIHJhdGhlciB0aGFuIFwiYW4gaXRlbSB3aG9zZSBzcGVjaWZpZXIgcmVhZHMgbGlrZSBtaW5lXCIuXG4gICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChwYXJhbXMuZm9ySXRlbXNPZktpbmQsIGRpLnNjb3BlSWRzKTtcblxuICAgICAgcmV0dXJuIChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmtpbmQgIT09IGtpbmRJZCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHBhcmFtcy5pZCxcbiAgICAgICAgICBvcmRlck51bWJlcjogcGFyYW1zLm9yZGVyTnVtYmVyLFxuICAgICAgICAgIGlzVmlzaWJsZTogcGFyYW1zLmlzVmlzaWJsZT8uKGl0ZW0pLFxuICAgICAgICAgIENvbXBvbmVudDogcGFyYW1zLkNvbXBvbmVudCxcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfSxcbiAg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QUFvQixPQUFPLGdCQUFnQixHQUFHLFFBQVE7QUFFckUsV0FBTyxDQUFDLFNBQVM7QUFuRnZCO0FBb0ZRLFVBQUksS0FBSyxTQUFTLFFBQVE7QUFDeEIsZUFBTyxDQUFDO0FBQUEsTUFDVjtBQUVBLGFBQU87QUFBQSxRQUNMLElBQUksT0FBTztBQUFBLFFBQ1gsYUFBYSxPQUFPO0FBQUEsUUFDcEIsWUFBVyxZQUFPLGNBQVAsZ0NBQW1CO0FBQUEsUUFDOUIsV0FBVyxPQUFPO0FBQUEsTUFDcEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlX3JlYWN0IiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIl0KfQo=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { MaybeComputed } from "@k8slens/composable-responsibilities";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
import type { HotbarItem } from "./hotbar-item";
|
|
4
|
+
import { type HotbarItemKind } from "./hotbar-item-kind";
|
|
5
|
+
/**
|
|
6
|
+
* The menu of a hotbar item, opened by right-clicking the item. Its items get the hotbar item they
|
|
7
|
+
* were opened over, so an item meant for one kind of hotbar item says so with its own `isVisible`
|
|
8
|
+
* rather than being contributed against a menu of its own.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* export default getDropDownMenuItemInjectableBunch({
|
|
13
|
+
* id: "my-extension-open-cluster-in-browser",
|
|
14
|
+
* kind: hotbarItemMenuKind,
|
|
15
|
+
* orderNumber: hotbarItemMenuOrderNumbers.sectionEnd + 100,
|
|
16
|
+
* isVisible: (item) => item.kind === clusterHotbarItemKind,
|
|
17
|
+
* Component: OpenClusterInBrowser,
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare const hotbarItemMenuKind: import("@k8slens/injectable").TypedSpecifier<"hotbar-item-menu", {
|
|
22
|
+
dropDownMenuData: HotbarItem;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Where the hotbar item menu's own items sit, as the boundaries a contributor places itself against
|
|
26
|
+
* rather than against a guessed number. What the thing behind the item can be told to do comes
|
|
27
|
+
* first, contributed for the item's own kind; removing the item itself from the hotbar comes after
|
|
28
|
+
* it. Items contributed past all of that pick their order numbers from
|
|
29
|
+
* {@link hotbarItemMenuOrderNumbers.sectionEnd}.
|
|
30
|
+
*/
|
|
31
|
+
export declare const hotbarItemMenuOrderNumbers: {
|
|
32
|
+
/** Where the items contributed for the hotbar item's own kind begin. */
|
|
33
|
+
readonly forTheItemsOwnKind: 10;
|
|
34
|
+
/** Removing the item the menu was opened over from the hotbar. */
|
|
35
|
+
readonly removeFromHotbar: 100;
|
|
36
|
+
/** The first order number past everything Lens puts in a hotbar item's menu. */
|
|
37
|
+
readonly sectionEnd: 200;
|
|
38
|
+
};
|
|
39
|
+
export interface HotbarItemMenuItemBunchParams<K extends HotbarItemKind<any>> {
|
|
40
|
+
/** Unique id for the registered injectable; doubles as the item's id. */
|
|
41
|
+
readonly id: string;
|
|
42
|
+
/** The kind of hotbar item the row applies to; it is shown over no other. */
|
|
43
|
+
readonly forItemsOfKind: K;
|
|
44
|
+
/** Lower comes first among the menu's items; see {@link hotbarItemMenuOrderNumbers}. */
|
|
45
|
+
readonly orderNumber: number;
|
|
46
|
+
/** Whether the row is shown at all, on top of the item being of that kind. */
|
|
47
|
+
readonly isVisible?: (item: HotbarItem) => MaybeComputed<boolean>;
|
|
48
|
+
/** Renders the row. Receives the hotbar item the menu was opened over. */
|
|
49
|
+
readonly Component: React.ComponentType<{
|
|
50
|
+
readonly data: HotbarItem;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Contribute a row to {@link hotbarItemMenuKind} for one kind of hotbar item, so the narrowing is
|
|
55
|
+
* written once rather than in the row's own visibility.
|
|
56
|
+
*
|
|
57
|
+
* A kind is identified by its specifier *and* the scopes it was registered under, and a row
|
|
58
|
+
* registered here is scoped the same way — so two extensions declaring a kind with the same
|
|
59
|
+
* specifier get rows on their own items only, and never on each other's.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* export default getHotbarItemMenuItemInjectableBunch({
|
|
64
|
+
* id: "my-extension-open-bookmark-in-browser",
|
|
65
|
+
* forItemsOfKind: bookmarkHotbarItemKind,
|
|
66
|
+
* orderNumber: hotbarItemMenuOrderNumbers.forTheItemsOwnKind,
|
|
67
|
+
* Component: OpenBookmarkInBrowser,
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare const getHotbarItemMenuItemInjectableBunch: <K extends HotbarItemKind<any>>(params: HotbarItemMenuItemBunchParams<K>) => {
|
|
72
|
+
dropDownMenuItems: import("@k8slens/injectable").Injectable2<() => import("@k8slens/drop-down-menu-contracts").AcquireDropDownMenuItems<HotbarItem>>;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=hotbar-item-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotbar-item-menu.d.ts","sourceRoot":"","sources":["../../src/hotbar-item-menu.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB;;EAAwD,CAAC;AAExF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;IACrC,wEAAwE;aACxE,kBAAkB,EAAE,EAAE;IACtB,kEAAkE;aAClE,gBAAgB,EAAE,GAAG;IACrB,gFAAgF;aAChF,UAAU,EAAE,GAAG;CACP,CAAC;AAEX,MAAM,WAAW,6BAA6B,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;IAClE,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oCAAoC,GAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,UACxE,6BAA6B,CAAC,CAAC,CAAC;;CAwBtC,CAAC"}
|