appium 2.0.0-beta.20 → 2.0.0-beta.24

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.
Files changed (90) hide show
  1. package/README.md +1 -2
  2. package/build/check-npm-pack-files.js +23 -0
  3. package/build/commands-yml/parse.js +319 -0
  4. package/build/commands-yml/validator.js +130 -0
  5. package/build/index.js +19 -0
  6. package/build/lib/appium.js +22 -7
  7. package/build/lib/cli/args.js +13 -15
  8. package/build/lib/cli/npm.js +27 -16
  9. package/build/lib/cli/parser.js +7 -3
  10. package/build/lib/config.js +27 -47
  11. package/build/lib/extension-config.js +1 -1
  12. package/build/lib/main.js +29 -28
  13. package/build/lib/plugin-config.js +2 -2
  14. package/build/lib/plugins.js +4 -2
  15. package/build/lib/schema/appium-config-schema.js +3 -2
  16. package/build/lib/schema/arg-spec.js +5 -3
  17. package/build/lib/schema/cli-args.js +25 -16
  18. package/build/lib/schema/keywords.js +14 -4
  19. package/build/lib/schema/schema.js +80 -9
  20. package/build/lib/utils.js +16 -36
  21. package/build/postinstall.js +90 -0
  22. package/build/test/cli/cli-e2e-specs.js +221 -0
  23. package/build/test/cli/cli-helpers.js +86 -0
  24. package/build/test/cli/cli-specs.js +71 -0
  25. package/build/test/cli/fixtures/test-driver/package.json +27 -0
  26. package/build/test/cli/schema-args-specs.js +48 -0
  27. package/build/test/cli/schema-e2e-specs.js +47 -0
  28. package/build/test/config-e2e-specs.js +112 -0
  29. package/build/test/config-file-e2e-specs.js +209 -0
  30. package/build/test/config-file-specs.js +281 -0
  31. package/build/test/config-specs.js +246 -0
  32. package/build/test/driver-e2e-specs.js +435 -0
  33. package/build/test/driver-specs.js +386 -0
  34. package/build/test/ext-config-io-specs.js +181 -0
  35. package/build/test/extension-config-specs.js +365 -0
  36. package/build/test/fixtures/allow-feat.txt +5 -0
  37. package/build/test/fixtures/caps.json +3 -0
  38. package/build/test/fixtures/config/allow-insecure.txt +3 -0
  39. package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +5 -0
  40. package/build/test/fixtures/config/appium.config.bad.json +32 -0
  41. package/build/test/fixtures/config/appium.config.ext-good.json +9 -0
  42. package/build/test/fixtures/config/appium.config.ext-unknown-props.json +10 -0
  43. package/build/test/fixtures/config/appium.config.good.js +40 -0
  44. package/build/test/fixtures/config/appium.config.good.json +33 -0
  45. package/build/test/fixtures/config/appium.config.good.yaml +30 -0
  46. package/build/test/fixtures/config/appium.config.invalid.json +31 -0
  47. package/build/test/fixtures/config/appium.config.security-array.json +5 -0
  48. package/build/test/fixtures/config/appium.config.security-delimited.json +5 -0
  49. package/build/test/fixtures/config/appium.config.security-path.json +5 -0
  50. package/build/test/fixtures/config/driver-fake.config.json +8 -0
  51. package/build/test/fixtures/config/nodeconfig.json +3 -0
  52. package/build/test/fixtures/config/plugin-fake.config.json +0 -0
  53. package/build/test/fixtures/default-args.js +35 -0
  54. package/build/test/fixtures/deny-feat.txt +5 -0
  55. package/build/test/fixtures/driver.schema.js +20 -0
  56. package/build/test/fixtures/extensions.yaml +27 -0
  57. package/build/test/fixtures/flattened-schema.js +532 -0
  58. package/build/test/fixtures/plugin.schema.js +20 -0
  59. package/build/test/fixtures/schema-with-extensions.js +28 -0
  60. package/build/test/grid-register-specs.js +74 -0
  61. package/build/test/helpers.js +75 -0
  62. package/build/test/logger-specs.js +76 -0
  63. package/build/test/npm-specs.js +20 -0
  64. package/build/test/parser-specs.js +319 -0
  65. package/build/test/plugin-e2e-specs.js +316 -0
  66. package/build/test/schema/arg-spec-specs.js +70 -0
  67. package/build/test/schema/cli-args-specs.js +408 -0
  68. package/build/test/schema/schema-specs.js +407 -0
  69. package/build/test/utils-specs.js +288 -0
  70. package/index.js +11 -0
  71. package/lib/appium-config.schema.json +2 -1
  72. package/lib/appium.js +51 -8
  73. package/lib/cli/args.js +17 -14
  74. package/lib/cli/npm.js +68 -6
  75. package/lib/cli/parser.js +5 -2
  76. package/lib/config.js +72 -54
  77. package/lib/extension-config.js +1 -1
  78. package/lib/main.js +93 -40
  79. package/lib/plugin-config.js +1 -1
  80. package/lib/plugins.js +2 -0
  81. package/lib/schema/appium-config-schema.js +1 -0
  82. package/lib/schema/arg-spec.js +12 -2
  83. package/lib/schema/cli-args.js +22 -34
  84. package/lib/schema/keywords.js +20 -4
  85. package/lib/schema/schema.js +142 -22
  86. package/lib/utils.js +28 -29
  87. package/package.json +10 -14
  88. package/types/types.d.ts +5 -0
  89. package/build/lib/cli/argparse-actions.js +0 -104
  90. package/lib/cli/argparse-actions.js +0 -77
@@ -65,36 +65,44 @@ function getSchemaValidator({
65
65
  };
66
66
  }
67
67
 
68
- function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
69
- var _overrides$dest;
70
-
68
+ function makeDescription(schema) {
71
69
  const {
72
- overrides = {}
73
- } = opts;
70
+ appiumCliDescription,
71
+ description = '',
72
+ appiumDeprecated
73
+ } = schema;
74
+ let desc = appiumCliDescription !== null && appiumCliDescription !== void 0 ? appiumCliDescription : description;
75
+
76
+ if (appiumDeprecated) {
77
+ desc = `[DEPRECATED] ${desc}`;
78
+ }
79
+
80
+ return desc;
81
+ }
82
+
83
+ function subSchemaToArgDef(subSchema, argSpec) {
74
84
  let {
75
85
  type,
76
86
  appiumCliAliases,
77
87
  appiumCliTransformer,
78
- appiumCliDescription,
79
- description,
80
88
  enum: enumValues
81
89
  } = subSchema;
82
90
  const {
83
91
  name,
84
- arg,
85
- dest
92
+ arg
86
93
  } = argSpec;
87
94
  const aliases = [aliasToFlag(argSpec), ...(appiumCliAliases !== null && appiumCliAliases !== void 0 ? appiumCliAliases : []).map(alias => aliasToFlag(argSpec, alias))];
88
95
  let argOpts = {
89
96
  required: false,
90
- help: appiumCliDescription !== null && appiumCliDescription !== void 0 ? appiumCliDescription : description
97
+ help: makeDescription(subSchema)
91
98
  };
92
99
  let argTypeFunction;
93
100
 
94
101
  switch (type) {
95
102
  case TYPENAMES.BOOLEAN:
96
103
  {
97
- argOpts.action = 'store_true';
104
+ argOpts.action = 'store_const';
105
+ argOpts.const = true;
98
106
  break;
99
107
  }
100
108
 
@@ -157,17 +165,18 @@ function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
157
165
  }
158
166
  }
159
167
 
160
- argOpts = _lodash.default.merge(argOpts, (_overrides$dest = overrides[dest]) !== null && _overrides$dest !== void 0 ? _overrides$dest : {});
161
168
  return [aliases, argOpts];
162
169
  }
163
170
 
164
- function toParserArgs(opts = {}) {
165
- const flattened = (0, _schema.flattenSchema)();
171
+ function toParserArgs() {
172
+ const flattened = (0, _schema.flattenSchema)().filter(({
173
+ schema
174
+ }) => !schema.appiumCliIgnored);
166
175
  return new Map(_lodash.default.map(flattened, ({
167
176
  schema,
168
177
  argSpec
169
- }) => subSchemaToArgDef(schema, argSpec, opts)));
178
+ }) => subSchemaToArgDef(schema, argSpec)));
170
179
  }require('source-map-support').install();
171
180
 
172
181
 
