@ragemp-mango/core 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,8 @@
1
- import {
2
- Module,
3
- ModuleContainer,
4
- ModuleMetadataReader
5
- } from "./chunk-OLMOKTKA.js";
6
1
  import {
7
2
  ExecutionContextBase,
8
3
  MangoRequestBase,
9
4
  MangoResponseBase
10
- } from "./chunk-XIBSYLJ4.js";
5
+ } from "./chunk-AO6BXG54.js";
11
6
  import {
12
7
  Tree,
13
8
  TreeNode
@@ -29,7 +24,7 @@ import {
29
24
  ControllerMetadataReader,
30
25
  ControllerRPCHandler,
31
26
  PipelineHandler
32
- } from "./chunk-X5HSQNOE.js";
27
+ } from "./chunk-SKPH3K2M.js";
33
28
  import {
34
29
  CONTAINER_OPTIONS,
35
30
  ENABLE_SHUTDOWN_HOOKS,
@@ -45,10 +40,21 @@ import {
45
40
  MULTIPLAYER_SERVICE,
46
41
  PLUGINS
47
42
  } from "./chunk-HK7QTFPA.js";
43
+ import {
44
+ Module,
45
+ ModuleContainer,
46
+ ModuleMetadataReader
47
+ } from "./chunk-73LIJA6X.js";
48
48
  import {
49
49
  CoreMetadataKey,
50
50
  MethodParamType
51
51
  } from "./chunk-TBWHLT75.js";
52
+ import {
53
+ LOGGER_SERVICE,
54
+ MODULE_CONTAINER,
55
+ REFLECTOR_SERVICE,
56
+ TIMER_SERVICE
57
+ } from "./chunk-DJZCOYB3.js";
52
58
  import {
53
59
  ErrorMessage
54
60
  } from "./chunk-DXPVUDXD.js";
@@ -60,12 +66,6 @@ import {
60
66
  isObject,
61
67
  isString
62
68
  } from "./chunk-E6IQL4S6.js";
63
- import {
64
- LOGGER_SERVICE,
65
- MODULE_CONTAINER,
66
- REFLECTOR_SERVICE,
67
- TIMER_SERVICE
68
- } from "./chunk-DJZCOYB3.js";
69
69
  import {
70
70
  __name
71
71
  } from "./chunk-7QVYU63E.js";
@@ -1134,6 +1134,7 @@ var AppBuilder = class {
1134
1134
  import { Container as Container4 } from "inversify";
1135
1135
  async function createAppBuilder({ enviroment, plugins, appBuilderInherit, multiplayerService }) {
1136
1136
  const internalAppContainer = new Container4();
1137
+ internalAppContainer.bind(INTERNAL_APP_CONTAINER).toConstantValue(internalAppContainer);
1137
1138
  if (multiplayerService) internalAppContainer.bind(MULTIPLAYER_SERVICE).toConstantValue(multiplayerService);
1138
1139
  internalAppContainer.bind(PLUGINS).toConstantValue(plugins);
1139
1140
  return new appBuilderInherit({
@@ -1866,4 +1867,4 @@ export {
1866
1867
  createParamDecorator,
1867
1868
  forwardRef
1868
1869
  };
1869
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NlcnZpY2VzL3JlZmxlY3Rvci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvY29udHJvbGxlci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvY29yZS9nbG9iYWwuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdGFibGUuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvbW9kdWxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL3NldC1tZXRhZGF0YS5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXJyb3JzL2NhdGNoLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vc3JjL2FwcC9tb2R1bGUtdHJlZS9kZXBlbmRlbmN5LWJpbmRlci50cyIsICIuLi9zcmMvYXBwL21vZHVsZS10cmVlL21vZHVsZS10cmVlLXNjYW5uZXIudHMiLCAiLi4vc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1ldmVudC1lbW1pdGVyLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC10aW1lci50cyIsICIuLi9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9hcHAvYXBwLWJ1aWxkZXIudHMiLCAiLi4vc3JjL2FwcC9hcHAudHMiLCAiLi4vc3JjL2FwcC9jcmVhdGUtYXBwLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXdlYnZpZXcuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvaW5kZXguZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXNwb25zZS5kZW9yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtZ3VhcmRzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtcGlwZXMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1ycGMtZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtdGltZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy90aW1lcnMvZXZlcnktdGljay5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvdGltZXJzL2ludGVydmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvYXBwbHktZGVjb3JhdG9yLnV0aWwudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvY3JlYXRlLXBhcmFtLnV0aWwudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi9zcmMvc2VydmljZXMvdGltZXIuc2VydmljZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBTZXRNZXRhZGF0YSB9IGZyb20gJy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVEZWNvcmF0b3JPcHRpb25zLCBDcmVhdGVEZWNvcmF0b3JXaXRoVHJhbnNmb3JtT3B0aW9ucywgUmVmbGVjdGFibGVEZWNvcmF0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tSWQsIGlzRW1wdHksIGlzT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmbGVjdG9yU2VydmljZSB7XG4gICAgcHVibGljIGdldDxUUmVzdWx0ID0gdW5rbm93biwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4obWV0YWRhdGFLZXk6IFRLZXksIHRhcmdldDogTmV3YWJsZSB8IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhPFRSZXN1bHQ+KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGw8VFJlc3VsdCBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXSwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4oXG4gICAgICAgIG1ldGFkYXRhS2V5OiBUS2V5LFxuICAgICAgICB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdLFxuICAgICkge1xuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+KHRhcmdldHMgfHwgW10pLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdldChtZXRhZGF0YUtleSwgdGFyZ2V0KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEFuZE1lcmdlPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFDb2xsZWN0aW9uID0gdGhpcy5nZXRBbGw8VFJlc3VsdCwgVEtleT4obWV0YWRhdGFLZXksIHRhcmdldHMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoaXNFbXB0eShtZXRhZGF0YUNvbGxlY3Rpb24pKSByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiA8VFJlc3VsdD5tZXRhZGF0YUNvbGxlY3Rpb24ucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc09iamVjdChhKSAmJiBpc09iamVjdChiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgICAgIC4uLmIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRPdmVycmlkZTxUUmVzdWx0ID0gdW5rbm93biwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4obWV0YWRhdGFLZXk6IFRLZXksIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10pIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiA8VFJlc3VsdD5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0+KG9wdGlvbnM/OiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbT4pOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0+O1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPihcbiAgICAgICAgb3B0aW9uczogQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnM8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZCA9IFRQYXJhbT4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvck9wdGlvbnM8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+ID0ge30sXG4gICAgKTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFLZXkgPSBvcHRpb25zLmtleSA/PyBnZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvckZuID0gKG1ldGFkYXRhVmFsdWU6IFRQYXJhbSkgPT4gKHRhcmdldDogb2JqZWN0IHwgRnVuY3Rpb24sIGtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnRyYW5zZm9ybSA/IG9wdGlvbnMudHJhbnNmb3JtKG1ldGFkYXRhVmFsdWUpIDogbWV0YWRhdGFWYWx1ZTtcbiAgICAgICAgICAgIFNldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB2YWx1ZSA/PyB7fSkodGFyZ2V0LCBrZXkhLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkZWNvcmF0b3JGbi5LRVkgPSBtZXRhZGF0YUtleTtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRvckZuIGFzIFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29udHJvbGxlcjxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IENvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gR2xvYmFsPFQgZXh0ZW5kcyBOZXdhYmxlPigpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HbG9iYWxNb2R1bGUsIHRydWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0PFQgPSB1bmtub3duPihrZXk/OiBJbmplY3Rpb25Ub2tlbjxUPikge1xuICAgIHJldHVybiA8UHJvcGVydHlEZWNvcmF0b3IgJiBQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZywgcGFyYW1JbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKGtleSkgJiYgIXZhbGlkYXRlSW5qZWN0aW9uVG9rZW4oa2V5KS52YWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBrZXkgPz8gUmVmbGVjdC5nZXRNZXRhZGF0YTxJbmplY3Rpb25Ub2tlbj4oJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmplY3QodG9rZW4pKHRhcmdldCwgcHJvcGVydHlLZXksIHBhcmFtSW5kZXgpO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3RhYmxlPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9kdWxlPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogTW9kdWxlT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Nb2R1bGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvciEpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Nb2R1bGUsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIE9wdGlvbmFsKCkge1xuICAgIHJldHVybiA8UHJvcGVydHlEZWNvcmF0b3IgJiBQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZywgcGFyYW1JbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwoKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbURlY29yYXRvciB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFNldE1ldGFkYXRhPEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFYgPSB1bmtub3duPihrZXk6IEssIHZhbHVlOiBWKSB7XG4gICAgY29uc3QgZGVjb3JhdG9yRmFjdG9yeSA9IDxDdXN0b21EZWNvcmF0b3I+KCh0YXJnZXQ6IG9iamVjdCwgX21ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbiAgICBkZWNvcmF0b3JGYWN0b3J5LktFWSA9IGtleTtcbiAgICByZXR1cm4gZGVjb3JhdG9yRmFjdG9yeTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2F0Y2g8VCBleHRlbmRzIE5ld2FibGU+KC4uLmV4Y2VwdGlvbnM6IHVua25vd25bXSkge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXBsaWNhdGVzID0gZXhjZXB0aW9ucy5maWx0ZXIoKGV4Y2VwdGlvbiwgaW5kZXgpID0+IGV4Y2VwdGlvbnMuaW5kZXhPZihleGNlcHRpb24pICE9PSBpbmRleCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNhdGNoLCBleGNlcHRpb25zLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVFcnJvckZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lRmlsdGVyUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RGaWx0ZXJzID1cbiAgICAgICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIGlmICghaXNOaWwobWV0aG9kRmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlcnMuaW5jbHVkZXMoZmlsdGVyKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgWy4uLnZhbGlkYXRlZEZpbHRlcnMsIC4uLm1ldGhvZEZpbHRlcnNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lRmlsdGVyUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBpZiAoIWlzTmlsKGNsYXNzRmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlcnMuaW5jbHVkZXMoZmlsdGVyKSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgWy4uLnZhbGlkYXRlZEZpbHRlcnMsIC4uLmNsYXNzRmlsdGVyc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRU5BQkxFX1NIVVRET1dOX0hPT0tTLCBHTE9CQUxfRVJST1JfRklMVEVSUywgR0xPQkFMX0dVQVJEUywgR0xPQkFMX0lOVEVSQ0VQVE9SUywgR0xPQkFMX1BJUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlckV2ZW50SGFuZGxlciwgQ29udHJvbGxlclJQQ0hhbmRsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSdW50aW1lIHtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJFdmVudEhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVyOiBDb250cm9sbGVyRXZlbnRIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlclJQQ0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcnBjSGFuZGxlcjogQ29udHJvbGxlclJQQ0hhbmRsZXI7XG4gICAgQGluamVjdChHTE9CQUxfR1VBUkRTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW107XG4gICAgQGluamVjdChHTE9CQUxfSU5URVJDRVBUT1JTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW107XG4gICAgQGluamVjdChHTE9CQUxfUElQRVMpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXTtcbiAgICBAaW5qZWN0KEdMT0JBTF9FUlJPUl9GSUxURVJTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRU5BQkxFX1NIVVRET1dOX0hPT0tTKSBAb3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVNodXRkb3duSG9va3M6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYXN5bmMgYm9vdChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbW9kdWxlLCBjb250cm9sbGVycyBhbmQgcHJvdmlkZXJzLlxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4obW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmKTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChjb250cm9sbGVyKSA9PiAoY29udHJvbGxlci5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4oY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZikpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10uZm9yRWFjaCgoW3Rva2VuXSkgPT5cbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmdldDxhbnk+KHRva2VuKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExvZyBtb2R1bGUgbG9hZGVkLlxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgTW9kdWxlICR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IGxvYWRlZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2QobW9kdWxlLCAnb25Nb2R1bGVJbml0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZHMocmVzb2x2ZWRUcmVlLCAnb25Nb2R1bGVJbml0Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcEJvb3RzdHJhcCcpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGFuZCBycGMgbGlzdGVuZXJzLlxuICAgICAgICByZXNvbHZlZFRyZWUudHJhdmVyc2UoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckxpc3RlbmVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgICAgICBgQ29udHJvbGxlciAke2NvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gdGltZXJzIGFuZCBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCAoJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGBNb2R1bGUgJHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gZGVwZW5kZW5jaWVzIGJpbmRlZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRQcm92aWRlcihwcm92aWRlcjogRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4sIGNvbnRhaW5lcjogQ29udGFpbmVyKSB7XG4gICAgICAgIGlmICgndXNlVmFsdWUnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0NvbnN0YW50VmFsdWUocHJvdmlkZXIudXNlVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VGYWN0b3J5JyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvRHluYW1pY1ZhbHVlKChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBzID1cbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuaW5qZWN0Py5tYXAoKGRlcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRlcCkgJiYgJ3Rva2VuJyBpbiBkZXAgJiYgJ29wdGlvbmFsJyBpbiBkZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5vcHRpb25hbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBhIGRlcGVuZGVuY3kuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgPz8gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnVzZUZhY3RvcnkoLi4uZGVwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG8ocHJvdmlkZXIudXNlQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAndHJhbnNpZW50JykgYmluZGluZy5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3JlcXVlc3QnKSBiaW5kaW5nLmluUmVxdWVzdFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGJpbmRpbmcuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvU2VydmljZShwcm92aWRlci51c2VFeGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEeW5hbWljTW9kdWxlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IFRyZWUsIFRyZWVOb2RlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVUcmVlU2Nhbm5lciB7XG4gICAgQGluamVjdChNb2R1bGVNZXRhZGF0YVJlYWRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVNZXRhZGF0YVJlYWRlcjogTW9kdWxlTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlck1ldGFkYXRhUmVhZGVyOiBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHNjYW4oY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPikge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2UgYW5kIHNldCBtZXRhZGF0YSB0byBpdFxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgTW9kdWxlICR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IHNjYW5uZWQgKCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVycyBpbiBtb2R1bGVcbiAgICAgICAgYXdhaXQgdGhpcy5zY2FuQ29udHJvbGxlcnMobW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVycyBpbiBtb2R1bGVcbiAgICAgICAgY29uc3QgbW9kdWxlVHJlZSA9IG5ldyBUcmVlKG1vZHVsZSk7XG4gICAgICAgIGNvbnN0IHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKTtcbiAgICAgICAgc2Nhbm5lZE1vZHVsZXMuc2V0KGNsYXNzUmVmLCBtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGltcG9ydGVkIG1vZHVsZXNcbiAgICAgICAgZm9yIChjb25zdCBpbXBvcnRlZE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKG1vZHVsZVRyZWUucm9vdCwgaW1wb3J0ZWRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNjYW5Nb2R1bGVzKFxuICAgICAgICBwYXJlbnROb2RlOiBUcmVlTm9kZTxNb2R1bGU+LFxuICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LFxuICAgICAgICBzY2FubmVkTW9kdWxlcyA9IG5ldyBNYXA8TmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LCBNb2R1bGU+KCksXG4gICAgKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIG1vZHVsZSBpcyBhbHJlYWR5IGltcG9ydGVkXG4gICAgICAgIGNvbnN0IHNjYW5uZWRNb2R1bGUgPSBzY2FubmVkTW9kdWxlcy5nZXQoY2xhc3NSZWYpO1xuICAgICAgICBpZiAoIWlzTmlsKHNjYW5uZWRNb2R1bGUpKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnZhbHVlLnJlcGV0aXRpdmVJbXBvcnRzLmFkZChzY2FubmVkTW9kdWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICAgICAgdGhpcy5jaGVja0NpcmN1bGFyRGVwZW5kZW5jeShwYXJlbnROb2RlLnZhbHVlLm1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YSk7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgbW9kdWxlLnBhcmVudCA9IHBhcmVudE5vZGUudmFsdWU7XG4gICAgICAgIC8vIExvZyBtb2R1bGUgaW5mb1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGBNb2R1bGUgJHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gc2Nhbm5lZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgQ29udHJvbGxlciAke2NsYXNzUmVmLm5hbWV9IHNjYW5uZWQgKCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50TWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YTogTW9kdWxlTWV0YWRhdGEpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50IG1vZHVsZSBpcyBpbXBvcnRlZCBpbiBtb2R1bGVcbiAgICAgICAgaWYgKG1vZHVsZU1ldGFkYXRhLmltcG9ydHMuaW5jbHVkZXMocGFyZW50TWV0YWRhdGEuY2xhc3NSZWYpKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNjYW5uaW5nIHRoZSBtb2R1bGUgdHJlZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBFdmVudEVtbWl0ZXIge1xuICAgIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIG9uY2UoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCBvbmNlV3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgIH1cblxuICAgIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFRpbWVyIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lciB7XG4gICAgcHVibGljIGxhc3RUaWNrID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBpbnRlcnZhbDogbnVtYmVyID0gMCxcbiAgICAgICAgcHVibGljIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIHB1YmxpYyBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIHByaXZhdGUgY2xlYXJUaW1lcjogRnVuY3Rpb24sXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciwgTXVsdGlwbGF5ZXJUaW1lcnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVyIH0gZnJvbSAnLi9yYWdlbXAtdGltZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXJzIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lcnMge1xuICAgIHByaXZhdGUgdGltZXJJbmNyZW1lbnRlcjogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHRpbWVycyA9IG5ldyBNYXA8bnVtYmVyLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgZXZlcnlUaWNrSGFuZGxlcnMgPSBuZXcgTWFwPG51bWJlciwgeyBjYWxsYmFjazogRnVuY3Rpb247IGJvdW5kOiBGdW5jdGlvbiB9PigpO1xuICAgIHByaXZhdGUgaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tNYWluSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpOiBNdWx0aXBsYXllclRpbWVyW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGltZXJzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudChfdmFsdWU6IG51bWJlcikge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgIH1cblxuICAgIGdldEJ5SUQoaWQ6IG51bWJlcik6IE11bHRpcGxheWVyVGltZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnRpbWVycy5nZXQoaWQpO1xuICAgICAgICByZXR1cm4gdGltZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRpbWVyKFxuICAgICAgICBjcmVhdGVUaW1lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBudW1iZXIsXG4gICAgICAgIGNsZWFyOiAoaWQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uLFxuICAgICAgICBpbnRlcnZhbDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICBvbmNlOiBib29sZWFuLFxuICAgICAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gdHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJyA/IGNyZWF0ZVRpbWVyKGNhbGxiYWNrQmluZCwgaW50ZXJ2YWwpIDogY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgaW50ZXJ2YWwgPz8gMCwgb25jZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhcih0aW1lcklkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIHNldEludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGltZXIoXG4gICAgICAgICAgICAoY2I6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyKSA9PiBzZXRJbnRlcnZhbChjYiBhcyAoKSA9PiB2b2lkLCBpbnRlcnZhbCkgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgICAgICAgICAoaWQ6IG51bWJlcikgPT4gY2xlYXJJbnRlcnZhbChpZCksXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSwgdGltZSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIHRpbWUsIHRydWUsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgZXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNldChpZCwgeyBjYWxsYmFjaywgYm91bmQ6IGNhbGxiYWNrQmluZCB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aWNrIGxvb3AgaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXZlcnlUaWNrUnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0NsaWVudFNpZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgZnJhbWUtYWNjdXJhdGUgdGlja2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW50ZXJ2YWwgd2l0aCBtaW5pbWFsIGRlbGF5IGFzIGFwcHJveGltYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChpbnRlcnZhbEhhbmRsZXIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIDAsIGZhbHNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHRpY2sgbG9vcCBpZiBubyBtb3JlIGhhbmRsZXJzXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVyeVRpY2tIYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSAmJiB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoJ3JlbmRlcicsIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIG5leHRUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIGxldCB0aW1lcklkOiBhbnk7XG5cbiAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGU6IHVzZSByZW5kZXIgZXZlbnQgZm9yIG5leHQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5hZGQoJ3JlbmRlcicsIGhhbmRsZXIpO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZTogdXNlIHNldEltbWVkaWF0ZSBvciBzZXRUaW1lb3V0KDApIGZvciBuZXh0IHRpY2tcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGltZShfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZSBlcXVpdmFsZW50XG4gICAgICAgIC8vIENvdWxkIGltcGxlbWVudCBjdXN0b20gdGltaW5nIGlmIG5lZWRlZFxuICAgIH1cblxuICAgIHRpbWVFbmQoX25hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBjb25zb2xlLnRpbWVFbmQgZXF1aXZhbGVudFxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgTXVsdGlwbGF5ZXJTZXJ2aWNlLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi9yYWdlbXAtZXZlbnQtZW1taXRlcic7XG5pbXBvcnQgeyBSYWdlTVBUaW1lcnMgfSBmcm9tICcuL3JhZ2VtcC10aW1lcnMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgaW1wbGVtZW50cyBNdWx0aXBsYXllclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IFRpbWVyczogTXVsdGlwbGF5ZXJUaW1lcnM7XG4gICAgcmVhZG9ubHkgRXZlbnRzOiBFdmVudEVtbWl0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5FdmVudHMgPSBuZXcgUmFnZU1QRXZlbnRFbW1pdGVyKCk7XG4gICAgICAgIHRoaXMuVGltZXJzID0gbmV3IFJhZ2VNUFRpbWVycygpO1xuICAgIH1cblxuICAgIHBhcnNlSW50ZXJuYWxBcmdzPFUgPSB1bmtub3duLCBUID0gdW5rbm93bj4oXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICk6IHtcbiAgICAgICAgcGxheWVyPzogVTtcbiAgICAgICAgYm9keT86IFQ7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IChpc09iamVjdChhcmdzWzBdKSA/IGFyZ3NbMF0gOiB1bmRlZmluZWQpIGFzIFU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgIGJvZHk6IGFyZ3MsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nV2FybmluZyhhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxvZ0RlYnVnKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIGRlYnVnIGxvZywgdXNlIGluZm9cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dJbmZvKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBHTE9CQUxfRVJST1JfRklMVEVSUyxcbiAgICBHTE9CQUxfR1VBUkRTLFxuICAgIEdMT0JBTF9JTlRFUkNFUFRPUlMsXG4gICAgR0xPQkFMX1BJUEVTLFxuICAgIEVOQUJMRV9TSFVURE9XTl9IT09LUyxcbiAgICBQTFVHSU5TLFxuICAgIEdMT0JBTF9BUFBfQ09OVEFJTkVSLFxuICAgIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSxcbiAgICBNQU5HT19SRVNQT05TRV9GQUNUT1JZLFxuICAgIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksXG4gICAgQ09OVEFJTkVSX09QVElPTlMsXG4gICAgTVVMVElQTEFZRVJfU0VSVklDRSxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL2FwcCc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsXG4gICAgQ29udHJvbGxlckZsb3dIYW5kbGVyLFxuICAgIENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcixcbiAgICBDb250cm9sbGVyUlBDSGFuZGxlcixcbiAgICBQaXBlbGluZUhhbmRsZXIsXG59IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi9tb2R1bGUnO1xuaW1wb3J0IHsgQXBwUnVudGltZSwgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgRXhlY3V0aW9uQ29udGV4dEJhc2UsIE1hbmdvUmVxdWVzdEJhc2UsIE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi9waXBlbGluZSc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQsIEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBSRUZMRUNUT1JfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSZWZsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBCdWlsZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb3JlL2FwcC1idWlsZGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgQXBwQnVpbGRlcjxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZCwgSSBleHRlbmRzIEludGVyY2VwdG9yID0gSW50ZXJjZXB0b3IsIEVGIGV4dGVuZHMgRXJyb3JGaWx0ZXIgPSBFcnJvckZpbHRlcj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9tZW50OiBBcHBFbnZpcm9tZW50O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBBcHBCdWlsZGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbWVudCA9IGNvbmZpZy5lbnZpcm9tZW50O1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyID0gY29uZmlnLmludGVybmFsQXBwQ29udGFpbmVyO1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZSA9IGNvbmZpZy5tdWx0aXBsYXllclNlcnZpY2U7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGNvbmZpZy5wbHVnaW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHPiB8IEcpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkR3VhcmRzOiAoTmV3YWJsZTxHPiB8IEcpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVHdWFyZChndWFyZCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkR3VhcmRzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRHdWFyZHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9yczogKE5ld2FibGU8ST4gfCBJKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEludGVyY2VwdG9yczogKE5ld2FibGU8ST4gfCBJKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEludGVyY2VwdG9ycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfSU5URVJDRVBUT1JTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkSW50ZXJjZXB0b3JzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbFBpcGVzKC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9QSVBFUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZFBpcGVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbEZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RUY+IHwgRUYpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRklsdGVyczogKE5ld2FibGU8RUY+IHwgRUYpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUVycm9yRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkRklsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEZJbHRlcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGx1Z2lucyguLi5wbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdKSB7XG4gICAgICAgIHBsdWdpbnMuZm9yRWFjaCgocCkgPT4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUGx1Z2lucyA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0PE5ld2FibGU8TWFuZ29QbHVnaW4+W10+KFBMVUdJTlMpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLnJlYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUoWy4uLmludGVybmFsUGx1Z2lucywgLi4ucGx1Z2luc10pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlU2h1dGRvd25Ib29rcygpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVOQUJMRV9TSFVURE9XTl9IT09LUykudG9Db25zdGFudFZhbHVlKHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q29udGFpbmVyT3B0aW9ucyhvcHRpb25zOiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnMsIG9ubHlHbG9iYWwgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBpZiAob25seUdsb2JhbCkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDT05UQUlORVJfT1BUSU9OUykudG9Db25zdGFudFZhbHVlKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEFwcENvbnRhaW5lciA9IG5ldyBDb250YWluZXIodGhpcy5nbG9iYWxDb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgLy8gR0xvYmFsIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoUkVGTEVDVE9SX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShSZWZsZWN0b3JTZXJ2aWNlKTtcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoUmVmbGVjdG9yU2VydmljZSkudG9TZXJ2aWNlKFJFRkxFQ1RPUl9TRVJWSUNFKTtcblxuICAgICAgICAvLyBNdWx0aXBsYXllciBzZXJ2aWNlIGJpbmRpbmdzXG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLm11bHRpcGxheWVyU2VydmljZSk7XG4gXG4gICAgICAgIC8vIEFwcCBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQXBwKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGdsb2JhbEFwcENvbnRhaW5lcik7XG5cbiAgICAgICAgLy8gTW9kdWxlIHRyZWUgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZVRyZWVTY2FubmVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHBSdW50aW1lKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQaXBlbGluZUhhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBNb2R1bGUgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlTWV0YWRhdGFSZWFkZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBDb250cm9sbGVyIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJGbG93SGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckV2ZW50SGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlclJQQ0hhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBNYW5nbyBSZXF1ZXN0IGFuZCBSZXNwb25zZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTWFuZ29SZXF1ZXN0QmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTUFOR09fUkVRVUVTVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoYm9keTogdW5rbm93biwgcGxheWVyOiBQbGF5ZXJNcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjb250ZXh0LmNvbnRhaW5lci5nZXQoTWFuZ29SZXF1ZXN0QmFzZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC4kYm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC4kcGxheWVyID0gcGxheWVyO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1Jlc3BvbnNlQmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTUFOR09fUkVTUE9OU0VfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbnRhaW5lci5nZXQoTWFuZ29SZXNwb25zZUJhc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFeGVjdXRpb25Db250ZXh0QmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlLFxuICAgICAgICAgICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSBjb250ZXh0LmNvbnRhaW5lci5nZXQoRXhlY3V0aW9uQ29udGV4dEJhc2UpO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kY2xhc3NSZWYgPSBjbGFzc1JlZjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRuYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFBsdWdpbnMgYmluZGluZ3NcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocGx1Z2luKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHBsdWdpbik7XG4gICAgICAgICAgICBpZiAoIXBsdWdpbkluc3RhbmNlLm9uQnVpbGQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgYXdhaXQgcGx1Z2luSW5zdGFuY2Uub25CdWlsZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0dVQVJEUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfR1VBUkRTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfSU5URVJDRVBUT1JTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfSU5URVJDRVBUT1JTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfUElQRVMpKSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfRVJST1JfRklMVEVSUykpXG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KEFwcCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IE1vZHVsZURlcGVuZGVuY3lCaW5kZXIsIE1vZHVsZVRyZWVTY2FubmVyIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgeyBNb2R1bGUgfSBmcm9tICcuL21vZHVsZS9tb2R1bGUnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFJ1bnRpbWUgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4gfSBmcm9tICcuL2ludGVyZmFjZXMvY29yZS9tYW5nby1wbHVnaW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHAge1xuICAgIEBpbmplY3QoTW9kdWxlVHJlZVNjYW5uZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlVHJlZVNjYW5uZXI6IE1vZHVsZVRyZWVTY2FubmVyO1xuICAgIEBpbmplY3QoTW9kdWxlRGVwZW5kZW5jeUJpbmRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVEZXBlbmRlbmN5QmluZGVyOiBNb2R1bGVEZXBlbmRlbmN5QmluZGVyO1xuICAgIEBpbmplY3QoQXBwUnVudGltZSkgcHJpdmF0ZSByZWFkb25seSBhcHBSdW50aW1lOiBBcHBSdW50aW1lO1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwcml2YXRlIG1vZHVsZVRyZWU6IFRyZWU8TW9kdWxlPjtcbiAgICBwcml2YXRlIGxvYWRlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0PFQ+KHJvb3RNb2R1bGU6IE5ld2FibGU8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0YXJ0aW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcEFscmVhZHlMb2FkZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ1N0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnU2Nhbm5pbmcgbW9kdWxlIHRyZWUuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTY2FuJyk7XG4gICAgICAgIHRoaXMubW9kdWxlVHJlZSA9IGF3YWl0IHRoaXMubW9kdWxlVHJlZVNjYW5uZXIuc2Nhbihyb290TW9kdWxlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclNjYW4nKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdCaW5kaW5nIG1vZHVsZSBkZXBlbmRlbmNpZXMuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVCaW5kJyk7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kdWxlRGVwZW5kZW5jeUJpbmRlci5iaW5kKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJCaW5kJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnTG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdBcHAgbG9hZGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RvcHBpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwTm90TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0b3AnKTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnU3RvcHBpbmcgYXBwLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5zaHV0ZG93bih0aGlzLm1vZHVsZVRyZWUpO1xuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdBcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTVVMVElQTEFZRVJfU0VSVklDRSwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQXBwQnVpbGRlciB9IGZyb20gJy4vYXBwLWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgeyBBcHBCdWlsZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb3JlL2FwcC1idWlsZGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcjxUIGV4dGVuZHMgQXBwQnVpbGRlcj4oe1xuICAgIGVudmlyb21lbnQsXG4gICAgcGx1Z2lucyxcbiAgICBhcHBCdWlsZGVySW5oZXJpdCxcbiAgICBtdWx0aXBsYXllclNlcnZpY2UsXG59OiB7XG4gICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudDtcbiAgICBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBuZXcgKGNvbmZpZzogQXBwQnVpbGRlckNvbmZpZykgPT4gVDtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUExVR0lOUykudG9Db25zdGFudFZhbHVlKHBsdWdpbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBhcHBCdWlsZGVySW5oZXJpdCh7XG4gICAgICAgIGVudmlyb21lbnQsXG4gICAgICAgIGludGVybmFsQXBwQ29udGFpbmVyLFxuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2U6IG11bHRpcGxheWVyU2VydmljZSEsXG4gICAgICAgIHBsdWdpbnMsXG4gICAgfSk7XG59IiwgImltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBFdmVudE1ldGFkYXRhLCB0eXBlIFBpcGVsaW5lTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnREZWNvcmF0b3IodHlwZTogRXZlbnRNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE9taXQ8RXZlbnRNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlckV2ZW50cywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnNvbWUoKGV2ZW50KSA9PiBldmVudC5tZXRob2QgPT09IG1ldGhvZCAmJiBldmVudC5uYW1lID09PSBuYW1lICYmIGV2ZW50LnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE9taXQ8RXZlbnRNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLFxuICAgICAgICAgICAgWy4uLmV2ZW50cywgeyBtZXRob2QsIG5hbWUsIHR5cGUsIHdlYlZpZXdJZCB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25JbnRlcm5hbCcsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldyhpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uV2ViVmlldycsIGV2ZW50TmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbihldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZUludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlSW50ZXJuYWwnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlKGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZScsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZVdlYlZpZXcnLCBldmVudE5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEJvZHkoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkJvZHksIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluZGV4KGtleTogbnVtYmVyLCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluZGV4S2V5TXVzdEJlTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5JbmRleCwgZGF0YToga2V5LCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcSgpIHtcbiAgICByZXR1cm4gUmVxdWVzdCgpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBQYXJhbShrZXk6IHN0cmluZywgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5QYXJhbUtleU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgZGF0YToga2V5LCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKCkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5SZXNwb25zZSwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcygpIHtcbiAgICByZXR1cm4gUmVzcG9uc2UoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVHdWFyZCB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlR3VhcmRzKC4uLmd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlR3VhcmQoZ3VhcmQpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEd1YXJkcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoZ3VhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RHdWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgWy4uLnZhbGlkYXRlZEd1YXJkcywgLi4ubWV0aG9kR3VhcmRzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3VhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lR3VhcmRSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc0d1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBbLi4udmFsaWRhdGVkR3VhcmRzLCAuLi5jbGFzc0d1YXJkc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUludGVyY2VwdG9yKGludGVyY2VwdG9yKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRJbnRlcmNlcHRvcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kSW50ZXJjZXB0b3JzID1cbiAgICAgICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICBbLi4udmFsaWRhdGVkSW50ZXJjZXB0b3JzLCAuLi5tZXRob2RJbnRlcmNlcHRvcnNdLFxuICAgICAgICAgICAgICAgIHRhcmdldC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc0ludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCBbLi4udmFsaWRhdGVkSW50ZXJjZXB0b3JzLCAuLi5jbGFzc0ludGVyY2VwdG9yc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZVBpcGVzKC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHBpcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZFBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIFsuLi52YWxpZGF0ZWRQaXBlcywgLi4ubWV0aG9kUGlwZXNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc1BpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIFsuLi52YWxpZGF0ZWRQaXBlcywgLi4uY2xhc3NQaXBlc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBQaXBlbGluZU1ldGFkYXRhLCB0eXBlIFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJQQ0RlY29yYXRvcih0eXBlOiBSUENNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKHdlYlZpZXdJZCkgJiYgIWlzU3RyaW5nKHdlYlZpZXdJZCkgJiYgIWlzTnVtYmVyKHdlYlZpZXdJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgcnBjcyA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE9taXQ8UlBDTWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJSUENzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmIChycGNzLnNvbWUoKHJwYykgPT4gcnBjLm1ldGhvZCA9PT0gbWV0aG9kICYmIHJwYy5uYW1lID09PSBuYW1lICYmIHJwYy50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8T21pdDxSUENNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcyxcbiAgICAgICAgICAgIFsuLi5ycGNzLCB7IG1ldGhvZCwgbmFtZSwgdHlwZSwgd2ViVmlld0lkIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVJQQ0RlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ycGMtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdChycGNOYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25SZXF1ZXN0JywgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXJwYy1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3UmVxdWVzdChpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25XZWJWaWV3UmVxdWVzdCcsIHJwY05hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgVGltZXJNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaW1lckRlY29yYXRvcih0eXBlOiBUaW1lck1ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBUaW1lck1ldGFkYXRhWydvcHRpb25zJ10pIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5UaW1lck5hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IHRpbWVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8VGltZXJNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuVGltZXJzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmICh0aW1lcnMuc29tZSgodGltZXIpID0+IHRpbWVyLm1ldGhvZCA9PT0gbWV0aG9kICYmIHRpbWVyLm5hbWUgPT09IG5hbWUgJiYgdGltZXIudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8VGltZXJNZXRhZGF0YVtdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5UaW1lcnMsXG4gICAgICAgICAgICBbLi4udGltZXJzLCA8VGltZXJNZXRhZGF0YT57IG1ldGhvZCwgbmFtZSwgdHlwZSwgb3B0aW9ucyB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBDcm9uKHBhdHRlcm46IHN0cmluZyB8IERhdGUsIG9wdGlvbnM6IENyb25PcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2Nyb24nLCBvcHRpb25zLm5hbWUsIHsgcGF0dGVybiwgLi4ub3B0aW9ucyB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gRXZlcnlUaWNrKG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2V2ZXJ5dGljaycsIG5hbWUpO1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbChuYW1lOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbChuYW1lT3JUaW1lb3V0OiBzdHJpbmcgfCBudW1iZXIsIHRpbWVvdXQ/OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3Ige1xuICAgIGNvbnN0IFtuYW1lLCBpbnRlcnZhbFRpbWVvdXRdID0gaXNTdHJpbmcobmFtZU9yVGltZW91dCkgPyBbbmFtZU9yVGltZW91dCwgdGltZW91dF0gOiBbdW5kZWZpbmVkLCBuYW1lT3JUaW1lb3V0XTtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2ludGVydmFsJywgbmFtZSwgeyB0aW1lb3V0OiBpbnRlcnZhbFRpbWVvdXQhIH0pO1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQodGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQobmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQobmFtZU9yVGltZW91dDogc3RyaW5nIHwgbnVtYmVyLCB0aW1lb3V0PzogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICBjb25zdCBbbmFtZSwgaW50ZXJ2YWxUaW1lb3V0XSA9IGlzU3RyaW5nKG5hbWVPclRpbWVvdXQpID8gW25hbWVPclRpbWVvdXQsIHRpbWVvdXRdIDogW3VuZGVmaW5lZCwgbmFtZU9yVGltZW91dF07XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCd0aW1lb3V0JywgbmFtZSwgeyB0aW1lb3V0OiBpbnRlcnZhbFRpbWVvdXQhIH0pO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBhcHBseURlY29yYXRvcnMoLi4uZGVjb3JhdG9yczogKENsYXNzRGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IpW10pIHtcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uLCBZPihcbiAgICAgICAgdGFyZ2V0OiBURnVuY3Rpb24gfCBPYmplY3QsXG4gICAgICAgIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsXG4gICAgICAgIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFk+LFxuICAgICkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBkZWNvcmF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAoPENsYXNzRGVjb3JhdG9yPmRlY29yYXRvcikodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICg8TWV0aG9kRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3I+ZGVjb3JhdG9yKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0LCBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJhbURlY29yYXRvcjxUSW5wdXQgPSB1bmtub3duLCBUT3V0cHV0ID0gdW5rbm93bj4oZmFjdG9yeTogKGRhdGE6IFRJbnB1dCwgY3R4OiBFeGVjdXRpb25Db250ZXh0KSA9PiBUT3V0cHV0KSB7XG4gICAgcmV0dXJuIDxUSW5wdXQgPSB1bmtub3duPihkYXRhPzogVElucHV0LCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSA9PiB7XG4gICAgICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaXBlczogdmFsaWRhdGVkUGlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRob2RQYXJhbVR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeTogPChkYXRhOiB1bmtub3duLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSA9PiB1bmtub3duPmZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBMYXp5U2VydmljZUlkZW50aWZpZXIsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmPFQgPSB1bmtub3duPihmbjogKCkgPT4gaW50ZXJmYWNlcy5TZXJ2aWNlSWRlbnRpZmllcjxUPikge1xuICAgIHJldHVybiBuZXcgTGF6eVNlcnZpY2VJZGVudGlmaWVyPFQ+KGZuKTtcbn0iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ3JvbiwgdHlwZSBDcm9uT3B0aW9ucyB9IGZyb20gJ2Nyb25lcic7XG5pbXBvcnQgeyBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE11bHRpcGxheWVyU2VydmljZSwgdHlwZSBNdWx0aXBsYXllclRpbWVyIH0gZnJvbSAnLi4vYXBwJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWVyU2VydmljZSB7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGV2ZXJ5dGlja3MgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRpbnRlcnZhbHMgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICR0aW1lb3V0cyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGNyb25zID0gbmV3IE1hcDxzdHJpbmcsIENyb24+KCk7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVyeXRpY2tzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGV2ZXJ5dGlja3MudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW50ZXJ2YWxzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGludGVydmFscy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aW1lb3V0cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiR0aW1lb3V0cy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjcm9ucygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRjcm9ucy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLndhcm5pbmdUaHJlc2hvbGQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDcm9uSm9iKGNhbGxiYWNrOiBGdW5jdGlvbiwgb3B0aW9uczogQ3Jvbk9wdGlvbnMgJiB7IHBhdHRlcm46IHN0cmluZyB8IERhdGUgfSkge1xuICAgICAgICBjb25zdCB7IHBhdHRlcm4sIC4uLmNyb25PcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IGNyb24gPSBDcm9uKHBhdHRlcm4sIGNyb25PcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zLm5hbWUpKSB0aGlzLiRjcm9ucy5zZXQob3B0aW9ucy5uYW1lLCBjcm9uKTtcblxuICAgICAgICByZXR1cm4gY3JvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlSW50ZXJ2YWwoY2FsbGJhY2s6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldEludGVydmFsKGNhbGxiYWNrLCBpbnRlcnZhbCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kaW50ZXJ2YWxzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGltZW91dChjYWxsYmFjazogRnVuY3Rpb24sIHRpbWVvdXQ6IG51bWJlciwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiR0aW1lb3V0cy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUV2ZXJ5VGljayhjYWxsYmFjazogRnVuY3Rpb24sIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZXZlcnlUaWNrKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRldmVyeXRpY2tzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHR5cGU6ICdjcm9uJyB8ICdldmVyeXRpY2snIHwgJ3RpbWVvdXQnIHwgJ2ludGVydmFsJywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY3Jvbic6XG4gICAgICAgICAgICAgICAgY29uc3QgY3JvbkpvYiA9IHRoaXMuJGNyb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY3JvbkpvYikge1xuICAgICAgICAgICAgICAgICAgICBjcm9uSm9iLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kY3JvbnMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V2ZXJ5dGljayc6XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlcnl0aWNrID0gdGhpcy4kZXZlcnl0aWNrcy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZXJ5dGljaykge1xuICAgICAgICAgICAgICAgICAgICBldmVyeXRpY2suZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRldmVyeXRpY2tzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbnRlcnZhbCc6XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSB0aGlzLiRpbnRlcnZhbHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGludGVydmFscy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMuJHRpbWVvdXRzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeU5hbWUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZXZlcnl0aWNrcy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdpbnRlcnZhbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmdldEJ5SUQoaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aW1lKG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy50aW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aW1lRW5kKG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy50aW1lRW5kKG5hbWUpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxjQUFBQSxtQkFBa0I7OztBQ0kzQixTQUFTQyxrQkFBa0I7QUFHcEIsU0FBU0MsWUFBOEJDLFNBQTJCO0FBQ3JFLFNBQU8sQ0FBQ0MsV0FBQUE7QUFDSixRQUFJQyxRQUFRQyxZQUFZQyxnQkFBZ0JMLFlBQVlFLE1BQUFBLEdBQVM7QUFDekQsWUFBTSxJQUFJSSxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNLEVBQUVDLE9BQU9DLE9BQU9DLE1BQUssSUFBS0MsMEJBQTBCWCxPQUFBQTtBQUMxRCxRQUFJLENBQUNRLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QlIsWUFBUVUsZUFBZVIsZ0JBQWdCTCxZQUFZVSxPQUFPUixNQUFBQTtBQUUxRCxXQUFPWSxXQUFBQSxFQUFhWixNQUFBQTtFQUN4QjtBQUNKO0FBWmdCRixPQUFBQSxhQUFBQTs7O0FDSlQsU0FBU2UsU0FBQUE7QUFDWixTQUFPLENBQUNDLFdBQUFBO0FBQ0pDLFlBQVFDLGVBQWVDLGdCQUFnQkMsY0FBYyxNQUFNSixNQUFBQTtBQUMzRCxXQUFPQTtFQUNYO0FBQ0o7QUFMZ0JEOzs7QUNIaEIsU0FBU00sY0FBYztBQU1oQixTQUFTQyxPQUFvQkMsS0FBdUI7QUFDdkQsU0FBZ0QsQ0FBQ0MsUUFBZ0JDLGFBQXFCQyxlQUFB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ZCxJQUFBQTtNQUMzQixLQUFLO0FBQ0QsZUFBTyxLQUFLdkIsWUFBWXFDLElBQUlkLElBQUFBO01BQ2hDLEtBQUs7QUFDRCxlQUFPLEtBQUtyQixXQUFXbUMsSUFBSWQsSUFBQUE7TUFDL0IsS0FBSztBQUNELGVBQU8sS0FBS3BCLFVBQVVrQyxJQUFJZCxJQUFBQTtJQUNsQztFQUNKO0VBRU9tQixRQUFRQyxJQUFZO0FBQ3ZCLFdBQU8sS0FBSzVDLG1CQUFtQk8sT0FBT3NDLFFBQVFELEVBQUFBO0VBQ2xEO0VBRU9FLEtBQUt0QixNQUFlO0FBQ3ZCLFdBQU8sS0FBS3hCLG1CQUFtQk8sT0FBT3VDLEtBQUt0QixJQUFBQTtFQUMvQztFQUVPdUIsUUFBUXZCLE1BQWU7QUFDMUIsV0FBTyxLQUFLeEIsbUJBQW1CTyxPQUFPd0MsUUFBUXZCLElBQUFBO0VBQ2xEO0FBQ0o7Ozs7Ozs7OyIsCiAgIm5hbWVzIjogWyJpbmplY3RhYmxlIiwgImluamVjdGFibGUiLCAiQ29udHJvbGxlciIsICJvcHRpb25zIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImhhc01ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyIsICJkZWZpbmVNZXRhZGF0YSIsICJpbmplY3RhYmxlIiwgIkdsb2JhbCIsICJ0YXJnZXQiLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiR2xvYmFsTW9kdWxlIiwgImluamVjdCIsICJJbmplY3QiLCAia2V5IiwgInRhcmdldCIsICJwcm9wZXJ0eUtleSIsICJwYXJhbUluZGV4IiwgImlzTmlsIiwgInZhbGlkYXRlSW5qZWN0aW9uVG9rZW4iLCAidmFsaWQiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRJbmplY3Rpb25Ub2tlblNwZWNpZmllZCIsICJ0b2tlbiIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkluamVjdGlvblRva2VuTm90Rm91bmQiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiSW5qZWN0YWJsZSIsICJvcHRpb25zIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImhhc01ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEiLCAiZGVmaW5lTWV0YWRhdGEiLCAiaW5qZWN0YWJsZSIsICJpbmplY3RhYmxlIiwgIk1vZHVsZSIsICJvcHRpb25zIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImhhc01ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgImRlZmluZU1ldGFkYXRhIiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiT3B0aW9uYWwiLCAidGFyZ2V0IiwgInByb3BlcnR5S2V5IiwgInBhcmFtSW5kZXgiLCAib3B0aW9uYWwiLCAiU2V0TWV0YWRhdGEiLCAia2V5IiwgInZhbHVlIiwgImRlY29yYXRvckZhY3RvcnkiLCAidGFyZ2V0IiwgIl9tZXRob2QiLCAiZGVzY3JpcHRvciIsICJSZWZsZWN0IiwgImRlZmluZU1ldGFkYXRhIiwgIktFWSIsICJDYXRjaCIsICJleGNlcHRpb25zIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImhhc01ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UiLCAiZHVwbGljYXRlcyIsICJmaWx0ZXIiLCAiZXhjZXB0aW9uIiwgImluZGV4IiwgImluZGV4T2YiLCAibGVuZ3RoIiwgIkV4Y2VwdGlvbkhhbmRsaW5nQ29uZmxpY3QiLCAiZGVmaW5lTWV0YWRhdGEiLCAiVXNlRmlsdGVycyIsICJmaWx0ZXJzIiwgInRhcmdldCIsICJtZXRob2QiLCAiZGVzY3JpcHRvciIsICJ2YWxpZGF0ZWRGaWx0ZXJzIiwgImZpbHRlciIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgIkVycm9yIiwgInB1c2giLCAiaXNOaWwiLCAibGVuZ3RoIiwgIkVycm9yTWVzc2FnZSIsICJBdExlYXN0T25lRmlsdGVyUmVxdWlyZWQiLCAibWV0aG9kRmlsdGVycyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvckZpbHRlcnMiLCAiZmluZCIsICJpbmNsdWRlcyIsICJEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkIiwgImRlZmluZU1ldGFkYXRhIiwgImNsYXNzRmlsdGVycyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJBcHBSdW50aW1lIiwgImV2ZW50SGFuZGxlciIsICJycGNIYW5kbGVyIiwgImdsb2JhbEd1YXJkcyIsICJnbG9iYWxJbnRlcmNlcHRvcnMiLCAiZ2xvYmFsUGlwZXMiLCAiZ2xvYmFsRXJyb3JGaWx0ZXJzIiwgImxvZ2dlclNlcnZpY2UiLCAiZW5hYmxlU2h1dGRvd25Ib29rcyIsICJib290IiwgInJlc29sdmVkVHJlZSIsICJhc3luY1RyYXZlcnNlIiwgIm5vZGUiLCAic3RhcnRUaW1lIiwgIkRhdGUiLCAibm93IiwgIm1vZHVsZSIsICJ2YWx1ZSIsICJpbnN0YW5jZSIsICJjb250YWluZXIiLCAiZ2V0IiwgIm1ldGFkYXRhIiwgImNsYXNzUmVmIiwgImNvbnRyb2xsZXJzIiwgImZvckVhY2giLCAiY29udHJvbGxlciIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJleHRlcm5hbFByb3ZpZGVycyIsICJ0b2tlbiIsICJsb2ciLCAibmFtZSIsICJydW5MaWZlY3ljbGVNZXRob2QiLCAicnVuTGlmZWN5Y2xlTWV0aG9kcyIsICJ0cmF2ZXJzZSIsICJ0aW1lIiwgInJlZ2lzdGVyVGltZXJzIiwgInJlZ2lzdGVyTGlzdGVuZXJzIiwgInNodXRkb3duIiwgInRpbWVyU2VydmljZSIsICJvd25lciIsICJUSU1FUl9TRVJWSUNFIiwgImV2ZXJ5dGlja3MiLCAidGltZXIiLCAiZGVzdHJveSIsICJpbnRlcnZhbHMiLCAidGltZW91dHMiLCAiY3JvbnMiLCAiY3JvbiIsICJzdG9wIiwgImV2ZW50SGFuZGxlcnMiLCAiaGFuZGxlciIsICJycGNIYW5kbGVycyIsICJldmVudHMiLCAiZXZlbnQiLCAiZ3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJwaXBlcyIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAibWFwRXJyb3JGaWx0ZXJzIiwgImVycm9yRmlsdGVycyIsICJyZWdpc3RlckV2ZW50IiwgInB1c2giLCAicnBjcyIsICJycGMiLCAicmVnaXN0ZXJSUEMiLCAidGltZXJzIiwgInR5cGUiLCAiY3JlYXRlQ3JvbkpvYiIsICJtZXRob2QiLCAiYmluZCIsICJvcHRpb25zIiwgImNyZWF0ZUV2ZXJ5VGljayIsICJjcmVhdGVJbnRlcnZhbCIsICJ0aW1lb3V0IiwgImNyZWF0ZVRpbWVvdXQiLCAiZmlsdGVyTWFwIiwgImZpbHRlciIsICJlcnJvcnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ2F0Y2giLCAibGVuZ3RoIiwgImVycm9yIiwgImlzTmlsIiwgImZpbmQiLCAiZmlsdGVyRXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAiaXNPYmplY3QiLCAicHJvdmlkZXJJbnN0YW5jZSIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAibG9nZ2VyU2VydmljZSIsICJjb250YWluZXJPcHRpb25zIiwgImJpbmQiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgInZhbHVlIiwgImNvbnRhaW5lciIsICJNb2R1bGVDb250YWluZXIiLCAibWV0YWRhdGEiLCAicGFyZW50IiwgImNsYXNzUmVmIiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImdsb2JhbCIsICJfIiwgInByb3ZpZGVyIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgImJpbmRQcm92aWRlciIsICJ0b2tlbiIsICJ0b0R5bmFtaWNWYWx1ZSIsICJnZXQiLCAiaW1wb3J0TW9kdWxlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgImludGVybmFsUHJvdmlkZXJzIiwgIk1PRFVMRV9DT05UQUlORVIiLCAidG9Db25zdGFudFZhbHVlIiwgImNvbnRyb2xsZXJzIiwgIlRJTUVSX1NFUlZJQ0UiLCAidG8iLCAiVGltZXJTZXJ2aWNlIiwgImxvZyIsICJuYW1lIiwgInByb3ZpZGUiLCAidXNlVmFsdWUiLCAiYmluZGluZyIsICJjdHgiLCAiZGVwcyIsICJpbmplY3QiLCAibWFwIiwgImRlcCIsICJpc09iamVjdCIsICJlcnIiLCAib3B0aW9uYWwiLCAidW5kZWZpbmVkIiwgImVycm9yIiwgInVzZUZhY3RvcnkiLCAic2NvcGUiLCAiaW5UcmFuc2llbnRTY29wZSIsICJpblJlcXVlc3RTY29wZSIsICJ1c2VDbGFzcyIsICJ0b1NlcnZpY2UiLCAidXNlRXhpc3RpbmciLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiTW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiY29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgImxvZ2dlclNlcnZpY2UiLCAic2NhbiIsICJjbGFzc1JlZiIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlTWV0YWRhdGEiLCAicmVhZCIsICJtb2R1bGUiLCAiTW9kdWxlIiwgIm1ldGFkYXRhIiwgImxvZyIsICJuYW1lIiwgInNjYW5Db250cm9sbGVycyIsICJtb2R1bGVUcmVlIiwgIlRyZWUiLCAic2Nhbm5lZE1vZHVsZXMiLCAiTWFwIiwgInNldCIsICJpbXBvcnRlZE1vZHVsZSIsICJpbXBvcnRzIiwgInNjYW5Nb2R1bGVzIiwgInJvb3QiLCAicGFyZW50Tm9kZSIsICJzY2FubmVkTW9kdWxlIiwgImdldCIsICJpc05pbCIsICJ2YWx1ZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJhZGQiLCAiY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kiLCAicGFyZW50IiwgInRyZWVOb2RlIiwgIlRyZWVOb2RlIiwgImFkZENoaWxkIiwgImltcG9ydE1vZHVsZSIsICJjb250cm9sbGVycyIsICJjb250cm9sbGVyTWV0YWRhdGEiLCAiY29udHJvbGxlciIsICJDb250cm9sbGVyIiwgIm93bmVyIiwgInB1c2giLCAicGFyZW50TWV0YWRhdGEiLCAiaW5jbHVkZXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkIiwgIlJhZ2VNUFNjcmlwdEV2ZW50IiwgImV2ZW50TmFtZSIsICJsaXN0ZW5lciIsICJkZXN0cm95IiwgIm1wIiwgImV2ZW50cyIsICJyZW1vdmUiLCAiUmFnZU1QRXZlbnRFbW1pdGVyIiwgImVtaXQiLCAiZXZlbnROYW1lIiwgImFyZ3MiLCAibXAiLCAiZXZlbnRzIiwgImNhbGwiLCAib24iLCAibGlzdGVuZXIiLCAiYWRkIiwgIlJhZ2VNUFNjcmlwdEV2ZW50IiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAicmVtb3ZlIiwgIm9mZiIsICJSYWdlTVBUaW1lciIsICJsYXN0VGljayIsICJEYXRlIiwgIm5vdyIsICJpZCIsICJpbnRlcnZhbCIsICJvbmNlIiwgImNhbGxiYWNrIiwgImNsZWFyVGltZXIiLCAiZGVzdHJveSIsICJSYWdlTVBUaW1lcnMiLCAidGltZXJJbmNyZW1lbnRlciIsICJ0aW1lcnMiLCAiTWFwIiwgImV2ZXJ5VGlja0hhbmRsZXJzIiwgImlzRXZlcnlUaWNrUnVubmluZyIsICJldmVyeVRpY2tNYWluSGFuZGxlciIsICJhbGwiLCAidmFsdWVzIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAiX3ZhbHVlIiwgInNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQiLCAiZ2V0QnlJRCIsICJpZCIsICJ0aW1lciIsICJnZXQiLCAiY3JlYXRlVGltZXIiLCAiY2xlYXIiLCAiY2FsbGJhY2siLCAiaW50ZXJ2YWwiLCAib25jZSIsICJhcmdzIiwgImNhbGxiYWNrQmluZCIsICJiaW5kIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidGltZXJJZCIsICJyYWdlTVBUaW1lciIsICJSYWdlTVBUaW1lciIsICJkZWxldGUiLCAic2V0IiwgInNldEludGVydmFsIiwgInRpbWUiLCAiY2IiLCAiY2xlYXJJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJldmVyeVRpY2siLCAiYm91bmQiLCAiaXNDbGllbnRTaWRlIiwgIm1wIiwgImJyb3dzZXJzIiwgImhhbmRsZXIiLCAiZSIsICJjb25zb2xlIiwgImxvZ0Vycm9yIiwgImV2ZW50cyIsICJhZGQiLCAiaW50ZXJ2YWxIYW5kbGVyIiwgIl9ldmVyeVRpY2tJbnRlcnZhbCIsICJzaXplIiwgInJlbW92ZSIsICJuZXh0VGljayIsICJfbmFtZSIsICJ0aW1lRW5kIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJUaW1lcnMiLCAiRXZlbnRzIiwgIlJhZ2VNUEV2ZW50RW1taXRlciIsICJSYWdlTVBUaW1lcnMiLCAicGFyc2VJbnRlcm5hbEFyZ3MiLCAiYXJncyIsICJwbGF5ZXIiLCAiaXNPYmplY3QiLCAidW5kZWZpbmVkIiwgImJvZHkiLCAibG9nIiwgImFyZyIsICJtZXNzYWdlIiwgIm1hcCIsICJhIiwgIkpTT04iLCAic3RyaW5naWZ5IiwgIlN0cmluZyIsICJqb2luIiwgIm1wIiwgImNvbnNvbGUiLCAibG9nSW5mbyIsICJsb2dFcnJvciIsICJsb2dXYXJuaW5nIiwgImxvZ0RlYnVnIiwgIkNvbnRhaW5lciIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQXBwIiwgIm1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiYXBwUnVudGltZSIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJwbHVnaW5zIiwgImxvZ2dlclNlcnZpY2UiLCAibW9kdWxlVHJlZSIsICJsb2FkZWQiLCAic3RhcnQiLCAicm9vdE1vZHVsZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiQXBwQWxyZWFkeUxvYWRlZCIsICJsb2ciLCAicnVuUGx1Z2luTWV0aG9kcyIsICJzY2FuIiwgImJpbmQiLCAiYm9vdCIsICJzdG9wIiwgIkFwcE5vdExvYWRlZCIsICJzaHV0ZG93biIsICJtZXRob2QiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgInAiLCAicGx1Z2luIiwgImdldCIsICJyZXNvbHZlIiwgIkFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAicGx1Z2lucyIsICJnbG9iYWxDb250YWluZXJPcHRpb25zIiwgImNvbmZpZyIsICJ1c2VHbG9iYWxHdWFyZHMiLCAiZ3VhcmRzIiwgInZhbGlkYXRlZEd1YXJkcyIsICJndWFyZCIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUd1YXJkIiwgIkVycm9yIiwgInB1c2giLCAiYmluZCIsICJHTE9CQUxfR1VBUkRTIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJ1c2VHbG9iYWxJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgInZhbGlkYXRlZEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvciIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgIkdMT0JBTF9JTlRFUkNFUFRPUlMiLCAidXNlR2xvYmFsUGlwZXMiLCAicGlwZXMiLCAidmFsaWRhdGVkUGlwZXMiLCAicGlwZSIsICJ2YWxpZGF0ZVBpcGUiLCAiR0xPQkFMX1BJUEVTIiwgInVzZUdsb2JhbEZpbHRlcnMiLCAiZmlsdGVycyIsICJ2YWxpZGF0ZWRGSWx0ZXJzIiwgImZpbHRlciIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgInVzZVBsdWdpbnMiLCAiZm9yRWFjaCIsICJwIiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImludGVybmFsUGx1Z2lucyIsICJnZXQiLCAiUExVR0lOUyIsICJyZWJpbmQiLCAiZW5hYmxlU2h1dGRvd25Ib29rcyIsICJFTkFCTEVfU0hVVERPV05fSE9PS1MiLCAic2V0Q29udGFpbmVyT3B0aW9ucyIsICJvcHRpb25zIiwgIm9ubHlHbG9iYWwiLCAiQ09OVEFJTkVSX09QVElPTlMiLCAiYnVpbGQiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJSZWZsZWN0b3JTZXJ2aWNlIiwgInRvU2VydmljZSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIkFwcCIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJNb2R1bGVUcmVlU2Nhbm5lciIsICJNb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgIkFwcFJ1bnRpbWUiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIk1vZHVsZSIsICJpblRyYW5zaWVudFNjb3BlIiwgIk1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgIkNvbnRyb2xsZXIiLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiTUFOR09fUkVRVUVTVF9GQUNUT1JZIiwgInRvRmFjdG9yeSIsICJjb250ZXh0IiwgImJvZHkiLCAicGxheWVyIiwgInJlcXVlc3QiLCAiY29udGFpbmVyIiwgIiRib2R5IiwgIiRwbGF5ZXIiLCAiTWFuZ29SZXNwb25zZUJhc2UiLCAiTUFOR09fUkVTUE9OU0VfRkFDVE9SWSIsICJFeGVjdXRpb25Db250ZXh0QmFzZSIsICJFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZIiwgInR5cGUiLCAiY2xhc3NSZWYiLCAiaGFuZGxlciIsICJyZXNwb25zZSIsICJuYW1lIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiJHR5cGUiLCAiJHJlcXVlc3QiLCAiJHJlc3BvbnNlIiwgIiRoYW5kbGVyIiwgIiRjbGFzc1JlZiIsICIkbmFtZSIsICJwbHVnaW4iLCAicGx1Z2luSW5zdGFuY2UiLCAib25CdWlsZCIsICJpc0JvdW5kIiwgIkNvbnRhaW5lciIsICJjcmVhdGVBcHBCdWlsZGVyIiwgImVudmlyb21lbnQiLCAicGx1Z2lucyIsICJhcHBCdWlsZGVySW5oZXJpdCIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAiQ29udGFpbmVyIiwgImJpbmQiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJ0b0NvbnN0YW50VmFsdWUiLCAiUExVR0lOUyIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJ0eXBlIiwgIm5hbWUiLCAid2ViVmlld0lkIiwgInRhcmdldCIsICJtZXRob2QiLCAiaXNOaWwiLCAiaXNTdHJpbmciLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkV2ZW50TmFtZU11c3RCZVN0cmluZyIsICJldmVudHMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlckV2ZW50cyIsICJzb21lIiwgImV2ZW50IiwgIkV2ZW50TmFtZU11c3RCZVVuaXF1ZSIsICJkZWZpbmVNZXRhZGF0YSIsICJPbkludGVybmFsIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbldlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIk9uIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlSW50ZXJuYWwiLCAiZXZlbnROYW1lIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIk9uY2UiLCAiZXZlbnROYW1lIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIk9uY2VXZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJCb2R5IiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAidmFsaWRhdGVkUGlwZXMiLCAicGlwZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZVBpcGUiLCAiRXJyb3IiLCAicHVzaCIsICJwYXJhbXMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb21lIiwgInBhcmFtIiwgIkVycm9yTWVzc2FnZSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJBcnJheSIsICJpc0FycmF5IiwgInVuZGVmaW5lZCIsICJkZWZpbmVNZXRhZGF0YSIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJkYXRhIiwgIkluZGV4IiwgImtleSIsICJwaXBlcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgImlzTnVtYmVyIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbmRleEtleU11c3RCZU51bWJlciIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlUGlwZSIsICJwdXNoIiwgInBhcmFtcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvbWUiLCAicGFyYW0iLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJSZXF1ZXN0IiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJSZXEiLCAiUGFyYW0iLCAia2V5IiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAiaXNTdHJpbmciLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlBhcmFtS2V5TXVzdEJlU3RyaW5nIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVQaXBlIiwgInB1c2giLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJBcnJheSIsICJpc0FycmF5IiwgInVuZGVmaW5lZCIsICJkZWZpbmVNZXRhZGF0YSIsICJkYXRhIiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIlJlc3BvbnNlIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJSZXMiLCAiVXNlR3VhcmRzIiwgImd1YXJkcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImRlc2NyaXB0b3IiLCAidmFsaWRhdGVkR3VhcmRzIiwgImd1YXJkIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlR3VhcmQiLCAiRXJyb3IiLCAicHVzaCIsICJpc05pbCIsICJsZW5ndGgiLCAiRXJyb3JNZXNzYWdlIiwgIkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkIiwgIm1ldGhvZEd1YXJkcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJHdWFyZHMiLCAiZGVmaW5lTWV0YWRhdGEiLCAiY2xhc3NHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImRlc2NyaXB0b3IiLCAidmFsaWRhdGVkSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9yIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiRXJyb3IiLCAicHVzaCIsICJpc05pbCIsICJsZW5ndGgiLCAiRXJyb3JNZXNzYWdlIiwgIkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkIiwgIm1ldGhvZEludGVyY2VwdG9ycyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJJbnRlcmNlcHRvcnMiLCAiZGVmaW5lTWV0YWRhdGEiLCAiY2xhc3NJbnRlcmNlcHRvcnMiLCAiVXNlUGlwZXMiLCAicGlwZXMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJkZXNjcmlwdG9yIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVQaXBlIiwgIkVycm9yIiwgInB1c2giLCAiaXNOaWwiLCAibGVuZ3RoIiwgIkVycm9yTWVzc2FnZSIsICJBdExlYXN0T25lUGlwZVJlcXVpcmVkIiwgIm1ldGhvZFBpcGVzIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIlBpcGVzIiwgImRlZmluZU1ldGFkYXRhIiwgImNsYXNzUGlwZXMiLCAiY3JlYXRlUlBDRGVjb3JhdG9yIiwgInR5cGUiLCAibmFtZSIsICJ3ZWJWaWV3SWQiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJpc05pbCIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIiLCAiUlBDTmFtZU11c3RCZVN0cmluZyIsICJycGNzIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJSUENzIiwgInNvbWUiLCAicnBjIiwgIlJQQ05hbWVNdXN0QmVVbmlxdWUiLCAiZGVmaW5lTWV0YWRhdGEiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiY3JlYXRlUlBDRGVjb3JhdG9yIiwgIk9uV2ViVmlld1JlcXVlc3QiLCAiaWQiLCAicnBjTmFtZSIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAidHlwZSIsICJuYW1lIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJpc05pbCIsICJpc1N0cmluZyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiVGltZXJOYW1lTXVzdEJlU3RyaW5nIiwgInRpbWVycyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJUaW1lcnMiLCAic29tZSIsICJ0aW1lciIsICJFdmVudE5hbWVNdXN0QmVVbmlxdWUiLCAiZGVmaW5lTWV0YWRhdGEiLCAiQ3JvbiIsICJwYXR0ZXJuIiwgIm9wdGlvbnMiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAibmFtZSIsICJFdmVyeVRpY2siLCAibmFtZSIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJJbnRlcnZhbCIsICJuYW1lT3JUaW1lb3V0IiwgInRpbWVvdXQiLCAibmFtZSIsICJpbnRlcnZhbFRpbWVvdXQiLCAiaXNTdHJpbmciLCAidW5kZWZpbmVkIiwgImNyZWF0ZVRpbWVyRGVjb3JhdG9yIiwgIlRpbWVvdXQiLCAibmFtZU9yVGltZW91dCIsICJ0aW1lb3V0IiwgIm5hbWUiLCAiaW50ZXJ2YWxUaW1lb3V0IiwgImlzU3RyaW5nIiwgInVuZGVmaW5lZCIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJhcHBseURlY29yYXRvcnMiLCAiZGVjb3JhdG9ycyIsICJ0YXJnZXQiLCAicHJvcGVydHlLZXkiLCAiZGVzY3JpcHRvciIsICJkZWNvcmF0b3IiLCAiRnVuY3Rpb24iLCAiY3JlYXRlUGFyYW1EZWNvcmF0b3IiLCAiZmFjdG9yeSIsICJkYXRhIiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAidmFsaWRhdGVkUGlwZXMiLCAicGlwZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZVBpcGUiLCAiRXJyb3IiLCAicHVzaCIsICJwYXJhbXMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb21lIiwgInBhcmFtIiwgIkVycm9yTWVzc2FnZSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJBcnJheSIsICJpc0FycmF5IiwgInVuZGVmaW5lZCIsICJkZWZpbmVNZXRhZGF0YSIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJDdXN0b20iLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgImZvcndhcmRSZWYiLCAiZm4iLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAiZ2V0IiwgIm1ldGFkYXRhS2V5IiwgInRhcmdldCIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgImdldEFsbCIsICJ0YXJnZXRzIiwgIm1hcCIsICJnZXRBbGxBbmRNZXJnZSIsICJtZXRhZGF0YUNvbGxlY3Rpb24iLCAiZmlsdGVyIiwgIml0ZW0iLCAidW5kZWZpbmVkIiwgImlzRW1wdHkiLCAicmVkdWNlIiwgImEiLCAiYiIsICJBcnJheSIsICJpc0FycmF5IiwgImNvbmNhdCIsICJpc09iamVjdCIsICJnZXRBbGxBbmRPdmVycmlkZSIsICJyZXN1bHQiLCAiY3JlYXRlRGVjb3JhdG9yIiwgIm9wdGlvbnMiLCAia2V5IiwgImdlbmVyYXRlUmFuZG9tSWQiLCAiZGVjb3JhdG9yRm4iLCAibWV0YWRhdGFWYWx1ZSIsICJkZXNjcmlwdG9yIiwgInZhbHVlIiwgInRyYW5zZm9ybSIsICJTZXRNZXRhZGF0YSIsICJLRVkiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQ3JvbiIsICJUaW1lclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIiRldmVyeXRpY2tzIiwgIk1hcCIsICIkaW50ZXJ2YWxzIiwgIiR0aW1lb3V0cyIsICIkY3JvbnMiLCAiYWxsIiwgIlRpbWVycyIsICJldmVyeXRpY2tzIiwgInZhbHVlcyIsICJpbnRlcnZhbHMiLCAidGltZW91dHMiLCAiY3JvbnMiLCAid2FybmluZ1RocmVzaG9sZCIsICJ2YWx1ZSIsICJzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50IiwgImNyZWF0ZUNyb25Kb2IiLCAiY2FsbGJhY2siLCAib3B0aW9ucyIsICJwYXR0ZXJuIiwgImNyb25PcHRpb25zIiwgImNyb24iLCAiQ3JvbiIsICJpc1N0cmluZyIsICJuYW1lIiwgInNldCIsICJjcmVhdGVJbnRlcnZhbCIsICJpbnRlcnZhbCIsICJ0aW1lciIsICJzZXRJbnRlcnZhbCIsICJjcmVhdGVUaW1lb3V0IiwgInRpbWVvdXQiLCAic2V0VGltZW91dCIsICJjcmVhdGVFdmVyeVRpY2siLCAiZXZlcnlUaWNrIiwgImRlbGV0ZSIsICJ0eXBlIiwgImNyb25Kb2IiLCAiZ2V0IiwgInN0b3AiLCAiZXZlcnl0aWNrIiwgImRlc3Ryb3kiLCAiZ2V0QnlOYW1lIiwgImdldEJ5SWQiLCAiaWQiLCAiZ2V0QnlJRCIsICJ0aW1lIiwgInRpbWVFbmQiXQp9Cg==
1870
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NlcnZpY2VzL3JlZmxlY3Rvci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvY29udHJvbGxlci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvY29yZS9nbG9iYWwuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdGFibGUuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NvcmUvbW9kdWxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jb3JlL3NldC1tZXRhZGF0YS5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXJyb3JzL2NhdGNoLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vc3JjL2FwcC9tb2R1bGUtdHJlZS9kZXBlbmRlbmN5LWJpbmRlci50cyIsICIuLi9zcmMvYXBwL21vZHVsZS10cmVlL21vZHVsZS10cmVlLXNjYW5uZXIudHMiLCAiLi4vc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1ldmVudC1lbW1pdGVyLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC10aW1lci50cyIsICIuLi9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9hcHAvYXBwLWJ1aWxkZXIudHMiLCAiLi4vc3JjL2FwcC9hcHAudHMiLCAiLi4vc3JjL2FwcC9jcmVhdGUtYXBwLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXdlYnZpZXcuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvaW5kZXguZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXNwb25zZS5kZW9yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtZ3VhcmRzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtcGlwZXMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1ycGMtZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtdGltZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy90aW1lcnMvZXZlcnktdGljay5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvdGltZXJzL2ludGVydmFsLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvYXBwbHktZGVjb3JhdG9yLnV0aWwudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvY3JlYXRlLXBhcmFtLnV0aWwudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi9zcmMvc2VydmljZXMvdGltZXIuc2VydmljZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBTZXRNZXRhZGF0YSB9IGZyb20gJy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVEZWNvcmF0b3JPcHRpb25zLCBDcmVhdGVEZWNvcmF0b3JXaXRoVHJhbnNmb3JtT3B0aW9ucywgUmVmbGVjdGFibGVEZWNvcmF0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tSWQsIGlzRW1wdHksIGlzT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVmbGVjdG9yU2VydmljZSB7XG4gICAgcHVibGljIGdldDxUUmVzdWx0ID0gdW5rbm93biwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4obWV0YWRhdGFLZXk6IFRLZXksIHRhcmdldDogTmV3YWJsZSB8IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhPFRSZXN1bHQ+KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGw8VFJlc3VsdCBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXSwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4oXG4gICAgICAgIG1ldGFkYXRhS2V5OiBUS2V5LFxuICAgICAgICB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdLFxuICAgICkge1xuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+KHRhcmdldHMgfHwgW10pLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdldChtZXRhZGF0YUtleSwgdGFyZ2V0KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEFuZE1lcmdlPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFDb2xsZWN0aW9uID0gdGhpcy5nZXRBbGw8VFJlc3VsdCwgVEtleT4obWV0YWRhdGFLZXksIHRhcmdldHMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoaXNFbXB0eShtZXRhZGF0YUNvbGxlY3Rpb24pKSByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiA8VFJlc3VsdD5tZXRhZGF0YUNvbGxlY3Rpb24ucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc09iamVjdChhKSAmJiBpc09iamVjdChiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgICAgIC4uLmIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbYSwgYl07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRPdmVycmlkZTxUUmVzdWx0ID0gdW5rbm93biwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4obWV0YWRhdGFLZXk6IFRLZXksIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10pIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiA8VFJlc3VsdD5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0+KG9wdGlvbnM/OiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbT4pOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0+O1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPihcbiAgICAgICAgb3B0aW9uczogQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnM8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZCA9IFRQYXJhbT4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvck9wdGlvbnM8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+ID0ge30sXG4gICAgKTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFLZXkgPSBvcHRpb25zLmtleSA/PyBnZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvckZuID0gKG1ldGFkYXRhVmFsdWU6IFRQYXJhbSkgPT4gKHRhcmdldDogb2JqZWN0IHwgRnVuY3Rpb24sIGtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnRyYW5zZm9ybSA/IG9wdGlvbnMudHJhbnNmb3JtKG1ldGFkYXRhVmFsdWUpIDogbWV0YWRhdGFWYWx1ZTtcbiAgICAgICAgICAgIFNldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB2YWx1ZSA/PyB7fSkodGFyZ2V0LCBrZXkhLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkZWNvcmF0b3JGbi5LRVkgPSBtZXRhZGF0YUtleTtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRvckZuIGFzIFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29udHJvbGxlcjxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IENvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gR2xvYmFsPFQgZXh0ZW5kcyBOZXdhYmxlPigpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HbG9iYWxNb2R1bGUsIHRydWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0PFQgPSB1bmtub3duPihrZXk/OiBJbmplY3Rpb25Ub2tlbjxUPikge1xuICAgIHJldHVybiA8UHJvcGVydHlEZWNvcmF0b3IgJiBQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZywgcGFyYW1JbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKGtleSkgJiYgIXZhbGlkYXRlSW5qZWN0aW9uVG9rZW4oa2V5KS52YWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBrZXkgPz8gUmVmbGVjdC5nZXRNZXRhZGF0YTxJbmplY3Rpb25Ub2tlbj4oJ2Rlc2lnbjp0eXBlJywgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmplY3QodG9rZW4pKHRhcmdldCwgcHJvcGVydHlLZXksIHBhcmFtSW5kZXgpO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3RhYmxlPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gTW9kdWxlPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogTW9kdWxlT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Nb2R1bGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvciEpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Nb2R1bGUsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIE9wdGlvbmFsKCkge1xuICAgIHJldHVybiA8UHJvcGVydHlEZWNvcmF0b3IgJiBQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZywgcGFyYW1JbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gb3B0aW9uYWwoKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbURlY29yYXRvciB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFNldE1ldGFkYXRhPEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFYgPSB1bmtub3duPihrZXk6IEssIHZhbHVlOiBWKSB7XG4gICAgY29uc3QgZGVjb3JhdG9yRmFjdG9yeSA9IDxDdXN0b21EZWNvcmF0b3I+KCh0YXJnZXQ6IG9iamVjdCwgX21ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbiAgICBkZWNvcmF0b3JGYWN0b3J5LktFWSA9IGtleTtcbiAgICByZXR1cm4gZGVjb3JhdG9yRmFjdG9yeTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2F0Y2g8VCBleHRlbmRzIE5ld2FibGU+KC4uLmV4Y2VwdGlvbnM6IHVua25vd25bXSkge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkdXBsaWNhdGVzID0gZXhjZXB0aW9ucy5maWx0ZXIoKGV4Y2VwdGlvbiwgaW5kZXgpID0+IGV4Y2VwdGlvbnMuaW5kZXhPZihleGNlcHRpb24pICE9PSBpbmRleCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNhdGNoLCBleGNlcHRpb25zLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVFcnJvckZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lRmlsdGVyUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RGaWx0ZXJzID1cbiAgICAgICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIGlmICghaXNOaWwobWV0aG9kRmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlcnMuaW5jbHVkZXMoZmlsdGVyKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgWy4uLnZhbGlkYXRlZEZpbHRlcnMsIC4uLm1ldGhvZEZpbHRlcnNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lRmlsdGVyUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBpZiAoIWlzTmlsKGNsYXNzRmlsdGVycy5maW5kKChmaWx0ZXIpID0+IGZpbHRlcnMuaW5jbHVkZXMoZmlsdGVyKSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgWy4uLnZhbGlkYXRlZEZpbHRlcnMsIC4uLmNsYXNzRmlsdGVyc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRU5BQkxFX1NIVVRET1dOX0hPT0tTLCBHTE9CQUxfRVJST1JfRklMVEVSUywgR0xPQkFMX0dVQVJEUywgR0xPQkFMX0lOVEVSQ0VQVE9SUywgR0xPQkFMX1BJUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlckV2ZW50SGFuZGxlciwgQ29udHJvbGxlclJQQ0hhbmRsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSdW50aW1lIHtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJFdmVudEhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVyOiBDb250cm9sbGVyRXZlbnRIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlclJQQ0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcnBjSGFuZGxlcjogQ29udHJvbGxlclJQQ0hhbmRsZXI7XG4gICAgQGluamVjdChHTE9CQUxfR1VBUkRTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW107XG4gICAgQGluamVjdChHTE9CQUxfSU5URVJDRVBUT1JTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW107XG4gICAgQGluamVjdChHTE9CQUxfUElQRVMpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXTtcbiAgICBAaW5qZWN0KEdMT0JBTF9FUlJPUl9GSUxURVJTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRU5BQkxFX1NIVVRET1dOX0hPT0tTKSBAb3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVNodXRkb3duSG9va3M6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYXN5bmMgYm9vdChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbW9kdWxlLCBjb250cm9sbGVycyBhbmQgcHJvdmlkZXJzLlxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4obW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmKTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChjb250cm9sbGVyKSA9PiAoY29udHJvbGxlci5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4oY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZikpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10uZm9yRWFjaCgoW3Rva2VuXSkgPT5cbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmdldDxhbnk+KHRva2VuKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExvZyBtb2R1bGUgbG9hZGVkLlxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgTW9kdWxlICR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IGxvYWRlZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2QobW9kdWxlLCAnb25Nb2R1bGVJbml0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZHMocmVzb2x2ZWRUcmVlLCAnb25Nb2R1bGVJbml0Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcEJvb3RzdHJhcCcpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGFuZCBycGMgbGlzdGVuZXJzLlxuICAgICAgICByZXNvbHZlZFRyZWUudHJhdmVyc2UoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckxpc3RlbmVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgICAgICBgQ29udHJvbGxlciAke2NvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gdGltZXJzIGFuZCBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCAoJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGBNb2R1bGUgJHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gZGVwZW5kZW5jaWVzIGJpbmRlZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRQcm92aWRlcihwcm92aWRlcjogRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4sIGNvbnRhaW5lcjogQ29udGFpbmVyKSB7XG4gICAgICAgIGlmICgndXNlVmFsdWUnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0NvbnN0YW50VmFsdWUocHJvdmlkZXIudXNlVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VGYWN0b3J5JyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvRHluYW1pY1ZhbHVlKChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBzID1cbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuaW5qZWN0Py5tYXAoKGRlcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRlcCkgJiYgJ3Rva2VuJyBpbiBkZXAgJiYgJ29wdGlvbmFsJyBpbiBkZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5vcHRpb25hbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBhIGRlcGVuZGVuY3kuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgPz8gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnVzZUZhY3RvcnkoLi4uZGVwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG8ocHJvdmlkZXIudXNlQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAndHJhbnNpZW50JykgYmluZGluZy5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3JlcXVlc3QnKSBiaW5kaW5nLmluUmVxdWVzdFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGJpbmRpbmcuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvU2VydmljZShwcm92aWRlci51c2VFeGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEeW5hbWljTW9kdWxlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IFRyZWUsIFRyZWVOb2RlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVUcmVlU2Nhbm5lciB7XG4gICAgQGluamVjdChNb2R1bGVNZXRhZGF0YVJlYWRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVNZXRhZGF0YVJlYWRlcjogTW9kdWxlTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlck1ldGFkYXRhUmVhZGVyOiBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHNjYW4oY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPikge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2UgYW5kIHNldCBtZXRhZGF0YSB0byBpdFxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgTW9kdWxlICR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IHNjYW5uZWQgKCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVycyBpbiBtb2R1bGVcbiAgICAgICAgYXdhaXQgdGhpcy5zY2FuQ29udHJvbGxlcnMobW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVycyBpbiBtb2R1bGVcbiAgICAgICAgY29uc3QgbW9kdWxlVHJlZSA9IG5ldyBUcmVlKG1vZHVsZSk7XG4gICAgICAgIGNvbnN0IHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKTtcbiAgICAgICAgc2Nhbm5lZE1vZHVsZXMuc2V0KGNsYXNzUmVmLCBtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGltcG9ydGVkIG1vZHVsZXNcbiAgICAgICAgZm9yIChjb25zdCBpbXBvcnRlZE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKG1vZHVsZVRyZWUucm9vdCwgaW1wb3J0ZWRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kdWxlVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNjYW5Nb2R1bGVzKFxuICAgICAgICBwYXJlbnROb2RlOiBUcmVlTm9kZTxNb2R1bGU+LFxuICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LFxuICAgICAgICBzY2FubmVkTW9kdWxlcyA9IG5ldyBNYXA8TmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LCBNb2R1bGU+KCksXG4gICAgKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIG1vZHVsZSBpcyBhbHJlYWR5IGltcG9ydGVkXG4gICAgICAgIGNvbnN0IHNjYW5uZWRNb2R1bGUgPSBzY2FubmVkTW9kdWxlcy5nZXQoY2xhc3NSZWYpO1xuICAgICAgICBpZiAoIWlzTmlsKHNjYW5uZWRNb2R1bGUpKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnZhbHVlLnJlcGV0aXRpdmVJbXBvcnRzLmFkZChzY2FubmVkTW9kdWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgICAgICAgdGhpcy5jaGVja0NpcmN1bGFyRGVwZW5kZW5jeShwYXJlbnROb2RlLnZhbHVlLm1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YSk7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgbW9kdWxlLnBhcmVudCA9IHBhcmVudE5vZGUudmFsdWU7XG4gICAgICAgIC8vIExvZyBtb2R1bGUgaW5mb1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGBNb2R1bGUgJHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gc2Nhbm5lZCAoJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgQ29udHJvbGxlciAke2NsYXNzUmVmLm5hbWV9IHNjYW5uZWQgKCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50TWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YTogTW9kdWxlTWV0YWRhdGEpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50IG1vZHVsZSBpcyBpbXBvcnRlZCBpbiBtb2R1bGVcbiAgICAgICAgaWYgKG1vZHVsZU1ldGFkYXRhLmltcG9ydHMuaW5jbHVkZXMocGFyZW50TWV0YWRhdGEuY2xhc3NSZWYpKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNjYW5uaW5nIHRoZSBtb2R1bGUgdHJlZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBFdmVudEVtbWl0ZXIge1xuICAgIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIG9uY2UoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCBvbmNlV3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgIH1cblxuICAgIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFRpbWVyIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lciB7XG4gICAgcHVibGljIGxhc3RUaWNrID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBpbnRlcnZhbDogbnVtYmVyID0gMCxcbiAgICAgICAgcHVibGljIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIHB1YmxpYyBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIHByaXZhdGUgY2xlYXJUaW1lcjogRnVuY3Rpb24sXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciwgTXVsdGlwbGF5ZXJUaW1lcnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVyIH0gZnJvbSAnLi9yYWdlbXAtdGltZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXJzIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lcnMge1xuICAgIHByaXZhdGUgdGltZXJJbmNyZW1lbnRlcjogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHRpbWVycyA9IG5ldyBNYXA8bnVtYmVyLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgZXZlcnlUaWNrSGFuZGxlcnMgPSBuZXcgTWFwPG51bWJlciwgeyBjYWxsYmFjazogRnVuY3Rpb247IGJvdW5kOiBGdW5jdGlvbiB9PigpO1xuICAgIHByaXZhdGUgaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tNYWluSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpOiBNdWx0aXBsYXllclRpbWVyW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGltZXJzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudChfdmFsdWU6IG51bWJlcikge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgIH1cblxuICAgIGdldEJ5SUQoaWQ6IG51bWJlcik6IE11bHRpcGxheWVyVGltZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnRpbWVycy5nZXQoaWQpO1xuICAgICAgICByZXR1cm4gdGltZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRpbWVyKFxuICAgICAgICBjcmVhdGVUaW1lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBudW1iZXIsXG4gICAgICAgIGNsZWFyOiAoaWQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uLFxuICAgICAgICBpbnRlcnZhbDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICBvbmNlOiBib29sZWFuLFxuICAgICAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gdHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJyA/IGNyZWF0ZVRpbWVyKGNhbGxiYWNrQmluZCwgaW50ZXJ2YWwpIDogY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgaW50ZXJ2YWwgPz8gMCwgb25jZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhcih0aW1lcklkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIHNldEludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGltZXIoXG4gICAgICAgICAgICAoY2I6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyKSA9PiBzZXRJbnRlcnZhbChjYiBhcyAoKSA9PiB2b2lkLCBpbnRlcnZhbCkgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgICAgICAgICAoaWQ6IG51bWJlcikgPT4gY2xlYXJJbnRlcnZhbChpZCksXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSwgdGltZSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIHRpbWUsIHRydWUsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgZXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNldChpZCwgeyBjYWxsYmFjaywgYm91bmQ6IGNhbGxiYWNrQmluZCB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aWNrIGxvb3AgaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXZlcnlUaWNrUnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0NsaWVudFNpZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgZnJhbWUtYWNjdXJhdGUgdGlja2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW50ZXJ2YWwgd2l0aCBtaW5pbWFsIGRlbGF5IGFzIGFwcHJveGltYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChpbnRlcnZhbEhhbmRsZXIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIDAsIGZhbHNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHRpY2sgbG9vcCBpZiBubyBtb3JlIGhhbmRsZXJzXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVyeVRpY2tIYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSAmJiB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoJ3JlbmRlcicsIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIG5leHRUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIGxldCB0aW1lcklkOiBhbnk7XG5cbiAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGU6IHVzZSByZW5kZXIgZXZlbnQgZm9yIG5leHQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5hZGQoJ3JlbmRlcicsIGhhbmRsZXIpO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZTogdXNlIHNldEltbWVkaWF0ZSBvciBzZXRUaW1lb3V0KDApIGZvciBuZXh0IHRpY2tcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGltZShfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZSBlcXVpdmFsZW50XG4gICAgICAgIC8vIENvdWxkIGltcGxlbWVudCBjdXN0b20gdGltaW5nIGlmIG5lZWRlZFxuICAgIH1cblxuICAgIHRpbWVFbmQoX25hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBjb25zb2xlLnRpbWVFbmQgZXF1aXZhbGVudFxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgTXVsdGlwbGF5ZXJTZXJ2aWNlLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi9yYWdlbXAtZXZlbnQtZW1taXRlcic7XG5pbXBvcnQgeyBSYWdlTVBUaW1lcnMgfSBmcm9tICcuL3JhZ2VtcC10aW1lcnMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgaW1wbGVtZW50cyBNdWx0aXBsYXllclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IFRpbWVyczogTXVsdGlwbGF5ZXJUaW1lcnM7XG4gICAgcmVhZG9ubHkgRXZlbnRzOiBFdmVudEVtbWl0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5FdmVudHMgPSBuZXcgUmFnZU1QRXZlbnRFbW1pdGVyKCk7XG4gICAgICAgIHRoaXMuVGltZXJzID0gbmV3IFJhZ2VNUFRpbWVycygpO1xuICAgIH1cblxuICAgIHBhcnNlSW50ZXJuYWxBcmdzPFUgPSB1bmtub3duLCBUID0gdW5rbm93bj4oXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICk6IHtcbiAgICAgICAgcGxheWVyPzogVTtcbiAgICAgICAgYm9keT86IFQ7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IChpc09iamVjdChhcmdzWzBdKSA/IGFyZ3NbMF0gOiB1bmRlZmluZWQpIGFzIFU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgIGJvZHk6IGFyZ3MsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nV2FybmluZyhhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxvZ0RlYnVnKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIGRlYnVnIGxvZywgdXNlIGluZm9cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dJbmZvKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBHTE9CQUxfRVJST1JfRklMVEVSUyxcbiAgICBHTE9CQUxfR1VBUkRTLFxuICAgIEdMT0JBTF9JTlRFUkNFUFRPUlMsXG4gICAgR0xPQkFMX1BJUEVTLFxuICAgIEVOQUJMRV9TSFVURE9XTl9IT09LUyxcbiAgICBQTFVHSU5TLFxuICAgIEdMT0JBTF9BUFBfQ09OVEFJTkVSLFxuICAgIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSxcbiAgICBNQU5HT19SRVNQT05TRV9GQUNUT1JZLFxuICAgIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksXG4gICAgQ09OVEFJTkVSX09QVElPTlMsXG4gICAgTVVMVElQTEFZRVJfU0VSVklDRSxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL2FwcCc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsXG4gICAgQ29udHJvbGxlckZsb3dIYW5kbGVyLFxuICAgIENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcixcbiAgICBDb250cm9sbGVyUlBDSGFuZGxlcixcbiAgICBQaXBlbGluZUhhbmRsZXIsXG59IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi9tb2R1bGUnO1xuaW1wb3J0IHsgQXBwUnVudGltZSwgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgRXhlY3V0aW9uQ29udGV4dEJhc2UsIE1hbmdvUmVxdWVzdEJhc2UsIE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi9waXBlbGluZSc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQsIEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBSRUZMRUNUT1JfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSZWZsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBCdWlsZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb3JlL2FwcC1idWlsZGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgQXBwQnVpbGRlcjxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZCwgSSBleHRlbmRzIEludGVyY2VwdG9yID0gSW50ZXJjZXB0b3IsIEVGIGV4dGVuZHMgRXJyb3JGaWx0ZXIgPSBFcnJvckZpbHRlcj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlbnZpcm9tZW50OiBBcHBFbnZpcm9tZW50O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBBcHBCdWlsZGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbWVudCA9IGNvbmZpZy5lbnZpcm9tZW50O1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyID0gY29uZmlnLmludGVybmFsQXBwQ29udGFpbmVyO1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZSA9IGNvbmZpZy5tdWx0aXBsYXllclNlcnZpY2U7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IGNvbmZpZy5wbHVnaW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHPiB8IEcpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkR3VhcmRzOiAoTmV3YWJsZTxHPiB8IEcpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVHdWFyZChndWFyZCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkR3VhcmRzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRHdWFyZHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9yczogKE5ld2FibGU8ST4gfCBJKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEludGVyY2VwdG9yczogKE5ld2FibGU8ST4gfCBJKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEludGVyY2VwdG9ycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfSU5URVJDRVBUT1JTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkSW50ZXJjZXB0b3JzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbFBpcGVzKC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9QSVBFUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZFBpcGVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbEZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RUY+IHwgRUYpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRklsdGVyczogKE5ld2FibGU8RUY+IHwgRUYpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUVycm9yRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkRklsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEZJbHRlcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGx1Z2lucyguLi5wbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdKSB7XG4gICAgICAgIHBsdWdpbnMuZm9yRWFjaCgocCkgPT4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUGx1Z2lucyA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0PE5ld2FibGU8TWFuZ29QbHVnaW4+W10+KFBMVUdJTlMpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLnJlYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUoWy4uLmludGVybmFsUGx1Z2lucywgLi4ucGx1Z2luc10pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlU2h1dGRvd25Ib29rcygpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVOQUJMRV9TSFVURE9XTl9IT09LUykudG9Db25zdGFudFZhbHVlKHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q29udGFpbmVyT3B0aW9ucyhvcHRpb25zOiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnMsIG9ubHlHbG9iYWwgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBpZiAob25seUdsb2JhbCkgcmV0dXJuIHRoaXM7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDT05UQUlORVJfT1BUSU9OUykudG9Db25zdGFudFZhbHVlKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEFwcENvbnRhaW5lciA9IG5ldyBDb250YWluZXIodGhpcy5nbG9iYWxDb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgLy8gR0xvYmFsIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoUkVGTEVDVE9SX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShSZWZsZWN0b3JTZXJ2aWNlKTtcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoUmVmbGVjdG9yU2VydmljZSkudG9TZXJ2aWNlKFJFRkxFQ1RPUl9TRVJWSUNFKTtcblxuICAgICAgICAvLyBNdWx0aXBsYXllciBzZXJ2aWNlIGJpbmRpbmdzXG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLm11bHRpcGxheWVyU2VydmljZSk7XG4gXG4gICAgICAgIC8vIEFwcCBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQXBwKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGdsb2JhbEFwcENvbnRhaW5lcik7XG5cbiAgICAgICAgLy8gTW9kdWxlIHRyZWUgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZVRyZWVTY2FubmVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHBSdW50aW1lKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQaXBlbGluZUhhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBNb2R1bGUgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlTWV0YWRhdGFSZWFkZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBDb250cm9sbGVyIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJGbG93SGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckV2ZW50SGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlclJQQ0hhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBNYW5nbyBSZXF1ZXN0IGFuZCBSZXNwb25zZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTWFuZ29SZXF1ZXN0QmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTUFOR09fUkVRVUVTVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoYm9keTogdW5rbm93biwgcGxheWVyOiBQbGF5ZXJNcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjb250ZXh0LmNvbnRhaW5lci5nZXQoTWFuZ29SZXF1ZXN0QmFzZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC4kYm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC4kcGxheWVyID0gcGxheWVyO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1Jlc3BvbnNlQmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTUFOR09fUkVTUE9OU0VfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbnRhaW5lci5nZXQoTWFuZ29SZXNwb25zZUJhc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFeGVjdXRpb25Db250ZXh0QmFzZSkudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlLFxuICAgICAgICAgICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSBjb250ZXh0LmNvbnRhaW5lci5nZXQoRXhlY3V0aW9uQ29udGV4dEJhc2UpO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJHJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kY2xhc3NSZWYgPSBjbGFzc1JlZjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRuYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFBsdWdpbnMgYmluZGluZ3NcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocGx1Z2luKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHBsdWdpbik7XG4gICAgICAgICAgICBpZiAoIXBsdWdpbkluc3RhbmNlLm9uQnVpbGQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgYXdhaXQgcGx1Z2luSW5zdGFuY2Uub25CdWlsZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0dVQVJEUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfR1VBUkRTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfSU5URVJDRVBUT1JTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfSU5URVJDRVBUT1JTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfUElQRVMpKSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfRVJST1JfRklMVEVSUykpXG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KEFwcCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IE1vZHVsZURlcGVuZGVuY3lCaW5kZXIsIE1vZHVsZVRyZWVTY2FubmVyIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgeyBNb2R1bGUgfSBmcm9tICcuL21vZHVsZS9tb2R1bGUnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFJ1bnRpbWUgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4gfSBmcm9tICcuL2ludGVyZmFjZXMvY29yZS9tYW5nby1wbHVnaW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHAge1xuICAgIEBpbmplY3QoTW9kdWxlVHJlZVNjYW5uZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlVHJlZVNjYW5uZXI6IE1vZHVsZVRyZWVTY2FubmVyO1xuICAgIEBpbmplY3QoTW9kdWxlRGVwZW5kZW5jeUJpbmRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVEZXBlbmRlbmN5QmluZGVyOiBNb2R1bGVEZXBlbmRlbmN5QmluZGVyO1xuICAgIEBpbmplY3QoQXBwUnVudGltZSkgcHJpdmF0ZSByZWFkb25seSBhcHBSdW50aW1lOiBBcHBSdW50aW1lO1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwcml2YXRlIG1vZHVsZVRyZWU6IFRyZWU8TW9kdWxlPjtcbiAgICBwcml2YXRlIGxvYWRlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0PFQ+KHJvb3RNb2R1bGU6IE5ld2FibGU8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0YXJ0aW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcEFscmVhZHlMb2FkZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ1N0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnU2Nhbm5pbmcgbW9kdWxlIHRyZWUuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTY2FuJyk7XG4gICAgICAgIHRoaXMubW9kdWxlVHJlZSA9IGF3YWl0IHRoaXMubW9kdWxlVHJlZVNjYW5uZXIuc2Nhbihyb290TW9kdWxlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclNjYW4nKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdCaW5kaW5nIG1vZHVsZSBkZXBlbmRlbmNpZXMuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVCaW5kJyk7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kdWxlRGVwZW5kZW5jeUJpbmRlci5iaW5kKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJCaW5kJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnTG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdBcHAgbG9hZGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RvcHBpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwTm90TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0b3AnKTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnU3RvcHBpbmcgYXBwLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5zaHV0ZG93bih0aGlzLm1vZHVsZVRyZWUpO1xuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCdBcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQXBwQnVpbGRlciB9IGZyb20gJy4vYXBwLWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgeyBBcHBCdWlsZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb3JlL2FwcC1idWlsZGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcjxUIGV4dGVuZHMgQXBwQnVpbGRlcj4oe1xuICAgIGVudmlyb21lbnQsXG4gICAgcGx1Z2lucyxcbiAgICBhcHBCdWlsZGVySW5oZXJpdCxcbiAgICBtdWx0aXBsYXllclNlcnZpY2UsXG59OiB7XG4gICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudDtcbiAgICBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBuZXcgKGNvbmZpZzogQXBwQnVpbGRlckNvbmZpZykgPT4gVDtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKElOVEVSTkFMX0FQUF9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShpbnRlcm5hbEFwcENvbnRhaW5lcik7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUExVR0lOUykudG9Db25zdGFudFZhbHVlKHBsdWdpbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBhcHBCdWlsZGVySW5oZXJpdCh7XG4gICAgICAgIGVudmlyb21lbnQsXG4gICAgICAgIGludGVybmFsQXBwQ29udGFpbmVyLFxuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2U6IG11bHRpcGxheWVyU2VydmljZSEsXG4gICAgICAgIHBsdWdpbnMsXG4gICAgfSk7XG59IiwgImltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBFdmVudE1ldGFkYXRhLCB0eXBlIFBpcGVsaW5lTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnREZWNvcmF0b3IodHlwZTogRXZlbnRNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE9taXQ8RXZlbnRNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlckV2ZW50cywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnNvbWUoKGV2ZW50KSA9PiBldmVudC5tZXRob2QgPT09IG1ldGhvZCAmJiBldmVudC5uYW1lID09PSBuYW1lICYmIGV2ZW50LnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE9taXQ8RXZlbnRNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLFxuICAgICAgICAgICAgWy4uLmV2ZW50cywgeyBtZXRob2QsIG5hbWUsIHR5cGUsIHdlYlZpZXdJZCB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25JbnRlcm5hbCcsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldyhpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uV2ViVmlldycsIGV2ZW50TmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbihldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZUludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlSW50ZXJuYWwnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlKGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZScsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZVdlYlZpZXcnLCBldmVudE5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEJvZHkoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkJvZHksIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluZGV4KGtleTogbnVtYmVyLCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluZGV4S2V5TXVzdEJlTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5JbmRleCwgZGF0YToga2V5LCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcSgpIHtcbiAgICByZXR1cm4gUmVxdWVzdCgpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBQYXJhbShrZXk6IHN0cmluZywgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5QYXJhbUtleU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgZGF0YToga2V5LCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKCkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5SZXNwb25zZSwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcygpIHtcbiAgICByZXR1cm4gUmVzcG9uc2UoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVHdWFyZCB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlR3VhcmRzKC4uLmd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlR3VhcmQoZ3VhcmQpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEd1YXJkcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoZ3VhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RHdWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgWy4uLnZhbGlkYXRlZEd1YXJkcywgLi4ubWV0aG9kR3VhcmRzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3VhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lR3VhcmRSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc0d1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBbLi4udmFsaWRhdGVkR3VhcmRzLCAuLi5jbGFzc0d1YXJkc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUludGVyY2VwdG9yKGludGVyY2VwdG9yKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRJbnRlcmNlcHRvcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kSW50ZXJjZXB0b3JzID1cbiAgICAgICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXG4gICAgICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICBbLi4udmFsaWRhdGVkSW50ZXJjZXB0b3JzLCAuLi5tZXRob2RJbnRlcmNlcHRvcnNdLFxuICAgICAgICAgICAgICAgIHRhcmdldC5jb25zdHJ1Y3RvcixcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc0ludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCBbLi4udmFsaWRhdGVkSW50ZXJjZXB0b3JzLCAuLi5jbGFzc0ludGVyY2VwdG9yc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZVBpcGVzKC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHBpcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZFBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIFsuLi52YWxpZGF0ZWRQaXBlcywgLi4ubWV0aG9kUGlwZXNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc1BpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIFsuLi52YWxpZGF0ZWRQaXBlcywgLi4uY2xhc3NQaXBlc10sIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBQaXBlbGluZU1ldGFkYXRhLCB0eXBlIFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJQQ0RlY29yYXRvcih0eXBlOiBSUENNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKHdlYlZpZXdJZCkgJiYgIWlzU3RyaW5nKHdlYlZpZXdJZCkgJiYgIWlzTnVtYmVyKHdlYlZpZXdJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgcnBjcyA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPE9taXQ8UlBDTWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJSUENzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmIChycGNzLnNvbWUoKHJwYykgPT4gcnBjLm1ldGhvZCA9PT0gbWV0aG9kICYmIHJwYy5uYW1lID09PSBuYW1lICYmIHJwYy50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8T21pdDxSUENNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcyxcbiAgICAgICAgICAgIFsuLi5ycGNzLCB7IG1ldGhvZCwgbmFtZSwgdHlwZSwgd2ViVmlld0lkIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVJQQ0RlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ycGMtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdChycGNOYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25SZXF1ZXN0JywgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXJwYy1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3UmVxdWVzdChpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25XZWJWaWV3UmVxdWVzdCcsIHJwY05hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgVGltZXJNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaW1lckRlY29yYXRvcih0eXBlOiBUaW1lck1ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBUaW1lck1ldGFkYXRhWydvcHRpb25zJ10pIHtcbiAgICByZXR1cm4gPE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5UaW1lck5hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IHRpbWVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8VGltZXJNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuVGltZXJzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmICh0aW1lcnMuc29tZSgodGltZXIpID0+IHRpbWVyLm1ldGhvZCA9PT0gbWV0aG9kICYmIHRpbWVyLm5hbWUgPT09IG5hbWUgJiYgdGltZXIudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8VGltZXJNZXRhZGF0YVtdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5UaW1lcnMsXG4gICAgICAgICAgICBbLi4udGltZXJzLCA8VGltZXJNZXRhZGF0YT57IG1ldGhvZCwgbmFtZSwgdHlwZSwgb3B0aW9ucyB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBDcm9uKHBhdHRlcm46IHN0cmluZyB8IERhdGUsIG9wdGlvbnM6IENyb25PcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2Nyb24nLCBvcHRpb25zLm5hbWUsIHsgcGF0dGVybiwgLi4ub3B0aW9ucyB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gRXZlcnlUaWNrKG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2V2ZXJ5dGljaycsIG5hbWUpO1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbChuYW1lOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbChuYW1lT3JUaW1lb3V0OiBzdHJpbmcgfCBudW1iZXIsIHRpbWVvdXQ/OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3Ige1xuICAgIGNvbnN0IFtuYW1lLCBpbnRlcnZhbFRpbWVvdXRdID0gaXNTdHJpbmcobmFtZU9yVGltZW91dCkgPyBbbmFtZU9yVGltZW91dCwgdGltZW91dF0gOiBbdW5kZWZpbmVkLCBuYW1lT3JUaW1lb3V0XTtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ2ludGVydmFsJywgbmFtZSwgeyB0aW1lb3V0OiBpbnRlcnZhbFRpbWVvdXQhIH0pO1xufVxuIiwgImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQodGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQobmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXQobmFtZU9yVGltZW91dDogc3RyaW5nIHwgbnVtYmVyLCB0aW1lb3V0PzogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICBjb25zdCBbbmFtZSwgaW50ZXJ2YWxUaW1lb3V0XSA9IGlzU3RyaW5nKG5hbWVPclRpbWVvdXQpID8gW25hbWVPclRpbWVvdXQsIHRpbWVvdXRdIDogW3VuZGVmaW5lZCwgbmFtZU9yVGltZW91dF07XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCd0aW1lb3V0JywgbmFtZSwgeyB0aW1lb3V0OiBpbnRlcnZhbFRpbWVvdXQhIH0pO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBhcHBseURlY29yYXRvcnMoLi4uZGVjb3JhdG9yczogKENsYXNzRGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IpW10pIHtcbiAgICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uLCBZPihcbiAgICAgICAgdGFyZ2V0OiBURnVuY3Rpb24gfCBPYmplY3QsXG4gICAgICAgIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsXG4gICAgICAgIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFk+LFxuICAgICkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBkZWNvcmF0b3JzKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAoPENsYXNzRGVjb3JhdG9yPmRlY29yYXRvcikodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICg8TWV0aG9kRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3I+ZGVjb3JhdG9yKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0LCBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJhbURlY29yYXRvcjxUSW5wdXQgPSB1bmtub3duLCBUT3V0cHV0ID0gdW5rbm93bj4oZmFjdG9yeTogKGRhdGE6IFRJbnB1dCwgY3R4OiBFeGVjdXRpb25Db250ZXh0KSA9PiBUT3V0cHV0KSB7XG4gICAgcmV0dXJuIDxUSW5wdXQgPSB1bmtub3duPihkYXRhPzogVElucHV0LCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSA9PiB7XG4gICAgICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaXBlczogdmFsaWRhdGVkUGlwZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRob2RQYXJhbVR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeTogPChkYXRhOiB1bmtub3duLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSA9PiB1bmtub3duPmZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBMYXp5U2VydmljZUlkZW50aWZpZXIsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmPFQgPSB1bmtub3duPihmbjogKCkgPT4gaW50ZXJmYWNlcy5TZXJ2aWNlSWRlbnRpZmllcjxUPikge1xuICAgIHJldHVybiBuZXcgTGF6eVNlcnZpY2VJZGVudGlmaWVyPFQ+KGZuKTtcbn0iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ3JvbiwgdHlwZSBDcm9uT3B0aW9ucyB9IGZyb20gJ2Nyb25lcic7XG5pbXBvcnQgeyBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE11bHRpcGxheWVyU2VydmljZSwgdHlwZSBNdWx0aXBsYXllclRpbWVyIH0gZnJvbSAnLi4vYXBwJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWVyU2VydmljZSB7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGV2ZXJ5dGlja3MgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRpbnRlcnZhbHMgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICR0aW1lb3V0cyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGNyb25zID0gbmV3IE1hcDxzdHJpbmcsIENyb24+KCk7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVyeXRpY2tzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGV2ZXJ5dGlja3MudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW50ZXJ2YWxzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGludGVydmFscy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aW1lb3V0cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiR0aW1lb3V0cy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjcm9ucygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRjcm9ucy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLndhcm5pbmdUaHJlc2hvbGQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDcm9uSm9iKGNhbGxiYWNrOiBGdW5jdGlvbiwgb3B0aW9uczogQ3Jvbk9wdGlvbnMgJiB7IHBhdHRlcm46IHN0cmluZyB8IERhdGUgfSkge1xuICAgICAgICBjb25zdCB7IHBhdHRlcm4sIC4uLmNyb25PcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IGNyb24gPSBDcm9uKHBhdHRlcm4sIGNyb25PcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zLm5hbWUpKSB0aGlzLiRjcm9ucy5zZXQob3B0aW9ucy5uYW1lLCBjcm9uKTtcblxuICAgICAgICByZXR1cm4gY3JvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlSW50ZXJ2YWwoY2FsbGJhY2s6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldEludGVydmFsKGNhbGxiYWNrLCBpbnRlcnZhbCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kaW50ZXJ2YWxzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGltZW91dChjYWxsYmFjazogRnVuY3Rpb24sIHRpbWVvdXQ6IG51bWJlciwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiR0aW1lb3V0cy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUV2ZXJ5VGljayhjYWxsYmFjazogRnVuY3Rpb24sIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZXZlcnlUaWNrKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRldmVyeXRpY2tzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHR5cGU6ICdjcm9uJyB8ICdldmVyeXRpY2snIHwgJ3RpbWVvdXQnIHwgJ2ludGVydmFsJywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY3Jvbic6XG4gICAgICAgICAgICAgICAgY29uc3QgY3JvbkpvYiA9IHRoaXMuJGNyb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY3JvbkpvYikge1xuICAgICAgICAgICAgICAgICAgICBjcm9uSm9iLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kY3JvbnMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V2ZXJ5dGljayc6XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlcnl0aWNrID0gdGhpcy4kZXZlcnl0aWNrcy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZXJ5dGljaykge1xuICAgICAgICAgICAgICAgICAgICBldmVyeXRpY2suZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRldmVyeXRpY2tzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpbnRlcnZhbCc6XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSB0aGlzLiRpbnRlcnZhbHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGludGVydmFscy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMuJHRpbWVvdXRzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kdGltZW91dHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeU5hbWUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZXZlcnl0aWNrcy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdpbnRlcnZhbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmdldEJ5SUQoaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aW1lKG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy50aW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aW1lRW5kKG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy50aW1lRW5kKG5hbWUpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxjQUFBQSxtQkFBa0I7OztBQ0kzQixTQUFTQyxrQkFBa0I7QUFHcEIsU0FBU0MsWUFBOEJDLFNBQTJCO0FBQ3JFLFNBQU8sQ0FBQ0MsV0FBQUE7QUFDSixRQUFJQyxRQUFRQyxZQUFZQyxnQkFBZ0JMLFlBQVlFLE1BQUFBLEdBQVM7QUFDekQsWUFBTSxJQUFJSSxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNLEVBQUVDLE9BQU9DLE9BQU9DLE1BQUssSUFBS0MsMEJBQTBCWCxPQUFBQTtBQUMxRCxRQUFJLENBQUNRLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QlIsWUFBUVUsZUFBZVIsZ0JBQWdCTCxZQUFZVSxPQUFPUixNQUFBQTtBQUUxRCxXQUFPWSxXQUFBQSxFQUFhWixNQUFBQTtFQUN4QjtBQUNKO0FBWmdCRixPQUFBQSxhQUFBQTs7O0FDSlQsU0FBU2UsU0FBQUE7QUFDWixTQUFPLENBQUNDLFdBQUFBO0FBQ0pDLFlBQVFDLGVBQWVDLGdCQUFnQkMsY0FBYyxNQUFNSixNQUFBQTtBQUMzRCxXQUFPQTtFQUNYO0FBQ0o7QUFMZ0JEOzs7QUNIaEIsU0FBU00sY0FBYztBQU1oQixTQUFTQyxPQUFvQkMsS0FBdUI7QUFDdkQsU0FBZ0QsQ0FBQ0MsUUFBZ0JDLGFBQXFCQyxlQUFBQTtBQUNsRixRQUFJLENBQUNDLE1BQU1KLEdBQUFBLEtBQVEsQ0FBQ0ssdUJBQXVCTCxHQUFBQSxFQUFLTSxPQUFPO0FBQ25ELFlBQU0sSUFBSUMsTUFBTUMsYUFBYUMsOEJBQThCO0lBQy9EO0FBRUEsVUFBTUMsUUFBUVYsT0FBT1csUUFBUUMsWUFBNEIsZUFBZVgsUUFBUUMsV0FBQUE7QUFDaEYsUUFBSSxDQUFDUSxPQUFPO0FBQ1IsWUFBTSxJQUFJSCxNQUFNQyxhQUFhSyxzQkFBc0I7SUFDdkQ7QUFFQUMsV0FBT0osS0FBQUEsRUFBT1QsUUFBUUMsYUFBYUMsVUFBQUE7RUFDdkM7QUFDSjtBQWJnQko7OztBQ05oQixTQUFTZ0IsY0FBQUEsbUJBQWtCO0FBT3BCLFNBQVNDLFdBQThCQyxTQUEyQjtBQUNyRSxTQUFPLENBQUNDLFdBQUFBO0FBQ0osUUFBSUMsUUFBUUMsWUFBWUMsZ0JBQWdCTCxZQUFZRSxNQUFBQSxHQUFTO0FBQ3pELFlBQU0sSUFBSUksTUFBTUMsYUFBYUMsdUJBQXVCO0lBQ3hEO0FBRUEsVUFBTSxFQUFFQyxPQUFPQyxPQUFPQyxNQUFLLElBQUtDLDJCQUEyQlgsT0FBQUE7QUFDM0QsUUFBSSxDQUFDUSxNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJSLFlBQVFVLGVBQWVSLGdCQUFnQkwsWUFBWVUsT0FBT1IsTUFBQUE7QUFFMUQsV0FBT1ksWUFBQUEsRUFBYVosTUFBQUE7RUFDeEI7QUFDSjtBQVpnQkY7OztBQ0poQixTQUFTZSxjQUFBQSxtQkFBa0I7QUFJcEIsU0FBU0MsUUFBMEJDLFNBQXVCO0FBQzdELFNBQU8sQ0FBQ0MsV0FBQUE7QUFDSixRQUFJQyxRQUFRQyxZQUFZQyxnQkFBZ0JMLFFBQVFFLE1BQUFBLEdBQVM7QUFDckQsWUFBTSxJQUFJSSxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNLEVBQUVDLE9BQU9DLE9BQU9DLE1BQUssSUFBS0Msc0JBQXNCWCxPQUFBQTtBQUN0RCxRQUFJLENBQUNRLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QlIsWUFBUVUsZUFBZVIsZ0JBQWdCTCxRQUFRVSxPQUFPUixNQUFBQTtBQUV0RCxXQUFPWSxZQUFBQSxFQUFhWixNQUFBQTtFQUN4QjtBQUNKO0FBWmdCRixPQUFBQSxTQUFBQTs7O0FDUGhCLFNBQVNlLGdCQUFnQjtBQUVsQixTQUFTQyxXQUFBQTtBQUNaLFNBQWdELENBQUNDLFFBQWdCQyxhQUFxQkMsZUFBQUE7QUFDbEYsV0FBT0MsU0FBQUEsRUFBV0gsUUFBUUMsYUFBYUMsVUFBQUE7RUFDM0M7QUFDSjtBQUpnQkg7OztBQ0FULFNBQVNLLFlBQW9EQyxLQUFRQyxPQUFRO0FBQ2hGLFFBQU1DLG1CQUFxQyx3QkFBQ0MsUUFBZ0JDLFNBQWtCQyxlQUFBQTtBQUMxRSxRQUFJQSxZQUFZO0FBQ1pDLGNBQVFDLGVBQWVQLEtBQUtDLE9BQU9JLFdBQVdKLEtBQUs7QUFDbkQsYUFBT0k7SUFDWDtBQUNBQyxZQUFRQyxlQUFlUCxLQUFLQyxPQUFPRSxNQUFBQTtBQUNuQyxXQUFPQTtFQUNYLEdBUDJDO0FBUTNDRCxtQkFBaUJNLE1BQU1SO0FBQ3ZCLFNBQU9FO0FBQ1g7QUFYZ0JIOzs7QUNFVCxTQUFTVSxTQUE0QkMsWUFBcUI7QUFDN0QsU0FBTyxDQUFDQyxXQUFBQTtBQUNKLFFBQUlDLFFBQVFDLFlBQVlDLGdCQUFnQkwsT0FBT0UsTUFBQUEsR0FBUztBQUNwRCxZQUFNLElBQUlJLE1BQU1DLGFBQWFDLHVCQUF1QjtJQUN4RDtBQUVBLFVBQU1DLGFBQWFSLFdBQVdTLE9BQU8sQ0FBQ0MsV0FBV0MsVUFBVVgsV0FBV1ksUUFBUUYsU0FBQUEsTUFBZUMsS0FBQUE7QUFDN0YsUUFBSUgsV0FBV0ssUUFBUTtBQUNuQixZQUFNLElBQUlSLE1BQU1DLGFBQWFRLHlCQUF5QjtJQUMxRDtBQUVBWixZQUFRYSxlQUFlWCxnQkFBZ0JMLE9BQU9DLFlBQVlDLE1BQUFBO0FBRTFELFdBQU9BO0VBQ1g7QUFDSjtBQWZnQkY7OztBQ0dULFNBQVNpQixjQUFjQyxTQUErQztBQUN6RSxTQUEwQyxDQUFDQyxRQUFnQkMsUUFBaUJDLGVBQUFBO0FBQ3hFLFVBQU1DLG1CQUEyRCxDQUFBO0FBQ2pFLGVBQVdDLFVBQVVMLFNBQVM7QUFDMUIsWUFBTSxFQUFFTSxPQUFPQyxPQUFPQyxNQUFLLElBQUtDLG9CQUFvQkosTUFBQUE7QUFDcEQsVUFBSSxDQUFDQyxNQUFPLE9BQU0sSUFBSUksTUFBTUYsS0FBQUE7QUFDNUJKLHVCQUFpQk8sS0FBS0osS0FBQUE7SUFDMUI7QUFFQSxRQUFJLENBQUNLLE1BQU1ULFVBQUFBLEtBQWUsQ0FBQ1MsTUFBTVQsV0FBV0ksS0FBSyxHQUFHO0FBQ2hELFVBQUlQLFFBQVFhLFdBQVcsR0FBRztBQUN0QixjQUFNLElBQUlILE1BQU1JLGFBQWFDLHdCQUF3QjtNQUN6RDtBQUVBLFlBQU1DLGdCQUNGQyxRQUFRQyxZQUFvQ0MsZ0JBQWdCQyxjQUFjbkIsT0FBTyxhQUFhQyxNQUFBQSxLQUFXLENBQUE7QUFDN0csVUFBSSxDQUFDVSxNQUFNSSxjQUFjSyxLQUFLLENBQUNoQixXQUFXTCxRQUFRc0IsU0FBU2pCLE1BQUFBLENBQUFBLENBQUFBLEdBQVc7QUFDbEUsY0FBTSxJQUFJSyxNQUFNSSxhQUFhUyw0QkFBNEI7TUFDN0Q7QUFDQU4sY0FBUU8sZUFBZUwsZ0JBQWdCQyxjQUFjO1dBQUloQjtXQUFxQlk7U0FBZ0JmLE9BQU8sYUFBYUMsTUFBQUE7QUFDbEgsYUFBT0M7SUFDWDtBQUVBLFFBQUlILFFBQVFhLFdBQVcsR0FBRztBQUN0QixZQUFNLElBQUlILE1BQU1JLGFBQWFDLHdCQUF3QjtJQUN6RDtBQUVBLFVBQU1VLGVBQWVSLFFBQVFDLFlBQW9DQyxnQkFBZ0JDLGNBQWNuQixNQUFBQSxLQUFXLENBQUE7QUFDMUcsUUFBSSxDQUFDVyxNQUFNYSxhQUFhSixLQUFLLENBQUNoQixXQUFXTCxRQUFRc0IsU0FBU2pCLE1BQUFBLENBQUFBLENBQUFBLEdBQVc7QUFDakUsWUFBTSxJQUFJSyxNQUFNSSxhQUFhUyw0QkFBNEI7SUFDN0Q7QUFDQU4sWUFBUU8sZUFBZUwsZ0JBQWdCQyxjQUFjO1NBQUloQjtTQUFxQnFCO09BQWV4QixNQUFBQTtBQUM3RixXQUFPQTtFQUNYO0FBQ0o7QUFsQ2dCRjs7O0FDRmhCLFNBQVMyQixVQUFBQSxTQUFRQyxjQUFBQSxhQUFZQyxZQUFBQSxpQkFBZ0I7Ozs7Ozs7Ozs7OztBQVV0QyxJQUFNQyxhQUFOLE1BQU1BO1NBQUFBOzs7RUFDd0NDO0VBQ0ZDO0VBQ1BDO0VBQ01DO0VBQ1BDO0VBQ1FDO0VBQ05DO0VBQ21CQztFQUU1RCxNQUFhQyxLQUFLQyxjQUE0QjtBQUMxQyxVQUFNQSxhQUFhQyxjQUFjLE9BQU9DLFNBQUFBO0FBQ3BDLFlBQU1DLFlBQVlDLEtBQUtDLElBQUc7QUFFMUIsWUFBTUMsU0FBU0osS0FBS0s7QUFDcEJELGFBQU9FLFdBQVdGLE9BQU9HLFVBQVVDLElBQWlDSixPQUFPSyxTQUFTQyxRQUFRO0FBQzVGTixhQUFPTyxZQUFZQyxRQUNmLENBQUNDLGVBQWdCQSxXQUFXUCxXQUFXRixPQUFPRyxVQUFVQyxJQUFpQ0ssV0FBV0osU0FBU0MsUUFBUSxDQUFBO0FBRXpIO1dBQUlOLE9BQU9LLFNBQVNLO1dBQXNCVixPQUFPSyxTQUFTTTtRQUFtQkgsUUFBUSxDQUFDLENBQUNJLEtBQUFBLE1BQ25GWixPQUFPRyxVQUFVQyxJQUFTUSxLQUFBQSxDQUFBQTtBQUk5QixXQUFLckIsY0FBY3NCLElBQUksVUFBVWIsT0FBT0ssU0FBU0MsU0FBU1EsSUFBSSxZQUFZaEIsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0FBQ3JHLFlBQU0sS0FBS2tCLG1CQUFtQmYsUUFBUSxjQUFBO0lBQzFDLENBQUE7QUFFQSxVQUFNLEtBQUtnQixvQkFBb0J0QixjQUFjLGdCQUFBO0FBRzdDQSxpQkFBYXVCLFNBQVMsQ0FBQ3JCLFNBQUFBO0FBQ25CLFlBQU1JLFNBQVNKLEtBQUtLO0FBQ3BCRCxhQUFPTyxZQUFZQyxRQUFRLENBQUNDLGVBQUFBO0FBQ3hCLGNBQU1TLE9BQU9wQixLQUFLQyxJQUFHO0FBQ3JCLGFBQUtvQixlQUFlVixVQUFBQTtBQUNwQixhQUFLVyxrQkFBa0JYLFVBQUFBO0FBQ3ZCLGFBQUtsQixjQUFjc0IsSUFDZixjQUFjSixXQUFXSixTQUFTQyxTQUFTUSxJQUFJLHFDQUFxQ2hCLEtBQUtDLElBQUcsSUFBS21CLElBQUFBLEtBQVM7TUFFbEgsQ0FBQTtJQUNKLENBQUE7RUFDSjtFQUVBLE1BQWFHLFNBQVMzQixjQUE0QjtBQUM5QyxRQUFJLEtBQUtGLHFCQUFxQjtBQUMxQixZQUFNLEtBQUt3QixvQkFBb0J0QixjQUFjLGlCQUFBO0FBQzdDLFlBQU0sS0FBS3NCLG9CQUFvQnRCLGNBQWMsbUJBQUE7SUFDakQ7QUFFQSxVQUFNQSxhQUFhQyxjQUFjLE9BQU9DLFNBQUFBO0FBQ3BDLFlBQU1JLFNBQVNKLEtBQUtLO0FBQ3BCRCxhQUFPTyxZQUFZQyxRQUFRLENBQUNDLGVBQUFBO0FBQ3hCLGNBQU1hLGVBQWViLFdBQVdjLE1BQU1wQixVQUFVQyxJQUFrQm9CLGFBQUFBO0FBR2xFRixxQkFBYUcsV0FBV2pCLFFBQVEsQ0FBQ2tCLFVBQVVBLE1BQU1DLFFBQU8sQ0FBQTtBQUN4REwscUJBQWFNLFVBQVVwQixRQUFRLENBQUNrQixVQUFVQSxNQUFNQyxRQUFPLENBQUE7QUFDdkRMLHFCQUFhTyxTQUFTckIsUUFBUSxDQUFDa0IsVUFBVUEsTUFBTUMsUUFBTyxDQUFBO0FBQ3RETCxxQkFBYVEsTUFBTXRCLFFBQVEsQ0FBQ3VCLFNBQVNBLEtBQUtDLEtBQUksQ0FBQTtBQUc5Q3ZCLG1CQUFXd0IsY0FBY3pCLFFBQVEsQ0FBQzBCLFlBQVlBLFFBQVFQLFFBQU8sQ0FBQTtBQUM3RGxCLG1CQUFXMEIsWUFBWTNCLFFBQVEsQ0FBQzBCLFlBQVlBLFFBQVFQLFFBQU8sQ0FBQTtNQUMvRCxDQUFBO0lBQ0osQ0FBQTtBQWFBLFFBQUksS0FBS25DLHFCQUFxQjtBQUMxQixZQUFNLEtBQUt3QixvQkFBb0J0QixjQUFjLGVBQUE7SUFDakQ7RUFDSjtFQUVRMEIsa0JBQWtCWCxZQUF3QjtBQUM5QyxVQUFNVCxTQUFTUyxXQUFXYztBQUMxQmQsZUFBV0osU0FBUytCLE9BQU81QixRQUFRLENBQUM2QixVQUFBQTtBQUNoQyxZQUFNQyxTQUFTO1dBQUksS0FBS25EO1dBQWlCYSxPQUFPSyxTQUFTaUM7V0FBVzdCLFdBQVdKLFNBQVNpQztXQUFXRCxNQUFNQzs7QUFDekcsWUFBTUMsZUFBZTtXQUNkLEtBQUtuRDtXQUNMWSxPQUFPSyxTQUFTa0M7V0FDaEI5QixXQUFXSixTQUFTa0M7V0FDcEJGLE1BQU1FOztBQUViLFlBQU1DLFFBQVE7V0FBSSxLQUFLbkQ7V0FBZ0JXLE9BQU9LLFNBQVNtQztXQUFVL0IsV0FBV0osU0FBU21DO1dBQVVILE1BQU1HOztBQUNyRyxZQUFNQyxxQkFBcUIsS0FBS0MsZ0JBQWdCO1dBQ3pDLEtBQUtwRDtXQUNMVSxPQUFPSyxTQUFTc0M7V0FDaEJsQyxXQUFXSixTQUFTc0M7V0FDcEJOLE1BQU1NO09BQ1o7QUFFRCxZQUFNVCxVQUFVLEtBQUtqRCxhQUFhMkQsY0FBY04sUUFBUUMsY0FBY0MsT0FBT0Msb0JBQW9CaEMsWUFBWTRCLEtBQUFBO0FBQzdHNUIsaUJBQVd3QixjQUFjWSxLQUFLWCxPQUFBQTtJQUNsQyxDQUFBO0FBRUF6QixlQUFXSixTQUFTeUMsS0FBS3RDLFFBQVEsT0FBT3VDLFFBQUFBO0FBQ3BDLFlBQU1ULFNBQVM7V0FBSSxLQUFLbkQ7V0FBaUJhLE9BQU9LLFNBQVNpQztXQUFXN0IsV0FBV0osU0FBU2lDO1dBQVdTLElBQUlUOztBQUN2RyxZQUFNQyxlQUFlO1dBQ2QsS0FBS25EO1dBQ0xZLE9BQU9LLFNBQVNrQztXQUNoQjlCLFdBQVdKLFNBQVNrQztXQUNwQlEsSUFBSVI7O0FBRVgsWUFBTUMsUUFBUTtXQUFJLEtBQUtuRDtXQUFnQlcsT0FBT0ssU0FBU21DO1dBQVUvQixXQUFXSixTQUFTbUM7V0FBVU8sSUFBSVA7O0FBQ25HLFlBQU1DLHFCQUFxQixLQUFLQyxnQkFBZ0I7V0FDekMsS0FBS3BEO1dBQ0xVLE9BQU9LLFNBQVNzQztXQUNoQmxDLFdBQVdKLFNBQVNzQztXQUNwQkksSUFBSUo7T0FDVjtBQUVELFlBQU1ULFVBQVUsTUFBTSxLQUFLaEQsV0FBVzhELFlBQVlWLFFBQVFDLGNBQWNDLE9BQU9DLG9CQUFvQmhDLFlBQVlzQyxHQUFBQTtBQUMvR3RDLGlCQUFXMEIsWUFBWVUsS0FBS1gsT0FBQUE7SUFDaEMsQ0FBQTtFQUNKO0VBRU9mLGVBQWVWLFlBQXdCO0FBQzFDLFVBQU1hLGVBQWViLFdBQVdjLE1BQU1wQixVQUFVQyxJQUFrQm9CLGFBQUFBO0FBRWxFZixlQUFXSixTQUFTNEMsT0FBT3pDLFFBQVEsQ0FBQ2tCLFVBQUFBO0FBQ2hDLFVBQUlBLE1BQU13QixTQUFTLFFBQVE7QUFDdkI1QixxQkFBYTZCLGNBQWMxQyxXQUFXUCxTQUFTd0IsTUFBTTBCLE1BQU0sRUFBR0MsS0FBSzVDLFdBQVdQLFFBQVEsR0FBR3dCLE1BQU00QixPQUFPO01BQzFHLFdBQVc1QixNQUFNd0IsU0FBUyxhQUFhO0FBQ25DNUIscUJBQWFpQyxnQkFBZ0I5QyxXQUFXUCxTQUFTd0IsTUFBTTBCLE1BQU0sRUFBR0MsS0FBSzVDLFdBQVdQLFFBQVEsR0FBR3dCLE1BQU1aLElBQUk7TUFDekcsV0FBV1ksTUFBTXdCLFNBQVMsWUFBWTtBQUNsQzVCLHFCQUFha0MsZUFDVC9DLFdBQVdQLFNBQVN3QixNQUFNMEIsTUFBTSxFQUFHQyxLQUFLNUMsV0FBV1AsUUFBUSxHQUMzRHdCLE1BQU00QixRQUFRRyxTQUNkL0IsTUFBTVosSUFBSTtNQUVsQixXQUFXWSxNQUFNd0IsU0FBUyxXQUFXO0FBQ2pDNUIscUJBQWFvQyxjQUFjakQsV0FBV1AsU0FBU3dCLE1BQU0wQixNQUFNLEVBQUdDLEtBQUs1QyxXQUFXUCxRQUFRLEdBQUd3QixNQUFNNEIsUUFBUUcsU0FBUy9CLE1BQU1aLElBQUk7TUFDOUg7SUFDSixDQUFBO0VBQ0o7RUFFUTRCLGdCQUFnQkMsY0FBc0Q7QUFDMUUsVUFBTWdCLFlBQWlGLENBQUE7QUFFdkYsZUFBV0MsVUFBVWpCLGNBQWM7QUFDL0IsWUFBTWtCLFNBQVNDLFFBQVFDLFlBQW1CQyxnQkFBZ0JDLE9BQU9MLE1BQUFBLEtBQVcsQ0FBQTtBQUM1RSxVQUFJQyxPQUFPSyxXQUFXLEdBQUc7QUFDckJMLGVBQU9oQixLQUFLLGlCQUFBO01BQ2hCO0FBQ0EsaUJBQVdzQixTQUFTTixRQUFRO0FBQ3hCLFlBQUksQ0FBQ08sTUFBTVQsVUFBVVUsS0FBSyxDQUFDQyxnQkFBZ0JBLFlBQVksQ0FBQSxNQUFPSCxLQUFBQSxDQUFBQSxHQUFTO0FBQ25FLGVBQUs1RSxjQUFjNEUsTUFBTSxzREFBQTtBQUN6QixnQkFBTSxJQUFJSSxNQUFNQyxhQUFhQywyQkFBMkI7UUFDNUQ7QUFDQWQsa0JBQVVkLEtBQUs7VUFBQ3NCO1VBQU9QO1NBQU87TUFDbEM7SUFDSjtBQUVBLFdBQU9EO0VBQ1g7RUFFQSxNQUFjM0Msb0JBQ1Z0QixjQUNBMEQsUUFDRjtBQUNFLFdBQU8xRCxhQUFhQyxjQUFjLE9BQU9DLFNBQVMsTUFBTSxLQUFLbUIsbUJBQW1CbkIsS0FBS0ssT0FBT21ELE1BQUFBLENBQUFBO0VBQ2hHO0VBRUEsTUFBY3JDLG1CQUNWZixRQUNBb0QsUUFDRjtBQUNFLFVBQU1zQixRQUFRQyxJQUNWM0UsT0FBT08sWUFBWXFFLElBQUksT0FBT25FLGVBQUFBO0FBQzFCLFVBQUksQ0FBQ29FLFNBQVNwRSxXQUFXUCxRQUFRLEtBQUtrRSxNQUFNM0QsV0FBV1AsU0FBU2tELE1BQUFBLENBQU8sRUFBRztBQUMxRSxZQUFNM0MsV0FBV1AsU0FBU2tELE1BQUFBLEVBQU87SUFDckMsQ0FBQSxDQUFBO0FBRUosVUFBTXNCLFFBQVFDLElBQ1Y7U0FBSTNFLE9BQU9LLFNBQVNLO1NBQXNCVixPQUFPSyxTQUFTTTtNQUFtQmlFLElBQUksT0FBTyxDQUFDaEUsS0FBQUEsTUFBTTtBQUMzRixZQUFNa0UsbUJBQWdEOUUsT0FBT0csVUFBVUMsSUFBSVEsS0FBQUE7QUFDM0UsVUFBSSxDQUFDaUUsU0FBU0MsZ0JBQUFBLEtBQXFCVixNQUFNVSxpQkFBaUIxQixNQUFBQSxDQUFPLEVBQUc7QUFDcEUsWUFBTTBCLGlCQUFpQjFCLE1BQUFBLEVBQU87SUFDbEMsQ0FBQSxDQUFBO0FBRUosUUFBSSxDQUFDeUIsU0FBUzdFLE9BQU9FLFFBQVEsS0FBS2tFLE1BQU1wRSxPQUFPRSxTQUFTa0QsTUFBQUEsQ0FBTyxFQUFHO0FBQ2xFLFVBQU1wRCxPQUFPRSxTQUFTa0QsTUFBQUEsRUFBTztFQUNqQztBQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzTUEsU0FBUzJCLFdBQVdDLFVBQUFBLFNBQVFDLGNBQUFBLGFBQVlDLFlBQUFBLGlCQUFpQzs7Ozs7Ozs7Ozs7O0FBTWxFLElBQU1DLHlCQUFOLE1BQU1BO1NBQUFBOzs7RUFDc0NDO0VBQ05DO0VBQ2VDO0VBRXhELE1BQWFDLEtBQUtDLGNBQTRCO0FBQzFDLFVBQU1BLGFBQWFDLGNBQWMsT0FBT0MsU0FBQUE7QUFDcEMsWUFBTUMsWUFBWUMsS0FBS0MsSUFBRztBQUUxQixZQUFNQyxTQUFTSixLQUFLSztBQUNwQkQsYUFBT0UsWUFBWSxJQUFJQyxnQkFBZ0JILE9BQU9JLFNBQVNGLGFBQWEsS0FBS1YsZ0JBQWdCO0FBRXpGUSxhQUFPRSxVQUFVRyxTQUFTLEtBQUtmO0FBQy9CLFdBQUtBLG1CQUFtQkcsS0FBS08sT0FBT0ksU0FBU0UsUUFBUSxFQUFFQyxPQUFNLEVBQUdDLGlCQUFnQjtBQUdoRixVQUFJUixPQUFPSSxTQUFTSyxRQUFRO0FBRXhCLG1CQUFXLENBQUNDLEdBQUdDLFFBQUFBLEtBQWFYLE9BQU9JLFNBQVNRLG1CQUFtQjtBQUMzRCxlQUFLQyxhQUFhRixVQUFVLEtBQUtyQixrQkFBa0I7UUFDdkQ7TUFDSixPQUFPO0FBRUgsbUJBQVcsQ0FBQ3dCLE9BQU9ILFFBQUFBLEtBQWFYLE9BQU9JLFNBQVNRLG1CQUFtQjtBQUMvRCxlQUFLQyxhQUFhRixVQUFVWCxPQUFPRSxTQUFTO0FBQzVDRixpQkFBT0ssUUFBUUgsVUFBVVQsS0FBS3FCLEtBQUFBLEVBQU9DLGVBQWUsTUFBTWYsT0FBT0UsVUFBVWMsSUFBSUYsS0FBQUEsQ0FBQUE7UUFDbkY7QUFDQSxtQkFBV0csZ0JBQWdCakIsT0FBT2tCLG1CQUFtQjtBQUNqRCxxQkFBVyxDQUFDSixLQUFBQSxLQUFVRyxhQUFhYixTQUFTUSxtQkFBbUI7QUFDM0RaLG1CQUFPRSxVQUFVVCxLQUFLcUIsS0FBQUEsRUFBT0MsZUFBZSxNQUFNRSxhQUFhZixVQUFVYyxJQUFJRixLQUFBQSxDQUFBQTtVQUNqRjtRQUNKO01BQ0o7QUFHQSxpQkFBVyxDQUFDSixHQUFHQyxRQUFBQSxLQUFhWCxPQUFPSSxTQUFTZSxtQkFBbUI7QUFDM0QsYUFBS04sYUFBYUYsVUFBVVgsT0FBT0UsU0FBUztNQUNoRDtBQUdBRixhQUFPRSxVQUFVVCxLQUFLMkIsZ0JBQUFBLEVBQWtCQyxnQkFBZ0JyQixPQUFPRSxTQUFTO0FBR3hFLGlCQUFXSSxZQUFZTixPQUFPSSxTQUFTa0IsYUFBYTtBQUNoRHRCLGVBQU9FLFVBQVVULEtBQUthLFFBQUFBLEVBQVVDLE9BQU0sRUFBR0MsaUJBQWdCO01BQzdEO0FBR0FSLGFBQU9FLFVBQVVULEtBQUs4QixhQUFBQSxFQUFlQyxHQUFHQyxZQUFBQSxFQUFjakIsaUJBQWdCO0FBRXRFLFdBQUtqQixjQUFjbUMsSUFDZixVQUFVMUIsT0FBT0ksU0FBU0UsU0FBU3FCLElBQUkseUJBQXlCN0IsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0lBRW5HLENBQUE7RUFDSjtFQUVRZ0IsYUFBYUYsVUFBc0NULFdBQXNCO0FBQzdFLFFBQUksY0FBY1MsVUFBVTtBQUN4QlQsZ0JBQVVULEtBQUtrQixTQUFTaUIsT0FBTyxFQUFFUCxnQkFBZ0JWLFNBQVNrQixRQUFRO0lBQ3RFLFdBQVcsZ0JBQWdCbEIsVUFBVTtBQUNqQyxZQUFNbUIsVUFBVTVCLFVBQVVULEtBQUtrQixTQUFTaUIsT0FBTyxFQUFFYixlQUFlLENBQUNnQixRQUFBQTtBQUM3RCxjQUFNQyxPQUNGckIsU0FBU3NCLFFBQVFDLElBQUksQ0FBQ0MsUUFBQUE7QUFDbEIsY0FBSUMsU0FBU0QsR0FBQUEsS0FBUSxXQUFXQSxPQUFPLGNBQWNBLEtBQUs7QUFDdEQsZ0JBQUk7QUFDQSxxQkFBT0osSUFBSTdCLFVBQVVjLElBQUltQixJQUFJckIsS0FBSztZQUN0QyxTQUFTdUIsS0FBSztBQUNWLGtCQUFJRixJQUFJRyxTQUFVLFFBQU9DO0FBQ3pCLG1CQUFLaEQsY0FBY2lELE1BQU0seURBQUE7QUFDekIsb0JBQU1IO1lBQ1Y7VUFDSjtBQUNBLGlCQUFPTixJQUFJN0IsVUFBVWMsSUFBSW1CLEdBQUFBO1FBQzdCLENBQUEsS0FBTSxDQUFBO0FBQ1YsZUFBT3hCLFNBQVM4QixXQUFVLEdBQUlULElBQUFBO01BQ2xDLENBQUE7QUFDQSxVQUFJckIsU0FBUytCLFVBQVUsWUFBYVosU0FBUWEsaUJBQWdCO2VBQ25EaEMsU0FBUytCLFVBQVUsVUFBV1osU0FBUWMsZUFBYztVQUN4RGQsU0FBUXRCLGlCQUFnQjtJQUNqQyxXQUFXLGNBQWNHLFVBQVU7QUFDL0IsWUFBTW1CLFVBQVU1QixVQUFVVCxLQUFLa0IsU0FBU2lCLE9BQU8sRUFBRUosR0FBR2IsU0FBU2tDLFFBQVE7QUFDckUsVUFBSWxDLFNBQVMrQixVQUFVLFlBQWFaLFNBQVFhLGlCQUFnQjtlQUNuRGhDLFNBQVMrQixVQUFVLFVBQVdaLFNBQVFjLGVBQWM7VUFDeERkLFNBQVF0QixpQkFBZ0I7SUFDakMsV0FBVyxpQkFBaUJHLFVBQVU7QUFDbENULGdCQUFVVCxLQUFLa0IsU0FBU2lCLE9BQU8sRUFBRWtCLFVBQVVuQyxTQUFTb0MsV0FBVztJQUNuRTtFQUNKO0FBQ0o7Ozs7Ozs7Ozs7OztzRkFyRjBGLHFCQUFBLGNBQUEsU0FBQSxXQUFBLGdCQUFBOzs7Ozs7O0FDVjFGLFNBQVNDLFVBQUFBLFNBQVFDLGNBQUFBLG1CQUFrQjs7Ozs7Ozs7Ozs7O0FBUTVCLElBQU1DLG9CQUFOLE1BQU1BO1NBQUFBOzs7RUFDc0NDO0VBQ0lDO0VBQ1ZDO0VBRXpDLE1BQWFDLEtBQUtDLFVBQTREO0FBQzFFLFVBQU1DLFlBQVlDLEtBQUtDLElBQUc7QUFFMUIsVUFBTUMsaUJBQWlCLE1BQU0sS0FBS1IscUJBQXFCUyxLQUFLTCxRQUFBQTtBQUU1RCxVQUFNTSxTQUFTLElBQUlDLE9BQUFBO0FBQ25CRCxXQUFPRSxXQUFXSjtBQUVsQixTQUFLTixjQUFjVyxJQUFJLFVBQVVILE9BQU9FLFNBQVNSLFNBQVNVLElBQUksYUFBYVIsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0FBRXRHLFVBQU0sS0FBS1UsZ0JBQWdCTCxNQUFBQTtBQUUzQixVQUFNTSxhQUFhLElBQUlDLEtBQUtQLE1BQUFBO0FBQzVCLFVBQU1RLGlCQUFpQixvQkFBSUMsSUFBQUE7QUFDM0JELG1CQUFlRSxJQUFJaEIsVUFBVU0sTUFBQUE7QUFFN0IsZUFBV1csa0JBQWtCYixlQUFlYyxTQUFTO0FBQ2pELFlBQU0sS0FBS0MsWUFBWVAsV0FBV1EsTUFBTUgsZ0JBQWdCSCxjQUFBQTtJQUM1RDtBQUNBLFdBQU9GO0VBQ1g7RUFFQSxNQUFjTyxZQUNWRSxZQUNBckIsVUFDQWMsaUJBQWlCLG9CQUFJQyxJQUFBQSxHQUN2QjtBQUVFLFVBQU1PLGdCQUFnQlIsZUFBZVMsSUFBSXZCLFFBQUFBO0FBQ3pDLFFBQUksQ0FBQ3dCLE1BQU1GLGFBQUFBLEdBQWdCO0FBQ3ZCRCxpQkFBV0ksTUFBTUMsa0JBQWtCQyxJQUFJTCxhQUFBQTtBQUN2QztJQUNKO0FBRUEsVUFBTXJCLFlBQVlDLEtBQUtDLElBQUc7QUFHMUIsVUFBTUMsaUJBQWlCLE1BQU0sS0FBS1IscUJBQXFCUyxLQUFLTCxRQUFBQTtBQUU1RCxTQUFLNEIsd0JBQXdCUCxXQUFXSSxNQUFNakIsVUFBVUosY0FBQUE7QUFFeEQsVUFBTUUsU0FBUyxJQUFJQyxPQUFBQTtBQUNuQkQsV0FBT0UsV0FBV0o7QUFDbEJFLFdBQU91QixTQUFTUixXQUFXSTtBQUUzQixTQUFLM0IsY0FBY1csSUFBSSxVQUFVSCxPQUFPRSxTQUFTUixTQUFTVSxJQUFJLGFBQWFSLEtBQUtDLElBQUcsSUFBS0YsU0FBQUEsS0FBYztBQUV0RyxVQUFNLEtBQUtVLGdCQUFnQkwsTUFBQUE7QUFFM0IsVUFBTXdCLFdBQVcsSUFBSUMsU0FBU3pCLE1BQUFBO0FBQzlCZSxlQUFXVyxTQUFTRixRQUFBQTtBQUVwQmhCLG1CQUFlRSxJQUFJaEIsVUFBVU0sTUFBQUE7QUFFN0IsZUFBVzJCLGdCQUFnQjdCLGVBQWVjLFNBQVM7QUFDL0MsWUFBTSxLQUFLQyxZQUFZVyxVQUFVRyxjQUFjbkIsY0FBQUE7SUFDbkQ7RUFDSjtFQUVBLE1BQWNILGdCQUFnQkwsUUFBZ0I7QUFFMUMsZUFBV04sWUFBWU0sT0FBT0UsU0FBUzBCLGFBQWE7QUFDaEQsWUFBTWpDLFlBQVlDLEtBQUtDLElBQUc7QUFDMUIsWUFBTWdDLHFCQUFxQixNQUFNLEtBQUt0Qyx5QkFBeUJRLEtBQUtMLFFBQUFBO0FBQ3BFLFlBQU1vQyxhQUFhLElBQUlDLFdBQUFBO0FBQ3ZCRCxpQkFBVzVCLFdBQVcyQjtBQUN0QkMsaUJBQVdFLFFBQVFoQztBQUNuQkEsYUFBTzRCLFlBQVlLLEtBQUtILFVBQUFBO0FBRXhCLFdBQUt0QyxjQUFjVyxJQUFJLGNBQWNULFNBQVNVLElBQUksYUFBYVIsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0lBQzlGO0VBQ0o7RUFFQSxNQUFjMkIsd0JBQXdCWSxnQkFBZ0NwQyxnQkFBZ0M7QUFFbEcsUUFBSUEsZUFBZWMsUUFBUXVCLFNBQVNELGVBQWV4QyxRQUFRLEdBQUc7QUFFMUQsWUFBTSxJQUFJMEMsTUFBTUMsYUFBYUMsMEJBQTBCO0lBQzNEO0VBQ0o7QUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0ZPLElBQU1DLG9CQUFOLE1BQU1BO0VBQWIsT0FBYUE7Ozs7O0VBQ1QsWUFDWUMsV0FDQUMsVUFDVjtTQUZVRCxZQUFBQTtTQUNBQyxXQUFBQTtFQUNUO0VBRUhDLFVBQWdCO0FBQ1pDLE9BQUdDLE9BQU9DLE9BQU8sS0FBS0wsV0FBVyxLQUFLQyxRQUFRO0VBQ2xEO0FBQ0o7OztBQ1JPLElBQU1LLHFCQUFOLE1BQU1BO0VBRmIsT0FFYUE7OztFQUNUQyxLQUFLQyxjQUFzQkMsTUFBbUI7QUFDMUNDLE9BQUdDLE9BQU9DLEtBQUtKLFdBQUFBLEdBQWNDLElBQUFBO0VBQ2pDO0VBRUFJLEdBQUdMLFdBQW1CTSxVQUF3RDtBQUMxRUosT0FBR0MsT0FBT0ksSUFBSVAsV0FBV00sUUFBQUE7QUFDekIsV0FBTyxJQUFJRSxrQkFBa0JSLFdBQVdNLFFBQUFBO0VBQzVDO0VBRUFHLEtBQUtULFdBQW1CTSxVQUF3RDtBQUM1RSxVQUFNSSxjQUFjLDJCQUFJVCxTQUFBQTtBQUNwQkMsU0FBR0MsT0FBT1EsT0FBT1gsV0FBV1UsV0FBQUE7QUFDNUJKLGVBQUFBLEdBQVlMLElBQUFBO0lBQ2hCLEdBSG9CO0FBSXBCQyxPQUFHQyxPQUFPSSxJQUFJUCxXQUFXVSxXQUFBQTtBQUN6QixXQUFPLElBQUlGLGtCQUFrQlIsV0FBV1UsV0FBQUE7RUFDNUM7RUFFQUUsSUFBSVosV0FBbUJNLFVBQTBDO0FBQzdESixPQUFHQyxPQUFPUSxPQUFPWCxXQUFXTSxRQUFBQTtFQUNoQztBQUNKOzs7QUN2Qk8sSUFBTU8sY0FBTixNQUFNQTtFQUFiLE9BQWFBOzs7Ozs7OztFQUNGQyxXQUFXQyxLQUFLQyxJQUFHO0VBQzFCLFlBQ1dDLElBQ0FDLFdBQW1CLEdBQ25CQyxNQUNBQyxVQUNDQyxZQUNWO1NBTFNKLEtBQUFBO1NBQ0FDLFdBQUFBO1NBQ0FDLE9BQUFBO1NBQ0FDLFdBQUFBO1NBQ0NDLGFBQUFBO0VBQ1Q7RUFFSEMsVUFBVTtBQUNOLFNBQUtELFdBQVU7RUFDbkI7QUFDSjs7O0FDWk8sSUFBTUUsZUFBTixNQUFNQTtFQUZiLE9BRWFBOzs7RUFDREMsbUJBQTJCO0VBQzNCQyxTQUFTLG9CQUFJQyxJQUFBQTtFQUNiQyxvQkFBb0Isb0JBQUlELElBQUFBO0VBQ3hCRSxxQkFBcUI7RUFDckJDLHVCQUE0QztFQUVwRCxJQUFXQyxNQUEwQjtBQUNqQyxXQUFPO1NBQUksS0FBS0wsT0FBT00sT0FBTTs7RUFDakM7RUFFQSxJQUFXQyxtQkFBMkI7QUFFbEMsV0FBTztFQUNYO0VBRUEsSUFBV0EsaUJBQWlCQyxRQUFnQjtFQUU1QztFQUVBLElBQVdDLCtCQUF1QztBQUU5QyxXQUFPO0VBQ1g7RUFFQSxJQUFXQSw2QkFBNkJELFFBQWdCO0VBRXhEO0VBRUFFLFFBQVFDLElBQXFDO0FBQ3pDLFVBQU1DLFFBQVEsS0FBS1osT0FBT2EsSUFBSUYsRUFBQUE7QUFDOUIsV0FBT0MsU0FBUztFQUNwQjtFQUVRRSxZQUNKQSxhQUNBQyxPQUNBQyxVQUNBQyxVQUNBQyxTQUNHQyxNQUNMO0FBQ0UsVUFBTUMsZUFBZUosU0FBU0ssS0FBSyxNQUFJLEdBQU1DLE1BQU1DLFFBQVFKLElBQUFBLElBQVFBLE9BQU8sQ0FBQSxDQUFFO0FBQzVFLFVBQU1LLFVBQVUsT0FBT1AsYUFBYSxXQUFXSCxZQUFZTSxjQUFjSCxRQUFBQSxJQUFZSCxZQUFZTSxZQUFBQTtBQUNqRyxVQUFNVCxLQUFLLEtBQUtaO0FBRWhCLFVBQU0wQixjQUFjLElBQUlDLFlBQVlmLElBQUlNLFlBQVksR0FBR0MsTUFBTUUsY0FBYyxNQUFBO0FBQ3ZFTCxZQUFNUyxPQUFBQTtBQUNOLFdBQUt4QixPQUFPMkIsT0FBT2hCLEVBQUFBO0lBQ3ZCLENBQUE7QUFDQSxTQUFLWCxPQUFPNEIsSUFBSWpCLElBQUljLFdBQUFBO0FBQ3BCLFdBQU9BO0VBQ1g7RUFFQUksWUFBWWIsVUFBb0JjLFNBQWlCWCxNQUFpQjtBQUM5RCxXQUFPLEtBQUtMLFlBQ1IsQ0FBQ2lCLElBQWNkLGFBQXFCWSxZQUFZRSxJQUFrQmQsUUFBQUEsR0FDbEUsQ0FBQ04sT0FBZXFCLGNBQWNyQixFQUFBQSxHQUM5QkssVUFDQWMsTUFDQSxPQUFBLEdBQ0dYLElBQUFBO0VBRVg7RUFFQWMsV0FBV2pCLFVBQW9CYyxTQUFpQlgsTUFBaUI7QUFDN0QsVUFBTVIsS0FBSyxLQUFLWjtBQUNoQixVQUFNcUIsZUFBZUosU0FBU0ssS0FBSyxNQUFJLEdBQU1DLE1BQU1DLFFBQVFKLElBQUFBLElBQVFBLE9BQU8sQ0FBQSxDQUFFO0FBRTVFLFVBQU1LLFVBQVVTLFdBQVcsTUFBQTtBQUN2QmIsbUJBQUFBO0FBQ0EsV0FBS3BCLE9BQU8yQixPQUFPaEIsRUFBQUE7SUFDdkIsR0FBR21CLElBQUFBO0FBRUgsVUFBTUwsY0FBYyxJQUFJQyxZQUFZZixJQUFJbUIsTUFBTSxNQUFNVixjQUFjLE1BQUE7QUFDOURjLG1CQUFhVixPQUFBQTtBQUNiLFdBQUt4QixPQUFPMkIsT0FBT2hCLEVBQUFBO0lBQ3ZCLENBQUE7QUFDQSxTQUFLWCxPQUFPNEIsSUFBSWpCLElBQUljLFdBQUFBO0FBQ3BCLFdBQU9BO0VBQ1g7RUFFQVUsVUFBVW5CLGFBQXVCRyxNQUFpQjtBQUM5QyxVQUFNUixLQUFLLEtBQUtaO0FBQ2hCLFVBQU1xQixlQUFlSixTQUFTSyxLQUFLLE1BQUksR0FBTUMsTUFBTUMsUUFBUUosSUFBQUEsSUFBUUEsT0FBTyxDQUFBLENBQUU7QUFFNUUsU0FBS2pCLGtCQUFrQjBCLElBQUlqQixJQUFJO01BQUVLO01BQVVvQixPQUFPaEI7SUFBYSxDQUFBO0FBRy9ELFVBQU1pQixlQUFlLE9BQU9DLE9BQU8sZUFBZSxPQUFRQSxHQUFXQyxhQUFhO0FBR2xGLFFBQUksQ0FBQyxLQUFLcEMsb0JBQW9CO0FBQzFCLFdBQUtBLHFCQUFxQjtBQUUxQixVQUFJa0MsY0FBYztBQUVkLGFBQUtqQyx1QkFBdUIsTUFBQTtBQUN4QixxQkFBVyxDQUFBLEVBQUdvQyxPQUFBQSxLQUFZLEtBQUt0QyxtQkFBbUI7QUFDOUMsZ0JBQUk7QUFDQXNDLHNCQUFRSixNQUFLO1lBQ2pCLFNBQVNLLEdBQUc7QUFDUkgsaUJBQUdJLFFBQVFDLFNBQVMsK0JBQStCRixDQUFBQSxFQUFHO1lBQzFEO1VBQ0o7UUFDSjtBQUNBSCxXQUFHTSxPQUFPQyxJQUFJLFVBQVUsS0FBS3pDLG9CQUFvQjtNQUNyRCxPQUFPO0FBRUgsY0FBTTBDLGtCQUFrQiw2QkFBQTtBQUNwQixxQkFBVyxDQUFBLEVBQUdOLE9BQUFBLEtBQVksS0FBS3RDLG1CQUFtQjtBQUM5QyxnQkFBSTtBQUNBc0Msc0JBQVFKLE1BQUs7WUFDakIsU0FBU0ssR0FBRztBQUNSSCxpQkFBR0ksUUFBUUMsU0FBUywrQkFBK0JGLENBQUFBLEVBQUc7WUFDMUQ7VUFDSjtRQUNKLEdBUndCO0FBU3ZCLGFBQWFNLHFCQUFxQmxCLFlBQVlpQixpQkFBaUIsQ0FBQTtNQUNwRTtJQUNKO0FBRUEsVUFBTXJCLGNBQWMsSUFBSUMsWUFBWWYsSUFBSSxHQUFHLE9BQU9TLGNBQWMsTUFBQTtBQUM1RCxXQUFLbEIsa0JBQWtCeUIsT0FBT2hCLEVBQUFBO0FBQzlCLFdBQUtYLE9BQU8yQixPQUFPaEIsRUFBQUE7QUFHbkIsVUFBSSxLQUFLVCxrQkFBa0I4QyxTQUFTLEdBQUc7QUFDbkMsWUFBSVgsZ0JBQWdCLEtBQUtqQyxzQkFBc0I7QUFDM0NrQyxhQUFHTSxPQUFPSyxPQUFPLFVBQVUsS0FBSzdDLG9CQUFvQjtBQUNwRCxlQUFLQSx1QkFBdUI7UUFDaEMsV0FBWSxLQUFhMkMsb0JBQW9CO0FBQ3pDZix3QkFBZSxLQUFhZSxrQkFBa0I7QUFDN0MsZUFBYUEscUJBQXFCO1FBQ3ZDO0FBQ0EsYUFBSzVDLHFCQUFxQjtNQUM5QjtJQUNKLENBQUE7QUFDQSxTQUFLSCxPQUFPNEIsSUFBSWpCLElBQUljLFdBQUFBO0FBQ3BCLFdBQU9BO0VBQ1g7RUFFQXlCLFNBQVNsQyxhQUF1QkcsTUFBaUI7QUFDN0MsVUFBTVIsS0FBSyxLQUFLWjtBQUNoQixVQUFNcUIsZUFBZUosU0FBU0ssS0FBSyxNQUFJLEdBQU1DLE1BQU1DLFFBQVFKLElBQUFBLElBQVFBLE9BQU8sQ0FBQSxDQUFFO0FBRzVFLFVBQU1rQixlQUFlLE9BQU9DLE9BQU8sZUFBZSxPQUFRQSxHQUFXQyxhQUFhO0FBRWxGLFFBQUlmO0FBRUosUUFBSWEsY0FBYztBQUVkLFlBQU1HLFVBQVUsNkJBQUE7QUFDWixZQUFJO0FBQ0FwQix1QkFBQUE7UUFDSixVQUFBO0FBQ0lrQixhQUFHTSxPQUFPSyxPQUFPLFVBQVVULE9BQUFBO0FBQzNCLGVBQUt4QyxPQUFPMkIsT0FBT2hCLEVBQUFBO1FBQ3ZCO01BQ0osR0FQZ0I7QUFRaEIyQixTQUFHTSxPQUFPQyxJQUFJLFVBQVVMLE9BQUFBO0FBRXhCLFlBQU1mLGNBQWMsSUFBSUMsWUFBWWYsSUFBSSxHQUFHLE1BQU1TLGNBQWMsTUFBQTtBQUMzRGtCLFdBQUdNLE9BQU9LLE9BQU8sVUFBVVQsT0FBQUE7QUFDM0IsYUFBS3hDLE9BQU8yQixPQUFPaEIsRUFBQUE7TUFDdkIsQ0FBQTtBQUNBLFdBQUtYLE9BQU80QixJQUFJakIsSUFBSWMsV0FBQUE7QUFDcEIsYUFBT0E7SUFDWCxPQUFPO0FBRUhELGdCQUFVUyxXQUFXLE1BQUE7QUFDakIsWUFBSTtBQUNBYix1QkFBQUE7UUFDSixVQUFBO0FBQ0ksZUFBS3BCLE9BQU8yQixPQUFPaEIsRUFBQUE7UUFDdkI7TUFDSixHQUFHLENBQUE7QUFFSCxZQUFNYyxjQUFjLElBQUlDLFlBQVlmLElBQUksR0FBRyxNQUFNUyxjQUFjLE1BQUE7QUFDM0RjLHFCQUFhVixPQUFBQTtBQUNiLGFBQUt4QixPQUFPMkIsT0FBT2hCLEVBQUFBO01BQ3ZCLENBQUE7QUFDQSxXQUFLWCxPQUFPNEIsSUFBSWpCLElBQUljLFdBQUFBO0FBQ3BCLGFBQU9BO0lBQ1g7RUFDSjtFQUVBSyxLQUFLcUIsT0FBZ0I7RUFHckI7RUFFQUMsUUFBUUQsT0FBZ0I7RUFFeEI7QUFDSjs7O0FDbE1PLElBQU1FLDJCQUFOLE1BQU1BO0VBSmIsT0FJYUE7OztFQUNBQztFQUNBQztFQUVULGNBQWM7QUFDVixTQUFLQSxTQUFTLElBQUlDLG1CQUFBQTtBQUNsQixTQUFLRixTQUFTLElBQUlHLGFBQUFBO0VBQ3RCO0VBRUFDLHFCQUNPQyxNQUlMO0FBQ0UsVUFBTUMsU0FBVUMsU0FBU0YsS0FBSyxDQUFBLENBQUUsSUFBSUEsS0FBSyxDQUFBLElBQUtHO0FBRTlDLFdBQU87TUFDSEY7TUFDQUcsTUFBTUo7SUFDVjtFQUNKO0VBRUFLLElBQUlDLFFBQWFOLE1BQW1CO0FBQ2hDLFVBQU1PLFVBQVU7TUFBQ0Q7U0FBUU47TUFBTVEsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLE9BQUdDLFFBQVFDLFFBQVFULE9BQUFBO0VBQ3ZCO0VBRUFVLFNBQVNYLFFBQWFOLE1BQW1CO0FBQ3JDLFVBQU1PLFVBQVU7TUFBQ0Q7U0FBUU47TUFBTVEsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLE9BQUdDLFFBQVFFLFNBQVNWLE9BQUFBO0VBQ3hCO0VBRUFXLFdBQVdaLFFBQWFOLE1BQW1CO0FBQ3ZDLFVBQU1PLFVBQVU7TUFBQ0Q7U0FBUU47TUFBTVEsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLE9BQUdDLFFBQVFHLFdBQVdYLE9BQUFBO0VBQzFCO0VBRUFZLFNBQVNiLFFBQWFOLE1BQW1CO0FBRXJDLFVBQU1PLFVBQVU7TUFBQ0Q7U0FBUU47TUFBTVEsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLE9BQUdDLFFBQVFDLFFBQVEsV0FBV1QsT0FBQUEsRUFBUztFQUMzQztBQUNKOzs7QUN4Q0EsU0FBU2EsYUFBQUEsa0JBQWlCOzs7QUNoQjFCLFNBQVNDLGFBQUFBLFlBQVdDLFVBQUFBLFNBQVFDLGNBQUFBLG1CQUFrQjs7Ozs7Ozs7Ozs7O0FBYXZDLElBQU1DLE1BQU4sTUFBTUE7U0FBQUE7OztFQUNtQ0M7RUFDS0M7RUFDWkM7RUFDWUM7RUFDZkM7RUFDT0M7RUFDakNDO0VBQ0FDLFNBQVM7RUFFakIsTUFBYUMsTUFBU0MsWUFBd0I7QUFDMUMsUUFBSSxLQUFLRixRQUFRO0FBQ2IsV0FBS0YsY0FBY0ssTUFBTSx3Q0FBQTtBQUN6QixZQUFNLElBQUlDLE1BQU1DLGFBQWFDLGdCQUFnQjtJQUNqRDtBQUNBLFNBQUtSLGNBQWNTLElBQUksaUJBQUE7QUFDdkIsVUFBTSxLQUFLQyxpQkFBaUIsYUFBQTtBQUU1QixTQUFLVixjQUFjUyxJQUFJLHlCQUFBO0FBQ3ZCLFVBQU0sS0FBS0MsaUJBQWlCLFlBQUE7QUFDNUIsU0FBS1QsYUFBYSxNQUFNLEtBQUtOLGtCQUFrQmdCLEtBQUtQLFVBQUFBO0FBQ3BELFVBQU0sS0FBS00saUJBQWlCLFdBQUE7QUFFNUIsU0FBS1YsY0FBY1MsSUFBSSxnQ0FBQTtBQUN2QixVQUFNLEtBQUtDLGlCQUFpQixZQUFBO0FBQzVCLFVBQU0sS0FBS2QsdUJBQXVCZ0IsS0FBSyxLQUFLWCxVQUFVO0FBQ3RELFVBQU0sS0FBS1MsaUJBQWlCLFdBQUE7QUFFNUIsU0FBS1YsY0FBY1MsSUFBSSxnQkFBQTtBQUN2QixVQUFNLEtBQUtDLGlCQUFpQixZQUFBO0FBQzVCLFVBQU0sS0FBS2IsV0FBV2dCLEtBQUssS0FBS1osVUFBVTtBQUMxQyxTQUFLQyxTQUFTO0FBQ2QsVUFBTSxLQUFLUSxpQkFBaUIsV0FBQTtBQUU1QixTQUFLVixjQUFjUyxJQUFJLFlBQUE7QUFFdkIsVUFBTSxLQUFLQyxpQkFBaUIsWUFBQTtFQUNoQztFQUVBLE1BQWFJLE9BQU87QUFDaEIsUUFBSSxDQUFDLEtBQUtaLFFBQVE7QUFDZCxXQUFLRixjQUFjSyxNQUFNLHdDQUFBO0FBQ3pCLFlBQU0sSUFBSUMsTUFBTUMsYUFBYVEsWUFBWTtJQUM3QztBQUNBLFVBQU0sS0FBS0wsaUJBQWlCLFlBQUE7QUFDNUIsU0FBS1YsY0FBY1MsSUFBSSxpQkFBQTtBQUN2QixVQUFNLEtBQUtaLFdBQVdtQixTQUFTLEtBQUtmLFVBQVU7QUFDOUMsU0FBS0MsU0FBUztBQUNkLFNBQUtGLGNBQWNTLElBQUksYUFBQTtBQUN2QixVQUFNLEtBQUtDLGlCQUFpQixXQUFBO0VBQ2hDO0VBRUEsTUFBY0EsaUJBQWlCTyxRQUEyQjtBQUN0RCxVQUFNQyxRQUFRQyxJQUNWLEtBQUtwQixRQUFRcUIsSUFBSSxPQUFPQyxNQUFBQTtBQUNwQixZQUFNQyxTQUFTLEtBQUt4QixxQkFBcUJ5QixJQUFJRixDQUFBQTtBQUM3QyxVQUFJLENBQUNDLE9BQU9MLE1BQUFBLEVBQVMsUUFBT0MsUUFBUU0sUUFBTztBQUMzQyxhQUFPTixRQUFRTSxRQUFRRixPQUFPTCxNQUFBQSxFQUFPLENBQUE7SUFDekMsQ0FBQSxDQUFBO0VBRVI7QUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FEckNPLElBQU1RLGFBQU4sTUFBTUE7RUFyQ2IsT0FxQ2FBOzs7RUFDVUM7RUFDQUM7RUFDQUM7RUFDQUM7RUFDWEMseUJBQXNELENBQUM7RUFFL0QsWUFBWUMsUUFBMEI7QUFDbEMsU0FBS0wsYUFBYUssT0FBT0w7QUFDekIsU0FBS0MsdUJBQXVCSSxPQUFPSjtBQUNuQyxTQUFLQyxxQkFBcUJHLE9BQU9IO0FBQ2pDLFNBQUtDLFVBQVVFLE9BQU9GO0VBQzFCO0VBRU9HLG1CQUFtQkMsUUFBNEI7QUFDbEQsVUFBTUMsa0JBQXNDLENBQUE7QUFDNUMsZUFBV0MsU0FBU0YsUUFBUTtBQUN4QixZQUFNLEVBQUVHLE9BQU9DLE9BQU9DLE1BQUssSUFBS0MsY0FBY0osS0FBQUE7QUFDOUMsVUFBSSxDQUFDQyxNQUFPLE9BQU0sSUFBSUksTUFBTUYsS0FBQUE7QUFDNUJKLHNCQUFnQk8sS0FBS0osS0FBQUE7SUFDekI7QUFFQSxTQUFLVixxQkFBcUJlLEtBQUtDLGFBQUFBLEVBQWVDLGdCQUFnQlYsZUFBQUE7QUFDOUQsV0FBTztFQUNYO0VBRU9XLHlCQUF5QkMsY0FBa0M7QUFDOUQsVUFBTUMsd0JBQTRDLENBQUE7QUFDbEQsZUFBV0MsZUFBZUYsY0FBYztBQUNwQyxZQUFNLEVBQUVWLE9BQU9DLE9BQU9DLE1BQUssSUFBS1csb0JBQW9CRCxXQUFBQTtBQUNwRCxVQUFJLENBQUNaLE1BQU8sT0FBTSxJQUFJSSxNQUFNRixLQUFBQTtBQUM1QlMsNEJBQXNCTixLQUFLSixLQUFBQTtJQUMvQjtBQUVBLFNBQUtWLHFCQUFxQmUsS0FBS1EsbUJBQUFBLEVBQXFCTixnQkFBZ0JHLHFCQUFBQTtBQUNwRSxXQUFPO0VBQ1g7RUFFT0ksa0JBQWtCQyxPQUFpQztBQUN0RCxVQUFNQyxpQkFBMkMsQ0FBQTtBQUNqRCxlQUFXQyxRQUFRRixPQUFPO0FBQ3RCLFlBQU0sRUFBRWhCLE9BQU9DLE9BQU9DLE1BQUssSUFBS2lCLGFBQWFELElBQUFBO0FBQzdDLFVBQUksQ0FBQ2xCLE1BQU8sT0FBTSxJQUFJSSxNQUFNRixLQUFBQTtBQUM1QmUscUJBQWVaLEtBQUtKLEtBQUFBO0lBQ3hCO0FBRUEsU0FBS1YscUJBQXFCZSxLQUFLYyxZQUFBQSxFQUFjWixnQkFBZ0JTLGNBQUFBO0FBQzdELFdBQU87RUFDWDtFQUVPSSxvQkFBb0JDLFNBQStCO0FBQ3RELFVBQU1DLG1CQUF5QyxDQUFBO0FBQy9DLGVBQVdDLFVBQVVGLFNBQVM7QUFDMUIsWUFBTSxFQUFFdEIsT0FBT0MsT0FBT0MsTUFBSyxJQUFLdUIsb0JBQW9CRCxNQUFBQTtBQUNwRCxVQUFJLENBQUN4QixNQUFPLE9BQU0sSUFBSUksTUFBTUYsS0FBQUE7QUFDNUJxQix1QkFBaUJsQixLQUFLSixLQUFBQTtJQUMxQjtBQUVBLFNBQUtWLHFCQUFxQmUsS0FBS29CLG9CQUFBQSxFQUFzQmxCLGdCQUFnQmUsZ0JBQUFBO0FBQ3JFLFdBQU87RUFDWDtFQUVPSSxjQUFjbEMsU0FBaUM7QUFDbERBLFlBQVFtQyxRQUFRLENBQUNDLE1BQU0sS0FBS3RDLHFCQUFxQmUsS0FBS3VCLENBQUFBLEVBQUdDLE9BQU0sRUFBR0MsaUJBQWdCLENBQUE7QUFDbEYsVUFBTUMsa0JBQWtCLEtBQUt6QyxxQkFBcUIwQyxJQUE0QkMsT0FBQUE7QUFDOUUsU0FBSzNDLHFCQUFxQjRDLE9BQU9ELE9BQUFBLEVBQVMxQixnQkFBZ0I7U0FBSXdCO1NBQW9CdkM7S0FBUTtBQUMxRixXQUFPO0VBQ1g7RUFFTzJDLHNCQUFzQjtBQUN6QixTQUFLN0MscUJBQXFCZSxLQUFLK0IscUJBQUFBLEVBQXVCN0IsZ0JBQWdCLElBQUE7QUFDdEUsV0FBTztFQUNYO0VBRU84QixvQkFBb0JDLFNBQXNDQyxhQUFhLE9BQU87QUFDakYsU0FBSzlDLHlCQUF5QjZDO0FBQzlCLFFBQUlDLFdBQVksUUFBTztBQUN2QixTQUFLakQscUJBQXFCZSxLQUFLbUMsaUJBQUFBLEVBQW1CakMsZ0JBQWdCK0IsT0FBQUE7QUFDbEUsV0FBTztFQUNYO0VBRUEsTUFBYUcsUUFBUTtBQUNqQixVQUFNQyxxQkFBcUIsSUFBSUMsV0FBVSxLQUFLbEQsc0JBQXNCO0FBRXBFaUQsdUJBQW1CckMsS0FBS3VDLGlCQUFBQSxFQUFtQnJDLGdCQUFnQnNDLGdCQUFBQTtBQUMzREgsdUJBQW1CckMsS0FBS3dDLGdCQUFBQSxFQUFrQkMsVUFBVUYsaUJBQUFBO0FBR3BERix1QkFBbUJyQyxLQUFLMEMsbUJBQUFBLEVBQXFCeEMsZ0JBQWdCLEtBQUtoQixrQkFBa0I7QUFHcEYsU0FBS0QscUJBQXFCZSxLQUFLMkMsR0FBQUEsRUFBS25CLE9BQU0sRUFBR0MsaUJBQWdCO0FBQzdELFNBQUt4QyxxQkFBcUJlLEtBQUs0QyxvQkFBQUEsRUFBc0IxQyxnQkFBZ0JtQyxrQkFBQUE7QUFHckUsU0FBS3BELHFCQUFxQmUsS0FBSzZDLGlCQUFBQSxFQUFtQnJCLE9BQU0sRUFBR0MsaUJBQWdCO0FBQzNFLFNBQUt4QyxxQkFBcUJlLEtBQUs4QyxzQkFBQUEsRUFBd0J0QixPQUFNLEVBQUdDLGlCQUFnQjtBQUNoRixTQUFLeEMscUJBQXFCZSxLQUFLK0MsVUFBQUEsRUFBWXZCLE9BQU0sRUFBR0MsaUJBQWdCO0FBR3BFLFNBQUt4QyxxQkFBcUJlLEtBQUtnRCxlQUFBQSxFQUFpQnhCLE9BQU0sRUFBR0MsaUJBQWdCO0FBR3pFLFNBQUt4QyxxQkFBcUJlLEtBQUtpRCxNQUFBQSxFQUFRekIsT0FBTSxFQUFHMEIsaUJBQWdCO0FBQ2hFLFNBQUtqRSxxQkFBcUJlLEtBQUttRCxvQkFBQUEsRUFBc0IzQixPQUFNLEVBQUdDLGlCQUFnQjtBQUc5RSxTQUFLeEMscUJBQXFCZSxLQUFLb0QsVUFBQUEsRUFBWTVCLE9BQU0sRUFBRzBCLGlCQUFnQjtBQUNwRSxTQUFLakUscUJBQXFCZSxLQUFLcUQsd0JBQUFBLEVBQTBCN0IsT0FBTSxFQUFHQyxpQkFBZ0I7QUFDbEYsU0FBS3hDLHFCQUFxQmUsS0FBS3NELHFCQUFBQSxFQUF1QjlCLE9BQU0sRUFBR0MsaUJBQWdCO0FBQy9FLFNBQUt4QyxxQkFBcUJlLEtBQUt1RCxzQkFBQUEsRUFBd0IvQixPQUFNLEVBQUdDLGlCQUFnQjtBQUNoRixTQUFLeEMscUJBQXFCZSxLQUFLd0Qsb0JBQUFBLEVBQXNCaEMsT0FBTSxFQUFHQyxpQkFBZ0I7QUFHOUUsU0FBS3hDLHFCQUFxQmUsS0FBS3lELGdCQUFBQSxFQUFrQmpDLE9BQU0sRUFBRzBCLGlCQUFnQjtBQUMxRSxTQUFLakUscUJBQXFCZSxLQUFLMEQscUJBQUFBLEVBQXVCQyxVQUFVLENBQUNDLFlBQUFBO0FBQzdELGFBQU8sQ0FBQ0MsTUFBZUMsV0FBQUE7QUFDbkIsY0FBTUMsVUFBVUgsUUFBUUksVUFBVXJDLElBQUk4QixnQkFBQUE7QUFDdENNLGdCQUFRRSxRQUFRSjtBQUNoQkUsZ0JBQVFHLFVBQVVKO0FBQ2xCLGVBQU9DO01BQ1g7SUFDSixDQUFBO0FBQ0EsU0FBSzlFLHFCQUFxQmUsS0FBS21FLGlCQUFBQSxFQUFtQjNDLE9BQU0sRUFBRzBCLGlCQUFnQjtBQUMzRSxTQUFLakUscUJBQXFCZSxLQUFLb0Usc0JBQUFBLEVBQXdCVCxVQUFVLENBQUNDLFlBQUFBO0FBQzlELGFBQU8sTUFBQTtBQUNILGVBQU9BLFFBQVFJLFVBQVVyQyxJQUFJd0MsaUJBQUFBO01BQ2pDO0lBQ0osQ0FBQTtBQUNBLFNBQUtsRixxQkFBcUJlLEtBQUtxRSxvQkFBQUEsRUFBc0I3QyxPQUFNLEVBQUcwQixpQkFBZ0I7QUFDOUUsU0FBS2pFLHFCQUFxQmUsS0FBS3NFLHlCQUFBQSxFQUEyQlgsVUFBVSxDQUFDQyxZQUFBQTtBQUNqRSxhQUFPLENBQ0hXLE1BQ0FDLFVBQ0FDLFNBQ0FWLFNBQ0FXLFVBQ0FDLFNBQUFBO0FBRUEsY0FBTUMsbUJBQW1CaEIsUUFBUUksVUFBVXJDLElBQUkwQyxvQkFBQUE7QUFDL0NPLHlCQUFpQkMsUUFBUU47QUFDekJLLHlCQUFpQkUsV0FBV2Y7QUFDNUJhLHlCQUFpQkcsWUFBWUw7QUFDN0JFLHlCQUFpQkksV0FBV1A7QUFDNUJHLHlCQUFpQkssWUFBWVQ7QUFDN0JJLHlCQUFpQk0sUUFBUVA7QUFDekIsZUFBT0M7TUFDWDtJQUNKLENBQUE7QUFHQSxlQUFXTyxVQUFVLEtBQUtoRyxTQUFTO0FBQy9CLFdBQUtGLHFCQUFxQmUsS0FBS21GLE1BQUFBLEVBQVEzRCxPQUFNLEVBQUdDLGlCQUFnQjtBQUNoRSxZQUFNMkQsaUJBQWlCLEtBQUtuRyxxQkFBcUIwQyxJQUFJd0QsTUFBQUE7QUFDckQsVUFBSSxDQUFDQyxlQUFlQyxRQUFTO0FBQzdCLFlBQU1ELGVBQWVDLFFBQU87SUFDaEM7QUFFQSxRQUFJLENBQUMsS0FBS3BHLHFCQUFxQnFHLFFBQVFyRixhQUFBQSxFQUFnQixNQUFLaEIscUJBQXFCZSxLQUFLQyxhQUFBQSxFQUFlQyxnQkFBZ0IsQ0FBQSxDQUFFO0FBQ3ZILFFBQUksQ0FBQyxLQUFLakIscUJBQXFCcUcsUUFBUTlFLG1CQUFBQSxFQUNuQyxNQUFLdkIscUJBQXFCZSxLQUFLUSxtQkFBQUEsRUFBcUJOLGdCQUFnQixDQUFBLENBQUU7QUFDMUUsUUFBSSxDQUFDLEtBQUtqQixxQkFBcUJxRyxRQUFReEUsWUFBQUEsRUFBZSxNQUFLN0IscUJBQXFCZSxLQUFLYyxZQUFBQSxFQUFjWixnQkFBZ0IsQ0FBQSxDQUFFO0FBQ3JILFFBQUksQ0FBQyxLQUFLakIscUJBQXFCcUcsUUFBUWxFLG9CQUFBQSxFQUNuQyxNQUFLbkMscUJBQXFCZSxLQUFLb0Isb0JBQUFBLEVBQXNCbEIsZ0JBQWdCLENBQUEsQ0FBRTtBQUUzRSxXQUFPLEtBQUtqQixxQkFBcUIwQyxJQUFJZ0IsR0FBQUE7RUFDekM7QUFDSjs7O0FFNU1BLFNBQVM0QyxhQUFBQSxrQkFBaUI7QUFRMUIsZUFBc0JDLGlCQUF1QyxFQUN6REMsWUFDQUMsU0FDQUMsbUJBQ0FDLG1CQUFrQixHQU1yQjtBQUNHLFFBQU1DLHVCQUF1QixJQUFJQyxXQUFBQTtBQUVqQ0QsdUJBQXFCRSxLQUFLQyxzQkFBQUEsRUFBd0JDLGdCQUFnQkosb0JBQUFBO0FBRWxFLE1BQUlELG1CQUFvQkMsc0JBQXFCRSxLQUFLRyxtQkFBQUEsRUFBcUJELGdCQUFnQkwsa0JBQUFBO0FBQ3ZGQyx1QkFBcUJFLEtBQUtJLE9BQUFBLEVBQVNGLGdCQUFnQlAsT0FBQUE7QUFFbkQsU0FBTyxJQUFJQyxrQkFBa0I7SUFDekJGO0lBQ0FJO0lBQ0FEO0lBQ0FGO0VBQ0osQ0FBQTtBQUNKO0FBeEJzQkY7OztBQ0pmLFNBQVNZLHFCQUFxQkMsTUFBNkJDLE1BQWVDLFdBQTJCO0FBQ3hHLFNBQXlCLENBQUNDLFFBQWdCQyxXQUFBQTtBQUN0QyxRQUFJLENBQUNDLE1BQU1KLElBQUFBLEtBQVMsQ0FBQ0ssU0FBU0wsSUFBQUEsR0FBTztBQUNqQyxZQUFNLElBQUlNLE1BQU1DLGFBQWFDLHFCQUFxQjtJQUN0RDtBQUVBUixXQUFPQSxRQUFRRztBQUVmLFVBQU1NLFNBQ0ZDLFFBQVFDLFlBQXNFQyxnQkFBZ0JDLGtCQUFrQlgsTUFBQUEsS0FBVyxDQUFBO0FBRS9ILFFBQUlPLE9BQU9LLEtBQUssQ0FBQ0MsVUFBVUEsTUFBTVosV0FBV0EsVUFBVVksTUFBTWYsU0FBU0EsUUFBUWUsTUFBTWhCLFNBQVNBLElBQUFBLEdBQU87QUFDL0YsWUFBTSxJQUFJTyxNQUFNQyxhQUFhUyxxQkFBcUI7SUFDdEQ7QUFFQU4sWUFBUU8sZUFDSkwsZ0JBQWdCQyxrQkFDaEI7U0FBSUo7TUFBUTtRQUFFTjtRQUFRSDtRQUFNRDtRQUFNRTtNQUFVO09BQzVDQyxNQUFBQTtFQUVSO0FBQ0o7QUFyQmdCSjs7O0FDRlQsU0FBU29CLFdBQVdDLFdBQWlCO0FBQ3hDLFNBQU9DLHFCQUFxQixjQUFjRCxTQUFBQTtBQUM5QztBQUZnQkQ7OztBQ0FULFNBQVNHLFVBQVVDLElBQXFCQyxXQUFrQjtBQUM3RCxTQUFPQyxxQkFBcUIsYUFBYUQsV0FBV0QsRUFBQUE7QUFDeEQ7QUFGZ0JEOzs7QUNBVCxTQUFTSSxHQUFHQyxXQUFrQjtBQUNqQyxTQUFPQyxxQkFBcUIsTUFBTUQsU0FBQUE7QUFDdEM7QUFGZ0JEOzs7QUNBVCxTQUFTRyxhQUFhQyxXQUFpQjtBQUMxQyxTQUFPQyxxQkFBcUIsZ0JBQWdCRCxTQUFBQTtBQUNoRDtBQUZnQkQ7OztBQ0FULFNBQVNHLEtBQUtDLFdBQWtCO0FBQ25DLFNBQU9DLHFCQUFxQixRQUFRRCxTQUFBQTtBQUN4QztBQUZnQkQ7OztBQ0FULFNBQVNHLFlBQVlDLElBQXFCQyxXQUFrQjtBQUMvRCxTQUFPQyxxQkFBcUIsZUFBZUQsV0FBV0QsRUFBQUE7QUFDMUQ7QUFGZ0JEOzs7QUNNVCxTQUFTSSxRQUFRQyxPQUErQjtBQUNuRCxTQUE0QixDQUFDQyxRQUFnQkMsUUFBZ0JDLFVBQUFBO0FBQ3pELFVBQU1DLGlCQUEyQyxDQUFBO0FBQ2pELGVBQVdDLFFBQVFMLE9BQU87QUFDdEIsWUFBTSxFQUFFTSxPQUFPQyxPQUFPQyxNQUFLLElBQUtDLGFBQWFKLElBQUFBO0FBQzdDLFVBQUksQ0FBQ0MsTUFBTyxPQUFNLElBQUlJLE1BQU1GLEtBQUFBO0FBQzVCSixxQkFBZU8sS0FBS0osS0FBQUE7SUFDeEI7QUFFQSxVQUFNSyxTQUFTQyxRQUFRQyxZQUErQkMsZ0JBQWdCQyxrQkFBa0JmLFFBQVFDLE1BQUFBLEtBQVcsQ0FBQTtBQUUzRyxRQUFJVSxPQUFPSyxLQUFLLENBQUNDLFVBQVVBLE1BQU1mLFVBQVVBLEtBQUFBLEdBQVE7QUFDL0MsWUFBTSxJQUFJTyxNQUFNUyxhQUFhQyw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhUixRQUFRQyxZQUF1QixxQkFBcUJiLFFBQVFDLE1BQUFBO0FBQy9FLFVBQU1vQixXQUFXQyxNQUFNQyxRQUFRSCxVQUFBQSxJQUFjQSxXQUFXbEIsS0FBQUEsSUFBU3NCO0FBRWpFWixZQUFRYSxlQUNKWCxnQkFBZ0JDLGtCQUNoQjtTQUFJSjtNQUFRO1FBQUVUO1FBQU9EO1FBQVFGLE9BQU9JO1FBQWdCdUIsTUFBTUMsZ0JBQWdCN0I7UUFBTThCLE1BQU1KO1FBQVdIO01BQVM7T0FDMUdyQixRQUNBQyxNQUFBQTtFQUVSO0FBQ0o7QUF6QmdCSDs7O0FDQ1QsU0FBUytCLE1BQU1DLFFBQWdCQyxPQUErQjtBQUNqRSxTQUE0QixDQUFDQyxRQUFnQkMsUUFBZ0JDLFVBQUFBO0FBQ3pELFFBQUksQ0FBQ0MsU0FBU0wsR0FBQUEsR0FBTTtBQUNoQixZQUFNLElBQUlNLE1BQU1DLGFBQWFDLG9CQUFvQjtJQUNyRDtBQUNBLFVBQU1DLGlCQUEyQyxDQUFBO0FBQ2pELGVBQVdDLFFBQVFULE9BQU87QUFDdEIsWUFBTSxFQUFFVSxPQUFPQyxPQUFPQyxNQUFLLElBQUtDLGFBQWFKLElBQUFBO0FBQzdDLFVBQUksQ0FBQ0MsTUFBTyxPQUFNLElBQUlMLE1BQU1PLEtBQUFBO0FBQzVCSixxQkFBZU0sS0FBS0gsS0FBQUE7SUFDeEI7QUFFQSxVQUFNSSxTQUFTQyxRQUFRQyxZQUErQkMsZ0JBQWdCQyxrQkFBa0JsQixRQUFRQyxNQUFBQSxLQUFXLENBQUE7QUFFM0csUUFBSWEsT0FBT0ssS0FBSyxDQUFDQyxVQUFVQSxNQUFNbEIsVUFBVUEsS0FBQUEsR0FBUTtBQUMvQyxZQUFNLElBQUlFLE1BQU1DLGFBQWFnQiw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhUCxRQUFRQyxZQUF1QixxQkFBcUJoQixRQUFRQyxNQUFBQTtBQUMvRSxVQUFNc0IsV0FBV0MsTUFBTUMsUUFBUUgsVUFBQUEsSUFBY0EsV0FBV3BCLEtBQUFBLElBQVN3QjtBQUVqRVgsWUFBUVksZUFDSlYsZ0JBQWdCQyxrQkFDaEI7U0FBSUo7TUFBUTtRQUFFWjtRQUFPRDtRQUFRRixPQUFPUTtRQUFnQnFCLE1BQU1DLGdCQUFnQmhDO1FBQU9pQyxNQUFNaEM7UUFBS3lCO01BQVM7T0FDckd2QixRQUNBQyxNQUFBQTtFQUVSO0FBQ0o7QUE1QmdCSjs7O0FDSFQsU0FBU2tDLFVBQUFBO0FBQ1osU0FBNEIsQ0FBQ0MsUUFBZ0JDLFFBQWdCQyxVQUFBQTtBQUN6RCxVQUFNQyxTQUFTQyxRQUFRQyxZQUErQkMsZ0JBQWdCQyxrQkFBa0JQLFFBQVFDLE1BQUFBLEtBQVcsQ0FBQTtBQUUzRyxRQUFJRSxPQUFPSyxLQUFLLENBQUNDLFVBQVVBLE1BQU1QLFVBQVVBLEtBQUFBLEdBQVE7QUFDL0MsWUFBTSxJQUFJUSxNQUFNQyxhQUFhQyw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhVCxRQUFRQyxZQUF1QixxQkFBcUJMLFFBQVFDLE1BQUFBO0FBQy9FLFVBQU1hLFdBQVdDLE1BQU1DLFFBQVFILFVBQUFBLElBQWNBLFdBQVdYLEtBQUFBLElBQVNlO0FBRWpFYixZQUFRYyxlQUNKWixnQkFBZ0JDLGtCQUNoQjtTQUFJSjtNQUFRO1FBQUVEO1FBQU9EO1FBQVFrQixNQUFNQyxnQkFBZ0JyQjtRQUFTc0IsTUFBTUo7UUFBV0g7TUFBUztPQUN0RmQsUUFDQUMsTUFBQUE7RUFFUjtBQUNKO0FBbEJnQkY7QUFvQlQsU0FBU3VCLE1BQUFBO0FBQ1osU0FBT3ZCLFFBQUFBO0FBQ1g7QUFGZ0J1Qjs7O0FDakJULFNBQVNDLE1BQU1DLFFBQWdCQyxPQUErQjtBQUNqRSxTQUE0QixDQUFDQyxRQUFnQkMsUUFBZ0JDLFVBQUFBO0FBQ3pELFFBQUksQ0FBQ0MsU0FBU0wsR0FBQUEsR0FBTTtBQUNoQixZQUFNLElBQUlNLE1BQU1DLGFBQWFDLG9CQUFvQjtJQUNyRDtBQUNBLFVBQU1DLGlCQUEyQyxDQUFBO0FBQ2pELGVBQVdDLFFBQVFULE9BQU87QUFDdEIsWUFBTSxFQUFFVSxPQUFPQyxPQUFPQyxNQUFLLElBQUtDLGFBQWFKLElBQUFBO0FBQzdDLFVBQUksQ0FBQ0MsTUFBTyxPQUFNLElBQUlMLE1BQU1PLEtBQUFBO0FBQzVCSixxQkFBZU0sS0FBS0gsS0FBQUE7SUFDeEI7QUFFQSxVQUFNSSxTQUFTQyxRQUFRQyxZQUErQkMsZ0JBQWdCQyxrQkFBa0JsQixRQUFRQyxNQUFBQSxLQUFXLENBQUE7QUFFM0csUUFBSWEsT0FBT0ssS0FBSyxDQUFDQyxVQUFVQSxNQUFNbEIsVUFBVUEsS0FBQUEsR0FBUTtBQUMvQyxZQUFNLElBQUlFLE1BQU1DLGFBQWFnQiw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhUCxRQUFRQyxZQUF1QixxQkFBcUJoQixRQUFRQyxNQUFBQTtBQUMvRSxVQUFNc0IsV0FBV0MsTUFBTUMsUUFBUUgsVUFBQUEsSUFBY0EsV0FBV3BCLEtBQUFBLElBQVN3QjtBQUVqRVgsWUFBUVksZUFDSlYsZ0JBQWdCQyxrQkFDaEI7U0FBSUo7TUFBUTtRQUFFWjtRQUFPRDtRQUFRMkIsTUFBTTlCO1FBQUtDLE9BQU9RO1FBQWdCc0IsTUFBTUMsZ0JBQWdCakM7UUFBTzBCO01BQVM7T0FDckd2QixRQUNBQyxNQUFBQTtFQUVSO0FBQ0o7QUE1QmdCSjs7O0FDSFQsU0FBU2tDLFdBQUFBO0FBQ1osU0FBNEIsQ0FBQ0MsUUFBZ0JDLFFBQWdCQyxVQUFBQTtBQUN6RCxVQUFNQyxTQUFTQyxRQUFRQyxZQUErQkMsZ0JBQWdCQyxrQkFBa0JQLFFBQVFDLE1BQUFBLEtBQVcsQ0FBQTtBQUUzRyxRQUFJRSxPQUFPSyxLQUFLLENBQUNDLFVBQVVBLE1BQU1QLFVBQVVBLEtBQUFBLEdBQVE7QUFDL0MsWUFBTSxJQUFJUSxNQUFNQyxhQUFhQyw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhVCxRQUFRQyxZQUF1QixxQkFBcUJMLFFBQVFDLE1BQUFBO0FBQy9FLFVBQU1hLFdBQVdDLE1BQU1DLFFBQVFILFVBQUFBLElBQWNBLFdBQVdYLEtBQUFBLElBQVNlO0FBRWpFYixZQUFRYyxlQUNKWixnQkFBZ0JDLGtCQUNoQjtTQUFJSjtNQUFRO1FBQUVEO1FBQU9EO1FBQVFrQixNQUFNQyxnQkFBZ0JyQjtRQUFVc0IsTUFBTUo7UUFBV0g7TUFBUztPQUN2RmQsUUFDQUMsTUFBQUE7RUFFUjtBQUNKO0FBbEJnQkY7QUFvQlQsU0FBU3VCLE1BQUFBO0FBQ1osU0FBT3ZCLFNBQUFBO0FBQ1g7QUFGZ0J1Qjs7O0FDbkJULFNBQVNDLGFBQWFDLFFBQWtDO0FBQzNELFNBQTBDLENBQUNDLFFBQWdCQyxRQUFpQkMsZUFBQUE7QUFDeEUsVUFBTUMsa0JBQThDLENBQUE7QUFDcEQsZUFBV0MsU0FBU0wsUUFBUTtBQUN4QixZQUFNLEVBQUVNLE9BQU9DLE9BQU9DLE1BQUssSUFBS0MsY0FBY0osS0FBQUE7QUFDOUMsVUFBSSxDQUFDQyxNQUFPLE9BQU0sSUFBSUksTUFBTUYsS0FBQUE7QUFDNUJKLHNCQUFnQk8sS0FBS0osS0FBQUE7SUFDekI7QUFFQSxRQUFJLENBQUNLLE1BQU1ULFVBQUFBLEtBQWUsQ0FBQ1MsTUFBTVQsV0FBV0ksS0FBSyxHQUFHO0FBQ2hELFVBQUlQLE9BQU9hLFdBQVcsR0FBRztBQUNyQixjQUFNLElBQUlILE1BQU1JLGFBQWFDLHVCQUF1QjtNQUN4RDtBQUVBLFlBQU1DLGVBQWVDLFFBQVFDLFlBQThCQyxnQkFBZ0JDLFFBQVFuQixPQUFPLGFBQWFDLE1BQUFBLEtBQVcsQ0FBQTtBQUNsSGUsY0FBUUksZUFBZUYsZ0JBQWdCQyxRQUFRO1dBQUloQjtXQUFvQlk7U0FBZWYsT0FBTyxhQUFhQyxNQUFBQTtBQUMxRyxhQUFPQztJQUNYO0FBRUEsUUFBSUgsT0FBT2EsV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSUgsTUFBTUksYUFBYUMsdUJBQXVCO0lBQ3hEO0FBRUEsVUFBTU8sY0FBY0wsUUFBUUMsWUFBOEJDLGdCQUFnQkMsUUFBUW5CLE1BQUFBLEtBQVcsQ0FBQTtBQUM3RmdCLFlBQVFJLGVBQWVGLGdCQUFnQkMsUUFBUTtTQUFJaEI7U0FBb0JrQjtPQUFjckIsTUFBQUE7QUFDckYsV0FBT0E7RUFDWDtBQUNKO0FBM0JnQkY7OztBQ0FULFNBQVN3QixtQkFBbUJDLGNBQW9EO0FBQ25GLFNBQTBDLENBQUNDLFFBQWdCQyxRQUFpQkMsZUFBQUE7QUFDeEUsVUFBTUMsd0JBQWdFLENBQUE7QUFDdEUsZUFBV0MsZUFBZUwsY0FBYztBQUNwQyxZQUFNLEVBQUVNLE9BQU9DLE9BQU9DLE1BQUssSUFBS0Msb0JBQW9CSixXQUFBQTtBQUNwRCxVQUFJLENBQUNDLE1BQU8sT0FBTSxJQUFJSSxNQUFNRixLQUFBQTtBQUM1QkosNEJBQXNCTyxLQUFLSixLQUFBQTtJQUMvQjtBQUVBLFFBQUksQ0FBQ0ssTUFBTVQsVUFBQUEsS0FBZSxDQUFDUyxNQUFNVCxXQUFXSSxLQUFLLEdBQUc7QUFDaEQsVUFBSVAsYUFBYWEsV0FBVyxHQUFHO0FBQzNCLGNBQU0sSUFBSUgsTUFBTUksYUFBYUMsNkJBQTZCO01BQzlEO0FBRUEsWUFBTUMscUJBQ0ZDLFFBQVFDLFlBQW9DQyxnQkFBZ0JDLGNBQWNuQixPQUFPLGFBQWFDLE1BQUFBLEtBQVcsQ0FBQTtBQUM3R2UsY0FBUUksZUFDSkYsZ0JBQWdCQyxjQUNoQjtXQUFJaEI7V0FBMEJZO1NBQzlCZixPQUFPLGFBQ1BDLE1BQUFBO0FBRUosYUFBT0M7SUFDWDtBQUVBLFFBQUlILGFBQWFhLFdBQVcsR0FBRztBQUMzQixZQUFNLElBQUlILE1BQU1JLGFBQWFDLDZCQUE2QjtJQUM5RDtBQUVBLFVBQU1PLG9CQUFvQkwsUUFBUUMsWUFBb0NDLGdCQUFnQkMsY0FBY25CLE1BQUFBLEtBQVcsQ0FBQTtBQUMvR2dCLFlBQVFJLGVBQWVGLGdCQUFnQkMsY0FBYztTQUFJaEI7U0FBMEJrQjtPQUFvQnJCLE1BQUFBO0FBQ3ZHLFdBQU9BO0VBQ1g7QUFDSjtBQWpDZ0JGOzs7QUNBVCxTQUFTd0IsWUFBWUMsT0FBK0I7QUFDdkQsU0FBMEMsQ0FBQ0MsUUFBZ0JDLFFBQWlCQyxlQUFBQTtBQUN4RSxVQUFNQyxpQkFBMkMsQ0FBQTtBQUNqRCxlQUFXQyxRQUFRTCxPQUFPO0FBQ3RCLFlBQU0sRUFBRU0sT0FBT0MsT0FBT0MsTUFBSyxJQUFLQyxhQUFhSixJQUFBQTtBQUM3QyxVQUFJLENBQUNDLE1BQU8sT0FBTSxJQUFJSSxNQUFNRixLQUFBQTtBQUM1QkoscUJBQWVPLEtBQUtKLEtBQUFBO0lBQ3hCO0FBRUEsUUFBSSxDQUFDSyxNQUFNVCxVQUFBQSxLQUFlLENBQUNTLE1BQU1ULFdBQVdJLEtBQUssR0FBRztBQUNoRCxVQUFJUCxNQUFNYSxXQUFXLEdBQUc7QUFDcEIsY0FBTSxJQUFJSCxNQUFNSSxhQUFhQyxzQkFBc0I7TUFDdkQ7QUFFQSxZQUFNQyxjQUFjQyxRQUFRQyxZQUE2QkMsZ0JBQWdCQyxPQUFPbkIsT0FBTyxhQUFhQyxNQUFBQSxLQUFXLENBQUE7QUFDL0dlLGNBQVFJLGVBQWVGLGdCQUFnQkMsT0FBTztXQUFJaEI7V0FBbUJZO1NBQWNmLE9BQU8sYUFBYUMsTUFBQUE7QUFDdkcsYUFBT0M7SUFDWDtBQUVBLFFBQUlILE1BQU1hLFdBQVcsR0FBRztBQUNwQixZQUFNLElBQUlILE1BQU1JLGFBQWFDLHNCQUFzQjtJQUN2RDtBQUVBLFVBQU1PLGFBQWFMLFFBQVFDLFlBQTZCQyxnQkFBZ0JDLE9BQU9uQixNQUFBQSxLQUFXLENBQUE7QUFDMUZnQixZQUFRSSxlQUFlRixnQkFBZ0JDLE9BQU87U0FBSWhCO1NBQW1Ca0I7T0FBYXJCLE1BQUFBO0FBQ2xGLFdBQU9BO0VBQ1g7QUFDSjtBQTNCZ0JGOzs7QUNIVCxTQUFTd0IsbUJBQW1CQyxNQUEyQkMsTUFBZUMsV0FBMkI7QUFDcEcsU0FBeUIsQ0FBQ0MsUUFBZ0JDLFdBQUFBO0FBQ3RDLFFBQUksQ0FBQ0MsTUFBTUgsU0FBQUEsS0FBYyxDQUFDSSxTQUFTSixTQUFBQSxLQUFjLENBQUNLLFNBQVNMLFNBQUFBLEdBQVk7QUFDbkUsWUFBTSxJQUFJTSxNQUFNQyxhQUFhQyw2QkFBNkI7SUFDOUQ7QUFFQSxRQUFJLENBQUNMLE1BQU1KLElBQUFBLEtBQVMsQ0FBQ0ssU0FBU0wsSUFBQUEsR0FBTztBQUNqQyxZQUFNLElBQUlPLE1BQU1DLGFBQWFFLG1CQUFtQjtJQUNwRDtBQUVBVixXQUFPQSxRQUFRRztBQUVmLFVBQU1RLE9BQ0ZDLFFBQVFDLFlBQW9FQyxnQkFBZ0JDLGdCQUFnQmIsTUFBQUEsS0FBVyxDQUFBO0FBRTNILFFBQUlTLEtBQUtLLEtBQUssQ0FBQ0MsUUFBUUEsSUFBSWQsV0FBV0EsVUFBVWMsSUFBSWpCLFNBQVNBLFFBQVFpQixJQUFJbEIsU0FBU0EsSUFBQUEsR0FBTztBQUNyRixZQUFNLElBQUlRLE1BQU1DLGFBQWFVLG1CQUFtQjtJQUNwRDtBQUVBTixZQUFRTyxlQUNKTCxnQkFBZ0JDLGdCQUNoQjtTQUFJSjtNQUFNO1FBQUVSO1FBQVFIO1FBQU1EO1FBQU1FO01BQVU7T0FDMUNDLE1BQUFBO0VBRVI7QUFDSjtBQXpCZ0JKOzs7QUNGVCxTQUFTc0IsVUFBVUMsU0FBZ0I7QUFDdEMsU0FBT0MsbUJBQW1CLGFBQWFELE9BQUFBO0FBQzNDO0FBRmdCRDs7O0FDQVQsU0FBU0csaUJBQWlCQyxJQUFxQkMsU0FBZ0I7QUFDbEUsU0FBT0MsbUJBQW1CLG9CQUFvQkQsU0FBU0QsRUFBQUE7QUFDM0Q7QUFGZ0JEOzs7QUNFVCxTQUFTSSxxQkFBcUJDLE1BQTZCQyxNQUFlQyxTQUFrQztBQUMvRyxTQUF5QixDQUFDQyxRQUFnQkMsV0FBQUE7QUFDdEMsUUFBSSxDQUFDQyxNQUFNSixJQUFBQSxLQUFTLENBQUNLLFNBQVNMLElBQUFBLEdBQU87QUFDakMsWUFBTSxJQUFJTSxNQUFNQyxhQUFhQyxxQkFBcUI7SUFDdEQ7QUFFQVIsV0FBT0EsUUFBUUc7QUFFZixVQUFNTSxTQUFTQyxRQUFRQyxZQUE2QkMsZ0JBQWdCQyxRQUFRWCxNQUFBQSxLQUFXLENBQUE7QUFFdkYsUUFBSU8sT0FBT0ssS0FBSyxDQUFDQyxVQUFVQSxNQUFNWixXQUFXQSxVQUFVWSxNQUFNZixTQUFTQSxRQUFRZSxNQUFNaEIsU0FBU0EsSUFBQUEsR0FBTztBQUMvRixZQUFNLElBQUlPLE1BQU1DLGFBQWFTLHFCQUFxQjtJQUN0RDtBQUVBTixZQUFRTyxlQUNKTCxnQkFBZ0JDLFFBQ2hCO1NBQUlKO01BQXVCO1FBQUVOO1FBQVFIO1FBQU1EO1FBQU1FO01BQVE7T0FDekRDLE1BQUFBO0VBRVI7QUFDSjtBQXBCZ0JKOzs7QUNEVCxTQUFTb0IsS0FBS0MsU0FBd0JDLFVBQXVCLENBQUMsR0FBQztBQUNsRSxTQUFPQyxxQkFBcUIsUUFBUUQsUUFBUUUsTUFBTTtJQUFFSDtJQUFTLEdBQUdDO0VBQVEsQ0FBQTtBQUM1RTtBQUZnQkY7OztBQ0RULFNBQVNLLFVBQVVDLE1BQWE7QUFDbkMsU0FBT0MscUJBQXFCLGFBQWFELElBQUFBO0FBQzdDO0FBRmdCRDs7O0FDR1QsU0FBU0csU0FBU0MsZUFBZ0NDLFNBQWdCO0FBQ3JFLFFBQU0sQ0FBQ0MsTUFBTUMsZUFBQUEsSUFBbUJDLFNBQVNKLGFBQUFBLElBQWlCO0lBQUNBO0lBQWVDO01BQVc7SUFBQ0k7SUFBV0w7O0FBQ2pHLFNBQU9NLHFCQUFxQixZQUFZSixNQUFNO0lBQUVELFNBQVNFO0VBQWlCLENBQUE7QUFDOUU7QUFIZ0JKOzs7QUNBVCxTQUFTUSxRQUFRQyxlQUFnQ0MsU0FBZ0I7QUFDcEUsUUFBTSxDQUFDQyxNQUFNQyxlQUFBQSxJQUFtQkMsU0FBU0osYUFBQUEsSUFBaUI7SUFBQ0E7SUFBZUM7TUFBVztJQUFDSTtJQUFXTDs7QUFDakcsU0FBT00scUJBQXFCLFdBQVdKLE1BQU07SUFBRUQsU0FBU0U7RUFBaUIsQ0FBQTtBQUM3RTtBQUhnQko7OztBQ0xULFNBQVNRLG1CQUFtQkMsWUFBb0U7QUFDbkcsU0FBTyxDQUNIQyxRQUNBQyxhQUNBQyxlQUFBQTtBQUVBLGVBQVdDLGFBQWFKLFlBQVk7QUFDaEMsVUFBSUMsa0JBQWtCSSxZQUFZLENBQUNGLFlBQVk7QUFDMUJDLGtCQUFXSCxNQUFBQTtBQUM1QjtNQUNKO0FBQ3NDRyxnQkFBV0gsUUFBUUMsYUFBYUMsVUFBQUE7SUFDMUU7RUFDSjtBQUNKO0FBZGdCSjs7O0FDUVQsU0FBU08scUJBQTBEQyxTQUF5RDtBQUMvSCxTQUFPLENBQW1CQyxTQUFrQkMsVUFBQUE7QUFDeEMsV0FBNEIsQ0FBQ0MsUUFBZ0JDLFFBQWdCQyxVQUFBQTtBQUN6RCxZQUFNQyxpQkFBMkMsQ0FBQTtBQUNqRCxpQkFBV0MsUUFBUUwsT0FBTztBQUN0QixjQUFNLEVBQUVNLE9BQU9DLE9BQU9DLE1BQUssSUFBS0MsYUFBYUosSUFBQUE7QUFDN0MsWUFBSSxDQUFDQyxNQUFPLE9BQU0sSUFBSUksTUFBTUYsS0FBQUE7QUFDNUJKLHVCQUFlTyxLQUFLSixLQUFBQTtNQUN4QjtBQUVBLFlBQU1LLFNBQVNDLFFBQVFDLFlBQStCQyxnQkFBZ0JDLGtCQUFrQmYsUUFBUUMsTUFBQUEsS0FBVyxDQUFBO0FBRTNHLFVBQUlVLE9BQU9LLEtBQUssQ0FBQ0MsVUFBVUEsTUFBTWYsVUFBVUEsS0FBQUEsR0FBUTtBQUMvQyxjQUFNLElBQUlPLE1BQU1TLGFBQWFDLDZDQUE2QztNQUM5RTtBQUVBLFlBQU1DLGFBQWFSLFFBQVFDLFlBQXVCLHFCQUFxQmIsUUFBUUMsTUFBQUE7QUFDL0UsWUFBTW9CLFdBQVdDLE1BQU1DLFFBQVFILFVBQUFBLElBQWNBLFdBQVdsQixLQUFBQSxJQUFTc0I7QUFFakVaLGNBQVFhLGVBQ0pYLGdCQUFnQkMsa0JBQ2hCO1dBQ09KO1FBQ0g7VUFDSVQ7VUFDQUQ7VUFDQUYsT0FBT0k7VUFDUHVCLE1BQU1DLGdCQUFnQkM7VUFDdEIvQjtVQUNBQztVQUNBdUI7UUFDSjtTQUVKckIsUUFDQUMsTUFBQUE7SUFFUjtFQUNKO0FBQ0o7QUF0Q2dCTDs7O0FDUmhCLFNBQVNpQyw2QkFBOEM7QUFFaEQsU0FBU0MsV0FBd0JDLElBQXlDO0FBQzdFLFNBQU8sSUFBSUMsc0JBQXlCRCxFQUFBQTtBQUN4QztBQUZnQkQ7Ozs7Ozs7Ozs7QTlDS1QsSUFBTUcsbUJBQU4sTUFBTUE7U0FBQUE7OztFQUNGQyxJQUE4REMsYUFBbUJDLFFBQTRCO0FBQ2hILFdBQU9DLFFBQVFDLFlBQXFCSCxhQUFhQyxNQUFBQTtFQUNyRDtFQUVPRyxPQUNISixhQUNBSyxTQUNGO0FBQ0UsWUFBaUJBLFdBQVcsQ0FBQSxHQUFJQyxJQUFJLENBQUNMLFdBQVcsS0FBS0YsSUFBSUMsYUFBYUMsTUFBQUEsQ0FBQUE7RUFDMUU7RUFFT00sZUFDSFAsYUFDQUssU0FDRjtBQUNFLFVBQU1HLHFCQUFxQixLQUFLSixPQUFzQkosYUFBYUssT0FBQUEsRUFBU0ksT0FBTyxDQUFDQyxTQUFTQSxTQUFTQyxNQUFBQTtBQUV0RyxRQUFJQyxRQUFRSixrQkFBQUEsRUFBcUIsUUFBZ0JBO0FBRWpELFdBQWdCQSxtQkFBbUJLLE9BQU8sQ0FBQ0MsR0FBR0MsTUFBQUE7QUFDMUMsVUFBSUMsTUFBTUMsUUFBUUgsQ0FBQUEsR0FBSTtBQUNsQixlQUFPQSxFQUFFSSxPQUFPSCxDQUFBQTtNQUNwQjtBQUNBLFVBQUlJLFNBQVNMLENBQUFBLEtBQU1LLFNBQVNKLENBQUFBLEdBQUk7QUFDNUIsZUFBTztVQUNILEdBQUdEO1VBQ0gsR0FBR0M7UUFDUDtNQUNKO0FBQ0EsYUFBTztRQUFDRDtRQUFHQzs7SUFDZixDQUFBO0VBQ0o7RUFFT0ssa0JBQTRFcEIsYUFBbUJLLFNBQWlDO0FBQ25JLGVBQVdKLFVBQVVJLFNBQVM7QUFDMUIsWUFBTWdCLFNBQVMsS0FBS3RCLElBQUlDLGFBQWFDLE1BQUFBO0FBQ3JDLFVBQUlvQixXQUFXVixPQUFXLFFBQWdCVTtJQUM5QztBQUNBLFdBQU9WO0VBQ1g7RUFNQSxPQUFjVyxnQkFDVkMsVUFBd0QsQ0FBQyxHQUNmO0FBQzFDLFVBQU12QixjQUFjdUIsUUFBUUMsT0FBT0MsaUJBQUFBO0FBQ25DLFVBQU1DLGNBQWMsd0JBQUNDLGtCQUEwQixDQUFDMUIsUUFBMkJ1QixLQUF1QkksZUFBQUE7QUFDOUYsWUFBTUMsUUFBUU4sUUFBUU8sWUFBWVAsUUFBUU8sVUFBVUgsYUFBQUEsSUFBaUJBO0FBQ3JFSSxrQkFBWS9CLGFBQWE2QixTQUFTLENBQUMsQ0FBQSxFQUFHNUIsUUFBUXVCLEtBQU1JLFVBQUFBO0lBQ3hELEdBSG9CO0FBS3BCRixnQkFBWU0sTUFBTWhDO0FBQ2xCLFdBQU8wQjtFQUNYO0FBQ0o7Ozs7OztBK0NqRUEsU0FBU08sVUFBQUEsU0FBUUMsY0FBQUEsbUJBQWtCO0FBRW5DLFNBQVNDLFFBQUFBLGFBQThCOzs7Ozs7Ozs7Ozs7QUFJaEMsSUFBTUMsZUFBTixNQUFNQTtTQUFBQTs7O0VBQ3FDQztFQUM3QkMsY0FBYyxvQkFBSUMsSUFBQUE7RUFDbEJDLGFBQWEsb0JBQUlELElBQUFBO0VBQ2pCRSxZQUFZLG9CQUFJRixJQUFBQTtFQUNoQkcsU0FBUyxvQkFBSUgsSUFBQUE7RUFFOUIsSUFBV0ksTUFBTTtBQUNiLFdBQU8sS0FBS04sbUJBQW1CTyxPQUFPRDtFQUMxQztFQUVBLElBQVdFLGFBQWE7QUFDcEIsV0FBTztTQUFJLEtBQUtQLFlBQVlRLE9BQU07O0VBQ3RDO0VBRUEsSUFBV0MsWUFBWTtBQUNuQixXQUFPO1NBQUksS0FBS1AsV0FBV00sT0FBTTs7RUFDckM7RUFFQSxJQUFXRSxXQUFXO0FBQ2xCLFdBQU87U0FBSSxLQUFLUCxVQUFVSyxPQUFNOztFQUNwQztFQUVBLElBQVdHLFFBQVE7QUFDZixXQUFPO1NBQUksS0FBS1AsT0FBT0ksT0FBTTs7RUFDakM7RUFFQSxJQUFXSSxpQkFBaUJDLE9BQWU7QUFDdkMsU0FBS2QsbUJBQW1CTyxPQUFPTSxtQkFBbUJDO0VBQ3REO0VBRUEsSUFBV0QsbUJBQW1CO0FBQzFCLFdBQU8sS0FBS2IsbUJBQW1CTyxPQUFPTTtFQUMxQztFQUVBLElBQVdFLDZCQUE2QkQsT0FBZTtBQUNuRCxTQUFLZCxtQkFBbUJPLE9BQU9RLCtCQUErQkQ7RUFDbEU7RUFFQSxJQUFXQywrQkFBK0I7QUFDdEMsV0FBTyxLQUFLZixtQkFBbUJPLE9BQU9RO0VBQzFDO0VBRU9DLGNBQWNDLFVBQW9CQyxTQUFtRDtBQUN4RixVQUFNLEVBQUVDLFNBQVMsR0FBR0MsWUFBQUEsSUFBZ0JGO0FBRXBDLFVBQU1HLE9BQU9DLE1BQUtILFNBQVNDLGFBQWFILFFBQUFBO0FBQ3hDLFFBQUlNLFNBQVNMLFFBQVFNLElBQUksRUFBRyxNQUFLbkIsT0FBT29CLElBQUlQLFFBQVFNLE1BQU1ILElBQUFBO0FBRTFELFdBQU9BO0VBQ1g7RUFFT0ssZUFBZVQsVUFBb0JVLFVBQWtCSCxNQUFlO0FBQ3ZFLFVBQU1JLFFBQVEsS0FBSzVCLG1CQUFtQk8sT0FBT3NCLFlBQVlaLFVBQVVVLFFBQUFBO0FBQ25FLFFBQUlKLFNBQVNDLElBQUFBLEVBQU8sTUFBS3JCLFdBQVdzQixJQUFJRCxNQUFNSSxLQUFBQTtBQUM5QyxXQUFPQTtFQUNYO0VBRU9FLGNBQWNiLFVBQW9CYyxTQUFpQlAsTUFBZTtBQUNyRSxVQUFNSSxRQUFRLEtBQUs1QixtQkFBbUJPLE9BQU95QixXQUFXZixVQUFVYyxPQUFBQTtBQUNsRSxRQUFJUixTQUFTQyxJQUFBQSxFQUFPLE1BQUtwQixVQUFVcUIsSUFBSUQsTUFBTUksS0FBQUE7QUFDN0MsV0FBT0E7RUFDWDtFQUVPSyxnQkFBZ0JoQixVQUFvQk8sTUFBZTtBQUN0RCxVQUFNSSxRQUFRLEtBQUs1QixtQkFBbUJPLE9BQU8yQixVQUFVakIsUUFBQUE7QUFDdkQsUUFBSU0sU0FBU0MsSUFBQUEsRUFBTyxNQUFLdkIsWUFBWXdCLElBQUlELE1BQU1JLEtBQUFBO0FBQy9DLFdBQU9BO0VBQ1g7RUFFT08sT0FBT0MsTUFBcURaLE1BQWM7QUFDN0UsWUFBUVksTUFBQUE7TUFDSixLQUFLO0FBQ0QsY0FBTUMsVUFBVSxLQUFLaEMsT0FBT2lDLElBQUlkLElBQUFBO0FBQ2hDLFlBQUlhLFNBQVM7QUFDVEEsa0JBQVFFLEtBQUk7QUFDWixlQUFLbEMsT0FBTzhCLE9BQU9YLElBQUFBO1FBQ3ZCO0FBQ0E7TUFDSixLQUFLO0FBQ0QsY0FBTWdCLFlBQVksS0FBS3ZDLFlBQVlxQyxJQUFJZCxJQUFBQTtBQUN2QyxZQUFJZ0IsV0FBVztBQUNYQSxvQkFBVUMsUUFBTztBQUNqQixlQUFLeEMsWUFBWWtDLE9BQU9YLElBQUFBO1FBQzVCO0FBQ0E7TUFDSixLQUFLO0FBQ0QsY0FBTUcsV0FBVyxLQUFLeEIsV0FBV21DLElBQUlkLElBQUFBO0FBQ3JDLFlBQUlHLFVBQVU7QUFDVkEsbUJBQVNjLFFBQU87QUFDaEIsZUFBS3RDLFdBQVdnQyxPQUFPWCxJQUFBQTtRQUMzQjtBQUNBO01BQ0osS0FBSztBQUNELGNBQU1PLFVBQVUsS0FBSzNCLFVBQVVrQyxJQUFJZCxJQUFBQTtBQUNuQyxZQUFJTyxTQUFTO0FBQ1RBLGtCQUFRVSxRQUFPO0FBQ2YsZUFBS3JDLFVBQVUrQixPQUFPWCxJQUFBQTtRQUMxQjtBQUNBO0lBQ1I7RUFDSjtFQUVPa0IsVUFBVU4sTUFBcURaLE1BQWM7QUFDaEYsWUFBUVksTUFBQUE7TUFDSixLQUFLO0FBQ0QsZUFBTyxLQUFLL0IsT0FBT2lDLElBQUlkLElBQUFBO01BQzNCLEtBQUs7QUFDRCxlQUFPLEtBQUt2QixZQUFZcUMsSUFBSWQsSUFBQUE7TUFDaEMsS0FBSztBQUNELGVBQU8sS0FBS3JCLFdBQVdtQyxJQUFJZCxJQUFBQTtNQUMvQixLQUFLO0FBQ0QsZUFBTyxLQUFLcEIsVUFBVWtDLElBQUlkLElBQUFBO0lBQ2xDO0VBQ0o7RUFFT21CLFFBQVFDLElBQVk7QUFDdkIsV0FBTyxLQUFLNUMsbUJBQW1CTyxPQUFPc0MsUUFBUUQsRUFBQUE7RUFDbEQ7RUFFT0UsS0FBS3RCLE1BQWU7QUFDdkIsV0FBTyxLQUFLeEIsbUJBQW1CTyxPQUFPdUMsS0FBS3RCLElBQUFBO0VBQy9DO0VBRU91QixRQUFRdkIsTUFBZTtBQUMxQixXQUFPLEtBQUt4QixtQkFBbUJPLE9BQU93QyxRQUFRdkIsSUFBQUE7RUFDbEQ7QUFDSjs7Ozs7Ozs7IiwKICAibmFtZXMiOiBbImluamVjdGFibGUiLCAiaW5qZWN0YWJsZSIsICJDb250cm9sbGVyIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgImRlZmluZU1ldGFkYXRhIiwgImluamVjdGFibGUiLCAiR2xvYmFsIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImRlZmluZU1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJHbG9iYWxNb2R1bGUiLCAiaW5qZWN0IiwgIkluamVjdCIsICJrZXkiLCAidGFyZ2V0IiwgInByb3BlcnR5S2V5IiwgInBhcmFtSW5kZXgiLCAiaXNOaWwiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJ2YWxpZCIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkIiwgInRva2VuIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJJbmplY3RhYmxlIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJkZWZpbmVNZXRhZGF0YSIsICJpbmplY3RhYmxlIiwgImluamVjdGFibGUiLCAiTW9kdWxlIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAiZGVmaW5lTWV0YWRhdGEiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJPcHRpb25hbCIsICJ0YXJnZXQiLCAicHJvcGVydHlLZXkiLCAicGFyYW1JbmRleCIsICJvcHRpb25hbCIsICJTZXRNZXRhZGF0YSIsICJrZXkiLCAidmFsdWUiLCAiZGVjb3JhdG9yRmFjdG9yeSIsICJ0YXJnZXQiLCAiX21ldGhvZCIsICJkZXNjcmlwdG9yIiwgIlJlZmxlY3QiLCAiZGVmaW5lTWV0YWRhdGEiLCAiS0VZIiwgIkNhdGNoIiwgImV4Y2VwdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJkdXBsaWNhdGVzIiwgImZpbHRlciIsICJleGNlcHRpb24iLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJsZW5ndGgiLCAiRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCIsICJkZWZpbmVNZXRhZGF0YSIsICJVc2VGaWx0ZXJzIiwgImZpbHRlcnMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJkZXNjcmlwdG9yIiwgInZhbGlkYXRlZEZpbHRlcnMiLCAiZmlsdGVyIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAiRXJyb3IiLCAicHVzaCIsICJpc05pbCIsICJsZW5ndGgiLCAiRXJyb3JNZXNzYWdlIiwgIkF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCIsICJtZXRob2RGaWx0ZXJzIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yRmlsdGVycyIsICJmaW5kIiwgImluY2x1ZGVzIiwgIkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAiY2xhc3NGaWx0ZXJzIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIm9wdGlvbmFsIiwgIkFwcFJ1bnRpbWUiLCAiZXZlbnRIYW5kbGVyIiwgInJwY0hhbmRsZXIiLCAiZ2xvYmFsR3VhcmRzIiwgImdsb2JhbEludGVyY2VwdG9ycyIsICJnbG9iYWxQaXBlcyIsICJnbG9iYWxFcnJvckZpbHRlcnMiLCAibG9nZ2VyU2VydmljZSIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgImJvb3QiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgInZhbHVlIiwgImluc3RhbmNlIiwgImNvbnRhaW5lciIsICJnZXQiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAiY29udHJvbGxlcnMiLCAiZm9yRWFjaCIsICJjb250cm9sbGVyIiwgImludGVybmFsUHJvdmlkZXJzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInRva2VuIiwgImxvZyIsICJuYW1lIiwgInJ1bkxpZmVjeWNsZU1ldGhvZCIsICJydW5MaWZlY3ljbGVNZXRob2RzIiwgInRyYXZlcnNlIiwgInRpbWUiLCAicmVnaXN0ZXJUaW1lcnMiLCAicmVnaXN0ZXJMaXN0ZW5lcnMiLCAic2h1dGRvd24iLCAidGltZXJTZXJ2aWNlIiwgIm93bmVyIiwgIlRJTUVSX1NFUlZJQ0UiLCAiZXZlcnl0aWNrcyIsICJ0aW1lciIsICJkZXN0cm95IiwgImludGVydmFscyIsICJ0aW1lb3V0cyIsICJjcm9ucyIsICJjcm9uIiwgInN0b3AiLCAiZXZlbnRIYW5kbGVycyIsICJoYW5kbGVyIiwgInJwY0hhbmRsZXJzIiwgImV2ZW50cyIsICJldmVudCIsICJndWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJtYXBFcnJvckZpbHRlcnMiLCAiZXJyb3JGaWx0ZXJzIiwgInJlZ2lzdGVyRXZlbnQiLCAicHVzaCIsICJycGNzIiwgInJwYyIsICJyZWdpc3RlclJQQyIsICJ0aW1lcnMiLCAidHlwZSIsICJjcmVhdGVDcm9uSm9iIiwgIm1ldGhvZCIsICJiaW5kIiwgIm9wdGlvbnMiLCAiY3JlYXRlRXZlcnlUaWNrIiwgImNyZWF0ZUludGVydmFsIiwgInRpbWVvdXQiLCAiY3JlYXRlVGltZW91dCIsICJmaWx0ZXJNYXAiLCAiZmlsdGVyIiwgImVycm9ycyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDYXRjaCIsICJsZW5ndGgiLCAiZXJyb3IiLCAiaXNOaWwiLCAiZmluZCIsICJmaWx0ZXJFcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRXJyb3JBbHJlYWR5SGFuZGxlZEJ5RmlsdGVyIiwgIlByb21pc2UiLCAiYWxsIiwgIm1hcCIsICJpc09iamVjdCIsICJwcm92aWRlckluc3RhbmNlIiwgIkNvbnRhaW5lciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJNb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImdsb2JhbEFwcENvbnRhaW5lciIsICJsb2dnZXJTZXJ2aWNlIiwgImNvbnRhaW5lck9wdGlvbnMiLCAiYmluZCIsICJyZXNvbHZlZFRyZWUiLCAiYXN5bmNUcmF2ZXJzZSIsICJub2RlIiwgInN0YXJ0VGltZSIsICJEYXRlIiwgIm5vdyIsICJtb2R1bGUiLCAidmFsdWUiLCAiY29udGFpbmVyIiwgIk1vZHVsZUNvbnRhaW5lciIsICJtZXRhZGF0YSIsICJwYXJlbnQiLCAiY2xhc3NSZWYiLCAidG9TZWxmIiwgImluU2luZ2xldG9uU2NvcGUiLCAiZ2xvYmFsIiwgIl8iLCAicHJvdmlkZXIiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAiYmluZFByb3ZpZGVyIiwgInRva2VuIiwgInRvRHluYW1pY1ZhbHVlIiwgImdldCIsICJpbXBvcnRNb2R1bGUiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiaW50ZXJuYWxQcm92aWRlcnMiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJ0b0NvbnN0YW50VmFsdWUiLCAiY29udHJvbGxlcnMiLCAiVElNRVJfU0VSVklDRSIsICJ0byIsICJUaW1lclNlcnZpY2UiLCAibG9nIiwgIm5hbWUiLCAicHJvdmlkZSIsICJ1c2VWYWx1ZSIsICJiaW5kaW5nIiwgImN0eCIsICJkZXBzIiwgImluamVjdCIsICJtYXAiLCAiZGVwIiwgImlzT2JqZWN0IiwgImVyciIsICJvcHRpb25hbCIsICJ1bmRlZmluZWQiLCAiZXJyb3IiLCAidXNlRmFjdG9yeSIsICJzY29wZSIsICJpblRyYW5zaWVudFNjb3BlIiwgImluUmVxdWVzdFNjb3BlIiwgInVzZUNsYXNzIiwgInRvU2VydmljZSIsICJ1c2VFeGlzdGluZyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJNb2R1bGVUcmVlU2Nhbm5lciIsICJtb2R1bGVNZXRhZGF0YVJlYWRlciIsICJjb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJzY2FuIiwgImNsYXNzUmVmIiwgInN0YXJ0VGltZSIsICJEYXRlIiwgIm5vdyIsICJtb2R1bGVNZXRhZGF0YSIsICJyZWFkIiwgIm1vZHVsZSIsICJNb2R1bGUiLCAibWV0YWRhdGEiLCAibG9nIiwgIm5hbWUiLCAic2NhbkNvbnRyb2xsZXJzIiwgIm1vZHVsZVRyZWUiLCAiVHJlZSIsICJzY2FubmVkTW9kdWxlcyIsICJNYXAiLCAic2V0IiwgImltcG9ydGVkTW9kdWxlIiwgImltcG9ydHMiLCAic2Nhbk1vZHVsZXMiLCAicm9vdCIsICJwYXJlbnROb2RlIiwgInNjYW5uZWRNb2R1bGUiLCAiZ2V0IiwgImlzTmlsIiwgInZhbHVlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgImFkZCIsICJjaGVja0NpcmN1bGFyRGVwZW5kZW5jeSIsICJwYXJlbnQiLCAidHJlZU5vZGUiLCAiVHJlZU5vZGUiLCAiYWRkQ2hpbGQiLCAiaW1wb3J0TW9kdWxlIiwgImNvbnRyb2xsZXJzIiwgImNvbnRyb2xsZXJNZXRhZGF0YSIsICJjb250cm9sbGVyIiwgIkNvbnRyb2xsZXIiLCAib3duZXIiLCAicHVzaCIsICJwYXJlbnRNZXRhZGF0YSIsICJpbmNsdWRlcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQiLCAiUmFnZU1QU2NyaXB0RXZlbnQiLCAiZXZlbnROYW1lIiwgImxpc3RlbmVyIiwgImRlc3Ryb3kiLCAibXAiLCAiZXZlbnRzIiwgInJlbW92ZSIsICJSYWdlTVBFdmVudEVtbWl0ZXIiLCAiZW1pdCIsICJldmVudE5hbWUiLCAiYXJncyIsICJtcCIsICJldmVudHMiLCAiY2FsbCIsICJvbiIsICJsaXN0ZW5lciIsICJhZGQiLCAiUmFnZU1QU2NyaXB0RXZlbnQiLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJyZW1vdmUiLCAib2ZmIiwgIlJhZ2VNUFRpbWVyIiwgImxhc3RUaWNrIiwgIkRhdGUiLCAibm93IiwgImlkIiwgImludGVydmFsIiwgIm9uY2UiLCAiY2FsbGJhY2siLCAiY2xlYXJUaW1lciIsICJkZXN0cm95IiwgIlJhZ2VNUFRpbWVycyIsICJ0aW1lckluY3JlbWVudGVyIiwgInRpbWVycyIsICJNYXAiLCAiZXZlcnlUaWNrSGFuZGxlcnMiLCAiaXNFdmVyeVRpY2tSdW5uaW5nIiwgImV2ZXJ5VGlja01haW5IYW5kbGVyIiwgImFsbCIsICJ2YWx1ZXMiLCAid2FybmluZ1RocmVzaG9sZCIsICJfdmFsdWUiLCAic291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCIsICJnZXRCeUlEIiwgImlkIiwgInRpbWVyIiwgImdldCIsICJjcmVhdGVUaW1lciIsICJjbGVhciIsICJjYWxsYmFjayIsICJpbnRlcnZhbCIsICJvbmNlIiwgImFyZ3MiLCAiY2FsbGJhY2tCaW5kIiwgImJpbmQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ0aW1lcklkIiwgInJhZ2VNUFRpbWVyIiwgIlJhZ2VNUFRpbWVyIiwgImRlbGV0ZSIsICJzZXQiLCAic2V0SW50ZXJ2YWwiLCAidGltZSIsICJjYiIsICJjbGVhckludGVydmFsIiwgInNldFRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgImV2ZXJ5VGljayIsICJib3VuZCIsICJpc0NsaWVudFNpZGUiLCAibXAiLCAiYnJvd3NlcnMiLCAiaGFuZGxlciIsICJlIiwgImNvbnNvbGUiLCAibG9nRXJyb3IiLCAiZXZlbnRzIiwgImFkZCIsICJpbnRlcnZhbEhhbmRsZXIiLCAiX2V2ZXJ5VGlja0ludGVydmFsIiwgInNpemUiLCAicmVtb3ZlIiwgIm5leHRUaWNrIiwgIl9uYW1lIiwgInRpbWVFbmQiLCAiUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlRpbWVycyIsICJFdmVudHMiLCAiUmFnZU1QRXZlbnRFbW1pdGVyIiwgIlJhZ2VNUFRpbWVycyIsICJwYXJzZUludGVybmFsQXJncyIsICJhcmdzIiwgInBsYXllciIsICJpc09iamVjdCIsICJ1bmRlZmluZWQiLCAiYm9keSIsICJsb2ciLCAiYXJnIiwgIm1lc3NhZ2UiLCAibWFwIiwgImEiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiU3RyaW5nIiwgImpvaW4iLCAibXAiLCAiY29uc29sZSIsICJsb2dJbmZvIiwgImxvZ0Vycm9yIiwgImxvZ1dhcm5pbmciLCAibG9nRGVidWciLCAiQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJBcHAiLCAibW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJhcHBSdW50aW1lIiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgInBsdWdpbnMiLCAibG9nZ2VyU2VydmljZSIsICJtb2R1bGVUcmVlIiwgImxvYWRlZCIsICJzdGFydCIsICJyb290TW9kdWxlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJBcHBBbHJlYWR5TG9hZGVkIiwgImxvZyIsICJydW5QbHVnaW5NZXRob2RzIiwgInNjYW4iLCAiYmluZCIsICJib290IiwgInN0b3AiLCAiQXBwTm90TG9hZGVkIiwgInNodXRkb3duIiwgIm1ldGhvZCIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAicCIsICJwbHVnaW4iLCAiZ2V0IiwgInJlc29sdmUiLCAiQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJwbHVnaW5zIiwgImdsb2JhbENvbnRhaW5lck9wdGlvbnMiLCAiY29uZmlnIiwgInVzZUdsb2JhbEd1YXJkcyIsICJndWFyZHMiLCAidmFsaWRhdGVkR3VhcmRzIiwgImd1YXJkIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlR3VhcmQiLCAiRXJyb3IiLCAicHVzaCIsICJiaW5kIiwgIkdMT0JBTF9HVUFSRFMiLCAidG9Db25zdGFudFZhbHVlIiwgInVzZUdsb2JhbEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAidmFsaWRhdGVkSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9yIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJ1c2VHbG9iYWxQaXBlcyIsICJwaXBlcyIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlUGlwZSIsICJHTE9CQUxfUElQRVMiLCAidXNlR2xvYmFsRmlsdGVycyIsICJmaWx0ZXJzIiwgInZhbGlkYXRlZEZJbHRlcnMiLCAiZmlsdGVyIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAidXNlUGx1Z2lucyIsICJmb3JFYWNoIiwgInAiLCAidG9TZWxmIiwgImluU2luZ2xldG9uU2NvcGUiLCAiaW50ZXJuYWxQbHVnaW5zIiwgImdldCIsICJQTFVHSU5TIiwgInJlYmluZCIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJzZXRDb250YWluZXJPcHRpb25zIiwgIm9wdGlvbnMiLCAib25seUdsb2JhbCIsICJDT05UQUlORVJfT1BUSU9OUyIsICJidWlsZCIsICJnbG9iYWxBcHBDb250YWluZXIiLCAiQ29udGFpbmVyIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAidG9TZXJ2aWNlIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiQXBwIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIk1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiQXBwUnVudGltZSIsICJQaXBlbGluZUhhbmRsZXIiLCAiTW9kdWxlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlciIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAidG9GYWN0b3J5IiwgImNvbnRleHQiLCAiYm9keSIsICJwbGF5ZXIiLCAicmVxdWVzdCIsICJjb250YWluZXIiLCAiJGJvZHkiLCAiJHBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAidHlwZSIsICJjbGFzc1JlZiIsICJoYW5kbGVyIiwgInJlc3BvbnNlIiwgIm5hbWUiLCAiZXhlY3V0aW9uQ29udGV4dCIsICIkdHlwZSIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJGhhbmRsZXIiLCAiJGNsYXNzUmVmIiwgIiRuYW1lIiwgInBsdWdpbiIsICJwbHVnaW5JbnN0YW5jZSIsICJvbkJ1aWxkIiwgImlzQm91bmQiLCAiQ29udGFpbmVyIiwgImNyZWF0ZUFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJwbHVnaW5zIiwgImFwcEJ1aWxkZXJJbmhlcml0IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJDb250YWluZXIiLCAiYmluZCIsICJJTlRFUk5BTF9BUFBfQ09OVEFJTkVSIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIlBMVUdJTlMiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAidHlwZSIsICJuYW1lIiwgIndlYlZpZXdJZCIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImlzTmlsIiwgImlzU3RyaW5nIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJFdmVudE5hbWVNdXN0QmVTdHJpbmciLCAiZXZlbnRzIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJFdmVudHMiLCAic29tZSIsICJldmVudCIsICJFdmVudE5hbWVNdXN0QmVVbmlxdWUiLCAiZGVmaW5lTWV0YWRhdGEiLCAiT25JbnRlcm5hbCIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25XZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbiIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25jZUludGVybmFsIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlV2ViVmlldyIsICJpZCIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiQm9keSIsICJwaXBlcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVQaXBlIiwgIkVycm9yIiwgInB1c2giLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJJbmRleCIsICJrZXkiLCAicGlwZXMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJpbmRleCIsICJpc051bWJlciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW5kZXhLZXlNdXN0QmVOdW1iZXIiLCAidmFsaWRhdGVkUGlwZXMiLCAicGlwZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZVBpcGUiLCAicHVzaCIsICJwYXJhbXMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb21lIiwgInBhcmFtIiwgIk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCIsICJwYXJhbVR5cGVzIiwgIm1ldGF0eXBlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidW5kZWZpbmVkIiwgImRlZmluZU1ldGFkYXRhIiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiUmVxdWVzdCIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgInBhcmFtcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvbWUiLCAicGFyYW0iLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCIsICJwYXJhbVR5cGVzIiwgIm1ldGF0eXBlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidW5kZWZpbmVkIiwgImRlZmluZU1ldGFkYXRhIiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiUmVxIiwgIlBhcmFtIiwgImtleSIsICJwaXBlcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgImlzU3RyaW5nIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJQYXJhbUtleU11c3RCZVN0cmluZyIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlUGlwZSIsICJwdXNoIiwgInBhcmFtcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvbWUiLCAicGFyYW0iLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAiZGF0YSIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJSZXNwb25zZSIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgInBhcmFtcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvbWUiLCAicGFyYW0iLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCIsICJwYXJhbVR5cGVzIiwgIm1ldGF0eXBlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidW5kZWZpbmVkIiwgImRlZmluZU1ldGFkYXRhIiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiUmVzIiwgIlVzZUd1YXJkcyIsICJndWFyZHMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJkZXNjcmlwdG9yIiwgInZhbGlkYXRlZEd1YXJkcyIsICJndWFyZCIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUd1YXJkIiwgIkVycm9yIiwgInB1c2giLCAiaXNOaWwiLCAibGVuZ3RoIiwgIkVycm9yTWVzc2FnZSIsICJBdExlYXN0T25lR3VhcmRSZXF1aXJlZCIsICJtZXRob2RHdWFyZHMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiR3VhcmRzIiwgImRlZmluZU1ldGFkYXRhIiwgImNsYXNzR3VhcmRzIiwgIlVzZUludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJkZXNjcmlwdG9yIiwgInZhbGlkYXRlZEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvciIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgIkVycm9yIiwgInB1c2giLCAiaXNOaWwiLCAibGVuZ3RoIiwgIkVycm9yTWVzc2FnZSIsICJBdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCIsICJtZXRob2RJbnRlcmNlcHRvcnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiSW50ZXJjZXB0b3JzIiwgImRlZmluZU1ldGFkYXRhIiwgImNsYXNzSW50ZXJjZXB0b3JzIiwgIlVzZVBpcGVzIiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiZGVzY3JpcHRvciIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlUGlwZSIsICJFcnJvciIsICJwdXNoIiwgImlzTmlsIiwgImxlbmd0aCIsICJFcnJvck1lc3NhZ2UiLCAiQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCIsICJtZXRob2RQaXBlcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJQaXBlcyIsICJkZWZpbmVNZXRhZGF0YSIsICJjbGFzc1BpcGVzIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJ0eXBlIiwgIm5hbWUiLCAid2ViVmlld0lkIiwgInRhcmdldCIsICJtZXRob2QiLCAiaXNOaWwiLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyIiwgIlJQQ05hbWVNdXN0QmVTdHJpbmciLCAicnBjcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUlBDcyIsICJzb21lIiwgInJwYyIsICJSUENOYW1lTXVzdEJlVW5pcXVlIiwgImRlZmluZU1ldGFkYXRhIiwgIk9uUmVxdWVzdCIsICJycGNOYW1lIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJPbldlYlZpZXdSZXF1ZXN0IiwgImlkIiwgInJwY05hbWUiLCAiY3JlYXRlUlBDRGVjb3JhdG9yIiwgImNyZWF0ZVRpbWVyRGVjb3JhdG9yIiwgInR5cGUiLCAibmFtZSIsICJvcHRpb25zIiwgInRhcmdldCIsICJtZXRob2QiLCAiaXNOaWwiLCAiaXNTdHJpbmciLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlRpbWVyTmFtZU11c3RCZVN0cmluZyIsICJ0aW1lcnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiVGltZXJzIiwgInNvbWUiLCAidGltZXIiLCAiRXZlbnROYW1lTXVzdEJlVW5pcXVlIiwgImRlZmluZU1ldGFkYXRhIiwgIkNyb24iLCAicGF0dGVybiIsICJvcHRpb25zIiwgImNyZWF0ZVRpbWVyRGVjb3JhdG9yIiwgIm5hbWUiLCAiRXZlcnlUaWNrIiwgIm5hbWUiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAiSW50ZXJ2YWwiLCAibmFtZU9yVGltZW91dCIsICJ0aW1lb3V0IiwgIm5hbWUiLCAiaW50ZXJ2YWxUaW1lb3V0IiwgImlzU3RyaW5nIiwgInVuZGVmaW5lZCIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJUaW1lb3V0IiwgIm5hbWVPclRpbWVvdXQiLCAidGltZW91dCIsICJuYW1lIiwgImludGVydmFsVGltZW91dCIsICJpc1N0cmluZyIsICJ1bmRlZmluZWQiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAiYXBwbHlEZWNvcmF0b3JzIiwgImRlY29yYXRvcnMiLCAidGFyZ2V0IiwgInByb3BlcnR5S2V5IiwgImRlc2NyaXB0b3IiLCAiZGVjb3JhdG9yIiwgIkZ1bmN0aW9uIiwgImNyZWF0ZVBhcmFtRGVjb3JhdG9yIiwgImZhY3RvcnkiLCAiZGF0YSIsICJwaXBlcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVQaXBlIiwgIkVycm9yIiwgInB1c2giLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiQ3VzdG9tIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmllciIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmllciIsICJSZWZsZWN0b3JTZXJ2aWNlIiwgImdldCIsICJtZXRhZGF0YUtleSIsICJ0YXJnZXQiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJnZXRBbGwiLCAidGFyZ2V0cyIsICJtYXAiLCAiZ2V0QWxsQW5kTWVyZ2UiLCAibWV0YWRhdGFDb2xsZWN0aW9uIiwgImZpbHRlciIsICJpdGVtIiwgInVuZGVmaW5lZCIsICJpc0VtcHR5IiwgInJlZHVjZSIsICJhIiwgImIiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJjb25jYXQiLCAiaXNPYmplY3QiLCAiZ2V0QWxsQW5kT3ZlcnJpZGUiLCAicmVzdWx0IiwgImNyZWF0ZURlY29yYXRvciIsICJvcHRpb25zIiwgImtleSIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgImRlY29yYXRvckZuIiwgIm1ldGFkYXRhVmFsdWUiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJ0cmFuc2Zvcm0iLCAiU2V0TWV0YWRhdGEiLCAiS0VZIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNyb24iLCAiVGltZXJTZXJ2aWNlIiwgIm11bHRpcGxheWVyU2VydmljZSIsICIkZXZlcnl0aWNrcyIsICJNYXAiLCAiJGludGVydmFscyIsICIkdGltZW91dHMiLCAiJGNyb25zIiwgImFsbCIsICJUaW1lcnMiLCAiZXZlcnl0aWNrcyIsICJ2YWx1ZXMiLCAiaW50ZXJ2YWxzIiwgInRpbWVvdXRzIiwgImNyb25zIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAidmFsdWUiLCAic291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCIsICJjcmVhdGVDcm9uSm9iIiwgImNhbGxiYWNrIiwgIm9wdGlvbnMiLCAicGF0dGVybiIsICJjcm9uT3B0aW9ucyIsICJjcm9uIiwgIkNyb24iLCAiaXNTdHJpbmciLCAibmFtZSIsICJzZXQiLCAiY3JlYXRlSW50ZXJ2YWwiLCAiaW50ZXJ2YWwiLCAidGltZXIiLCAic2V0SW50ZXJ2YWwiLCAiY3JlYXRlVGltZW91dCIsICJ0aW1lb3V0IiwgInNldFRpbWVvdXQiLCAiY3JlYXRlRXZlcnlUaWNrIiwgImV2ZXJ5VGljayIsICJkZWxldGUiLCAidHlwZSIsICJjcm9uSm9iIiwgImdldCIsICJzdG9wIiwgImV2ZXJ5dGljayIsICJkZXN0cm95IiwgImdldEJ5TmFtZSIsICJnZXRCeUlkIiwgImlkIiwgImdldEJ5SUQiLCAidGltZSIsICJ0aW1lRW5kIl0KfQo=