173
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwibmFtZXMiOlsiVFlQRU5BTUVTIiwiT2JqZWN0IiwiZnJlZXplIiwiQVJSQVkiLCJPQkpFQ1QiLCJCT09MRUFOIiwiSU5URUdFUiIsIk5VTUJFUiIsIk5VTEwiLCJTVFJJTkciLCJTSE9SVF9BUkdfQ1VUT0ZGIiwiYWxpYXNUb0ZsYWciLCJhcmdTcGVjIiwiYWxpYXMiLCJleHRUeXBlIiwiZXh0TmFtZSIsIm5hbWUiLCJhcmciLCJpc1Nob3J0IiwibGVuZ3RoIiwiXyIsImtlYmFiQ2FzZSIsInNjcmVhbWluZ1NuYWtlQ2FzZSIsImZsb3ciLCJzbmFrZUNhc2UiLCJ0b1VwcGVyIiwiZ2V0U2NoZW1hVmFsaWRhdG9yIiwicmVmIiwic2NoZW1hSWQiLCJjb2VyY2UiLCJpZGVudGl0eSIsInZhbHVlIiwiY29lcmNlZCIsImVycm9ycyIsImlzRW1wdHkiLCJBcmd1bWVudFR5cGVFcnJvciIsInN1YlNjaGVtYVRvQXJnRGVmIiwic3ViU2NoZW1hIiwib3B0cyIsIm92ZXJyaWRlcyIsInR5cGUiLCJhcHBpdW1DbGlBbGlhc2VzIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiZW51bSIsImVudW1WYWx1ZXMiLCJkZXN0IiwiYWxpYXNlcyIsIm1hcCIsImFyZ09wdHMiLCJyZXF1aXJlZCIsImhlbHAiLCJhcmdUeXBlRnVuY3Rpb24iLCJhY3Rpb24iLCJ0cmFuc2Zvcm1lcnMiLCJqc29uIiwiY3N2IiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwiVHlwZUVycm9yIiwibWV0YXZhciIsImNob2ljZXMiLCJTdHJpbmciLCJtZXJnZSIsInRvUGFyc2VyQXJncyIsImZsYXR0ZW5lZCIsIk1hcCIsInNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFZQSxNQUFNQSxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0Ms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QUFULEdBQUQsS0FDZndCLGlCQUFpQixDQUFDZ0MsTUFBRCxFQUFTeEQsT0FBVCxFQUFrQjBCLElBQWxCLENBRG5CLENBREssQ0FBUDtBQUtEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7QXJndW1lbnRUeXBlRXJyb3J9IGZyb20gJ2FyZ3BhcnNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2Zvcm1hdEVycm9ycyBhcyBmb3JtYXRFcnJvcnN9IGZyb20gJy4uL2NvbmZpZy1maWxlJztcbmltcG9ydCB7ZmxhdHRlblNjaGVtYSwgdmFsaWRhdGV9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7dHJhbnNmb3JtZXJzfSBmcm9tICcuL2NsaS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGNvbmNlcm5zIGZ1bmN0aW9ucyB3aGljaCBjb252ZXJ0IHNjaGVtYSBkZWZpbml0aW9ucyB0b1xuICogYGFyZ3BhcnNlYC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcywgZm9yIGRlcml2aW5nIENMSSBhcmd1bWVudHMgZnJvbSBhXG4gKiBzY2hlbWEuXG4gKi9cblxuLyoqXG4gKiBMb29rdXAgb2YgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgYHR5cGVgIGZpZWxkIGluIGEgSlNPTiBzY2hlbWEuXG4gKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KCdqc29uLXNjaGVtYScpLkpTT05TY2hlbWE3VHlwZU5hbWU+Pn1cbiAqL1xuY29uc3QgVFlQRU5BTUVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFSUkFZOiAnYXJyYXknLFxuICBPQkpFQ1Q6ICdvYmplY3QnLFxuICBCT09MRUFOOiAnYm9vbGVhbicsXG4gIElOVEVHRVI6ICdpbnRlZ2VyJyxcbiAgTlVNQkVSOiAnbnVtYmVyJyxcbiAgTlVMTDogJ251bGwnLFxuICBTVFJJTkc6ICdzdHJpbmcnLFxufSk7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIGFsaWFzIGxlbmd0aHMgbGVzcyB0aGFuIHRoaXMgd2lsbCBiZSBjb25zaWRlcmVkIFwic2hvcnRcIiBmbGFncy5cbiAqL1xuY29uc3QgU0hPUlRfQVJHX0NVVE9GRiA9IDM7XG5cbi8qKlxuICogQ29udmVydCBhbiBhbGlhcyAoYGZvb2ApIHRvIGEgZmxhZyAoYC0tZm9vYCkgb3IgYSBzaG9ydCBmbGFnIChgLWZgKS5cbiAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlYyAtIHRoZSBhcmd1bWVudCBzcGVjaWZpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIHRoZSBhbGlhcyB0byBjb252ZXJ0IHRvIGEgZmxhZ1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGZsYWdcbiAqL1xuZnVuY3Rpb24gYWxpYXNUb0ZsYWcgKGFyZ1NwZWMsIGFsaWFzKSB7XG4gIGNvbnN0IHtleHRUeXBlLCBleHROYW1lLCBuYW1lfSA9IGFyZ1NwZWM7XG4gIGNvbnN0IGFyZyA9IGFsaWFzID8/IG5hbWU7XG4gIGNvbnN0IGlzU2hvcnQgPSBhcmcubGVuZ3RoIDwgU0hPUlRfQVJHX0NVVE9GRjtcbiAgaWYgKGV4dFR5cGUgJiYgZXh0TmFtZSkge1xuICAgIHJldHVybiBpc1Nob3J0XG4gICAgICA/IGAtLSR7ZXh0VHlwZX0tJHtfLmtlYmFiQ2FzZShleHROYW1lKX0tJHthcmd9YFxuICAgICAgOiBgLS0ke2V4dFR5cGV9LSR7Xy5rZWJhYkNhc2UoZXh0TmFtZSl9LSR7Xy5rZWJhYkNhc2UoYXJnKX1gO1xuICB9XG4gIHJldHVybiBpc1Nob3J0ID8gYC0ke2FyZ31gIDogYC0tJHtfLmtlYmFiQ2FzZShhcmcpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gU0NSRUFNSU5HX1NOQUtFX0NBU0VcbiAqL1xuY29uc3Qgc2NyZWFtaW5nU25ha2VDYXNlID0gXy5mbG93KF8uc25ha2VDYXNlLCBfLnRvVXBwZXIpO1xuXG4vKipcbiAqIEdpdmVuIHVuaXF1ZSBwcm9wZXJ0eSBuYW1lIGBuYW1lYCwgcmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggdmFsaWRhdGVzIGEgdmFsdWVcbiAqIGFnYWluc3QgYSBwcm9wZXJ0eSB3aXRoaW4gdGhlIHNjaGVtYS5cbiAqIEB0ZW1wbGF0ZSBDb2VyY2VkXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSBBcmd1bWVudCBuYW1lXG4gKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nKSA9PiBDb2VyY2VkfSBbY29lcmNlXSAtIEZ1bmN0aW9uIHRvIGNvZXJjZSB0byBhIGRpZmZlcmVudFxuICogcHJpbWl0aXZlXG4gKiBAdG9kbyBTZWUgaWYgd2UgY2FuIHJlbW92ZSBgY29lcmNlYCBieSBhbGxvd2luZyBBanYgdG8gY29lcmNlIGluIGl0c1xuICogY29uc3RydWN0b3Igb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hVmFsaWRhdG9yICh7cmVmOiBzY2hlbWFJZH0sIGNvZXJjZSA9IF8uaWRlbnRpdHkpIHtcbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgY29lcmNlZCA9IGNvZXJjZSh2YWx1ZSk7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUoY29lcmNlZCwgc2NoZW1hSWQpO1xuICAgIGlmIChfLmlzRW1wdHkoZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGNvZXJjZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmd1bWVudFR5cGVFcnJvcihcbiAgICAgICdcXG5cXG4nICsgZm9ybWF0RXJyb3JzKGVycm9ycywgdmFsdWUsIHtzY2hlbWFJZH0pLFxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogR2l2ZW4gYXJnIGBuYW1lYCwgYSBKU09OIHNjaGVtYSBgc3ViU2NoZW1hYCwgYW5kIG9wdGlvbnMsIHJldHVybiBhbiBhcmd1bWVudCBkZWZpbml0aW9uXG4gKiBhcyB1bmRlcnN0b29kIGJ5IGBhcmdwYXJzZWAuXG4gKiBAcGFyYW0ge0FwcGl1bUpTT05TY2hlbWF9IHN1YlNjaGVtYSAtIEpTT04gc2NoZW1hIGZvciB0aGUgb3B0aW9uXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSBBcmd1bWVudCBzcGVjIHR1cGxlXG4gKiBAcGFyYW0ge1N1YlNjaGVtYVRvQXJnRGVmT3B0aW9uc30gW29wdHNdIC0gT3B0aW9uc1xuICogQHJldHVybnMge1tzdHJpbmdbXSwgaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc119IFR1cGxlIG9mIGZsYWcgYW5kIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3ViU2NoZW1hVG9BcmdEZWYgKHN1YlNjaGVtYSwgYXJnU3BlYywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtvdmVycmlkZXMgPSB7fX0gPSBvcHRzO1xuICBsZXQge1xuICAgIHR5cGUsXG4gICAgYXBwaXVtQ2xpQWxpYXNlcyxcbiAgICBhcHBpdW1DbGlUcmFuc2Zvcm1lcixcbiAgICBhcHBpdW1DbGlEZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlbnVtOiBlbnVtVmFsdWVzLFxuICB9ID0gc3ViU2NoZW1hO1xuXG4gIGNvbnN0IHtuYW1lLCBhcmcsIGRlc3R9ID0gYXJnU3BlYztcblxuICBjb25zdCBhbGlhc2VzID0gW1xuICAgIGFsaWFzVG9GbGFnKGFyZ1NwZWMpLFxuICAgIC4uLi8qKiBAdHlwZSB7c3RyaW5nW119ICovIChhcHBpdW1DbGlBbGlhc2VzID8/IFtdKS5tYXAoKGFsaWFzKSA9PlxuICAgICAgYWxpYXNUb0ZsYWcoYXJnU3BlYywgYWxpYXMpLFxuICAgICksXG4gIF07XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zfSAqL1xuICBsZXQgYXJnT3B0cyA9IHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogYXBwaXVtQ2xpRGVzY3JpcHRpb24gPz8gZGVzY3JpcHRpb24sXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYWxseSB3ZSB3aWxsIHByb3ZpZGUgYSBgdHlwZWAgdG8gYGFyZ3BhcnNlYCBhcyBhIGZ1bmN0aW9uIHdoaWNoXG4gICAqIHZhbGlkYXRlcyB1c2luZyBhanYgKHdoaWNoIGlzIG11Y2ggbW9yZSBmdWxsLWZlYXR1cmVkIHRoYW4gd2hhdCBgYXJncGFyc2VgXG4gICAqIGNhbiBvZmZlcikuIFRoZSBleGNlcHRpb24gaXMgYGJvb2xlYW5gLXR5cGUgb3B0aW9ucywgd2hpY2ggaGF2ZSBub1xuICAgKiBgYXJnVHlwZWAuXG4gICAqXG4gICAqIE5vdCBzdXJlIGlmIHRoaXMgdHlwZSBpcyBjb3JyZWN0LCBidXQgaXQncyBub3QgZG9pbmcgd2hhdCBJIHdhbnQuICBJIHdhbnRcbiAgICogdG8gc2F5IFwidGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgc29tZXRoaW5nIG9mIHR5cGUgYFRgIHdoZXJlIGBUYCBpc1xuICAgKiBuZXZlciBhIGBQcm9taXNlYFwiLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHN5bmMuXG4gICAqIEB0eXBlIHsoKHZhbHVlOiBzdHJpbmcpID0+IHVua25vd24pfHVuZGVmaW5lZH1cbiAgICovXG4gIGxldCBhcmdUeXBlRnVuY3Rpb247XG5cbiAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIHZhcmlvdXMgdHlwZXNcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgLy8gYm9vbGVhbnMgZG8gbm90IGhhdmUgYSB0eXBlIHBlciBgQXJndW1lbnRPcHRpb25zYCwganVzdCBhbiBcImFjdGlvblwiXG4gICAgY2FzZSBUWVBFTkFNRVMuQk9PTEVBTjoge1xuICAgICAgYXJnT3B0cy5hY3Rpb24gPSAnc3RvcmVfdHJ1ZSc7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFRZUEVOQU1FUy5PQkpFQ1Q6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IHRyYW5zZm9ybWVycy5qc29uO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gYXJyYXlzIGFyZSB0cmVhdGVkIGFzIENTVnMsIGJlY2F1c2UgYGFyZ3BhcnNlYCBkb2Vzbid0IGhhbmRsZSBhcnJheSBkYXRhLlxuICAgIGNhc2UgVFlQRU5BTUVTLkFSUkFZOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSB0cmFuc2Zvcm1lcnMuY3N2O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gXCJudW1iZXJcIiB0eXBlIGlzIGNvZXJjZWQgdG8gZmxvYXQuIGBhcmdwYXJzZWAgZG9lcyB0aGlzIGZvciB1cyBpZiB3ZSB1c2UgYGZsb2F0YCB0eXBlLCBidXRcbiAgICAvLyB3ZSBkb24ndC5cbiAgICBjYXNlIFRZUEVOQU1FUy5OVU1CRVI6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IGdldFNjaGVtYVZhbGlkYXRvcihhcmdTcGVjLCBwYXJzZUZsb2F0KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFwiaW50ZWdlclwiIGlzIGNvZXJjZWQgdG8gYW4gLi4gaW50ZWdlci4gIGFnYWluLCBgYXJncGFyc2VgIHdvdWxkIGRvIHRoaXMgZm9yIHVzIGlmIHdlIHVzZWQgYGludGAuXG4gICAgY2FzZSBUWVBFTkFNRVMuSU5URUdFUjoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMsIF8ucGFyc2VJbnQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gc3RyaW5ncyAobGlrZSBudW1iZXIgYW5kIGludGVnZXIpIGFyZSBzdWJqZWN0IHRvIGZ1cnRoZXIgdmFsaWRhdGlvblxuICAgIC8vIChlLmcuLCBtdXN0IHNhdGlzZnkgYSBtYXNrIG9yIHJlZ2V4IG9yIGV2ZW4gc29tZSBjdXN0b20gdmFsaWRhdGlvblxuICAgIC8vIGZ1bmN0aW9uKVxuICAgIGNhc2UgVFlQRU5BTUVTLlNUUklORzoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdGhlcmUgbWF5IGJlIHNvbWUgd2F5IHRvIHJlc3RyaWN0IHRoaXMgYXQgdGhlIEFqdiBsZXZlbCAtLVxuICAgIC8vIHRoYXQgbWF5IGludm9sdmUgcGF0Y2hpbmcgdGhlIG1ldGFzY2hlbWEuXG4gICAgY2FzZSBUWVBFTkFNRVMuTlVMTDpcbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFNjaGVtYSBwcm9wZXJ0eSBcIiR7YXJnfVwiOiBcXGAke3R5cGV9XFxgIHR5cGUgdW5rbm93biBvciBkaXNhbGxvd2VkYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWV0YXZhciBpcyB1c2VkIGluIGhlbHAgdGV4dC4gYGJvb2xlYW5gIGNhbm5vdCBoYXZlIGEgbWV0YXZhci0taXQgaXMgbm90XG4gIC8vIGRpc3BsYXllZC0tYW5kIGBhcmdwYXJzZWAgdGhyb3dzIGlmIHlvdSBnaXZlIGl0IG9uZS5cbiAgaWYgKHR5cGUgIT09IFRZUEVOQU1FUy5CT09MRUFOKSB7XG4gICAgYXJnT3B0cy5tZXRhdmFyID0gc2NyZWFtaW5nU25ha2VDYXNlKG5hbWUpO1xuICB9XG5cbiAgLy8gdGhlIHZhbGlkaXR5IG9mIFwiYXBwaXVtQ2xpVHJhbnNmb3JtZXJcIiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGV0ZXJtaW5lZFxuICAvLyBieSBhanYgZHVyaW5nIHNjaGVtYSB2YWxpZGF0aW9uIGluIGBmaW5hbGl6ZVNjaGVtYSgpYC4gdGhlIGBhcnJheWAgJlxuICAvLyBgb2JqZWN0YCB0eXBlcyBoYXZlIGFscmVhZHkgYWRkZWQgYSBmb3JtYXR0ZXIgKHNlZSBhYm92ZSwgc28gd2UgZG9uJ3QgZG8gaXRcbiAgLy8gdHdpY2UpLlxuICBpZiAoXG4gICAgdHlwZSAhPT0gVFlQRU5BTUVTLkFSUkFZICYmXG4gICAgdHlwZSAhPT0gVFlQRU5BTUVTLk9CSkVDVCAmJlxuICAgIGFwcGl1bUNsaVRyYW5zZm9ybWVyXG4gICkge1xuICAgIGFyZ1R5cGVGdW5jdGlvbiA9IF8uZmxvdyhcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA/PyBfLmlkZW50aXR5LFxuICAgICAgdHJhbnNmb3JtZXJzW2FwcGl1bUNsaVRyYW5zZm9ybWVyXSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGFyZ1R5cGVGdW5jdGlvbikge1xuICAgIGFyZ09wdHMudHlwZSA9IGFyZ1R5cGVGdW5jdGlvbjtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgSlNPTiBzY2hlbWEgYGVudW1gIHRvIGBjaG9pY2VzYC4gYGVudW1gIGNhbiBjb250YWluIGFueSBKU09OIHR5cGUsIGJ1dCBgYXJncGFyc2VgXG4gIC8vIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgdHlwZSBwZXIgYXJnIChJIHRoaW5rKS4gIHNvIGxldCdzIG1ha2UgZXZlcnl0aGluZyBhIHN0cmluZy5cbiAgLy8gYW5kIG1pZ2h0IGFzIHdlbGwgX3JlcXVpcmVfIHRoZSBgdHlwZTogc3RyaW5nYCB3aGlsZSB3ZSdyZSBhdCBpdC5cbiAgaWYgKGVudW1WYWx1ZXMgJiYgIV8uaXNFbXB0eShlbnVtVmFsdWVzKSkge1xuICAgIGlmICh0eXBlID09PSBUWVBFTkFNRVMuU1RSSU5HKSB7XG4gICAgICBhcmdPcHRzLmNob2ljZXMgPSBlbnVtVmFsdWVzLm1hcChTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgUHJvYmxlbSB3aXRoIHNjaGVtYSBmb3IgJHthcmd9OyBcXGBlbnVtXFxgIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBcXGB0eXBlOiAnc3RyaW5nJ1xcYGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIG92ZXJyaWRlcyBvdmVycmlkZSBhbnl0aGluZyB3ZSBjb21wdXRlZCBoZXJlLiAgdXN1YWxseSB0aGlzIGludm9sdmVzIFwiY3VzdG9tIHR5cGVzXCIsXG4gIC8vIHdoaWNoIGFyZSByZWFsbHkganVzdCB0cmFuc2Zvcm0gZnVuY3Rpb25zLlxuICBhcmdPcHRzID0gXy5tZXJnZShcbiAgICBhcmdPcHRzLFxuICAgIC8qKiBzaG91bGQgdGhlIG92ZXJyaWRlIGtleXMgY29ycmVzcG9uZCB0byB0aGUgcHJvcCBuYW1lIG9yIHRoZSBwcm9wIGRlc3Q/XG4gICAgICogdGhlIHByb3AgZGVzdCBpcyBjb21wdXRlZCBieSB7QGxpbmsgYWxpYXNUb0Rlc3R9LlxuICAgICAqL1xuICAgIG92ZXJyaWRlc1tkZXN0XSA/PyB7fSxcbiAgKTtcblxuICByZXR1cm4gW2FsaWFzZXMsIGFyZ09wdHNdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaW5hbGl6ZWQsIGZsYXR0ZW5lZCBzY2hlbWEgcmVwcmVzZW50YXRpb24gaW50b1xuICogQXJndW1lbnREZWZpbml0aW9ucyBmb3IgaGFuZG9mZiB0byBgYXJncGFyc2VgLlxuICpcbiAqIEBwYXJhbSB7VG9QYXJzZXJBcmdzT3B0aW9uc30gb3B0cyAtIE9wdGlvbnNcbiAqIEB0aHJvd3MgSWYgc2NoZW1hIGhhcyBub3QgYmVlbiBhZGRlZCB0byBhanYgKHZpYSBgZmluYWxpemVTY2hlbWEoKWApXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi9jbGkvYXJncycpLkFyZ3VtZW50RGVmaW5pdGlvbnN9IEEgbWFwIG9mIGFycnlhcyBvZlxuICogYWxpYXNlcyB0byBgYXJncGFyc2VgIGFyZ3VtZW50czsgZW1wdHkgaWYgbm8gc2NoZW1hIGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnNlckFyZ3MgKG9wdHMgPSB7fSkge1xuICBjb25zdCBmbGF0dGVuZWQgPSBmbGF0dGVuU2NoZW1hKCk7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIF8ubWFwKGZsYXR0ZW5lZCwgKHtzY2hlbWEsIGFyZ1NwZWN9KSA9PlxuICAgICAgc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjLCBvcHRzKSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b1BhcnNlckFyZ3N9XG4gKiBAdHlwZWRlZiB7U3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zfSBUb1BhcnNlckFyZ3NPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgc3ViU2NoZW1hVG9BcmdEZWZ9LlxuICogQHR5cGVkZWYge09iamVjdH0gU3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByZWZpeF0gLSBUaGUgcHJlZml4IHRvIHVzZSBmb3IgdGhlIGZsYWcsIGlmIGFueVxuICogQHByb3BlcnR5IHt7W2tleTogc3RyaW5nXTogaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc319IFtvdmVycmlkZXNdIC0gQW4gb2JqZWN0IG9mIGtleS92YWx1ZSBwYWlycyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2NsaS1hcmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
182
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwibmFtZXMiOlsiVFlQRU5BTUVTIiwiT2JqZWN0IiwiZnJlZXplIiwiQVJSQVkiLCJPQkpFQ1QiLCJCT09MRUFOIiwiSU5URUdFUiIsIk5VTUJFUiIsIk5VTEwiLCJTVFJJTkciLCJTSE9SVF9BUkdfQ1VUT0ZGIiwiYWxpYXNUb0ZsYWciLCJhcmdTcGVjIiwiYWxpYXMiLCJleHRUeXBlIiwiZXh0TmFtZSIsIm5hbWUiLCJhcmciLCJpc1Nob3J0IiwibGVuZ3RoIiwiXyIsImtlYmFiQ2FzZSIsInNjcmVhbWluZ1NuYWtlQ2FzZSIsImZsb3ciLCJzbmFrZUNhc2UiLCJ0b1VwcGVyIiwiZ2V0U2NoZW1hVmFsaWRhdG9yIiwicmVmIiwic2NoZW1hSWQiLCJjb2VyY2UiLCJpZGVudGl0eSIsInZhbHVlIiwiY29lcmNlZCIsImVycm9ycyIsImlzRW1wdHkiLCJBcmd1bWVudFR5cGVFcnJvciIsIm1ha2VEZXNjcmlwdGlvbiIsInNjaGVtYSIsImFwcGl1bUNsaURlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1EZXByZWNhdGVkIiwiZGVzYyIsInN1YlNjaGVtYVRvQXJnRGVmIiwic3ViU2NoZW1hIiwidHlwZSIsImFwcGl1bUNsaUFsaWFzZXMiLCJhcHBpdW1DbGlUcmFuc2Zvcm1lciIsImVudW0iLCJlbnVtVmFsdWVzIiwiYWxpYXNlcyIsIm1hcCIsImFyZ09wdHMiLCJyZXF1aXJlZCIsImhlbHAiLCJhcmdUeXBlRnVuY3Rpb24iLCJhY3Rpb24iLCJjb25zdCIsInRyYW5zZm9ybWVycyIsImpzb24iLCJjc3YiLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJUeXBlRXJyb3IiLCJtZXRhdmFyIiwiY2hvaWNlcyIsIlN0cmluZyIsInRvUGFyc2VyQXJncyIsImZsYXR0ZW5lZCIsImZpbHRlciIsImFwcGl1bUNsaUlnbm9yZWQiLCJNYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBWUEsTUFBTUEsU0FBUyxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUM5QkMsRUFBQUEsS0FBSyxFQUFFLE9BRHVCO0FBRTlCQyxFQUFBQSxNQUFNLEVBQUUsUUFGc0I7QUFHOUJDLEVBQUFBLE9BQU8sRUFBRSxTQUhxQjtBQUk5QkMsRUFBQUEsT0FBTyxFQUFFLFNBSnFCO0FBSzlCQyxFQUFBQSxNQUFNLEVBQUUsUUFMc0I7QUFNOUJDLEVBQUFBLElBQUksRUFBRSxNQU53QjtBQU85QkMsRUFBQUEsTUFBTSxFQUFFO0FBUHNCLENBQWQsQ0FBbEI7QUFhQSxNQUFNQyxnQkFBZ0IsR0FBRyxDQUF6Qjs7QUFRQSxTQUFTQyxXQUFULENBQXNCQyxPQUF0QixFQUErQkMsS0FBL0IsRUFBc0M7QUFDcEMsUUFBTTtBQUFDQyxJQUFBQSxPQUFEO0FBQVVDLElBQUFBLE9BQVY7QUFBbUJDLElBQUFBO0FBQW5CLE1BQTJCSixPQUFqQztBQUNBLFFBQU1LLEdBQUcsR0FBR0osS0FBSCxhQUFHQSxLQUFILGNBQUdBLEtBQUgsR0FBWUcsSUFBckI7QUFDQSxRQUFNRSxPQUFPLEdBQUdELEdBQUcsQ0FBQ0UsTUFBSixHQUFhVCxnQkFBN0I7O0FBQ0EsTUFBSUksT0FBTyxJQUFJQyxPQUFmLEVBQXdCO0FBQ3RCLFdBQU9HLE9BQU8sR0FDVCxLQUFJSixPQUFRLElBQUdNLGdCQUFFQyxTQUFGLENBQVlOLE9BQVosQ0FBcUIsSUFBR0UsR0FBSSxFQURsQyxHQUVULEtBQUlILE9BQVEsSUFBR00sZ0JBQUVDLFNBQUYsQ0FBWU4sT0FBWixDQUFxQixJQUFHSyxnQkFBRUMsU0FBRixDQUFZSixHQUFaLENBQWlCLEVBRjdEO0FBR0Q7O0FBQ0QsU0FBT0MsT0FBTyxHQUFJLElBQUdELEdBQUksRUFBWCxHQUFnQixLQUFJRyxnQkFBRUMsU0FBRixDQUFZSixHQUFaLENBQWlCLEVBQW5EO0FBQ0Q7O0FBS0QsTUFBTUssa0JBQWtCLEdBQUdGLGdCQUFFRyxJQUFGLENBQU9ILGdCQUFFSSxTQUFULEVBQW9CSixnQkFBRUssT0FBdEIsQ0FBM0I7O0FBYUEsU0FBU0Msa0JBQVQsQ0FBNkI7QUFBQ0MsRUFBQUEsR0FBRyxFQUFFQztBQUFOLENBQTdCLEVBQThDQyxNQUFNLEdBQUdULGdCQUFFVSxRQUF6RCxFQUFtRTtBQUVqRSxTQUFRQyxLQUFELElBQVc7QUFDaEIsVUFBTUMsT0FBTyxHQUFHSCxNQUFNLENBQUNFLEtBQUQsQ0FBdEI7QUFDQSxVQUFNRSxNQUFNLEdBQUcsc0JBQVNELE9BQVQsRUFBa0JKLFFBQWxCLENBQWY7O0FBQ0EsUUFBSVIsZ0JBQUVjLE9BQUYsQ0FBVUQsTUFBVixDQUFKLEVBQXVCO0FBQ3JCLGFBQU9ELE9BQVA7QUFDRDs7QUFDRCxVQUFNLElBQUlHLDJCQUFKLENBQ0osU0FBUyw4QkFBYUYsTUFBYixFQUFxQkYsS0FBckIsRUFBNEI7QUFBQ0gsTUFBQUE7QUFBRCxLQUE1QixDQURMLENBQU47QUFHRCxHQVREO0FBVUQ7O0FBT0QsU0FBU1EsZUFBVCxDQUEwQkMsTUFBMUIsRUFBa0M7QUFDaEMsUUFBTTtBQUFDQyxJQUFBQSxvQkFBRDtBQUF1QkMsSUFBQUEsV0FBVyxHQUFHLEVBQXJDO0FBQXlDQyxJQUFBQTtBQUF6QyxNQUE2REgsTUFBbkU7QUFDQSxNQUFJSSxJQUFJLEdBQUdILG9CQUFILGFBQUdBLG9CQUFILGNBQUdBLG9CQUFILEdBQTJCQyxXQUFuQzs7QUFDQSxNQUFJQyxnQkFBSixFQUFzQjtBQUNwQkMsSUFBQUEsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLEVBQTVCO0FBQ0Q7O0FBQ0QsU0FBT0EsSUFBUDtBQUNEOztBQVNELFNBQVNDLGlCQUFULENBQTRCQyxTQUE1QixFQUF1Qy9CLE9BQXZDLEVBQWdEO0FBQzlDLE1BQUk7QUFDRmdDLElBQUFBLElBREU7QUFFRkMsSUFBQUEsZ0JBRkU7QUFHRkMsSUFBQUEsb0JBSEU7QUFJRkMsSUFBQUEsSUFBSSxFQUFFQztBQUpKLE1BS0FMLFNBTEo7QUFPQSxRQUFNO0FBQUMzQixJQUFBQSxJQUFEO0FBQU9DLElBQUFBO0FBQVAsTUFBY0wsT0FBcEI7QUFFQSxRQUFNcUMsT0FBTyxHQUFHLENBQ2R0QyxXQUFXLENBQUNDLE9BQUQsQ0FERyxFQUVkLEdBQTJCLENBQUNpQyxnQkFBRCxhQUFDQSxnQkFBRCxjQUFDQSxnQkFBRCxHQUFxQixFQUFyQixFQUF5QkssR0FBekIsQ0FBOEJyQyxLQUFELElBQ3RERixXQUFXLENBQUNDLE9BQUQsRUFBVUMsS0FBVixDQURjLENBRmIsQ0FBaEI7QUFRQSxNQUFJc0MsT0FBTyxHQUFHO0FBQ1pDLElBQUFBLFFBQVEsRUFBRSxLQURFO0FBRVpDLElBQUFBLElBQUksRUFBRWpCLGVBQWUsQ0FBQ08sU0FBRDtBQUZULEdBQWQ7QUFnQkEsTUFBSVcsZUFBSjs7QUFHQSxVQUFRVixJQUFSO0FBRUUsU0FBSzVDLFNBQVMsQ0FBQ0ssT0FBZjtBQUF3QjtBQUN0QjhDLFFBQUFBLE9BQU8sQ0FBQ0ksTUFBUixHQUFpQixhQUFqQjtBQUNBSixRQUFBQSxPQUFPLENBQUNLLEtBQVIsR0FBZ0IsSUFBaEI7QUFDQTtBQUNEOztBQUVELFNBQUt4RCxTQUFTLENBQUNJLE1BQWY7QUFBdUI7QUFDckJrRCxRQUFBQSxlQUFlLEdBQUdHLDhCQUFhQyxJQUEvQjtBQUNBO0FBQ0Q7O0FBR0QsU0FBSzFELFNBQVMsQ0FBQ0csS0FBZjtBQUFzQjtBQUNwQm1ELFFBQUFBLGVBQWUsR0FBR0csOEJBQWFFLEdBQS9CO0FBQ0E7QUFDRDs7QUFJRCxTQUFLM0QsU0FBUyxDQUFDTyxNQUFmO0FBQXVCO0FBQ3JCK0MsUUFBQUEsZUFBZSxHQUFHNUIsa0JBQWtCLENBQUNkLE9BQUQsRUFBVWdELFVBQVYsQ0FBcEM7QUFDQTtBQUNEOztBQUdELFNBQUs1RCxTQUFTLENBQUNNLE9BQWY7QUFBd0I7QUFDdEJnRCxRQUFBQSxlQUFlLEdBQUc1QixrQkFBa0IsQ0FBQ2QsT0FBRCxFQUFVUSxnQkFBRXlDLFFBQVosQ0FBcEM7QUFDQTtBQUNEOztBQUtELFNBQUs3RCxTQUFTLENBQUNTLE1BQWY7QUFBdUI7QUFDckI2QyxRQUFBQSxlQUFlLEdBQUc1QixrQkFBa0IsQ0FBQ2QsT0FBRCxDQUFwQztBQUNBO0FBQ0Q7O0FBSUQsU0FBS1osU0FBUyxDQUFDUSxJQUFmO0FBRUE7QUFBUztBQUNQLGNBQU0sSUFBSXNELFNBQUosQ0FDSCxvQkFBbUI3QyxHQUFJLFFBQU8yQixJQUFLLCtCQURoQyxDQUFOO0FBR0Q7QUFoREg7O0FBcURBLE1BQUlBLElBQUksS0FBSzVDLFNBQVMsQ0FBQ0ssT0FBdkIsRUFBZ0M7QUFDOUI4QyxJQUFBQSxPQUFPLENBQUNZLE9BQVIsR0FBa0J6QyxrQkFBa0IsQ0FBQ04sSUFBRCxDQUFwQztBQUNEOztBQU1ELE1BQ0U0QixJQUFJLEtBQUs1QyxTQUFTLENBQUNHLEtBQW5CLElBQ0F5QyxJQUFJLEtBQUs1QyxTQUFTLENBQUNJLE1BRG5CLElBRUEwQyxvQkFIRixFQUlFO0FBQUE7O0FBQ0FRLElBQUFBLGVBQWUsR0FBR2xDLGdCQUFFRyxJQUFGLHFCQUNoQitCLGVBRGdCLCtEQUNHbEMsZ0JBQUVVLFFBREwsRUFFaEIyQiw4QkFBYVgsb0JBQWIsQ0FGZ0IsQ0FBbEI7QUFJRDs7QUFFRCxNQUFJUSxlQUFKLEVBQXFCO0FBQ25CSCxJQUFBQSxPQUFPLENBQUNQLElBQVIsR0FBZVUsZUFBZjtBQUNEOztBQUtELE1BQUlOLFVBQVUsSUFBSSxDQUFDNUIsZ0JBQUVjLE9BQUYsQ0FBVWMsVUFBVixDQUFuQixFQUEwQztBQUN4QyxRQUFJSixJQUFJLEtBQUs1QyxTQUFTLENBQUNTLE1BQXZCLEVBQStCO0FBQzdCMEMsTUFBQUEsT0FBTyxDQUFDYSxPQUFSLEdBQWtCaEIsVUFBVSxDQUFDRSxHQUFYLENBQWVlLE1BQWYsQ0FBbEI7QUFDRCxLQUZELE1BRU87QUFDTCxZQUFNLElBQUlILFNBQUosQ0FDSCwyQkFBMEI3QyxHQUFJLHFEQUQzQixDQUFOO0FBR0Q7QUFDRjs7QUFFRCxTQUFPLENBQUNnQyxPQUFELEVBQVVFLE9BQVYsQ0FBUDtBQUNEOztBQVVNLFNBQVNlLFlBQVQsR0FBeUI7QUFDOUIsUUFBTUMsU0FBUyxHQUFHLDZCQUFnQkMsTUFBaEIsQ0FBdUIsQ0FBQztBQUFDL0IsSUFBQUE7QUFBRCxHQUFELEtBQWMsQ0FBQ0EsTUFBTSxDQUFDZ0MsZ0JBQTdDLENBQWxCO0FBQ0EsU0FBTyxJQUFJQyxHQUFKLENBQ0xsRCxnQkFBRThCLEdBQUYsQ0FBTWlCLFNBQU4sRUFBaUIsQ0FBQztBQUFDOUIsSUFBQUEsTUFBRDtBQUFTekIsSUFBQUE7QUFBVCxHQUFELEtBQ2Y4QixpQkFBaUIsQ0FBQ0wsTUFBRCxFQUFTekIsT0FBVCxDQURuQixDQURLLENBQVA7QUFLRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge0FyZ3VtZW50VHlwZUVycm9yfSBmcm9tICdhcmdwYXJzZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtmb3JtYXRFcnJvcnMgYXMgZm9ybWF0RXJyb3JzfSBmcm9tICcuLi9jb25maWctZmlsZSc7XG5pbXBvcnQge2ZsYXR0ZW5TY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge3RyYW5zZm9ybWVyc30gZnJvbSAnLi9jbGktdHJhbnNmb3JtZXJzJztcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBjb25jZXJucyBmdW5jdGlvbnMgd2hpY2ggY29udmVydCBzY2hlbWEgZGVmaW5pdGlvbnMgdG9cbiAqIGBhcmdwYXJzZWAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMsIGZvciBkZXJpdmluZyBDTEkgYXJndW1lbnRzIGZyb20gYVxuICogc2NoZW1hLlxuICovXG5cbi8qKlxuICogTG9va3VwIG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIGB0eXBlYCBmaWVsZCBpbiBhIEpTT04gc2NoZW1hLlxuICogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN1R5cGVOYW1lPj59XG4gKi9cbmNvbnN0IFRZUEVOQU1FUyA9IE9iamVjdC5mcmVlemUoe1xuICBBUlJBWTogJ2FycmF5JyxcbiAgT0JKRUNUOiAnb2JqZWN0JyxcbiAgQk9PTEVBTjogJ2Jvb2xlYW4nLFxuICBJTlRFR0VSOiAnaW50ZWdlcicsXG4gIE5VTUJFUjogJ251bWJlcicsXG4gIE5VTEw6ICdudWxsJyxcbiAgU1RSSU5HOiAnc3RyaW5nJyxcbn0pO1xuXG4vKipcbiAqIE9wdGlvbnMgd2l0aCBhbGlhcyBsZW5ndGhzIGxlc3MgdGhhbiB0aGlzIHdpbGwgYmUgY29uc2lkZXJlZCBcInNob3J0XCIgZmxhZ3MuXG4gKi9cbmNvbnN0IFNIT1JUX0FSR19DVVRPRkYgPSAzO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gYWxpYXMgKGBmb29gKSB0byBhIGZsYWcgKGAtLWZvb2ApIG9yIGEgc2hvcnQgZmxhZyAoYC1mYCkuXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSB0aGUgYXJndW1lbnQgc3BlY2lmaWNhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSB0aGUgYWxpYXMgdG8gY29udmVydCB0byBhIGZsYWdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBmbGFnXG4gKi9cbmZ1bmN0aW9uIGFsaWFzVG9GbGFnIChhcmdTcGVjLCBhbGlhcykge1xuICBjb25zdCB7ZXh0VHlwZSwgZXh0TmFtZSwgbmFtZX0gPSBhcmdTcGVjO1xuICBjb25zdCBhcmcgPSBhbGlhcyA/PyBuYW1lO1xuICBjb25zdCBpc1Nob3J0ID0gYXJnLmxlbmd0aCA8IFNIT1JUX0FSR19DVVRPRkY7XG4gIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gaXNTaG9ydFxuICAgICAgPyBgLS0ke2V4dFR5cGV9LSR7Xy5rZWJhYkNhc2UoZXh0TmFtZSl9LSR7YXJnfWBcbiAgICAgIDogYC0tJHtleHRUeXBlfS0ke18ua2ViYWJDYXNlKGV4dE5hbWUpfS0ke18ua2ViYWJDYXNlKGFyZyl9YDtcbiAgfVxuICByZXR1cm4gaXNTaG9ydCA/IGAtJHthcmd9YCA6IGAtLSR7Xy5rZWJhYkNhc2UoYXJnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIFNDUkVBTUlOR19TTkFLRV9DQVNFXG4gKi9cbmNvbnN0IHNjcmVhbWluZ1NuYWtlQ2FzZSA9IF8uZmxvdyhfLnNuYWtlQ2FzZSwgXy50b1VwcGVyKTtcblxuLyoqXG4gKiBHaXZlbiB1bmlxdWUgcHJvcGVydHkgbmFtZSBgbmFtZWAsIHJldHVybiBhIGZ1bmN0aW9uIHdoaWNoIHZhbGlkYXRlcyBhIHZhbHVlXG4gKiBhZ2FpbnN0IGEgcHJvcGVydHkgd2l0aGluIHRoZSBzY2hlbWEuXG4gKiBAdGVtcGxhdGUgQ29lcmNlZFxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gQXJndW1lbnQgbmFtZVxuICogQHBhcmFtIHsodmFsdWU6IHN0cmluZykgPT4gQ29lcmNlZH0gW2NvZXJjZV0gLSBGdW5jdGlvbiB0byBjb2VyY2UgdG8gYSBkaWZmZXJlbnRcbiAqIHByaW1pdGl2ZVxuICogQHRvZG8gU2VlIGlmIHdlIGNhbiByZW1vdmUgYGNvZXJjZWAgYnkgYWxsb3dpbmcgQWp2IHRvIGNvZXJjZSBpbiBpdHNcbiAqIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGdldFNjaGVtYVZhbGlkYXRvciAoe3JlZjogc2NoZW1hSWR9LCBjb2VyY2UgPSBfLmlkZW50aXR5KSB7XG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgKi9cbiAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGNvZXJjZWQgPSBjb2VyY2UodmFsdWUpO1xuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKGNvZXJjZWQsIHNjaGVtYUlkKTtcbiAgICBpZiAoXy5pc0VtcHR5KGVycm9ycykpIHtcbiAgICAgIHJldHVybiBjb2VyY2VkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXJndW1lbnRUeXBlRXJyb3IoXG4gICAgICAnXFxuXFxuJyArIGZvcm1hdEVycm9ycyhlcnJvcnMsIHZhbHVlLCB7c2NoZW1hSWR9KSxcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgZGVzY3JpcHRpb24gZm9yIGRpc3BsYXkgb24gdGhlIENMSSwgZ2l2ZW4gdGhlIHNjaGVtYS5cbiAqIEBwYXJhbSB7QXBwaXVtSlNPTlNjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBtYWtlRGVzY3JpcHRpb24gKHNjaGVtYSkge1xuICBjb25zdCB7YXBwaXVtQ2xpRGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uID0gJycsIGFwcGl1bURlcHJlY2F0ZWR9ID0gc2NoZW1hO1xuICBsZXQgZGVzYyA9IGFwcGl1bUNsaURlc2NyaXB0aW9uID8/IGRlc2NyaXB0aW9uO1xuICBpZiAoYXBwaXVtRGVwcmVjYXRlZCkge1xuICAgIGRlc2MgPSBgW0RFUFJFQ0FURURdICR7ZGVzY31gO1xuICB9XG4gIHJldHVybiBkZXNjO1xufVxuXG4vKipcbiAqIEdpdmVuIGFyZyBgbmFtZWAsIGEgSlNPTiBzY2hlbWEgYHN1YlNjaGVtYWAsIGFuZCBvcHRpb25zLCByZXR1cm4gYW4gYXJndW1lbnQgZGVmaW5pdGlvblxuICogYXMgdW5kZXJzdG9vZCBieSBgYXJncGFyc2VgLlxuICogQHBhcmFtIHtBcHBpdW1KU09OU2NoZW1hfSBzdWJTY2hlbWEgLSBKU09OIHNjaGVtYSBmb3IgdGhlIG9wdGlvblxuICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjIC0gQXJndW1lbnQgc3BlYyB0dXBsZVxuICogQHJldHVybnMge1tzdHJpbmdbXSwgaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc119IFR1cGxlIG9mIGZsYWcgYW5kIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3ViU2NoZW1hVG9BcmdEZWYgKHN1YlNjaGVtYSwgYXJnU3BlYykge1xuICBsZXQge1xuICAgIHR5cGUsXG4gICAgYXBwaXVtQ2xpQWxpYXNlcyxcbiAgICBhcHBpdW1DbGlUcmFuc2Zvcm1lcixcbiAgICBlbnVtOiBlbnVtVmFsdWVzLFxuICB9ID0gc3ViU2NoZW1hO1xuXG4gIGNvbnN0IHtuYW1lLCBhcmd9ID0gYXJnU3BlYztcblxuICBjb25zdCBhbGlhc2VzID0gW1xuICAgIGFsaWFzVG9GbGFnKGFyZ1NwZWMpLFxuICAgIC4uLi8qKiBAdHlwZSB7c3RyaW5nW119ICovIChhcHBpdW1DbGlBbGlhc2VzID8/IFtdKS5tYXAoKGFsaWFzKSA9PlxuICAgICAgYWxpYXNUb0ZsYWcoYXJnU3BlYywgYWxpYXMpLFxuICAgICksXG4gIF07XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zfSAqL1xuICBsZXQgYXJnT3B0cyA9IHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogbWFrZURlc2NyaXB0aW9uKHN1YlNjaGVtYSlcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhbGx5IHdlIHdpbGwgcHJvdmlkZSBhIGB0eXBlYCB0byBgYXJncGFyc2VgIGFzIGEgZnVuY3Rpb24gd2hpY2hcbiAgICogdmFsaWRhdGVzIHVzaW5nIGFqdiAod2hpY2ggaXMgbXVjaCBtb3JlIGZ1bGwtZmVhdHVyZWQgdGhhbiB3aGF0IGBhcmdwYXJzZWBcbiAgICogY2FuIG9mZmVyKS4gVGhlIGV4Y2VwdGlvbiBpcyBgYm9vbGVhbmAtdHlwZSBvcHRpb25zLCB3aGljaCBoYXZlIG5vXG4gICAqIGBhcmdUeXBlYC5cbiAgICpcbiAgICogTm90IHN1cmUgaWYgdGhpcyB0eXBlIGlzIGNvcnJlY3QsIGJ1dCBpdCdzIG5vdCBkb2luZyB3aGF0IEkgd2FudC4gIEkgd2FudFxuICAgKiB0byBzYXkgXCJ0aGlzIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzb21ldGhpbmcgb2YgdHlwZSBgVGAgd2hlcmUgYFRgIGlzXG4gICAqIG5ldmVyIGEgYFByb21pc2VgXCIuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgc3luYy5cbiAgICogQHR5cGUgeygodmFsdWU6IHN0cmluZykgPT4gdW5rbm93bil8dW5kZWZpbmVkfVxuICAgKi9cbiAgbGV0IGFyZ1R5cGVGdW5jdGlvbjtcblxuICAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgdmFyaW91cyB0eXBlc1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAvLyBib29sZWFucyBkbyBub3QgaGF2ZSBhIHR5cGUgcGVyIGBBcmd1bWVudE9wdGlvbnNgLCBqdXN0IGFuIFwiYWN0aW9uXCJcbiAgICBjYXNlIFRZUEVOQU1FUy5CT09MRUFOOiB7XG4gICAgICBhcmdPcHRzLmFjdGlvbiA9ICdzdG9yZV9jb25zdCc7XG4gICAgICBhcmdPcHRzLmNvbnN0ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgVFlQRU5BTUVTLk9CSkVDVDoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gdHJhbnNmb3JtZXJzLmpzb247XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBhcnJheXMgYXJlIHRyZWF0ZWQgYXMgQ1NWcywgYmVjYXVzZSBgYXJncGFyc2VgIGRvZXNuJ3QgaGFuZGxlIGFycmF5IGRhdGEuXG4gICAgY2FzZSBUWVBFTkFNRVMuQVJSQVk6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IHRyYW5zZm9ybWVycy5jc3Y7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBcIm51bWJlclwiIHR5cGUgaXMgY29lcmNlZCB0byBmbG9hdC4gYGFyZ3BhcnNlYCBkb2VzIHRoaXMgZm9yIHVzIGlmIHdlIHVzZSBgZmxvYXRgIHR5cGUsIGJ1dFxuICAgIC8vIHdlIGRvbid0LlxuICAgIGNhc2UgVFlQRU5BTUVTLk5VTUJFUjoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMsIHBhcnNlRmxvYXQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gXCJpbnRlZ2VyXCIgaXMgY29lcmNlZCB0byBhbiAuLiBpbnRlZ2VyLiAgYWdhaW4sIGBhcmdwYXJzZWAgd291bGQgZG8gdGhpcyBmb3IgdXMgaWYgd2UgdXNlZCBgaW50YC5cbiAgICBjYXNlIFRZUEVOQU1FUy5JTlRFR0VSOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSBnZXRTY2hlbWFWYWxpZGF0b3IoYXJnU3BlYywgXy5wYXJzZUludCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBzdHJpbmdzIChsaWtlIG51bWJlciBhbmQgaW50ZWdlcikgYXJlIHN1YmplY3QgdG8gZnVydGhlciB2YWxpZGF0aW9uXG4gICAgLy8gKGUuZy4sIG11c3Qgc2F0aXNmeSBhIG1hc2sgb3IgcmVnZXggb3IgZXZlbiBzb21lIGN1c3RvbSB2YWxpZGF0aW9uXG4gICAgLy8gZnVuY3Rpb24pXG4gICAgY2FzZSBUWVBFTkFNRVMuU1RSSU5HOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSBnZXRTY2hlbWFWYWxpZGF0b3IoYXJnU3BlYyk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB0aGVyZSBtYXkgYmUgc29tZSB3YXkgdG8gcmVzdHJpY3QgdGhpcyBhdCB0aGUgQWp2IGxldmVsIC0tXG4gICAgLy8gdGhhdCBtYXkgaW52b2x2ZSBwYXRjaGluZyB0aGUgbWV0YXNjaGVtYS5cbiAgICBjYXNlIFRZUEVOQU1FUy5OVUxMOlxuICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgU2NoZW1hIHByb3BlcnR5IFwiJHthcmd9XCI6IFxcYCR7dHlwZX1cXGAgdHlwZSB1bmtub3duIG9yIGRpc2FsbG93ZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXRhdmFyIGlzIHVzZWQgaW4gaGVscCB0ZXh0LiBgYm9vbGVhbmAgY2Fubm90IGhhdmUgYSBtZXRhdmFyLS1pdCBpcyBub3RcbiAgLy8gZGlzcGxheWVkLS1hbmQgYGFyZ3BhcnNlYCB0aHJvd3MgaWYgeW91IGdpdmUgaXQgb25lLlxuICBpZiAodHlwZSAhPT0gVFlQRU5BTUVTLkJPT0xFQU4pIHtcbiAgICBhcmdPcHRzLm1ldGF2YXIgPSBzY3JlYW1pbmdTbmFrZUNhc2UobmFtZSk7XG4gIH1cblxuICAvLyB0aGUgdmFsaWRpdHkgb2YgXCJhcHBpdW1DbGlUcmFuc2Zvcm1lclwiIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkZXRlcm1pbmVkXG4gIC8vIGJ5IGFqdiBkdXJpbmcgc2NoZW1hIHZhbGlkYXRpb24gaW4gYGZpbmFsaXplU2NoZW1hKClgLiB0aGUgYGFycmF5YCAmXG4gIC8vIGBvYmplY3RgIHR5cGVzIGhhdmUgYWxyZWFkeSBhZGRlZCBhIGZvcm1hdHRlciAoc2VlIGFib3ZlLCBzbyB3ZSBkb24ndCBkbyBpdFxuICAvLyB0d2ljZSkuXG4gIGlmIChcbiAgICB0eXBlICE9PSBUWVBFTkFNRVMuQVJSQVkgJiZcbiAgICB0eXBlICE9PSBUWVBFTkFNRVMuT0JKRUNUICYmXG4gICAgYXBwaXVtQ2xpVHJhbnNmb3JtZXJcbiAgKSB7XG4gICAgYXJnVHlwZUZ1bmN0aW9uID0gXy5mbG93KFxuICAgICAgYXJnVHlwZUZ1bmN0aW9uID8/IF8uaWRlbnRpdHksXG4gICAgICB0cmFuc2Zvcm1lcnNbYXBwaXVtQ2xpVHJhbnNmb3JtZXJdLFxuICAgICk7XG4gIH1cblxuICBpZiAoYXJnVHlwZUZ1bmN0aW9uKSB7XG4gICAgYXJnT3B0cy50eXBlID0gYXJnVHlwZUZ1bmN0aW9uO1xuICB9XG5cbiAgLy8gY29udmVydCBKU09OIHNjaGVtYSBgZW51bWAgdG8gYGNob2ljZXNgLiBgZW51bWAgY2FuIGNvbnRhaW4gYW55IEpTT04gdHlwZSwgYnV0IGBhcmdwYXJzZWBcbiAgLy8gaXMgbGltaXRlZCB0byBhIHNpbmdsZSB0eXBlIHBlciBhcmcgKEkgdGhpbmspLiAgc28gbGV0J3MgbWFrZSBldmVyeXRoaW5nIGEgc3RyaW5nLlxuICAvLyBhbmQgbWlnaHQgYXMgd2VsbCBfcmVxdWlyZV8gdGhlIGB0eXBlOiBzdHJpbmdgIHdoaWxlIHdlJ3JlIGF0IGl0LlxuICBpZiAoZW51bVZhbHVlcyAmJiAhXy5pc0VtcHR5KGVudW1WYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVOQU1FUy5TVFJJTkcpIHtcbiAgICAgIGFyZ09wdHMuY2hvaWNlcyA9IGVudW1WYWx1ZXMubWFwKFN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBQcm9ibGVtIHdpdGggc2NoZW1hIGZvciAke2FyZ307IFxcYGVudW1cXGAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFxcYHR5cGU6ICdzdHJpbmcnXFxgYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFthbGlhc2VzLCBhcmdPcHRzXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmluYWxpemVkLCBmbGF0dGVuZWQgc2NoZW1hIHJlcHJlc2VudGF0aW9uIGludG9cbiAqIEFyZ3VtZW50RGVmaW5pdGlvbnMgZm9yIGhhbmRvZmYgdG8gYGFyZ3BhcnNlYC5cbiAqXG4gKiBAdGhyb3dzIElmIHNjaGVtYSBoYXMgbm90IGJlZW4gYWRkZWQgdG8gYWp2ICh2aWEgYGZpbmFsaXplU2NoZW1hKClgKVxuICogQHJldHVybnMge2ltcG9ydCgnLi4vY2xpL2FyZ3MnKS5Bcmd1bWVudERlZmluaXRpb25zfSBBIG1hcCBvZiBhcnJ5YXMgb2ZcbiAqIGFsaWFzZXMgdG8gYGFyZ3BhcnNlYCBhcmd1bWVudHM7IGVtcHR5IGlmIG5vIHNjaGVtYSBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXJzZXJBcmdzICgpIHtcbiAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlblNjaGVtYSgpLmZpbHRlcigoe3NjaGVtYX0pID0+ICFzY2hlbWEuYXBwaXVtQ2xpSWdub3JlZCk7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIF8ubWFwKGZsYXR0ZW5lZCwgKHtzY2hlbWEsIGFyZ1NwZWN9KSA9PlxuICAgICAgc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjKSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2NsaS1hcmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -48,15 +48,25 @@ const keywords = {
48
48
  description: 'The name of a custom transformer to run against the value as provided via the CLI.'
49
49
  }
50
50
  },
51
- appiumCliIgnore: {
52
- keyword: 'appiumCliIgnore',
51
+ appiumCliIgnored: {
52
+ keyword: 'appiumCliIgnored',
53
53
  metaSchema: {
54
54
  type: 'boolean',
55
- description: 'If `true`, Appium will not provide this property as a CLI argument.'
55
+ description: 'If `true`, Appium will not provide this property as a CLI argument. This is NOT the same as a "hidden" argument.',
56
+ enum: [true]
57
+ }
58
+ },
59
+ appiumDeprecated: {
60
+ keyword: 'appiumDeprecated',
61
+ metaSchema: {
62
+ type: 'boolean',
63
+ description: 'If `true`, this property will be displayed as "deprecated" to the user',
64
+ enum: [true],
65
+ $comment: 'JSON schema draft-2019-09 keyword `deprecated` serves the same purpose. This keyword should itself be deprecated if we move to draft-2019-09!'
56
66
  }
57
67
  }
58
68
  };
59
69
  exports.keywords = keywords;require('source-map-support').install();
60
70
 
61
71
 
62
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEva2V5d29yZHMuanMiXSwibmFtZXMiOlsia2V5d29yZHMiLCJhcHBpdW1DbGlBbGlhc2VzIiwia2V5d29yZCIsIm1ldGFTY2hlbWEiLCJ0eXBlIiwiaXRlbXMiLCJtaW5MZW5ndGgiLCJtaW5JdGVtcyIsInVuaXF1ZUl0ZW1zIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1DbGlEZXN0IiwiYXBwaXVtQ2xpRGVzY3JpcHRpb24iLCJzY2hlbWFUeXBlIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiT2JqZWN0Iiwia2V5cyIsInRyYW5zZm9ybWVycyIsImFwcGl1bUNsaUlnbm9yZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBTU8sTUFBTUEsUUFBUSxHQUFHO0FBWXRCQyxFQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQkMsSUFBQUEsT0FBTyxFQUFFLGtCQURPO0FBRWhCQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLE9BREk7QUFFVkMsTUFBQUEsS0FBSyxFQUFFO0FBQ0xELFFBQUFBLElBQUksRUFBRSxRQUREO0FBRUxFLFFBQUFBLFNBQVMsRUFBRTtBQUZOLE9BRkc7QUFNVkMsTUFBQUEsUUFBUSxFQUFFLENBTkE7QUFPVkMsTUFBQUEsV0FBVyxFQUFFLElBUEg7QUFRVkMsTUFBQUEsV0FBVyxFQUFFO0FBUkg7QUFGSSxHQVpJO0FBbUN0QkMsRUFBQUEsYUFBYSxFQUFFO0FBQ2JSLElBQUFBLE9BQU8sRUFBRSxlQURJO0FBRWJDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWRSxNQUFBQSxTQUFTLEVBQUUsQ0FGRDtBQUdWRyxNQUFBQSxXQUFXLEVBQUU7QUFISDtBQUZDLEdBbkNPO0FBb0R0QkUsRUFBQUEsb0JBQW9CLEVBQUU7QUFDcEJULElBQUFBLE9BQU8sRUFBRSxzQkFEVztBQUVwQlUsSUFBQUEsVUFBVSxFQUFFLFFBRlE7QUFHcEJULElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWRSxNQUFBQSxTQUFTLEVBQUUsQ0FGRDtBQUdWRyxNQUFBQSxXQUFXLEVBQUU7QUFISDtBQUhRLEdBcERBO0FBbUV0QkksRUFBQUEsb0JBQW9CLEVBQUU7QUFDcEJYLElBQUFBLE9BQU8sRUFBRSxzQkFEVztBQUVwQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxRQURJO0FBRVZVLE1BQUFBLElBQUksRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVlDLDZCQUFaLENBRkk7QUFHVlIsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFGUSxHQW5FQTtBQWdGdEJTLEVBQUFBLGVBQWUsRUFBRTtBQUNmaEIsSUFBQUEsT0FBTyxFQUFFLGlCQURNO0FBRWZDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsU0FESTtBQUVWSyxNQUFBQSxXQUFXLEVBQUU7QUFGSDtBQUZHO0FBaEZLLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHRyYW5zZm9ybWVycyB9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBrZXl3b3JkIGRlZmluaXRpb25zIHRvIGFkZCB0byB0aGUgc2luZ2xldG9uIGBBanZgIGluc3RhbmNlLlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsS2V5d29yZERlZmluaXRpb24+fVxuICovXG5leHBvcnQgY29uc3Qga2V5d29yZHMgPSB7XG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGNvbW1hbmQgYWxpYXMgbmFtZXMgZm9yIHRoZSBDTEkuXG4gICAqXG4gICAqIElmIGRlZmluZWQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhlIGFycmF5IGFuZCBpdCBtdXN0IGJlIG5vbi1lbXB0eS5cbiAgICogQWxsIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS5cbiAgICpcbiAgICogQHRvZG8gQXZvaWQgYWxpYXMgY29sbGlzaW9ucyFcbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpQWxpYXNlczogWydCJywgJ2JvYmJ5JywgJ3JvYmVydCddfVxuICAgKi9cbiAgYXBwaXVtQ2xpQWxpYXNlczoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlBbGlhc2VzJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIH0sXG4gICAgICBtaW5JdGVtczogMSxcbiAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGFsaWFzZXMgZm9yIHRoZSBhcmd1bWVudC4gQWxpYXNlcyBzaG9ydGVyIHRoYW4gdGhyZWUgKDMpIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGEgc2luZ2xlIGRhc2g7IG90aGVyd2lzZSB0d28gKDIpLidcbiAgICB9LFxuICB9LFxuICAvKipcbiAgICogS2V5d29yZCB0byBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgZGVzdGluYXRpb24gKHBhcnNlZFxuICAgKiBhcmdzKSBvYmplY3QuIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgd2lsbCBiZSB3aGF0ZXZlciB0aGUgcHJvcGVydHkgbmFtZSBpcyxcbiAgICogYnV0IGNhbWVsLWNhc2VkLiBJZiBhIGZsYWcgbmVlZHMgc29tZXRoaW5nIF9vdGhlcl8gdGhhbiBqdXN0IGNhbWVsLWNhc2luZyxcbiAgICogdXNlIHRoaXMuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIHByb3AgJ25vLWNvbG9yJ1xuICAgKiB7YXBwaXVtQ2xpRGVzdDogJ05PQ09MT1InfSAvLyB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBwcm9wZXJ0eSBgTk9DT0xPUmAgaW5zdGVhZCBvZiBgbm9Db2xvcmBcbiAgICovXG4gIGFwcGl1bUNsaURlc3Q6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpRGVzdCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIHBhcnNlZCBDTEkgYXJndW1lbnRzIG9iamVjdCdcbiAgICB9LFxuICB9LFxuXG4gIC8qKlxuICAgKiBDTEktc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5LiAgU29tZXRpbWVzIHRoZSBhbGxvd2VkIHR5cGUgY2FuXG4gICAqIGJlIGRpZmZlcmVudCBlbm91Z2ggb24gdGhlIENMSSB0aGF0IHByb3ZpZGluZyBhIGRlc2NyaXB0aW9uIHdyaXR0ZW4gZm9yIGFcbiAgICogY29uZmlnIGZpbGUgY29udGV4dCB3b3VsZG4ndCBtYWtlIHNlbnNlLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIHthcHBpdW1DbGlEZXNjcmlwdGlvbjogJ1RoaXMgaXMgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLCBidXQgaW4gdGhlIGNvbmZpZyBmaWxlIGl0IGlzIGFuIGFycmF5J31cbiAgICovXG4gIGFwcGl1bUNsaURlc2NyaXB0aW9uOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc2NyaXB0aW9uJyxcbiAgICBzY2hlbWFUeXBlOiAnc3RyaW5nJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gdG8gcHJvdmlkZSBpbiB0aGUgLS1oZWxwIHRleHQgb2YgdGhlIENMSS4gT3ZlcnJpZGVzIGBkZXNjcmlwdGlvbmAnXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIGZvciBDTEkgYXJncy4gVGhlc2UgdXN1YWxseSB0YWtlIHN0cmluZ3MgdGhlbiBkbyBzb21ldGhpbmcgd2l0aCB0aGVtLCBsaWtlXG4gICAqIHJlYWQgYSBmaWxlIG9yIHBhcnNlIGZ1cnRoZXIuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaVRyYW5zZm9ybWVyOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaVRyYW5zZm9ybWVyJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IE9iamVjdC5rZXlzKHRyYW5zZm9ybWVycyksXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBuYW1lIG9mIGEgY3VzdG9tIHRyYW5zZm9ybWVyIHRvIHJ1biBhZ2FpbnN0IHRoZSB2YWx1ZSBhcyBwcm92aWRlZCB2aWEgdGhlIENMSS4nXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogRmxhZyB0byB0ZWxsIEFwcGl1bSB0byBfbm90XyBwcm92aWRlIHRoaXMgcHJvcGVydHkgYXMgYSBDTEkgYXJndW1lbnQuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaUlnbm9yZToge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlJZ25vcmUnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYHRydWVgLCBBcHBpdW0gd2lsbCBub3QgcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LidcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgYXBwaXVtQ2xpVHJhbnNmb3JtZXJgIGtleXdvcmQuXG4gKiBVbmZvcnR1bmF0ZWx5LCBUUyBjYW5ub3QgaW5mZXIgdGhpcyBpbiBhIEpTIGNvbnRleHQuICBJbiBUUywgd2UnZCB1c2VcbiAqIGBhcyBjb25zdGAgd2hlbiBkZWZpbmluZyBgYXJnVHJhbnNmb3JtZXJzYCwgdGhlbiBnZXQgYGtleW9mIHR5cGVvZiBhcmdUcmFuc2Zvcm1lcnNgLiBhbGFzLlxuICogQHR5cGVkZWYgeydjc3YnfCdqc29uJ30gQXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGN1c3RvbSBrZXl3b3JkcyB0aGF0IEFwcGl1bSByZWNvZ25pemVzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGl1bUpTT05TY2hlbWFLZXl3b3Jkc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXNjcmlwdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthcHBpdW1DbGlBbGlhc2VzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtQ2xpSWdub3JlXVxuICogQHByb3BlcnR5IHtBcHBpdW1DbGlUcmFuc2Zvcm1lck5hbWV9IFthcHBpdW1DbGlUcmFuc2Zvcm1lcl1cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuS2V5d29yZERlZmluaXRpb259IEtleXdvcmREZWZpbml0aW9uXG4gKi9cbiJdLCJmaWxlIjoibGliL3NjaGVtYS9rZXl3b3Jkcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
72
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEva2V5d29yZHMuanMiXSwibmFtZXMiOlsia2V5d29yZHMiLCJhcHBpdW1DbGlBbGlhc2VzIiwia2V5d29yZCIsIm1ldGFTY2hlbWEiLCJ0eXBlIiwiaXRlbXMiLCJtaW5MZW5ndGgiLCJtaW5JdGVtcyIsInVuaXF1ZUl0ZW1zIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1DbGlEZXN0IiwiYXBwaXVtQ2xpRGVzY3JpcHRpb24iLCJzY2hlbWFUeXBlIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiT2JqZWN0Iiwia2V5cyIsInRyYW5zZm9ybWVycyIsImFwcGl1bUNsaUlnbm9yZWQiLCJhcHBpdW1EZXByZWNhdGVkIiwiJGNvbW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBOztBQU1PLE1BQU1BLFFBQVEsR0FBRztBQVl0QkMsRUFBQUEsZ0JBQWdCLEVBQUU7QUFDaEJDLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxPQURJO0FBRVZDLE1BQUFBLEtBQUssRUFBRTtBQUNMRCxRQUFBQSxJQUFJLEVBQUUsUUFERDtBQUVMRSxRQUFBQSxTQUFTLEVBQUU7QUFGTixPQUZHO0FBTVZDLE1BQUFBLFFBQVEsRUFBRSxDQU5BO0FBT1ZDLE1BQUFBLFdBQVcsRUFBRSxJQVBIO0FBUVZDLE1BQUFBLFdBQVcsRUFBRTtBQVJIO0FBRkksR0FaSTtBQW1DdEJDLEVBQUFBLGFBQWEsRUFBRTtBQUNiUixJQUFBQSxPQUFPLEVBQUUsZUFESTtBQUViQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFGQyxHQW5DTztBQW9EdEJFLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCVCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJVLElBQUFBLFVBQVUsRUFBRSxRQUZRO0FBR3BCVCxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFIUSxHQXBEQTtBQW1FdEJJLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCWCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWVSxNQUFBQSxJQUFJLEVBQUVDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyw2QkFBWixDQUZJO0FBR1ZSLE1BQUFBLFdBQVcsRUFBRTtBQUhIO0FBRlEsR0FuRUE7QUFnRnRCUyxFQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQmhCLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxTQURJO0FBRVZLLE1BQUFBLFdBQVcsRUFBRSxrSEFGSDtBQUdWSyxNQUFBQSxJQUFJLEVBQUUsQ0FBQyxJQUFEO0FBSEk7QUFGSSxHQWhGSTtBQTZGdEJLLEVBQUFBLGdCQUFnQixFQUFFO0FBQ2hCakIsSUFBQUEsT0FBTyxFQUFFLGtCQURPO0FBRWhCQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFNBREk7QUFFVkssTUFBQUEsV0FBVyxFQUFFLHdFQUZIO0FBR1ZLLE1BQUFBLElBQUksRUFBRSxDQUFDLElBQUQsQ0FISTtBQUlWTSxNQUFBQSxRQUFRLEVBQUU7QUFKQTtBQUZJO0FBN0ZJLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHRyYW5zZm9ybWVycyB9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBrZXl3b3JkIGRlZmluaXRpb25zIHRvIGFkZCB0byB0aGUgc2luZ2xldG9uIGBBanZgIGluc3RhbmNlLlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsS2V5d29yZERlZmluaXRpb24+fVxuICovXG5leHBvcnQgY29uc3Qga2V5d29yZHMgPSB7XG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGNvbW1hbmQgYWxpYXMgbmFtZXMgZm9yIHRoZSBDTEkuXG4gICAqXG4gICAqIElmIGRlZmluZWQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhlIGFycmF5IGFuZCBpdCBtdXN0IGJlIG5vbi1lbXB0eS5cbiAgICogQWxsIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS5cbiAgICpcbiAgICogQHRvZG8gQXZvaWQgYWxpYXMgY29sbGlzaW9ucyFcbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpQWxpYXNlczogWydCJywgJ2JvYmJ5JywgJ3JvYmVydCddfVxuICAgKi9cbiAgYXBwaXVtQ2xpQWxpYXNlczoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlBbGlhc2VzJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIH0sXG4gICAgICBtaW5JdGVtczogMSxcbiAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGFsaWFzZXMgZm9yIHRoZSBhcmd1bWVudC4gQWxpYXNlcyBzaG9ydGVyIHRoYW4gdGhyZWUgKDMpIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGEgc2luZ2xlIGRhc2g7IG90aGVyd2lzZSB0d28gKDIpLidcbiAgICB9LFxuICB9LFxuICAvKipcbiAgICogS2V5d29yZCB0byBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgZGVzdGluYXRpb24gKHBhcnNlZFxuICAgKiBhcmdzKSBvYmplY3QuIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgd2lsbCBiZSB3aGF0ZXZlciB0aGUgcHJvcGVydHkgbmFtZSBpcyxcbiAgICogYnV0IGNhbWVsLWNhc2VkLiBJZiBhIGZsYWcgbmVlZHMgc29tZXRoaW5nIF9vdGhlcl8gdGhhbiBqdXN0IGNhbWVsLWNhc2luZyxcbiAgICogdXNlIHRoaXMuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIHByb3AgJ25vLWNvbG9yJ1xuICAgKiB7YXBwaXVtQ2xpRGVzdDogJ05PQ09MT1InfSAvLyB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBwcm9wZXJ0eSBgTk9DT0xPUmAgaW5zdGVhZCBvZiBgbm9Db2xvcmBcbiAgICovXG4gIGFwcGl1bUNsaURlc3Q6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpRGVzdCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIHBhcnNlZCBDTEkgYXJndW1lbnRzIG9iamVjdCdcbiAgICB9LFxuICB9LFxuXG4gIC8qKlxuICAgKiBDTEktc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5LiAgU29tZXRpbWVzIHRoZSBhbGxvd2VkIHR5cGUgY2FuXG4gICAqIGJlIGRpZmZlcmVudCBlbm91Z2ggb24gdGhlIENMSSB0aGF0IHByb3ZpZGluZyBhIGRlc2NyaXB0aW9uIHdyaXR0ZW4gZm9yIGFcbiAgICogY29uZmlnIGZpbGUgY29udGV4dCB3b3VsZG4ndCBtYWtlIHNlbnNlLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIHthcHBpdW1DbGlEZXNjcmlwdGlvbjogJ1RoaXMgaXMgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLCBidXQgaW4gdGhlIGNvbmZpZyBmaWxlIGl0IGlzIGFuIGFycmF5J31cbiAgICovXG4gIGFwcGl1bUNsaURlc2NyaXB0aW9uOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc2NyaXB0aW9uJyxcbiAgICBzY2hlbWFUeXBlOiAnc3RyaW5nJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gdG8gcHJvdmlkZSBpbiB0aGUgLS1oZWxwIHRleHQgb2YgdGhlIENMSS4gT3ZlcnJpZGVzIGBkZXNjcmlwdGlvbmAnXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIGZvciBDTEkgYXJncy4gVGhlc2UgdXN1YWxseSB0YWtlIHN0cmluZ3MgdGhlbiBkbyBzb21ldGhpbmcgd2l0aCB0aGVtLCBsaWtlXG4gICAqIHJlYWQgYSBmaWxlIG9yIHBhcnNlIGZ1cnRoZXIuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaVRyYW5zZm9ybWVyOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaVRyYW5zZm9ybWVyJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IE9iamVjdC5rZXlzKHRyYW5zZm9ybWVycyksXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBuYW1lIG9mIGEgY3VzdG9tIHRyYW5zZm9ybWVyIHRvIHJ1biBhZ2FpbnN0IHRoZSB2YWx1ZSBhcyBwcm92aWRlZCB2aWEgdGhlIENMSS4nXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogRmxhZyB0byB0ZWxsIEFwcGl1bSB0byBfbm90XyBwcm92aWRlIHRoaXMgcHJvcGVydHkgYXMgYSBDTEkgYXJndW1lbnQuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaUlnbm9yZWQ6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpSWdub3JlZCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVzY3JpcHRpb246ICdJZiBgdHJ1ZWAsIEFwcGl1bSB3aWxsIG5vdCBwcm92aWRlIHRoaXMgcHJvcGVydHkgYXMgYSBDTEkgYXJndW1lbnQuIFRoaXMgaXMgTk9UIHRoZSBzYW1lIGFzIGEgXCJoaWRkZW5cIiBhcmd1bWVudC4nLFxuICAgICAgZW51bTogW3RydWVdXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBNYXJrIHRoaXMgcHJvcGVydHkgYXMgZGVwcmVjYXRlZC5cbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKi9cbiAgYXBwaXVtRGVwcmVjYXRlZDoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1EZXByZWNhdGVkJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0lmIGB0cnVlYCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGRpc3BsYXllZCBhcyBcImRlcHJlY2F0ZWRcIiB0byB0aGUgdXNlcicsXG4gICAgICBlbnVtOiBbdHJ1ZV0sXG4gICAgICAkY29tbWVudDogJ0pTT04gc2NoZW1hIGRyYWZ0LTIwMTktMDkga2V5d29yZCBgZGVwcmVjYXRlZGAgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UuIFRoaXMga2V5d29yZCBzaG91bGQgaXRzZWxmIGJlIGRlcHJlY2F0ZWQgaWYgd2UgbW92ZSB0byBkcmFmdC0yMDE5LTA5ISdcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgYXBwaXVtQ2xpVHJhbnNmb3JtZXJgIGtleXdvcmQuXG4gKiBVbmZvcnR1bmF0ZWx5LCBUUyBjYW5ub3QgaW5mZXIgdGhpcyBpbiBhIEpTIGNvbnRleHQuICBJbiBUUywgd2UnZCB1c2VcbiAqIGBhcyBjb25zdGAgd2hlbiBkZWZpbmluZyBgYXJnVHJhbnNmb3JtZXJzYCwgdGhlbiBnZXQgYGtleW9mIHR5cGVvZiBhcmdUcmFuc2Zvcm1lcnNgLiBhbGFzLlxuICogQHR5cGVkZWYgeydjc3YnfCdqc29uJ30gQXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGN1c3RvbSBrZXl3b3JkcyB0aGF0IEFwcGl1bSByZWNvZ25pemVzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGl1bUpTT05TY2hlbWFLZXl3b3Jkc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXNjcmlwdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthcHBpdW1DbGlBbGlhc2VzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtQ2xpSWdub3JlZF1cbiAqIEBwcm9wZXJ0eSB7QXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lfSBbYXBwaXVtQ2xpVHJhbnNmb3JtZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthcHBpdW1EZXByZWNhdGVkXVxuICovXG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5LZXl3b3JkRGVmaW5pdGlvbn0gS2V5d29yZERlZmluaXRpb25cbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2tleXdvcmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsFromSchema = exports.getArgSpec = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
8
+ exports.validate = exports.resetSchema = exports.registerSchema = exports.isFinalized = exports.isAllowedSchemaFileExtension = exports.hasArgSpec = exports.getSchema = exports.getDefaultsForSchema = exports.getDefaultsForExtension = exports.getArgSpec = exports.flattenSchema = exports.finalizeSchema = exports.SchemaUnsupportedSchemaError = exports.SchemaUnknownSchemaError = exports.SchemaNameConflictError = exports.SchemaFinalizationError = exports.ALLOWED_SCHEMA_EXTENSIONS = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -50,7 +50,7 @@ class AppiumSchema {
50
50
  const instance = (_AppiumSchema$_instan = AppiumSchema._instance) !== null && _AppiumSchema$_instan !== void 0 ? _AppiumSchema$_instan : new AppiumSchema();
51
51
  AppiumSchema._instance = instance;
52
52
 
53
- _lodash.default.bindAll(instance, ['finalize', 'flatten', 'getArgSpec', 'getDefaults', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'reset', 'validate']);
53
+ _lodash.default.bindAll(instance, ['finalize', 'flatten', 'getArgSpec', 'getDefaults', 'getDefaultsForExtension', 'getSchema', 'hasArgSpec', 'isFinalized', 'registerSchema', 'reset', 'validate']);
54
54
 
55
55
  return instance;
56
56
  }
@@ -146,8 +146,12 @@ class AppiumSchema {
146
146
  }
147
147
 
148
148
  registerSchema(extType, extName, schema) {
149
- if (!(extType && extName && !_lodash.default.isEmpty(schema))) {
150
- throw new TypeError('Expected nonempty extension type, extension name and schema parameters');
149
+ if (!(extType && extName) || _lodash.default.isUndefined(schema)) {
150
+ throw new TypeError('Expected extension type, extension name, and a defined schema');
151
+ }
152
+
153
+ if (!AppiumSchema.isSupportedSchemaType(schema)) {
154
+ throw new SchemaUnsupportedSchemaError(schema, extType, extName);
151
155
  }
152
156
 
153
157
  const normalizedExtName = _lodash.default.kebabCase(extName);
@@ -173,12 +177,12 @@ class AppiumSchema {
173
177
  return this._argSpecs.has(_argSpec.ArgSpec.toArg(name, extType, extName));
174
178
  }
175
179
 
176
- getDefaults() {
180
+ getDefaults(flatten = true) {
177
181
  if (!this.isFinalized()) {
178
182
  throw new SchemaFinalizationError();
179
183
  }
180
184
 
181
- return [...this._argSpecs.values()].reduce((defaults, {
185
+ const reducer = flatten ? (defaults, {
182
186
  defaultValue,
183
187
  dest
184
188
  }) => {
@@ -186,6 +190,35 @@ class AppiumSchema {
186
190
  defaults[dest] = defaultValue;
187
191
  }
188
192
 
193
+ return defaults;
194
+ } : (defaults, {
195
+ defaultValue,
196
+ dest
197
+ }) => {
198
+ if (!_lodash.default.isUndefined(defaultValue)) {
199
+ _lodash.default.set(defaults, dest, defaultValue);
200
+ }
201
+
202
+ return defaults;
203
+ };
204
+ const retval = {};
205
+ return [...this._argSpecs.values()].reduce(reducer, retval);
206
+ }
207
+
208
+ getDefaultsForExtension(extType, extName) {
209
+ if (!this.isFinalized()) {
210
+ throw new SchemaFinalizationError();
211
+ }
212
+
213
+ const specs = [...this._argSpecs.values()].filter(spec => spec.extType === extType && spec.extName === extName);
214
+ return specs.reduce((defaults, {
215
+ defaultValue,
216
+ rawDest
217
+ }) => {
218
+ if (!_lodash.default.isUndefined(defaultValue)) {
219
+ defaults[rawDest] = defaultValue;
220
+ }
221
+
189
222
  return defaults;
190
223
  }, {});
191
224
  }
@@ -283,6 +316,10 @@ class AppiumSchema {
283
316
  return ALLOWED_SCHEMA_EXTENSIONS.has(_path.default.extname(filename));
284
317
  }
285
318
 
319
+ static isSupportedSchemaType(schema) {
320
+ return _lodash.default.isPlainObject(schema) && schema.$async !== true;
321
+ }
322
+
286
323
  }
287
324
 
288
325
  (0, _defineProperty2.default)(AppiumSchema, "_instance", void 0);
@@ -325,6 +362,38 @@ class SchemaUnknownSchemaError extends ReferenceError {
325
362
  }
326
363
 
327
364
  exports.SchemaUnknownSchemaError = SchemaUnknownSchemaError;
365
+
366
+ class SchemaUnsupportedSchemaError extends TypeError {
367
+ constructor(schema, extType, extName) {
368
+ super((() => {
369
+ let msg = `Unsupported schema from ${extType} "${extName}":`;
370
+
371
+ if (_lodash.default.isBoolean(schema)) {
372
+ return `${msg} schema cannot be a boolean`;
373
+ }
374
+
375
+ if (_lodash.default.isPlainObject(schema)) {
376
+ if (schema.$async) {
377
+ return `${msg} schema cannot be an async schema`;
378
+ }
379
+
380
+ throw new TypeError(`schema IS supported; this error should not be thrown (this is a bug). value of schema: ${JSON.stringify(schema)}`);
381
+ }
382
+
383
+ return `${msg} schema must be a plain object without a true "$async" property`;
384
+ })());
385
+ (0, _defineProperty2.default)(this, "code", 'APPIUMERR_SCHEMA_UNSUPPORTED_SCHEMA');
386
+ (0, _defineProperty2.default)(this, "data", void 0);
387
+ this.data = {
388
+ schema,
389
+ extType,
390
+ extName
391
+ };
392
+ }
393
+
394
+ }
395
+
396
+ exports.SchemaUnsupportedSchemaError = SchemaUnsupportedSchemaError;
328
397
  const appiumSchema = AppiumSchema.create();
329
398
  const {
330
399
  registerSchema,
@@ -336,9 +405,11 @@ const {
336
405
  validate,
337
406
  getSchema,
338
407
  flatten: flattenSchema,
339
- getDefaults: getDefaultsFromSchema
408
+ getDefaults: getDefaultsForSchema,
409
+ getDefaultsForExtension
340
410
  } = appiumSchema;
341
- exports.getDefaultsFromSchema = getDefaultsFromSchema;
411
+ exports.getDefaultsForExtension = getDefaultsForExtension;
412
+ exports.getDefaultsForSchema = getDefaultsForSchema;
342
413
  exports.flattenSchema = flattenSchema;
343
414
  exports.getSchema = getSchema;
344
415
  exports.validate = validate;
@@ -354,4 +425,4 @@ const {
354
425
  exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;require('source-map-support').install();
355
426
 
356
427
 
357
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJTZXQiLCJBcHBpdW1TY2hlbWEiLCJjb25zdHJ1Y3RvciIsIlJlYWRvbmx5TWFwIiwiRFJJVkVSX1RZUEUiLCJNYXAiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFudGlhdGVBanYiLCJjcmVhdGUiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl8iLCJiaW5kQWxsIiwiaGFzUmVnaXN0ZXJlZFNjaGVtYSIsImV4dFR5cGUiLCJleHROYW1lIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiaGFzIiwiaXNGaW5hbGl6ZWQiLCJCb29sZWFuIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbGl6ZSIsImFqdiIsImJhc2VTY2hlbWEiLCJjbG9uZURlZXAiLCJhcHBpdW1Db25maWdTY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIl9hcmdTcGVjcyIsInNldCIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzRW1wdHkiLCJUeXBlRXJyb3IiLCJub3JtYWxpemVkRXh0TmFtZSIsImtlYmFiQ2FzZSIsImdldCIsIlNjaGVtYU5hbWVDb25mbGljdEVycm9yIiwiZ2V0QXJnU3BlYyIsIm5hbWUiLCJ0b0FyZyIsImhhc0FyZ1NwZWMiLCJnZXREZWZhdWx0cyIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwidmFsdWVzIiwiZGVmYXVsdHMiLCJpc1VuZGVmaW5lZCIsImZsYXR0ZW4iLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsImtleSIsInZhbHVlIiwicHVzaCIsIlNFUlZFUl9QUk9QX05BTUUiLCJyZWZTY2hlbWEiLCJlcnIiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsIlJlZmVyZW5jZUVycm9yIiwicmVmIiwiX2dldFZhbGlkYXRvciIsImlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGUiLCJpc0FycmF5IiwiZXJyb3JzIiwiaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiIsImZpbGVuYW1lIiwicGF0aCIsImV4dG5hbWUiLCJFcnJvciIsImRhdGEiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRnJvbVNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtPLE1BQU1BLHlCQUF5QixHQUFHLElBQUlDLEdBQUosQ0FBUSxDQUFDLE9BQUQsRUFBVSxLQUFWLEVBQWlCLE1BQWpCLENBQVIsQ0FBbEM7OztBQU9QLE1BQU1DLFlBQU4sQ0FBbUI7QUFtRGpCQyxFQUFBQSxXQUFXLEdBQUk7QUFBQSxxREF6Q0gsSUFBSUMsa0JBQUosRUF5Q0c7QUFBQSw4REEvQk07QUFB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RStELFFBQUYsRUFBWTtBQUNyQixVQUFPLG9CQUFtQkEsUUFBUyxHQUFuQztBQURxQixnREFWaEIsaUNBVWdCO0FBQUE7QUFFckIsU0FBSytDLElBQUwsR0FBWTtBQUFDL0MsTUFBQUE7QUFBRCxLQUFaO0FBQ0Q7O0FBakIwRDs7O0FBb0I3RCxNQUFNZ0QsWUFBWSxHQUFHaEgsWUFBWSxDQUFDUSxNQUFiLEVBQXJCO0FBRU8sTUFBTTtBQUNYMkQsRUFBQUEsY0FEVztBQUVYTyxFQUFBQSxVQUZXO0FBR1hHLEVBQUFBLFVBSFc7QUFJWDNELEVBQUFBLFdBSlc7QUFLWEcsRUFBQUEsUUFBUSxFQUFFNEYsY0FMQztBQU1YbEQsRUFBQUEsS0FBSyxFQUFFbUQsV0FOSTtBQU9YWCxFQUFBQSxRQVBXO0FBUVhuQixFQUFBQSxTQVJXO0FBU1hELEVBQUFBLE9BQU8sRUFBRWdDLGFBVEU7QUFVWHJDLEVBQUFBLFdBQVcsRUFBRXNDO0FBVkYsSUFXVEosWUFYRzs7Ozs7Ozs7Ozs7QUFZQSxNQUFNO0FBQUNOLEVBQUFBO0FBQUQsSUFBaUMxRyxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge1JlYWRvbmx5TWFwfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgYXBwaXVtQ29uZmlnU2NoZW1hIGZyb20gJy4vYXBwaXVtLWNvbmZpZy1zY2hlbWEnO1xuaW1wb3J0IHtBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQge2tleXdvcmRzfSBmcm9tICcuL2tleXdvcmRzJztcblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seU1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUmVhZG9ubHlNYXAoKTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgZXh0ZW5zaW9uIHR5cGVzIHRvIGV4dGVuc2lvbiBuYW1lcyB0byBzY2hlbWEgb2JqZWN0cy5cbiAgICpcbiAgICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbmFtaW5nIGNvbmZsaWN0cy4gVGhlIHNjaGVtYXNcbiAgICogYXJlIHN0b3JlZCBoZXJlIGluIG1lbW9yeSB1bnRpbCB0aGUgaW5zdGFuY2UgaXMgX2ZpbmFsaXplZF8uXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8RXh0ZW5zaW9uVHlwZSxNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD4+fVxuICAgKi9cbiAgX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1tEUklWRVJfVFlQRV06IG5ldyBNYXAoKSwgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpfTtcblxuICAvKipcbiAgICogQWp2IGluc3RhbmNlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBanZ9XG4gICAqL1xuICBfYWp2O1xuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgb2Ygc2NoZW1hIElEcyB0byBmaW5hbGl6ZWQgc2NoZW1hcy5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHJlZmVyZW5jZXMsIGJ1dCByYXRoZXIgdGhlIHJvb3Qgc2NoZW1hcyB0aGVtc2VsdmVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+P31cbiAgICovXG4gIF9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgQWp2LCBhZGRzIHN0YW5kYXJkIGZvcm1hdHMgYW5kIG91ciBjdXN0b20ga2V5d29yZHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9ucG0uaW0vYWp2LWZvcm1hdHNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiBmb3Ige0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2VzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgc2luZ2xldG9uIGluc3RhbmNlIGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSBjcmVhdGVzIGEgbmV3IG9uZS5cbiAgICogQmluZHMgcHVibGljIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZSAoKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID8/IG5ldyBBcHBpdW1TY2hlbWEoKTtcbiAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICdmaW5hbGl6ZScsXG4gICAgICAnZmxhdHRlbicsXG4gICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICdyZXNldCcsXG4gICAgICAndmFsaWRhdGUnLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD59ICovIChcbiAgICAgICAgdGhpcy5fZmluYWxpemVkU2NoZW1hc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhanYgPSB0aGlzLl9hanY7XG5cbiAgICAvLyBBanYgd2lsbCBfbXV0YXRlXyB0aGUgc2NoZW1hLCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LlxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSBfLmNsb25lRGVlcCgvKiogQHR5cGUge1N0cmljdFNjaGVtYU9iamVjdH0gKi8oYXBwaXVtQ29uZmlnU2NoZW1hKSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovKHNjaGVtYSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYmFzZVNjaGVtYTtcbiAgICAgIH0sXG4gICAgICBiYXNlU2NoZW1hLFxuICAgICk7XG5cbiAgICBhanYuYWRkU2NoZW1hKGZpbmFsU2NoZW1hLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCk7XG4gICAgZmluYWxpemVkU2NoZW1hc1tBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF0gPSBmaW5hbFNjaGVtYTtcbiAgICBhanYudmFsaWRhdGVTY2hlbWEoZmluYWxTY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IGZpbmFsaXplZFNjaGVtYXM7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBhbmQgY3JlYXRlcyBhbiBBanYgaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBanZ9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbnRpYXRlQWp2ICgpIHtcbiAgICBjb25zdCBhanYgPSBhZGRGb3JtYXRzKFxuICAgICAgbmV3IEFqdih7XG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBub3QgbXVjaCB2YWxpZGF0aW9uIGFjdHVhbGx5IGhhcHBlbnNcbiAgICAgICAgYWxsRXJyb3JzOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIGFkZCBjdXN0b20ga2V5d29yZHMgdG8gYWp2LiBzZWUgc2NoZW1hLWtleXdvcmRzLmpzXG4gICAgXy5mb3JFYWNoKGtleXdvcmRzLCAoa2V5d29yZCkgPT4ge1xuICAgICAgYWp2LmFkZEtleXdvcmQoa2V5d29yZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWp2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGlzIGluc3RhbmNlIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS5cbiAgICpcbiAgICogLSBSZW1vdmVzIGFsbCBhZGRlZCBzY2hlbWFzIGZyb20gdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2Yge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9XG4gICAqIC0gUmVzZXRzIHRoZSBtYXAgb2YgcmVnaXN0ZXJlZCBzY2hlbWFzXG4gICAqIC0gU2V0cyB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYS5fZmluYWxpemVkIF9maW5hbGl6ZWR9IGZsYWcgdG8gYGZhbHNlYFxuICAgKlxuICAgKiBJZiB5b3UgbmVlZCB0byBjYWxsIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGFnYWluLCB5b3UnbGwgd2FudCB0byBjYWxsIHRoaXMgZmlyc3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVzZXQgKCkge1xuICAgIGZvciAoY29uc3Qgc2NoZW1hSWQgb2YgT2JqZWN0LmtleXModGhpcy5fZmluYWxpemVkU2NoZW1hcyA/PyB7fSkpIHtcbiAgICAgIHRoaXMuX2Fqdi5yZW1vdmVTY2hlbWEoc2NoZW1hSWQpO1xuICAgIH1cbiAgICB0aGlzLl9hcmdTcGVjcyA9IG5ldyBSZWFkb25seU1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSAmJiAhXy5pc0VtcHR5KHNjaGVtYSkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgbm9uZW1wdHkgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lIGFuZCBzY2hlbWEgcGFyYW1ldGVycycsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5IGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY1snZGVmYXVsdFZhbHVlJ10+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKFxuICAgICAgKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUge3twcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W119ICovXG4gICAgY29uc3Qgc3RhY2sgPSBbe3Byb3BlcnRpZXM6IHNjaGVtYS5wcm9wZXJ0aWVzLCBwcmVmaXg6IFtdfV07XG4gICAgLyoqIEB0eXBlIHtGbGF0dGVuZWRTY2hlbWF9ICovXG4gICAgY29uc3QgZmxhdHRlbmVkID0gW107XG5cbiAgICAvLyB0aGlzIGJpdCBpcyBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0gcmV3cml0dGVuIGFzIGEgZm9yIGxvb3AuXG4gICAgLy8gd2hlbiB3ZSBmaW5kIHNvbWV0aGluZyB3ZSB3YW50IHRvIHRyYXZlcnNlLCB3ZSBhZGQgaXQgdG8gYHN0YWNrYFxuICAgIGZvciAoY29uc3Qge3Byb3BlcnRpZXMsIHByZWZpeH0gb2Ygc3RhY2spIHtcbiAgICAgIGNvbnN0IHBhaXJzID0gXy50b1BhaXJzKHByb3BlcnRpZXMpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qge3Byb3BlcnRpZXMsICRyZWZ9ID0gdmFsdWU7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBrZXkgPT09IFNFUlZFUl9QUk9QX05BTUUgPyBbXSA6IFsuLi5wcmVmaXgsIGtleV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHJlZikge1xuICAgICAgICAgIGxldCByZWZTY2hlbWE7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlZlNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCRyZWYpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGV4dGVuc2lvbiBzY2hlbWEgc3VwcGxpZXMgYSAkcmVmIHRvIGEgbm9uLWV4aXN0ZW50IHNjaGVtYVxuICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcigkcmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge25vcm1hbGl6ZWRFeHROYW1lfSA9XG4gICAgICAgICAgICBBcmdTcGVjLmV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkKCRyZWYpO1xuICAgICAgICAgIGlmICghbm9ybWFsaXplZEV4dE5hbWUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGV4dGVuc2lvbiBuYW1lIGZyb20gc2NoZW1hIElEICR7JHJlZn0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllczogcmVmU2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IFsuLi5wcmVmaXgsIGtleSwgbm9ybWFsaXplZEV4dE5hbWVdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPT0gRFJJVkVSX1RZUEUgJiYga2V5ICE9PSBQTFVHSU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IFtleHRUeXBlLCBleHROYW1lXSA9IHByZWZpeDtcbiAgICAgICAgICBjb25zdCBhcmdTcGVjID0gdGhpcy5nZXRBcmdTcGVjKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgLyoqIEB0eXBlIHtFeHRlbnNpb25UeXBlfSAqLyAoZXh0VHlwZSksXG4gICAgICAgICAgICBleHROYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhcmdTcGVjKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBhcmd1bWVudCB3aXRoIGtleSAke2tleX0sIGV4dFR5cGUgJHtleHRUeXBlfSBhbmQgZXh0TmFtZSAke2V4dE5hbWV9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbGF0dGVuZWQucHVzaCh7c2NoZW1hOiBfLmNsb25lRGVlcCh2YWx1ZSksIGFyZ1NwZWN9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzY2hlbWEgaXRzZWxmXG4gICAqIEBwdWJsaWNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWZdIC0gU2NoZW1hIElEXG4gICAqIEB0aHJvd3MgSWYgdGhlIHNjaGVtYSBoYXMgbm90IHlldCBiZWVuIF9maW5hbGl6ZWRfXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufSAqLyAoXG4gICAgICB0aGlzLl9nZXRWYWxpZGF0b3IocmVmKVxuICAgICk7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuY29uc3QgYXBwaXVtU2NoZW1hID0gQXBwaXVtU2NoZW1hLmNyZWF0ZSgpO1xuXG5leHBvcnQgY29uc3Qge1xuICByZWdpc3RlclNjaGVtYSxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGcm9tU2NoZW1hLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dC1jb25maWctaW8nKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYge3tzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXX0gRmxhdHRlbmVkU2NoZW1hXG4gKi9cbiJdLCJmaWxlIjoibGliL3NjaGVtYS9zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
428
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJTZXQiLCJBcHBpdW1TY2hlbWEiLCJjb25zdHJ1Y3RvciIsIlJlYWRvbmx5TWFwIiwiRFJJVkVSX1RZUEUiLCJNYXAiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFudGlhdGVBanYiLCJjcmVhdGUiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl8iLCJiaW5kQWxsIiwiaGFzUmVnaXN0ZXJlZFNjaGVtYSIsImV4dFR5cGUiLCJleHROYW1lIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiaGFzIiwiaXNGaW5hbGl6ZWQiLCJCb29sZWFuIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbGl6ZSIsImFqdiIsImJhc2VTY2hlbWEiLCJjbG9uZURlZXAiLCJhcHBpdW1Db25maWdTY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIl9hcmdTcGVjcyIsInNldCIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzVW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIiwiU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciIsIm5vcm1hbGl6ZWRFeHROYW1lIiwia2ViYWJDYXNlIiwiZ2V0IiwiU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IiLCJnZXRBcmdTcGVjIiwibmFtZSIsInRvQXJnIiwiaGFzQXJnU3BlYyIsImdldERlZmF1bHRzIiwiZmxhdHRlbiIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwicmVkdWNlciIsImRlZmF1bHRzIiwicmV0dmFsIiwidmFsdWVzIiwiZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24iLCJzcGVjcyIsImZpbHRlciIsInNwZWMiLCJyYXdEZXN0IiwiZ2V0U2NoZW1hIiwic3RhY2siLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJwYWlycyIsInRvUGFpcnMiLCJrZXkiLCJ2YWx1ZSIsInB1c2giLCJTRVJWRVJfUFJPUF9OQU1FIiwicmVmU2NoZW1hIiwiZXJyIiwiU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJSZWZlcmVuY2VFcnJvciIsInJlZiIsIl9nZXRWYWxpZGF0b3IiLCJpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiaXNBcnJheSIsImVycm9ycyIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsInBhdGgiLCJleHRuYW1lIiwiaXNQbGFpbk9iamVjdCIsIiRhc3luYyIsIkVycm9yIiwiZGF0YSIsIm1zZyIsImlzQm9vbGVhbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRm9yU2NoZW1hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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O0FBRUQsY0FBTSxJQUFJckQsU0FBSixDQUNILDBGQUF5RnVELElBQUksQ0FBQ0MsU0FBTCxDQUN4RmxHLE1BRHdGLENBRXhGLEVBSEUsQ0FBTjtBQUtEOztBQUNELGFBQVEsR0FBRStGLEdBQUksaUVBQWQ7QUFDRCxLQWpCRCxHQURGO0FBRnFDLGdEQVpoQyxxQ0FZZ0M7QUFBQTtBQXNCckMsU0FBS0QsSUFBTCxHQUFZO0FBQUM5RixNQUFBQSxNQUFEO0FBQVNiLE1BQUFBLE9BQVQ7QUFBa0JDLE1BQUFBO0FBQWxCLEtBQVo7QUFDRDs7QUF2Q3lEOzs7QUEwQzVELE1BQU0rRyxZQUFZLEdBQUc5SCxZQUFZLENBQUNRLE1BQWIsRUFBckI7QUFFTyxNQUFNO0FBQ1gyRCxFQUFBQSxjQURXO0FBRVhTLEVBQUFBLFVBRlc7QUFHWEcsRUFBQUEsVUFIVztBQUlYN0QsRUFBQUEsV0FKVztBQUtYRyxFQUFBQSxRQUFRLEVBQUUwRyxjQUxDO0FBTVhoRSxFQUFBQSxLQUFLLEVBQUVpRSxXQU5JO0FBT1hqQixFQUFBQSxRQVBXO0FBUVhuQixFQUFBQSxTQVJXO0FBU1hYLEVBQUFBLE9BQU8sRUFBRWdELGFBVEU7QUFVWGpELEVBQUFBLFdBQVcsRUFBRWtELG9CQVZGO0FBV1gzQyxFQUFBQTtBQVhXLElBWVR1QyxZQVpHOzs7Ozs7Ozs7Ozs7QUFhQSxNQUFNO0FBQUNaLEVBQUFBO0FBQUQsSUFBaUNsSCxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IFJlYWRvbmx5TWFwIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGFwcGl1bUNvbmZpZ1NjaGVtYSBmcm9tICcuL2FwcGl1bS1jb25maWctc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEV4dGVuc2lvbnMgdGhhdCBhbiBleHRlbnNpb24gc2NoZW1hIGZpbGUgY2FuIGhhdmUuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TID0gbmV3IFNldChbJy5qc29uJywgJy5qcycsICcuY2pzJ10pO1xuXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgQWp2IGFuZCBzY2hlbWEtcmVsYXRlZCBmdW5jdGlvbnMuXG4gKlxuICogU2hvdWxkIGhhdmUgYmVlbiBuYW1lZCBIaWdobGFuZGVyLCBiZWNhdXNlIF90aGVyZSBjYW4gb25seSBiZSBvbmVfXG4gKi9cbmNsYXNzIEFwcGl1bVNjaGVtYSB7XG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgdW5pcXVlIGFyZ3VtZW50IElEcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfXMuXG4gICAqXG4gICAqIEFuIFwiYXJndW1lbnRcIiBpcyBhIENMSSBhcmd1bWVudCBvciBhIGNvbmZpZyBwcm9wZXJ0eS5cbiAgICpcbiAgICogVXNlZCB0byBwcm92aWRlIGVhc3kgbG9va3VwcyBvZiBhcmd1bWVudCBtZXRhZGF0YSB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIG9mIHRob3NlIGFyZ3VtZW50cy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlYWRvbmx5TWFwPHN0cmluZyxBcmdTcGVjPn1cbiAgICovXG4gIF9hcmdTcGVjcyA9IG5ldyBSZWFkb25seU1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEFwcGl1bVNjaGVtYS5faW5zdGFuY2UgPz8gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgIEFwcGl1bVNjaGVtYS5faW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgIF8uYmluZEFsbChpbnN0YW5jZSwgW1xuICAgICAgJ2ZpbmFsaXplJyxcbiAgICAgICdmbGF0dGVuJyxcbiAgICAgICdnZXRBcmdTcGVjJyxcbiAgICAgICdnZXREZWZhdWx0cycsXG4gICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICdyZXNldCcsXG4gICAgICAndmFsaWRhdGUnLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplICgpIHtcbiAgICBpZiAodGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD59ICovIChcbiAgICAgICAgdGhpcy5fZmluYWxpemVkU2NoZW1hc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhanYgPSB0aGlzLl9hanY7XG5cbiAgICAvLyBBanYgd2lsbCBfbXV0YXRlXyB0aGUgc2NoZW1hLCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LlxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSBfLmNsb25lRGVlcChhcHBpdW1Db25maWdTY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKFxuICAgICAgXy5vbWl0KGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcywgW1xuICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pn1cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZWRTY2hlbWFzID0ge307XG5cbiAgICBjb25zdCBmaW5hbFNjaGVtYSA9IF8ucmVkdWNlKFxuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7dHlwZW9mIGJhc2VTY2hlbWF9IGJhc2VTY2hlbWFcbiAgICAgICAqIEBwYXJhbSB7TWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+fSBleHRlbnNpb25TY2hlbWFzXG4gICAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICAgICAqL1xuICAgICAgKGJhc2VTY2hlbWEsIGV4dGVuc2lvblNjaGVtYXMsIGV4dFR5cGUpID0+IHtcbiAgICAgICAgZXh0ZW5zaW9uU2NoZW1hcy5mb3JFYWNoKChzY2hlbWEsIGV4dE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCAkcmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgICAgICAgc2NoZW1hLiRpZCA9ICRyZWY7XG4gICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIHRoaXMgbWFrZXMgYHNjaGVtYWAgYmVjb21lIGEgYFN0cmljdFNjaGVtYU9iamVjdGBcbiAgICAgICAgICBiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXNbZXh0VHlwZV0ucHJvcGVydGllc1tleHROYW1lXSA9XG4gICAgICAgICAgICB7JHJlZiwgJGNvbW1lbnQ6IGV4dE5hbWV9O1xuICAgICAgICAgIGFqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICAgIGFkZEFyZ1NwZWNzKHNjaGVtYS5wcm9wZXJ0aWVzLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgJHJlZik7XG4gICAgICAgICAgZmluYWxpemVkU2NoZW1hc1skcmVmXSA9IC8qKiBAdHlwZSB7U3RyaWN0U2NoZW1hT2JqZWN0fSAqLyAoc2NoZW1hKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBiYXNlU2NoZW1hO1xuICAgICAgfSxcbiAgICAgIGJhc2VTY2hlbWEsXG4gICAgKTtcblxuICAgIGFqdi5hZGRTY2hlbWEoZmluYWxTY2hlbWEsIEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKTtcbiAgICBmaW5hbGl6ZWRTY2hlbWFzW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXSA9IGZpbmFsU2NoZW1hO1xuICAgIGFqdi52YWxpZGF0ZVNjaGVtYShmaW5hbFNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gZmluYWxpemVkU2NoZW1hcztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmaW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuZCBjcmVhdGVzIGFuIEFqdiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0Fqdn1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFudGlhdGVBanYgKCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gYWRkIGN1c3RvbSBrZXl3b3JkcyB0byBhanYuIHNlZSBzY2hlbWEta2V5d29yZHMuanNcbiAgICBfLmZvckVhY2goa2V5d29yZHMsIChrZXl3b3JkKSA9PiB7XG4gICAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhanY7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiAtIFJlbW92ZXMgYWxsIGFkZGVkIHNjaGVtYXMgZnJvbSB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc31cbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiByZWdpc3RlcmVkIHNjaGVtYXNcbiAgICogLSBTZXRzIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hLl9maW5hbGl6ZWQgX2ZpbmFsaXplZH0gZmxhZyB0byBgZmFsc2VgXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGNhbGwge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gYWdhaW4sIHlvdSdsbCB3YW50IHRvIGNhbGwgdGhpcyBmaXJzdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZXNldCAoKSB7XG4gICAgZm9yIChjb25zdCBzY2hlbWFJZCBvZiBPYmplY3Qua2V5cyh0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID8/IHt9KSkge1xuICAgICAgdGhpcy5fYWp2LnJlbW92ZVNjaGVtYShzY2hlbWFJZCk7XG4gICAgfVxuICAgIHRoaXMuX2FyZ1NwZWNzID0gbmV3IFJlYWRvbmx5TWFwKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMgPSB7XG4gICAgICBbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgICBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgfTtcbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAgIC8vIEFqdiBzZWVtcyB0byBoYXZlIGFuIG92ZXItZWFnZXIgY2FjaGUsIHNvIHdlIGhhdmUgdG8gZHVtcCB0aGUgb2JqZWN0IGVudGlyZWx5LlxuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBzY2hlbWEgZnJvbSBhbiBleHRlbnNpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgXCJmYWlsLWZhc3RcIiBpbiB0aGF0IHRoZSBzY2hlbWEgd2lsbCBpbW1lZGlhdGVseSBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyBfb3JfIHdoYXRldmVyIHRoZSB2YWx1ZSBvZiB0aGUgc2NoZW1hJ3MgYCRzY2hlbWFgIHByb3AgaXMuXG4gICAqXG4gICAqIERvZXMgX25vdF8gYWRkIHRoZSBzY2hlbWEgdG8gdGhlIGBhanZgIGluc3RhbmNlICh0aGlzIGlzIGRvbmUgYnkge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0pLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIFVuaXF1ZSBleHRlbnNpb24gbmFtZSBmb3IgYHR5cGVgXG4gICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWEgLSBTY2hlbWEgb2JqZWN0XG4gICAqIEB0aHJvd3Mge1NjaGVtYU5hbWVDb25mbGljdEVycm9yfSBJZiB0aGUgc2NoZW1hIGlzIGFuIGludmFsaWRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWdpc3RlclNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSwgc2NoZW1hKSB7XG4gICAgaWYgKCEoZXh0VHlwZSAmJiBleHROYW1lKSB8fCBfLmlzVW5kZWZpbmVkKHNjaGVtYSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdFeHBlY3RlZCBleHRlbnNpb24gdHlwZSwgZXh0ZW5zaW9uIG5hbWUsIGFuZCBhIGRlZmluZWQgc2NoZW1hJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghQXBwaXVtU2NoZW1hLmlzU3VwcG9ydGVkU2NoZW1hVHlwZShzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvcihzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkRXh0TmFtZSA9IF8ua2ViYWJDYXNlKGV4dE5hbWUpO1xuICAgIGlmICh0aGlzLmhhc1JlZ2lzdGVyZWRTY2hlbWEoZXh0VHlwZSwgbm9ybWFsaXplZEV4dE5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uZ2V0KG5vcm1hbGl6ZWRFeHROYW1lKSA9PT0gc2NoZW1hKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcihleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgdGhpcy5fYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5zZXQobm9ybWFsaXplZEV4dE5hbWUsIHNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHtAbGluayBBcmdTcGVjfSBmb3IgdGhlIGdpdmVuIGFyZ3VtZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ0xJIGFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge0FyZ1NwZWN8dW5kZWZpbmVkfSBBcmdTcGVjIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0QXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5nZXQoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGluc3RhbmNlIGtub3dzIGFib3V0IGFuIGFyZ3VtZW50IGJ5IHRoZSBnaXZlbiBgbmFtZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ0xJIGFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBzdWNoIGFuIHtAbGluayBBcmdTcGVjfSBleGlzdHNcbiAgICovXG4gIGhhc0FyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuaGFzKEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBgUmVjb3JkYCBvZiBhcmd1bWVudCBcImRlc3RcIiBzdHJpbmdzIHRvIGRlZmF1bHQgdmFsdWVzLlxuICAgKlxuICAgKiBUaGUgXCJkZXN0XCIgc3RyaW5nIGlzIHRoZSBwcm9wZXJ0eSBuYW1lIGluIG9iamVjdCByZXR1cm5lZCBieVxuICAgKiBgYXJncGFyc2UuQXJndW1lbnRQYXJzZXJbJ3BhcnNlX2FyZ3MnXWAuXG4gICAqIEB0ZW1wbGF0ZSB7Ym9vbGVhbnx1bmRlZmluZWR9IEZsYXR0ZW5lZFxuICAgKiBAcGFyYW0ge0ZsYXR0ZW5lZH0gW2ZsYXR0ZW49dHJ1ZV0gLSBJZiBgdHJ1ZWAsIGZsYXR0ZW5zIHRoZSByZXR1cm5lZCBvYmplY3RcbiAgICogdXNpbmcgXCJrZXlwYXRoXCItc3R5bGUga2V5cyBvZiB0aGUgZm9ybWF0IGA8ZXh0VHlwZT4uPGV4dE5hbWU+LjxhcmdOYW1lPmAuXG4gICAqIE90aGVyd2lzZSwgcmV0dXJucyBhIG5lc3RlZCBvYmplY3QgdXNpbmcgYGV4dFR5cGVgIGFuZCBgZXh0TmFtZWAgYXNcbiAgICogcHJvcGVydGllcy4gQmFzZSBhcmd1bWVudHMgKHNlcnZlciBhcmd1bWVudHMpIGFyZSBhbHdheXMgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICogQHJldHVybnMge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn1cbiAgICovXG4gIGdldERlZmF1bHRzIChmbGF0dGVuID0gLyoqIEB0eXBlIHtGbGF0dGVuZWR9ICovICh0cnVlKSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjYWxsYmFjayBEZWZhdWx0UmVkdWNlclxuICAgICAqIEBwYXJhbSB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fSBkZWZhdWx0c1xuICAgICAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlY1xuICAgICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAgICovXG4gICAgLyoqIEB0eXBlIHtEZWZhdWx0UmVkdWNlcn0gKi9cbiAgICBjb25zdCByZWR1Y2VyID0gZmxhdHRlblxuICAgICAgPyAoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIGRlc3R9KSA9PiB7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgZGVmYXVsdHNbZGVzdF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgfVxuICAgICAgOiAoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIGRlc3R9KSA9PiB7XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgXy5zZXQoZGVmYXVsdHMsIGRlc3QsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgfTtcblxuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fSAqL1xuICAgIGNvbnN0IHJldHZhbCA9IHt9O1xuICAgIHJldHVybiBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLnJlZHVjZShyZWR1Y2VyLCByZXR2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmbGF0dGVuZWQgUmVjb3JkIG9mIGRlZmF1bHRzIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi4gS2V5cyB3aWxsXG4gICAqIGJlIG9mIGZvcm1hdCBgPGFyZ05hbWU+YC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPn1cbiAgICovXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgIH1cbiAgICBjb25zdCBzcGVjcyA9IFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0uZmlsdGVyKFxuICAgICAgKHNwZWMpID0+IHNwZWMuZXh0VHlwZSA9PT0gZXh0VHlwZSAmJiBzcGVjLmV4dE5hbWUgPT09IGV4dE5hbWUsXG4gICAgKTtcbiAgICByZXR1cm4gc3BlY3MucmVkdWNlKChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgcmF3RGVzdH0pID0+IHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgIGRlZmF1bHRzW3Jhd0Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVuIHNjaGVtYSBpbnRvIGFuIGFycmF5IG9mIGBTY2hlbWFPYmplY3RgcyBhbmQgYXNzb2NpYXRlZFxuICAgKiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc30uXG4gICAqXG4gICAqIENvbnZlcnRzIG5lc3RlZCBleHRlbnNpb24gc2NoZW1hcyB0byBrZXlzIGJhc2VkIG9uIHRoZSBleHRlbnNpb24gdHlwZSBhbmRcbiAgICogbmFtZS4gVXNlZCB3aGVuIHRyYW5zbGF0aW5nIHRvIGBhcmdwYXJzZWAgb3B0aW9ucyBvciBnZXR0aW5nIHRoZSBsaXN0IG9mXG4gICAqIGRlZmF1bHQgdmFsdWVzIChzZWUge0BsaW5rIEFwcGl1bVNjaGVtYS5nZXREZWZhdWx0c30pIGZvciBDTEkgb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGludGVybWVkaWF0ZSByZXByc2VudGF0aW9uIHVzZWQgYnkgYGNsaS1hcmdzYFxuICAgKiBtb2R1bGUncyBgdG9QYXJzZXJBcmdzYCwgd2hpY2ggY29udmVydHMgdGhlIGZpbmFsaXplZCBzY2hlbWEgdG8gcGFyYW1ldGVyc1xuICAgKiB1c2VkIGJ5IGBhcmdwYXJzZWAuXG4gICAqIEB0aHJvd3MgSWYge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuXG4gICAqIEByZXR1cm5zIHtGbGF0dGVuZWRTY2hlbWF9XG4gICAqL1xuICBmbGF0dGVuICgpIHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgpO1xuXG4gICAgLyoqIEB0eXBlIHt7cHJvcGVydGllczogU2NoZW1hT2JqZWN0LCBwcmVmaXg6IHN0cmluZ1tdfVtdfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFyZ1NwZWMsXG4gIGhhc0FyZ1NwZWMsXG4gIGlzRmluYWxpemVkLFxuICBmaW5hbGl6ZTogZmluYWxpemVTY2hlbWEsXG4gIHJlc2V0OiByZXNldFNjaGVtYSxcbiAgdmFsaWRhdGUsXG4gIGdldFNjaGVtYSxcbiAgZmxhdHRlbjogZmxhdHRlblNjaGVtYSxcbiAgZ2V0RGVmYXVsdHM6IGdldERlZmF1bHRzRm9yU2NoZW1hLFxuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbixcbn0gPSBhcHBpdW1TY2hlbWE7XG5leHBvcnQgY29uc3Qge2lzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb259ID0gQXBwaXVtU2NoZW1hO1xuXG4vKipcbiAqIEFwcGl1bSBvbmx5IHN1cHBvcnRzIHNjaGVtYXMgdGhhdCBhcmUgcGxhaW4gb2JqZWN0czsgbm90IGFycmF5cy5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FqdicpLlNjaGVtYU9iamVjdCAmIHtba2V5OiBudW1iZXJdOiBuZXZlcn19IFNjaGVtYU9iamVjdFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7e3NjaGVtYTogU2NoZW1hT2JqZWN0LCBhcmdTcGVjOiBBcmdTcGVjfVtdfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwiZmlsZSI6ImxpYi9zY2hlbWEvc2NoZW1hLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=