@decaf-ts/utils 0.2.12 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +403 -12
  3. package/bin/build-scripts.cjs +236 -52
  4. package/bin/tag-release.cjs +168 -47
  5. package/bin/update-scripts.cjs +207 -47
  6. package/dist/utils.cjs +364 -70
  7. package/dist/utils.esm.cjs +364 -70
  8. package/lib/cli/command.cjs +2 -2
  9. package/lib/cli/command.d.ts +1 -1
  10. package/lib/cli/commands/build-scripts.cjs +8 -6
  11. package/lib/cli/constants.cjs +3 -1
  12. package/lib/cli/constants.d.ts +2 -0
  13. package/lib/cli/types.cjs +1 -1
  14. package/lib/cli/types.d.ts +2 -0
  15. package/lib/esm/bin/build-scripts.js +2 -2
  16. package/lib/esm/bin/tag-release.js +2 -2
  17. package/lib/esm/bin/update-scripts.js +2 -2
  18. package/lib/esm/cli/command.d.ts +1 -1
  19. package/lib/esm/cli/command.js +7 -7
  20. package/lib/esm/cli/commands/build-scripts.js +11 -9
  21. package/lib/esm/cli/commands/index.js +4 -4
  22. package/lib/esm/cli/commands/tag-release.js +5 -5
  23. package/lib/esm/cli/commands/update-scripts.js +4 -4
  24. package/lib/esm/cli/constants.d.ts +2 -0
  25. package/lib/esm/cli/constants.js +3 -1
  26. package/lib/esm/cli/index.js +4 -4
  27. package/lib/esm/cli/types.d.ts +2 -0
  28. package/lib/esm/cli/types.js +1 -1
  29. package/lib/esm/index.d.ts +4 -4
  30. package/lib/esm/index.js +10 -10
  31. package/lib/esm/input/index.js +3 -3
  32. package/lib/esm/input/input.d.ts +65 -19
  33. package/lib/esm/input/input.js +61 -22
  34. package/lib/esm/input/types.d.ts +7 -7
  35. package/lib/esm/input/types.js +1 -1
  36. package/lib/esm/output/common.d.ts +2 -0
  37. package/lib/esm/output/common.js +4 -1
  38. package/lib/esm/output/index.js +2 -2
  39. package/lib/esm/utils/constants.d.ts +12 -6
  40. package/lib/esm/utils/constants.js +13 -7
  41. package/lib/esm/utils/environment.d.ts +13 -0
  42. package/lib/esm/utils/environment.js +16 -3
  43. package/lib/esm/utils/fs.d.ts +111 -5
  44. package/lib/esm/utils/fs.js +114 -8
  45. package/lib/esm/utils/http.d.ts +1 -1
  46. package/lib/esm/utils/http.js +2 -2
  47. package/lib/esm/utils/index.js +8 -8
  48. package/lib/esm/utils/md.d.ts +15 -15
  49. package/lib/esm/utils/md.js +1 -1
  50. package/lib/esm/utils/tests.d.ts +26 -3
  51. package/lib/esm/utils/tests.js +40 -2
  52. package/lib/esm/utils/text.d.ts +33 -7
  53. package/lib/esm/utils/text.js +34 -8
  54. package/lib/esm/utils/timeout.d.ts +11 -0
  55. package/lib/esm/utils/timeout.js +12 -1
  56. package/lib/esm/utils/types.d.ts +33 -2
  57. package/lib/esm/utils/types.js +1 -1
  58. package/lib/esm/utils/utils.d.ts +44 -2
  59. package/lib/esm/utils/utils.js +23 -5
  60. package/lib/esm/utils/web.d.ts +3 -2
  61. package/lib/esm/utils/web.js +4 -3
  62. package/lib/esm/writers/OutputWriter.d.ts +2 -2
  63. package/lib/esm/writers/OutputWriter.js +1 -1
  64. package/lib/esm/writers/RegexpOutputWriter.d.ts +51 -10
  65. package/lib/esm/writers/RegexpOutputWriter.js +53 -12
  66. package/lib/esm/writers/StandardOutputWriter.d.ts +49 -10
  67. package/lib/esm/writers/StandardOutputWriter.js +51 -12
  68. package/lib/esm/writers/index.js +5 -5
  69. package/lib/esm/writers/types.d.ts +2 -2
  70. package/lib/esm/writers/types.js +1 -1
  71. package/lib/index.cjs +5 -5
  72. package/lib/index.d.ts +4 -4
  73. package/lib/input/input.cjs +61 -22
  74. package/lib/input/input.d.ts +65 -19
  75. package/lib/input/types.cjs +1 -1
  76. package/lib/input/types.d.ts +7 -7
  77. package/lib/output/common.cjs +4 -1
  78. package/lib/output/common.d.ts +2 -0
  79. package/lib/utils/constants.cjs +13 -7
  80. package/lib/utils/constants.d.ts +12 -6
  81. package/lib/utils/environment.cjs +14 -1
  82. package/lib/utils/environment.d.ts +13 -0
  83. package/lib/utils/fs.cjs +112 -6
  84. package/lib/utils/fs.d.ts +111 -5
  85. package/lib/utils/http.cjs +2 -2
  86. package/lib/utils/http.d.ts +1 -1
  87. package/lib/utils/md.cjs +1 -1
  88. package/lib/utils/md.d.ts +15 -15
  89. package/lib/utils/tests.cjs +39 -1
  90. package/lib/utils/tests.d.ts +26 -3
  91. package/lib/utils/text.cjs +34 -8
  92. package/lib/utils/text.d.ts +33 -7
  93. package/lib/utils/timeout.cjs +12 -1
  94. package/lib/utils/timeout.d.ts +11 -0
  95. package/lib/utils/types.cjs +1 -1
  96. package/lib/utils/types.d.ts +33 -2
  97. package/lib/utils/utils.cjs +21 -3
  98. package/lib/utils/utils.d.ts +44 -2
  99. package/lib/utils/web.cjs +4 -3
  100. package/lib/utils/web.d.ts +3 -2
  101. package/lib/writers/OutputWriter.cjs +1 -1
  102. package/lib/writers/OutputWriter.d.ts +2 -2
  103. package/lib/writers/RegexpOutputWriter.cjs +52 -11
  104. package/lib/writers/RegexpOutputWriter.d.ts +51 -10
  105. package/lib/writers/StandardOutputWriter.cjs +50 -11
  106. package/lib/writers/StandardOutputWriter.d.ts +49 -10
  107. package/lib/writers/types.cjs +1 -1
  108. package/lib/writers/types.d.ts +2 -2
  109. package/package.json +2 -2
@@ -13,15 +13,52 @@ import { Logging } from "@decaf-ts/logging";
13
13
  * @param name - The name of the prompt, used as the key in the returned answers object.
14
14
  *
15
15
  * @class
16
+ * @example
17
+ * ```typescript
18
+ * import { UserInput } from '@decaf-ts/utils';
19
+ *
20
+ * // Create a simple text input
21
+ * const nameInput = new UserInput('name')
22
+ * .setMessage('What is your name?')
23
+ * .setInitial('User');
24
+ *
25
+ * // Create a number input with validation
26
+ * const ageInput = new UserInput('age')
27
+ * .setType('number')
28
+ * .setMessage('How old are you?')
29
+ * .setMin(0)
30
+ * .setMax(120);
31
+ *
32
+ * // Ask for input and process the results
33
+ * async function getUserInfo() {
34
+ * const answers = await UserInput.ask([nameInput, ageInput]);
35
+ * console.log(`Hello ${answers.name}, you are ${answers.age} years old.`);
36
+ * }
37
+ *
38
+ * getUserInfo();
39
+ * ```
40
+ *
41
+ * @mermaid
42
+ * sequenceDiagram
43
+ * participant Client
44
+ * participant UserInput
45
+ * participant PromptLibrary
46
+ *
47
+ * Client->>UserInput: new UserInput(name)
48
+ * Client->>UserInput: setMessage(message)
49
+ * Client->>UserInput: setType(type)
50
+ * Client->>UserInput: setInitial(initial)
51
+ * Client->>UserInput: Other configuration methods
52
+ *
53
+ * Client->>UserInput: ask()
54
+ * UserInput->>PromptLibrary: prompts(question)
55
+ * PromptLibrary->>Client: Display prompt
56
+ * Client->>PromptLibrary: User provides input
57
+ * PromptLibrary->>UserInput: Return answers
58
+ * UserInput->>Client: Return processed answers
16
59
  */
17
60
  export class UserInput {
18
61
  static { this.logger = Logging.for(UserInput); }
19
- /**
20
- * @description Creates a new UserInput instance.
21
- * @summary Initializes a new UserInput object with the given name.
22
- *
23
- * @param name - The name of the prompt.
24
- */
25
62
  constructor(name) {
26
63
  /**
27
64
  * @description The type of the prompt.
@@ -114,18 +151,6 @@ export class UserInput {
114
151
  this.onState = value;
115
152
  return this;
116
153
  }
117
- /**
118
- * @description Sets the onRender callback of the prompt.
119
- * @summary Configures a function to be called when the prompt is rendered.
120
- *
121
- * @param value - The onRender callback function.
122
- * @returns This UserInput instance for method chaining.
123
- */
124
- setOnRender(value) {
125
- UserInput.logger.verbose(`Setting onRender callback`);
126
- this.onRender = value;
127
- return this;
128
- }
129
154
  /**
130
155
  * @description Sets the minimum value for number inputs.
131
156
  * @summary Configures the lowest number the user can input.
@@ -234,6 +259,13 @@ export class UserInput {
234
259
  this.inactive = value;
235
260
  return this;
236
261
  }
262
+ /**
263
+ * @description Sets the choices for select, multiselect, or autocomplete inputs.
264
+ * @summary Configures the available options that the user can select from in choice-based prompts.
265
+ *
266
+ * @param value - The array of choices or a function to determine the choices.
267
+ * @returns This UserInput instance for method chaining.
268
+ */
237
269
  setChoices(value) {
238
270
  UserInput.logger.verbose(`Setting choices: ${JSON.stringify(value)}`);
239
271
  this.choices = value;
@@ -263,6 +295,13 @@ export class UserInput {
263
295
  this.warn = value;
264
296
  return this;
265
297
  }
298
+ /**
299
+ * @description Sets the suggestion function for autocomplete inputs.
300
+ * @summary Configures a function that provides suggestions based on the user's input and available choices.
301
+ *
302
+ * @param value - A function that takes the current input and available choices and returns a Promise resolving to suggestions.
303
+ * @returns This UserInput instance for method chaining.
304
+ */
266
305
  setSuggest(value) {
267
306
  UserInput.logger.verbose(`Setting suggest function`);
268
307
  this.suggest = value;
@@ -424,8 +463,8 @@ export class UserInput {
424
463
  * @template R - The type of the expected result.
425
464
  * @param input - The UserInput instance to use for prompting.
426
465
  * @param test - A function to validate the user's input.
466
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
427
467
  * @param limit - The maximum number of attempts allowed (default is 1).
428
- * @param defaultConfirmation
429
468
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
430
469
  *
431
470
  * @mermaid
@@ -492,7 +531,7 @@ export class UserInput {
492
531
  * @param test - A function to validate the user's input.
493
532
  * @param mask - The character used to mask the input (optional, for password-like inputs).
494
533
  * @param initial - The initial value presented to the user (optional).
495
- * @param defaultConfirmation
534
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
496
535
  * @param limit - The maximum number of attempts allowed (default is -1, meaning unlimited).
497
536
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
498
537
  */
@@ -516,7 +555,7 @@ export class UserInput {
516
555
  * @param min - The minimum allowed value (optional).
517
556
  * @param max - The maximum allowed value (optional).
518
557
  * @param initial - The initial value presented to the user (optional).
519
- * @param defaultConfirmation
558
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
520
559
  * @param limit - The maximum number of attempts allowed (default is -1, meaning unlimited).
521
560
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
522
561
  */
@@ -566,4 +605,4 @@ export class UserInput {
566
605
  }
567
606
  }
568
607
  }
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5wdXQvaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBR2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sU0FBUzthQUNJLFdBQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxBQUF6QixDQUEwQjtJQXNKeEQ7Ozs7O09BS0c7SUFDSCxZQUFZLElBQW9CO1FBM0poQzs7O1dBR0c7UUFDSCxTQUFJLEdBQTJELE1BQU0sQ0FBQztRQXdKcEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxJQUE0RDtRQUNsRSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxVQUFVLENBQUMsS0FBc0M7UUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUNSLEtBR2E7UUFFYixTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFH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WUFDSCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsS0FBSyxDQUNQLG1DQUFtQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQ2pJLENBQUM7WUFDRixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IEtsZXVyLCBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnLCBQYXJzZUFyZ3NSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgdXNlciBpbnB1dCBwcm9tcHQgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmbGV4aWJsZSBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB1c2VyIGlucHV0IHByb21wdHMuXG4gKiBJdCBpbXBsZW1lbnRzIHRoZSBQcm9tcHRPYmplY3QgaW50ZXJmYWNlIGZyb20gdGhlICdwcm9tcHRzJyBsaWJyYXJ5IGFuZCBvZmZlcnMgbWV0aG9kcyB0byBzZXRcbiAqIHZhcmlvdXMgcHJvcGVydGllcyBvZiB0aGUgcHJvbXB0LiBUaGUgY2xhc3MgYWxzbyBpbmNsdWRlcyBzdGF0aWMgbWV0aG9kcyBmb3IgY29tbW9uIGlucHV0IHNjZW5hcmlvc1xuICogYW5kIGFyZ3VtZW50IHBhcnNpbmcuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgVXNlcklucHV0PFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGltcGxlbWVudHMgUHJvbXB0T2JqZWN0PFI+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2luZy5mb3IoVXNlcklucHV0KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBpbnB1dCBtZXRob2QgKGUuZy4sIHRleHQsIG51bWJlciwgY29uZmlybSkuXG4gICAqL1xuICB0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4gPSBcInRleHRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqL1xuICBuYW1lOiBWYWx1ZU9yRnVuYzxSPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHN1bW1hcnkgVGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIG1lc3NhZ2U/OiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdGlhbD86XG4gICAgfCBJbml0aWFsUmV0dXJuVmFsdWVcbiAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3R5bGU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmb3JtYXQgZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHVzZXIncyBpbnB1dCBiZWZvcmUgaXQncyByZXR1cm5lZC5cbiAgICovXG4gIGZvcm1hdD86IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGlucHV0LlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICB2YWxpZGF0ZT86XG4gICAgfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBzdHJpbmcgfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICovXG4gIG9uU3RhdGU/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIG9uUmVuZGVyPzogKChrbGV1cjogS2xldXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBsb3dlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICovXG4gIG1pbj86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBoaWdoZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtYXg/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBJZiB0cnVlLCBhbGxvd3MgZGVjaW1hbCBudW1iZXJzLlxuICAgKi9cbiAgZmxvYXQ/OiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0byBmb3IgZmxvYXQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBwcmVjaXNpb24gb2YgZmxvYXQgaW5wdXRzLlxuICAgKi9cbiAgcm91bmQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0ZXAgc2l6ZSB3aGVuIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZyB0aGUgbnVtYmVyLlxuICAgKi9cbiAgaW5jcmVtZW50PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGxpc3QgaXRlbXMuXG4gICAqL1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqL1xuICBpbmFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBVc2VySW5wdXQgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IFVzZXJJbnB1dCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZTogVmFsdWVPckZ1bmM8Uj4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IG1ldGhvZCBmb3IgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VHlwZSh0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4pOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdHlwZSB0bzogJHt0eXBlfWApO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1lc3NhZ2Ugb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcXVlc3Rpb24gb3IgaW5zdHJ1Y3Rpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNZXNzYWdlKHZhbHVlOiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1lc3NhZ2UgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgZGVmYXVsdCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SW5pdGlhbChcbiAgICB2YWx1ZTpcbiAgICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgICAgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluaXRpYWwgdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbml0aWFsID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3R5bGUgdG8gYmUgYXBwbGllZC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0eWxlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnN0eWxlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZvcm1hdCBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBmb3JtYXQgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRGb3JtYXQodmFsdWU6IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZm9ybWF0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5mb3JtYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRWYWxpZGF0ZShcbiAgICB2YWx1ZTpcbiAgICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB2YWxpZGF0ZSBmdW5jdGlvbmApO1xuICAgIHRoaXMudmFsaWRhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25TdGF0ZSBjYWxsYmFjayBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRPblN0YXRlKHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG9uU3RhdGUgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uU3RhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25SZW5kZXIgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9tcHQgaXMgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblJlbmRlciBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE9uUmVuZGVyKHZhbHVlOiAoKGtsZXVyOiBLbGV1cikgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgb25SZW5kZXIgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uUmVuZGVyID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0Q2hvaWNlcyhcbiAgICB2YWx1ZTogQ2hvaWNlW10gfCBQcmV2Q2FsbGVyPFIsIENob2ljZVtdIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBjaG9pY2VzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB0aGlzLmNob2ljZXMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaGludCB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SGludCh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaGludCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmhpbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgd2FybmluZyB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHdhcm5pbmcgdGV4dC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFdhcm4odmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHdhcm4gdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy53YXJuID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTdWdnZXN0KFxuICAgIHZhbHVlOiAoKGlucHV0OiBhbnksIGNob2ljZXM6IENob2ljZVtdKSA9PiBQcm9taXNlPGFueT4pIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdWdnZXN0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5zdWdnZXN0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGxpbWl0IGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gbGlzdC10eXBlIHByb21wdHMuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQsIG9yIGEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldExpbWl0KHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBsaW1pdCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmxpbWl0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1hc2sgZm9yIHBhc3N3b3JkIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0IGluIHBhc3N3b3JkLXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWFzayh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWFzayB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1hc2sgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3Rkb3V0IHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgb3V0cHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQgZm9yIGRpc3BsYXlpbmcgbWVzc2FnZXMgYW5kIHJlc3VsdHMuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRvdXQuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0ZG91dCh2YWx1ZTogV3JpdGFibGUgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3Rkb3V0IHN0cmVhbWApO1xuICAgIHRoaXMuc3Rkb3V0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRpbiBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQgZm9yIHJlY2VpdmluZyB1c2VyIGlucHV0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGJlIHVzZWQgYXMgc3RkaW4uXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0ZGluKHZhbHVlOiBSZWFkYWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIHRoaXMuc3RkaW4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgaW5wdXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgVXNlcklucHV0IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgYW5kIHJldHVybnMgdGhlaXIgcmVzcG9uc2UgYXMgYSBzaW5nbGUgdmFsdWUuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgYXN5bmMgYXNrKCkge1xuICAgIHJldHVybiAoYXdhaXQgVXNlcklucHV0LmFzayh0aGlzKSlbdGhpcy5uYW1lIGFzIGtleW9mIEFuc3dlcnM8Uj5dO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIG9uZSBvciBtb3JlIHF1ZXN0aW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgVXNlcklucHV0IGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHdpdGggb25lIG9yIG1vcmUgcXVlc3Rpb25zIGFuZCByZXR1cm5zIHRoZWlyIGFuc3dlcnMgYXMgYW4gb2JqZWN0LlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gQSBzaW5nbGUgVXNlcklucHV0IGluc3RhbmNlIG9yIGFuIGFycmF5IG9mIFVzZXJJbnB1dCBpbnN0YW5jZXMuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVzZXIncyBhbnN3ZXJzLlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIGFzayBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHByb21wdHMgbGlicmFyeVxuICAgKiAgIEEtPj5QOiBDYWxsIHByb21wdHMgd2l0aCBxdWVzdGlvbihzKVxuICAgKiAgIFAtPj5VOiBEaXNwbGF5IHByb21wdChzKVxuICAgKiAgIFUtPj5QOiBQcm92aWRlIGlucHV0XG4gICAqICAgUC0+PkE6IFJldHVybiBhbnN3ZXJzXG4gICAqICAgQS0+PkE6IFByb2Nlc3MgYW5zd2Vyc1xuICAgKiAgIEEtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2s8UiBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXG4gICAgcXVlc3Rpb246IFVzZXJJbnB1dDxSPiB8IFVzZXJJbnB1dDxSPltdXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocXVlc3Rpb24pKSB7XG4gICAgICBxdWVzdGlvbiA9IFtxdWVzdGlvbl07XG4gICAgfVxuICAgIGxldCBhbnN3ZXJzOiBBbnN3ZXJzPFI+O1xuICAgIHRyeSB7XG4gICAgICBsb2cudmVyYm9zZShcbiAgICAgICAgYEFza2luZyBxdWVzdGlvbnM6ICR7cXVlc3Rpb24ubWFwKChxKSA9PiBxLm5hbWUpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgYW5zd2VycyA9IGF3YWl0IHByb21wdHMocXVlc3Rpb24pO1xuICAgICAgbG9nLnZlcmJvc2UoYFJlY2VpdmVkIGFuc3dlcnM6ICR7SlNPTi5zdHJpbmdpZnkoYW5zd2VycywgbnVsbCwgMil9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgZ2V0dGluZyBpbnB1dDogJHtlcnJvcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgbnVtYmVyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIGEgbnVtYmVyLCB3aXRoIG9wdGlvbmFsIG1pbmltdW0sIG1heGltdW0sIGFuZCBpbml0aWFsIHZhbHVlcy5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlciBlbnRlcmVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza051bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBtaW4/OiBudW1iZXIsXG4gICAgbWF4PzogbnVtYmVyLFxuICAgIGluaXRpYWw/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza051bWJlcik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIG51bWJlciBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1pbjogJHttaW59LCBtYXg6ICR7bWF4fSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIHRleHQgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgdGV4dCwgd2l0aCBvcHRpb25hbCBtYXNraW5nIGFuZCBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1hc2sgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQgKG9wdGlvbmFsLCBmb3IgcGFzc3dvcmQtbGlrZSBpbnB1dHMpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB0ZXh0IGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIHRleHQgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKS5zZXRNZXNzYWdlKHF1ZXN0aW9uKTtcblxuICAgIGlmIChtYXNrKSB1c2VySW5wdXQuc2V0TWFzayhtYXNrKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwic3RyaW5nXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgY29uZmlybWF0aW9uICh5ZXMvbm8pLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHdpdGggYSB5ZXMvbm8gcXVlc3Rpb24gYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgdXNlcidzIGFuc3dlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tDb25maXJtYXRpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgaW5pdGlhbD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tDb25maXJtYXRpb24pO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyBjb25maXJtYXRpb24gaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcImNvbmZpcm1cIik7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgIT09IFwidW5kZWZpbmVkXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdC5cbiAgICogQHBhcmFtIGlucHV0IC0gVGhlIFVzZXJJbnB1dCBpbnN0YW5jZSB0byB1c2UgZm9yIHByb21wdGluZy5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIDEpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvblxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEkgYXMgaW5zaXN0IG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgdGVzdCBmdW5jdGlvblxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgYXNrQ29uZmlybWF0aW9uIG1ldGhvZFxuICAgKiAgIGxvb3AgVW50aWwgdmFsaWQgaW5wdXQgb3IgbGltaXQgcmVhY2hlZFxuICAgKiAgICAgSS0+PkE6IENhbGwgYXNrIHdpdGggaW5wdXRcbiAgICogICAgIEEtPj5VOiBQcm9tcHQgdXNlclxuICAgKiAgICAgVS0+PkE6IFByb3ZpZGUgaW5wdXRcbiAgICogICAgIEEtPj5JOiBSZXR1cm4gcmVzdWx0XG4gICAqICAgICBJLT4+VDogVGVzdCByZXN1bHRcbiAgICogICAgIGFsdCBUZXN0IHBhc3Nlc1xuICAgKiAgICAgICBJLT4+QzogQXNrIGZvciBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+PlU6IENvbmZpcm0gaW5wdXRcbiAgICogICAgICAgVS0+PkM6IFByb3ZpZGUgY29uZmlybWF0aW9uXG4gICAqICAgICAgIEMtPj5JOiBSZXR1cm4gY29uZmlybWF0aW9uXG4gICAqICAgICAgIGFsdCBDb25maXJtZWRcbiAgICogICAgICAgICBJLS0+PkNhbGxlcjogUmV0dXJuIHZhbGlkIHJlc3VsdFxuICAgKiAgICAgICBlbHNlIE5vdCBjb25maXJtZWRcbiAgICogICAgICAgICBJLT4+STogQ29udGludWUgbG9vcFxuICAgKiAgICAgICBlbmRcbiAgICogICAgIGVsc2UgVGVzdCBmYWlsc1xuICAgKiAgICAgICBJLT4+STogQ29udGludWUgbG9vcFxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqICAgSS0tPj5DYWxsZXI6IFJldHVybiB1bmRlZmluZWQgaWYgbGltaXQgcmVhY2hlZFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdDxSPihcbiAgICBpbnB1dDogVXNlcklucHV0LFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uOiBib29sZWFuLFxuICAgIGxpbWl0ID0gMVxuICApOiBQcm9taXNlPFIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIG9uIGlucHV0OiAke2lucHV0Lm5hbWV9LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBjb25maXJtYXRpb246IGJvb2xlYW47XG4gICAgdHJ5IHtcbiAgICAgIGRvIHtcbiAgICAgICAgcmVzdWx0ID0gKGF3YWl0IFVzZXJJbnB1dC5hc2soaW5wdXQpKVtcbiAgICAgICAgICBpbnB1dC5uYW1lIGFzIGtleW9mIEFuc3dlcnM8c3RyaW5nPlxuICAgICAgICBdIGFzIHN0cmluZztcbiAgICAgICAgaWYgKCF0ZXN0KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgICBgJHtpbnB1dC5uYW1lfS1jb25maXJtYCxcbiAgICAgICAgICBgSXMgdGhlICR7aW5wdXQudHlwZX0gY29ycmVjdD9gLFxuICAgICAgICAgIGRlZmF1bHRDb25maXJtYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFjb25maXJtYXRpb24pIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gd2hpbGUgKHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIgJiYgbGltaXQgPiAxICYmIGNvdW50KysgPCBsaW1pdCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciB3aGlsZSBpbnNpc3Rpbmc6ICR7ZX1gKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIGxvZy5pbmZvKFwibm8gc2VsZWN0aW9uLi4uXCIpO1xuICAgIHJldHVybiByZXN1bHQgYXMgUiB8IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgdGV4dCBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCB0ZXh0IGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1hc2sgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQgKG9wdGlvbmFsLCBmb3IgcGFzc3dvcmQtbGlrZSBpbnB1dHMpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvblxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAtMSwgbWVhbmluZyB1bmxpbWl0ZWQpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0Rm9yVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4gICAgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGluaXRpYWw/OiBzdHJpbmcsXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbiA9IGZhbHNlLFxuICAgIGxpbWl0ID0gLTFcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdEZvclRleHQpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgbWFzazogJHttYXNrfSwgaW5pdGlhbDogJHtpbml0aWFsfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKS5zZXRNZXNzYWdlKHF1ZXN0aW9uKTtcblxuICAgIGlmIChtYXNrKSB1c2VySW5wdXQuc2V0TWFzayhtYXNrKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwic3RyaW5nXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnNpc3QoXG4gICAgICB1c2VySW5wdXQsXG4gICAgICB0ZXN0IGFzIChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICAgIGRlZmF1bHRDb25maXJtYXRpb24sXG4gICAgICBsaW1pdFxuICAgICkpIGFzIHN0cmluZztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgbnVtYmVyIGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIG51bWJlciBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JOdW1iZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgdGVzdDogKHJlczogbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlcixcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3RpbmcgZm9yIG51bWJlciBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwibnVtYmVyXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNaW4obWluKTtcblxuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWF4KG1heCk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnNpc3QoXG4gICAgICB1c2VySW5wdXQsXG4gICAgICB0ZXN0IGFzIChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICAgIGRlZmF1bHRDb25maXJtYXRpb24sXG4gICAgICBsaW1pdFxuICAgICkpIGFzIG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFVzZXMgTm9kZS5qcydzIHV0aWwucGFyc2VBcmdzIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYW5kIHJldHVybiB0aGUgcmVzdWx0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcGFyc2luZyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBhcmd1bWVudHMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBwYXJzZUFyZ3MgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyB1dGlsLnBhcnNlQXJnc1xuICAgKiAgIEMtPj5QOiBDYWxsIHdpdGggb3B0aW9uc1xuICAgKiAgIFAtPj5QOiBQcmVwYXJlIGFyZ3Mgb2JqZWN0XG4gICAqICAgUC0+PlU6IENhbGwgcGFyc2VBcmdzIHdpdGggcHJlcGFyZWQgYXJnc1xuICAgKiAgIFUtPj5QOiBSZXR1cm4gcGFyc2VkIHJlc3VsdFxuICAgKiAgIFAtLT4+QzogUmV0dXJuIFBhcnNlQXJnc1Jlc3VsdFxuICAgKi9cbiAgc3RhdGljIHBhcnNlQXJncyhvcHRpb25zOiBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnKTogUGFyc2VBcmdzUmVzdWx0IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLnBhcnNlQXJncyk7XG4gICAgY29uc3QgYXJnczogUGFyc2VBcmdzQ29uZmlnID0ge1xuICAgICAgYXJnczogcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICB9O1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2luZyBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncywgbnVsbCwgMil9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXJzZUFyZ3MoYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoYXJncywgbnVsbCwgMil9XFxuIHwgb3B0aW9uc1xcbiR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucywgbnVsbCwgMil9XFxuIHwgJHtlcnJvcn1gXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBwYXJzaW5nIGFyZ3VtZW50czogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
608
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5wdXQvaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBR2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQU0sT0FBTyxTQUFTO2FBQ0ksV0FBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEFBQXpCLENBQTBCO0lBd0p4RCxZQUFZLElBQW9CO1FBdkpoQzs7O1dBR0c7UUFDSCxTQUFJLEdBQTJELE1BQU0sQ0FBQztRQW9KcEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxJQUE0RDtRQUNsRSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxVQUFVLENBQUMsS0FBc0M7UUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUNSLEtBR2E7UUFFYixTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUMs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LG1DQUFtQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQ2pJLENBQUM7WUFDRixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IFBhcnNlQXJnc09wdGlvbnNDb25maWcsIFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB1c2VyIGlucHV0IHByb21wdCB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHVzZXIgaW5wdXQgcHJvbXB0cy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIFByb21wdE9iamVjdCBpbnRlcmZhY2UgZnJvbSB0aGUgJ3Byb21wdHMnIGxpYnJhcnkgYW5kIG9mZmVycyBtZXRob2RzIHRvIHNldFxuICogdmFyaW91cyBwcm9wZXJ0aWVzIG9mIHRoZSBwcm9tcHQuIFRoZSBjbGFzcyBhbHNvIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIGZvciBjb21tb24gaW5wdXQgc2NlbmFyaW9zXG4gKiBhbmQgYXJndW1lbnQgcGFyc2luZy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgdGV4dCBpbnB1dFxuICogY29uc3QgbmFtZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnbmFtZScpXG4gKiAgIC5zZXRNZXNzYWdlKCdXaGF0IGlzIHlvdXIgbmFtZT8nKVxuICogICAuc2V0SW5pdGlhbCgnVXNlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIG51bWJlciBpbnB1dCB3aXRoIHZhbGlkYXRpb25cbiAqIGNvbnN0IGFnZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnYWdlJylcbiAqICAgLnNldFR5cGUoJ251bWJlcicpXG4gKiAgIC5zZXRNZXNzYWdlKCdIb3cgb2xkIGFyZSB5b3U/JylcbiAqICAgLnNldE1pbigwKVxuICogICAuc2V0TWF4KDEyMCk7XG4gKlxuICogLy8gQXNrIGZvciBpbnB1dCBhbmQgcHJvY2VzcyB0aGUgcmVzdWx0c1xuICogYXN5bmMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKSB7XG4gKiAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBVc2VySW5wdXQuYXNrKFtuYW1lSW5wdXQsIGFnZUlucHV0XSk7XG4gKiAgIGNvbnNvbGUubG9nKGBIZWxsbyAke2Fuc3dlcnMubmFtZX0sIHlvdSBhcmUgJHthbnN3ZXJzLmFnZX0geWVhcnMgb2xkLmApO1xuICogfVxuICpcbiAqIGdldFVzZXJJbmZvKCk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAqICAgcGFydGljaXBhbnQgUHJvbXB0TGlicmFyeVxuICpcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBuZXcgVXNlcklucHV0KG5hbWUpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0TWVzc2FnZShtZXNzYWdlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldFR5cGUodHlwZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRJbml0aWFsKGluaXRpYWwpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogT3RoZXIgY29uZmlndXJhdGlvbiBtZXRob2RzXG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IGFzaygpXG4gKiAgIFVzZXJJbnB1dC0+PlByb21wdExpYnJhcnk6IHByb21wdHMocXVlc3Rpb24pXG4gKiAgIFByb21wdExpYnJhcnktPj5DbGllbnQ6IERpc3BsYXkgcHJvbXB0XG4gKiAgIENsaWVudC0+PlByb21wdExpYnJhcnk6IFVzZXIgcHJvdmlkZXMgaW5wdXRcbiAqICAgUHJvbXB0TGlicmFyeS0+PlVzZXJJbnB1dDogUmV0dXJuIGFuc3dlcnNcbiAqICAgVXNlcklucHV0LT4+Q2xpZW50OiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJJbnB1dDxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBpbXBsZW1lbnRzIFByb21wdE9iamVjdDxSPiB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFVzZXJJbnB1dCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgaW5wdXQgbWV0aG9kIChlLmcuLCB0ZXh0LCBudW1iZXIsIGNvbmZpcm0pLlxuICAgKi9cbiAgdHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+ID0gXCJ0ZXh0XCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBVc2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKi9cbiAgbmFtZTogVmFsdWVPckZ1bmM8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IFRoZSBxdWVzdGlvbiBvciBpbnN0cnVjdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBtZXNzYWdlPzogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBkZWZhdWx0IHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXRpYWw/OlxuICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICovXG4gIHN0eWxlPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZm9ybWF0IGZ1bmN0aW9uIGZvciB0aGUgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqL1xuICBmb3JtYXQ/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgdmFsaWRhdGU/OlxuICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqL1xuICBvblN0YXRlPzogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtaW4/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKi9cbiAgbWF4PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcyBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgSWYgdHJ1ZSwgYWxsb3dzIGRlY2ltYWwgbnVtYmVycy5cbiAgICovXG4gIGZsb2F0PzogYm9vbGVhbiB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICovXG4gIHJvdW5kPzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGd1aWRhbmNlIHByb3ZpZGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmNyZW1lbnQgdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICovXG4gIGluY3JlbWVudD86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlcGFyYXRvciBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uXG4gICAqL1xuICBhY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdHlsZSBhcHBsaWVkIHRvIG5vbi1zZWxlY3RlZCBvcHRpb25zLlxuICAgKi9cbiAgaW5hY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUgY2hvaWNlcyBmb3Igc2VsZWN0LCBtdWx0aXNlbGVjdCwgb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICovXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IFZhbHVlT3JGdW5jPFI+KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBtZXRob2QgZm9yIHRoZSBwcm9tcHQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFR5cGUodHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+KTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHR5cGUgdG86ICR7dHlwZX1gKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWVzc2FnZSh2YWx1ZTogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtZXNzYWdlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluaXRpYWwoXG4gICAgdmFsdWU6XG4gICAgICB8IEluaXRpYWxSZXR1cm5WYWx1ZVxuICAgICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbml0aWFsIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5pdGlhbCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0eWxlIHRvIGJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdHlsZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zdHlsZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBmb3JtYXQgZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgdXNlcidzIGlucHV0IGJlZm9yZSBpdCdzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZm9ybWF0IGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0Rm9ybWF0KHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZvcm1hdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuZm9ybWF0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VmFsaWRhdGUoXG4gICAgdmFsdWU6XG4gICAgICB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IHN0cmluZyB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4+XG4gICAgICB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdmFsaWRhdGUgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG9uU3RhdGUgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0T25TdGF0ZSh2YWx1ZTogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBvblN0YXRlIGNhbGxiYWNrYCk7XG4gICAgdGhpcy5vblN0YXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNob2ljZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGNob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHRoaXMuY2hvaWNlcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBoaW50IHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRIaW50KHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBoaW50IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaGludCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgd2FybmluZyB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0V2Fybih2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgd2FybiB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLndhcm4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3VnZ2VzdGlvbiBmdW5jdGlvbiBmb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIHVzZXIncyBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgY3VycmVudCBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIHJlc29sdmluZyB0byBzdWdnZXN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN1Z2dlc3QoXG4gICAgdmFsdWU6ICgoaW5wdXQ6IGFueSwgY2hvaWNlczogQ2hvaWNlW10pID0+IFByb21pc2U8YW55PikgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN1Z2dlc3QgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnN1Z2dlc3QgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbGltaXQgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiBsaXN0LXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TGltaXQodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGxpbWl0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubGltaXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQgaW4gcGFzc3dvcmQtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0LCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXNrKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtYXNrIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWFzayA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRvdXQgc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgZGlzcGxheWluZyBtZXNzYWdlcyBhbmQgcmVzdWx0cy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZG91dC5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3Rkb3V0KHZhbHVlOiBXcml0YWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdGRvdXQgc3RyZWFtYCk7XG4gICAgdGhpcy5zdGRvdXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgcmVjZWl2aW5nIHVzZXIgaW5wdXQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRpbi5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3RkaW4odmFsdWU6IFJlYWRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5zdGRpbiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBpbnB1dCBiYXNlZCBvbiB0aGUgY3VycmVudCBVc2VySW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciBhbmQgcmV0dXJucyB0aGVpciByZXNwb25zZSBhcyBhIHNpbmdsZSB2YWx1ZS5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBhc3luYyBhc2soKSB7XG4gICAgcmV0dXJuIChhd2FpdCBVc2VySW5wdXQuYXNrKHRoaXMpKVt0aGlzLm5hbWUgYXMga2V5b2YgQW5zd2VyczxSPl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgb25lIG9yIG1vcmUgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBVc2VySW5wdXQgY29uZmlndXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYW5kIHJldHVybnMgdGhlaXIgYW5zd2VycyBhcyBhbiBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBBIHNpbmdsZSBVc2VySW5wdXQgaW5zdGFuY2Ugb3IgYW4gYXJyYXkgb2YgVXNlcklucHV0IGluc3RhbmNlcy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdXNlcidzIGFuc3dlcnMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcHJvbXB0cyBsaWJyYXJ5XG4gICAqICAgQS0+PlA6IENhbGwgcHJvbXB0cyB3aXRoIHF1ZXN0aW9uKHMpXG4gICAqICAgUC0+PlU6IERpc3BsYXkgcHJvbXB0KHMpXG4gICAqICAgVS0+PlA6IFByb3ZpZGUgaW5wdXRcbiAgICogICBQLT4+QTogUmV0dXJuIGFuc3dlcnNcbiAgICogICBBLT4+QTogUHJvY2VzcyBhbnN3ZXJzXG4gICAqICAgQS0tPj5DYWxsZXI6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFzazxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcbiAgICBxdWVzdGlvbjogVXNlcklucHV0PFI+IHwgVXNlcklucHV0PFI+W11cbiAgKSB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2spO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWVzdGlvbikpIHtcbiAgICAgIHF1ZXN0aW9uID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gICAgbGV0IGFuc3dlcnM6IEFuc3dlcnM8Uj47XG4gICAgdHJ5IHtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgQXNraW5nIHF1ZXN0aW9uczogJHtxdWVzdGlvbi5tYXAoKHEpID0+IHEubmFtZSkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgcHJvbXB0cyhxdWVzdGlvbik7XG4gICAgICBsb2cudmVyYm9zZShgUmVjZWl2ZWQgYW5zd2VyczogJHtKU09OLnN0cmluZ2lmeShhbnN3ZXJzLCBudWxsLCAyKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBnZXR0aW5nIGlucHV0OiAke2Vycm9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBudW1iZXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBudW1iZXIsIHdpdGggb3B0aW9uYWwgbWluaW11bSwgbWF4aW11bSwgYW5kIGluaXRpYWwgdmFsdWVzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgdGV4dCBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciB0ZXh0LCB3aXRoIG9wdGlvbmFsIG1hc2tpbmcgYW5kIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBjb25maXJtYXRpb24gKHllcy9ubykuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBhIHllcy9ubyBxdWVzdGlvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza0NvbmZpcm1hdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBpbml0aWFsPzogYm9vbGVhblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza0NvbmZpcm1hdGlvbik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIGNvbmZpcm1hdGlvbiBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwiY29uZmlybVwiKTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCAhPT0gXCJ1bmRlZmluZWRcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0LlxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgVXNlcklucHV0IGluc3RhbmNlIHRvIHVzZSBmb3IgcHJvbXB0aW5nLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgMSkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBpbnNpc3QgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVCBhcyB0ZXN0IGZ1bmN0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBhc2tDb25maXJtYXRpb24gbWV0aG9kXG4gICAqICAgbG9vcCBVbnRpbCB2YWxpZCBpbnB1dCBvciBsaW1pdCByZWFjaGVkXG4gICAqICAgICBJLT4+QTogQ2FsbCBhc2sgd2l0aCBpbnB1dFxuICAgKiAgICAgQS0+PlU6IFByb21wdCB1c2VyXG4gICAqICAgICBVLT4+QTogUHJvdmlkZSBpbnB1dFxuICAgKiAgICAgQS0+Pkk6IFJldHVybiByZXN1bHRcbiAgICogICAgIEktPj5UOiBUZXN0IHJlc3VsdFxuICAgKiAgICAgYWx0IFRlc3QgcGFzc2VzXG4gICAqICAgICAgIEktPj5DOiBBc2sgZm9yIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+VTogQ29uZmlybSBpbnB1dFxuICAgKiAgICAgICBVLT4+QzogUHJvdmlkZSBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+Pkk6IFJldHVybiBjb25maXJtYXRpb25cbiAgICogICAgICAgYWx0IENvbmZpcm1lZFxuICAgKiAgICAgICAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdmFsaWQgcmVzdWx0XG4gICAqICAgICAgIGVsc2UgTm90IGNvbmZpcm1lZFxuICAgKiAgICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZWxzZSBUZXN0IGZhaWxzXG4gICAqICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICogICBJLS0+PkNhbGxlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBsaW1pdCByZWFjaGVkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0PFI+KFxuICAgIGlucHV0OiBVc2VySW5wdXQsXG4gICAgdGVzdDogKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb246IGJvb2xlYW4sXG4gICAgbGltaXQgPSAxXG4gICk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3Rpbmcgb24gaW5wdXQ6ICR7aW5wdXQubmFtZX0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgICB0cnkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSAoYXdhaXQgVXNlcklucHV0LmFzayhpbnB1dCkpW1xuICAgICAgICAgIGlucHV0Lm5hbWUgYXMga2V5b2YgQW5zd2VyczxzdHJpbmc+XG4gICAgICAgIF0gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoIXRlc3QocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICAgIGAke2lucHV0Lm5hbWV9LWNvbmZpcm1gLFxuICAgICAgICAgIGBJcyB0aGUgJHtpbnB1dC50eXBlfSBjb3JyZWN0P2AsXG4gICAgICAgICAgZGVmYXVsdENvbmZpcm1hdGlvblxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfSB3aGlsZSAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBsaW1pdCA+IDEgJiYgY291bnQrKyA8IGxpbWl0KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBsb2cuZXJyb3IoYEVycm9yIHdoaWxlIGluc2lzdGluZzogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikgbG9nLmluZm8oXCJubyBzZWxlY3Rpb24uLi5cIik7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSIHwgdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciB0ZXh0IGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIHRleHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uIC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb25maXJtYXRpb24gcHJvbXB0ICh0cnVlIGZvciB5ZXMsIGZhbHNlIGZvciBubykuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZyxcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgc3RyaW5nO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBudW1iZXIgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgbnVtYmVyIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvck51bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgVXNlcyBOb2RlLmpzJ3MgdXRpbC5wYXJzZUFyZ3MgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBwYXJzaW5nIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIGFyZ3VtZW50cy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHBhcnNlQXJncyBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIHV0aWwucGFyc2VBcmdzXG4gICAqICAgQy0+PlA6IENhbGwgd2l0aCBvcHRpb25zXG4gICAqICAgUC0+PlA6IFByZXBhcmUgYXJncyBvYmplY3RcbiAgICogICBQLT4+VTogQ2FsbCBwYXJzZUFyZ3Mgd2l0aCBwcmVwYXJlZCBhcmdzXG4gICAqICAgVS0+PlA6IFJldHVybiBwYXJzZWQgcmVzdWx0XG4gICAqICAgUC0tPj5DOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VBcmdzKG9wdGlvbnM6IFBhcnNlQXJnc09wdGlvbnNDb25maWcpOiBQYXJzZUFyZ3NSZXN1bHQge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMucGFyc2VBcmdzKTtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NDb25maWcgPSB7XG4gICAgICBhcmdzOiBwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH07XG4gICAgbG9nLmRlYnVnKGBQYXJzaW5nIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlQXJncyhhcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6XFxuJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1cXG4gfCBvcHRpb25zXFxuJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKX1cXG4gfCAke2Vycm9yfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -4,7 +4,7 @@
4
4
  * to apply color styling to text or chain multiple color operations.
5
5
  *
6
6
  * @interface Color
7
- * @memberOf module:@decaf-ts/utils
7
+ * @memberOf module:utils
8
8
  * */
9
9
  export interface Color {
10
10
  /**
@@ -25,7 +25,7 @@ export interface Color {
25
25
  * and text styles to strings in terminal output.
26
26
  *
27
27
  * @interface Kleur
28
- * @memberOf module:@decaf-ts/utils
28
+ * @memberOf module:utils
29
29
  */
30
30
  export interface Kleur {
31
31
  /** @description Applies black color to the text. */
@@ -89,7 +89,7 @@ export interface Kleur {
89
89
  * @property {boolean} [multiple] - Whether the option can be specified multiple times.
90
90
  * @property {string} [short] - The short (single-character) alias for the option.
91
91
  * @property {string | boolean | string[] | boolean[]} [default] - The default value(s) for the option.
92
- * @memberOf @decaf-ts/utils
92
+ * @memberOf module:utils
93
93
  */
94
94
  export interface ParseArgsOptionConfig {
95
95
  type: "string" | "boolean";
@@ -101,7 +101,7 @@ export interface ParseArgsOptionConfig {
101
101
  * @description Configuration for all command-line argument options.
102
102
  * @summary A mapping of long option names to their configurations.
103
103
  * @interface ParseArgsOptionsConfig
104
- * @memberOf @decaf-ts/utils
104
+ * @memberOf module:utils
105
105
  */
106
106
  export interface ParseArgsOptionsConfig {
107
107
  [longOption: string]: ParseArgsOptionConfig;
@@ -110,7 +110,7 @@ export interface ParseArgsOptionsConfig {
110
110
  * @description Represents a parsed command-line option token.
111
111
  * @summary Can be either an option with a value or an option without a value.
112
112
  * @typedef {Object} OptionToken
113
- * @memberOf @decaf-ts/utils
113
+ * @memberOf module:utils
114
114
  */
115
115
  export type OptionToken = {
116
116
  kind: "option";
@@ -131,7 +131,7 @@ export type OptionToken = {
131
131
  * @description Represents a parsed command-line token.
132
132
  * @summary Can be an option, a positional argument, or an option terminator.
133
133
  * @typedef {OptionToken | Object} Token
134
- * @memberOf @decaf-ts/utils
134
+ * @memberOf module:utils
135
135
  */
136
136
  export type Token = OptionToken | {
137
137
  kind: "positional";
@@ -148,7 +148,7 @@ export type Token = OptionToken | {
148
148
  * @property {string | boolean | string[] | boolean[] | undefined} values - Parsed option values.
149
149
  * @property {string[]} positionals - Positional arguments.
150
150
  * @property {Token[]} [tokens] - Parsed tokens (if requested).
151
- * @memberOf @decaf-ts/utils
151
+ * @memberOf module:utils
152
152
  */
153
153
  export type ParseArgsResult = {
154
154
  values: {
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5wdXQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBjb2xvciBmdW5jdGlvbiBpbiB0aGUgS2xldXIgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IFRoZSBDb2xvciBpbnRlcmZhY2UgZGVmaW5lcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzXG4gKiB0byBhcHBseSBjb2xvciBzdHlsaW5nIHRvIHRleHQgb3IgY2hhaW4gbXVsdGlwbGUgY29sb3Igb3BlcmF0aW9ucy5cbiAqXG4gKiBAaW50ZXJmYWNlIENvbG9yXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBkZWNhZi10cy91dGlsc1xuICogKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3Ige1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBnaXZlbiB0ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0geCAtIFRoZSB0ZXh0IG9yIG51bWJlciB0byBiZSBjb2xvcmVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb2xvcmVkIHRleHQuXG4gICAqL1xuICAoeDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWxsb3dzIGNoYWluaW5nIG9mIG11bHRpcGxlIGNvbG9yIG9wZXJhdGlvbnMuXG4gICAqIEByZXR1cm4ge0tsZXVyfSBUaGUgS2xldXIgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gICgpOiBLbGV1cjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyB0aGUgbWFpbiBLbGV1ciBpbnRlcmZhY2Ugd2l0aCBhbGwgYXZhaWxhYmxlIGNvbG9yIGFuZCBzdHlsZSBtZXRob2RzLlxuICogQHN1bW1hcnkgVGhlIEtsZXVyIGludGVyZmFjZSBwcm92aWRlcyBtZXRob2RzIGZvciBhcHBseWluZyB2YXJpb3VzIGNvbG9ycywgYmFja2dyb3VuZCBjb2xvcnMsXG4gKiBhbmQgdGV4dCBzdHlsZXMgdG8gc3RyaW5ncyBpbiB0ZXJtaW5hbCBvdXRwdXQuXG4gKlxuICogQGludGVyZmFjZSBLbGV1clxuICogQG1lbWJlck9mIG1vZHVsZTpAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLbGV1ciB7XG4gIC8vIENvbG9yc1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYmxhY2sgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIGJsYWNrOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJlZCBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgcmVkOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGdyZWVuIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBncmVlbjogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyB5ZWxsb3cgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIHllbGxvdzogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBibHVlIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBibHVlOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIG1hZ2VudGEgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIG1hZ2VudGE6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgY3lhbiBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgY3lhbjogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyB3aGl0ZSBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgd2hpdGU6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgZ3JheSBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgZ3JheTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQWxpYXMgZm9yIGdyYXkgY29sb3IuICovXG4gIGdyZXk6IENvbG9yO1xuXG4gIC8vIEJhY2tncm91bmRzXG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBibGFjayBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ0JsYWNrOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJlZCBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ1JlZDogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBncmVlbiBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ0dyZWVuOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHllbGxvdyBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ1llbGxvdzogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBibHVlIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnQmx1ZTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBtYWdlbnRhIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnTWFnZW50YTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBjeWFuIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnQ3lhbjogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyB3aGl0ZSBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ1doaXRlOiBDb2xvcjtcblxuICAvLyBNb2RpZmllcnNcbiAgLyoqIEBkZXNjcmlwdGlvbiBSZXNldHMgYWxsIGFwcGxpZWQgc3R5bGVzLiAqL1xuICByZXNldDogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBib2xkIHN0eWxlIHRvIHRoZSB0ZXh0LiAqL1xuICBib2xkOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGRpbSAoZGVjcmVhc2VkIGludGVuc2l0eSkgc3R5bGUgdG8gdGhlIHRleHQuICovXG4gIGRpbTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBpdGFsaWMgc3R5bGUgdG8gdGhlIHRleHQuICovXG4gIGl0YWxpYzogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyB1bmRlcmxpbmUgc3R5bGUgdG8gdGhlIHRleHQuICovXG4gIHVuZGVybGluZTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gSW52ZXJ0cyB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMuICovXG4gIGludmVyc2U6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEhpZGVzIHRoZSB0ZXh0IChzYW1lIGNvbG9yIGFzIGJhY2tncm91bmQpLiAqL1xuICBoaWRkZW46IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgc3RyaWtldGhyb3VnaCBzdHlsZSB0byB0aGUgdGV4dC4gKi9cbiAgc3RyaWtldGhyb3VnaDogQ29sb3I7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBhcmd1bWVudCBvcHRpb24uXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgYW5kIGJlaGF2aW9yIG9mIGEgY29tbWFuZC1saW5lIG9wdGlvbi5cbiAqIEBpbnRlcmZhY2UgUGFyc2VBcmdzT3B0aW9uQ29uZmlnXG4gKiBAcHJvcGVydHkgeyhcInN0cmluZ1wiIHwgXCJib29sZWFuXCIpfSB0eXBlIC0gVGhlIGRhdGEgdHlwZSBvZiB0aGUgb3B0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbXVsdGlwbGVdIC0gV2hldGhlciB0aGUgb3B0aW9uIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Nob3J0XSAtIFRoZSBzaG9ydCAoc2luZ2xlLWNoYXJhY3RlcikgYWxpYXMgZm9yIHRoZSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IGJvb2xlYW5bXX0gW2RlZmF1bHRdIC0gVGhlIGRlZmF1bHQgdmFsdWUocykgZm9yIHRoZSBvcHRpb24uXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VBcmdzT3B0aW9uQ29uZmlnIHtcbiAgdHlwZTogXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiO1xuICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHNob3J0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0Pzogc3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBhbGwgY29tbWFuZC1saW5lIGFyZ3VtZW50IG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBBIG1hcHBpbmcgb2YgbG9uZyBvcHRpb24gbmFtZXMgdG8gdGhlaXIgY29uZmlndXJhdGlvbnMuXG4gKiBAaW50ZXJmYWNlIFBhcnNlQXJnc09wdGlvbnNDb25maWdcbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnIHtcbiAgW2xvbmdPcHRpb246IHN0cmluZ106IFBhcnNlQXJnc09wdGlvbkNvbmZpZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHBhcnNlZCBjb21tYW5kLWxpbmUgb3B0aW9uIHRva2VuLlxuICogQHN1bW1hcnkgQ2FuIGJlIGVpdGhlciBhbiBvcHRpb24gd2l0aCBhIHZhbHVlIG9yIGFuIG9wdGlvbiB3aXRob3V0IGEgdmFsdWUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBPcHRpb25Ub2tlblxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgdHlwZSBPcHRpb25Ub2tlbiA9XG4gIHwge1xuICAgICAga2luZDogXCJvcHRpb25cIjtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICByYXdOYW1lOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgaW5saW5lVmFsdWU6IGJvb2xlYW47XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6IFwib3B0aW9uXCI7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcmF3TmFtZTogc3RyaW5nO1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZDtcbiAgICAgIGlubGluZVZhbHVlOiB1bmRlZmluZWQ7XG4gICAgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHBhcnNlZCBjb21tYW5kLWxpbmUgdG9rZW4uXG4gKiBAc3VtbWFyeSBDYW4gYmUgYW4gb3B0aW9uLCBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIGFuIG9wdGlvbiB0ZXJtaW5hdG9yLlxuICogQHR5cGVkZWYge09wdGlvblRva2VuIHwgT2JqZWN0fSBUb2tlblxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgdHlwZSBUb2tlbiA9XG4gIHwgT3B0aW9uVG9rZW5cbiAgfCB7IGtpbmQ6IFwicG9zaXRpb25hbFwiOyBpbmRleDogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6IFwib3B0aW9uLXRlcm1pbmF0b3JcIjsgaW5kZXg6IG51bWJlciB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgcmVzdWx0IG9mIHBhcnNpbmcgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqIEBzdW1tYXJ5IENvbnRhaW5zIHBhcnNlZCB2YWx1ZXMsIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBhbmQgb3B0aW9uYWxseSB0aGUgcGFyc2VkIHRva2Vucy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlQXJnc1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10gfCBib29sZWFuW10gfCB1bmRlZmluZWR9IHZhbHVlcyAtIFBhcnNlZCBvcHRpb24gdmFsdWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcG9zaXRpb25hbHMgLSBQb3NpdGlvbmFsIGFyZ3VtZW50cy5cbiAqIEBwcm9wZXJ0eSB7VG9rZW5bXX0gW3Rva2Vuc10gLSBQYXJzZWQgdG9rZW5zIChpZiByZXF1ZXN0ZWQpLlxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgdHlwZSBQYXJzZUFyZ3NSZXN1bHQgPSB7XG4gIHZhbHVlczogeyBbcDogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhbiB8IChzdHJpbmcgfCBib29sZWFuKVtdIHwgdW5kZWZpbmVkIH07XG4gIHBvc2l0aW9uYWxzOiBzdHJpbmdbXTtcbiAgdG9rZW5zPzogVG9rZW5bXTtcbn07XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5wdXQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBjb2xvciBmdW5jdGlvbiBpbiB0aGUgS2xldXIgbGlicmFyeS5cbiAqIEBzdW1tYXJ5IFRoZSBDb2xvciBpbnRlcmZhY2UgZGVmaW5lcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzXG4gKiB0byBhcHBseSBjb2xvciBzdHlsaW5nIHRvIHRleHQgb3IgY2hhaW4gbXVsdGlwbGUgY29sb3Igb3BlcmF0aW9ucy5cbiAqXG4gKiBAaW50ZXJmYWNlIENvbG9yXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xvciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGdpdmVuIHRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSB4IC0gVGhlIHRleHQgb3IgbnVtYmVyIHRvIGJlIGNvbG9yZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbG9yZWQgdGV4dC5cbiAgICovXG4gICh4OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbGxvd3MgY2hhaW5pbmcgb2YgbXVsdGlwbGUgY29sb3Igb3BlcmF0aW9ucy5cbiAgICogQHJldHVybiB7S2xldXJ9IFRoZSBLbGV1ciBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgKCk6IEtsZXVyO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSBtYWluIEtsZXVyIGludGVyZmFjZSB3aXRoIGFsbCBhdmFpbGFibGUgY29sb3IgYW5kIHN0eWxlIG1ldGhvZHMuXG4gKiBAc3VtbWFyeSBUaGUgS2xldXIgaW50ZXJmYWNlIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFwcGx5aW5nIHZhcmlvdXMgY29sb3JzLCBiYWNrZ3JvdW5kIGNvbG9ycyxcbiAqIGFuZCB0ZXh0IHN0eWxlcyB0byBzdHJpbmdzIGluIHRlcm1pbmFsIG91dHB1dC5cbiAqXG4gKiBAaW50ZXJmYWNlIEtsZXVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2xldXIge1xuICAvLyBDb2xvcnNcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGJsYWNrIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBibGFjazogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyByZWQgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIHJlZDogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBncmVlbiBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgZ3JlZW46IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgeWVsbG93IGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICB5ZWxsb3c6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYmx1ZSBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgYmx1ZTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBtYWdlbnRhIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBtYWdlbnRhOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGN5YW4gY29sb3IgdG8gdGhlIHRleHQuICovXG4gIGN5YW46IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgd2hpdGUgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIHdoaXRlOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGdyYXkgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIGdyYXk6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFsaWFzIGZvciBncmF5IGNvbG9yLiAqL1xuICBncmV5OiBDb2xvcjtcblxuICAvLyBCYWNrZ3JvdW5kc1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYmxhY2sgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdCbGFjazogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyByZWQgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdSZWQ6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgZ3JlZW4gYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdHcmVlbjogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyB5ZWxsb3cgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdZZWxsb3c6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYmx1ZSBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ0JsdWU6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgbWFnZW50YSBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ01hZ2VudGE6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgY3lhbiBiYWNrZ3JvdW5kIHRvIHRoZSB0ZXh0LiAqL1xuICBiZ0N5YW46IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgd2hpdGUgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdXaGl0ZTogQ29sb3I7XG5cbiAgLy8gTW9kaWZpZXJzXG4gIC8qKiBAZGVzY3JpcHRpb24gUmVzZXRzIGFsbCBhcHBsaWVkIHN0eWxlcy4gKi9cbiAgcmVzZXQ6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYm9sZCBzdHlsZSB0byB0aGUgdGV4dC4gKi9cbiAgYm9sZDogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBkaW0gKGRlY3JlYXNlZCBpbnRlbnNpdHkpIHN0eWxlIHRvIHRoZSB0ZXh0LiAqL1xuICBkaW06IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgaXRhbGljIHN0eWxlIHRvIHRoZSB0ZXh0LiAqL1xuICBpdGFsaWM6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdW5kZXJsaW5lIHN0eWxlIHRvIHRoZSB0ZXh0LiAqL1xuICB1bmRlcmxpbmU6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEludmVydHMgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzLiAqL1xuICBpbnZlcnNlOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBIaWRlcyB0aGUgdGV4dCAoc2FtZSBjb2xvciBhcyBiYWNrZ3JvdW5kKS4gKi9cbiAgaGlkZGVuOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHN0cmlrZXRocm91Z2ggc3R5bGUgdG8gdGhlIHRleHQuICovXG4gIHN0cmlrZXRocm91Z2g6IENvbG9yO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBhIHNpbmdsZSBjb21tYW5kLWxpbmUgYXJndW1lbnQgb3B0aW9uLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGFuZCBiZWhhdmlvciBvZiBhIGNvbW1hbmQtbGluZSBvcHRpb24uXG4gKiBAaW50ZXJmYWNlIFBhcnNlQXJnc09wdGlvbkNvbmZpZ1xuICogQHByb3BlcnR5IHsoXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiKX0gdHlwZSAtIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlXSAtIFdoZXRoZXIgdGhlIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzaG9ydF0gLSBUaGUgc2hvcnQgKHNpbmdsZS1jaGFyYWN0ZXIpIGFsaWFzIGZvciB0aGUgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10gfCBib29sZWFuW119IFtkZWZhdWx0XSAtIFRoZSBkZWZhdWx0IHZhbHVlKHMpIGZvciB0aGUgb3B0aW9uLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlQXJnc09wdGlvbkNvbmZpZyB7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIjtcbiAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBzaG9ydD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdD86IHN0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IGJvb2xlYW5bXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgYWxsIGNvbW1hbmQtbGluZSBhcmd1bWVudCBvcHRpb25zLlxuICogQHN1bW1hcnkgQSBtYXBwaW5nIG9mIGxvbmcgb3B0aW9uIG5hbWVzIHRvIHRoZWlyIGNvbmZpZ3VyYXRpb25zLlxuICogQGludGVyZmFjZSBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VBcmdzT3B0aW9uc0NvbmZpZyB7XG4gIFtsb25nT3B0aW9uOiBzdHJpbmddOiBQYXJzZUFyZ3NPcHRpb25Db25maWc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBwYXJzZWQgY29tbWFuZC1saW5lIG9wdGlvbiB0b2tlbi5cbiAqIEBzdW1tYXJ5IENhbiBiZSBlaXRoZXIgYW4gb3B0aW9uIHdpdGggYSB2YWx1ZSBvciBhbiBvcHRpb24gd2l0aG91dCBhIHZhbHVlLlxuICogQHR5cGVkZWYge09iamVjdH0gT3B0aW9uVG9rZW5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uVG9rZW4gPVxuICB8IHtcbiAgICAgIGtpbmQ6IFwib3B0aW9uXCI7XG4gICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcmF3TmFtZTogc3RyaW5nO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgIGlubGluZVZhbHVlOiBib29sZWFuO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiBcIm9wdGlvblwiO1xuICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHJhd05hbWU6IHN0cmluZztcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQ7XG4gICAgICBpbmxpbmVWYWx1ZTogdW5kZWZpbmVkO1xuICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBwYXJzZWQgY29tbWFuZC1saW5lIHRva2VuLlxuICogQHN1bW1hcnkgQ2FuIGJlIGFuIG9wdGlvbiwgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciBhbiBvcHRpb24gdGVybWluYXRvci5cbiAqIEB0eXBlZGVmIHtPcHRpb25Ub2tlbiB8IE9iamVjdH0gVG9rZW5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW4gPVxuICB8IE9wdGlvblRva2VuXG4gIHwgeyBraW5kOiBcInBvc2l0aW9uYWxcIjsgaW5kZXg6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9XG4gIHwgeyBraW5kOiBcIm9wdGlvbi10ZXJtaW5hdG9yXCI7IGluZGV4OiBudW1iZXIgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGhlIHJlc3VsdCBvZiBwYXJzaW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gKiBAc3VtbWFyeSBDb250YWlucyBwYXJzZWQgdmFsdWVzLCBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYW5kIG9wdGlvbmFsbHkgdGhlIHBhcnNlZCB0b2tlbnMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZUFyZ3NSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgdW5kZWZpbmVkfSB2YWx1ZXMgLSBQYXJzZWQgb3B0aW9uIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHBvc2l0aW9uYWxzIC0gUG9zaXRpb25hbCBhcmd1bWVudHMuXG4gKiBAcHJvcGVydHkge1Rva2VuW119IFt0b2tlbnNdIC0gUGFyc2VkIHRva2VucyAoaWYgcmVxdWVzdGVkKS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgUGFyc2VBcmdzUmVzdWx0ID0ge1xuICB2YWx1ZXM6IHsgW3A6IHN0cmluZ106IHN0cmluZyB8IGJvb2xlYW4gfCAoc3RyaW5nIHwgYm9vbGVhbilbXSB8IHVuZGVmaW5lZCB9O1xuICBwb3NpdGlvbmFsczogc3RyaW5nW107XG4gIHRva2Vucz86IFRva2VuW107XG59O1xuIl19
@@ -3,6 +3,7 @@ import { Logger } from "@decaf-ts/logging";
3
3
  * @description Prints a styled banner to the console.
4
4
  * @summary Generates and prints a colorful ASCII art banner with a random slogan.
5
5
  * @param {Logger} [logger] - Optional logger for verbose output.
6
+ * @memberOf module:utils
6
7
  * @function printBanner
7
8
  * @mermaid
8
9
  * sequenceDiagram
@@ -30,6 +31,7 @@ export declare function printBanner(logger?: Logger): void;
30
31
  * @param {number} [i] - Optional index to retrieve a specific slogan.
31
32
  * @return {string} The selected slogan.
32
33
  * @function getSlogan
34
+ * @memberOf module:utils
33
35
  * @mermaid
34
36
  * sequenceDiagram
35
37
  * participant getSlogan
@@ -3,6 +3,7 @@ import { style } from "styled-string-builder";
3
3
  /**
4
4
  * @description Array of ANSI color codes for banner styling.
5
5
  * @summary Defines a set of ANSI color codes used to style the banner text.
6
+ * @memberOf module:utils
6
7
  */
7
8
  const colors = [
8
9
  "\x1b[38;5;215m", // soft orange
@@ -19,6 +20,7 @@ const colors = [
19
20
  * @description Prints a styled banner to the console.
20
21
  * @summary Generates and prints a colorful ASCII art banner with a random slogan.
21
22
  * @param {Logger} [logger] - Optional logger for verbose output.
23
+ * @memberOf module:utils
22
24
  * @function printBanner
23
25
  * @mermaid
24
26
  * sequenceDiagram
@@ -61,6 +63,7 @@ export function printBanner(logger) {
61
63
  * @param {number} [i] - Optional index to retrieve a specific slogan.
62
64
  * @return {string} The selected slogan.
63
65
  * @function getSlogan
66
+ * @memberOf module:utils
64
67
  * @mermaid
65
68
  * sequenceDiagram
66
69
  * participant getSlogan
@@ -89,4 +92,4 @@ export function getSlogan(i) {
89
92
  throw new Error(`Failed to retrieve slogans: ${error}`);
90
93
  }
91
94
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL291dHB1dC9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlDOzs7R0FHRztBQUNILE1BQU0sTUFBTSxHQUFHO0lBQ2IsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxRQUFRO0lBQzFCLGdCQUFnQixFQUFFLE9BQU87SUFDekIsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxhQUFhO0lBQy9CLGdCQUFnQixFQUFFLGFBQWE7Q0FDaEMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBZTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FDVjs7Ozs7OztFQU9GLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDN0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM3RCxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2xvZ2FucyBmcm9tIFwiLi4vYXNzZXRzL3Nsb2dhbnMuanNvblwiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgQU5TSSBjb2xvciBjb2RlcyBmb3IgYmFubmVyIHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgc2V0IG9mIEFOU0kgY29sb3IgY29kZXMgdXNlZCB0byBzdHlsZSB0aGUgYmFubmVyIHRleHQuXG4gKi9cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJpbnRzIGEgc3R5bGVkIGJhbm5lciB0byB0aGUgY29uc29sZS5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgcHJpbnRzIGEgY29sb3JmdWwgQVNDSUkgYXJ0IGJhbm5lciB3aXRoIGEgcmFuZG9tIHNsb2dhbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBbbG9nZ2VyXSAtIE9wdGlvbmFsIGxvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQuXG4gKiBAZnVuY3Rpb24gcHJpbnRCYW5uZXJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IHBhZEVuZFxuICogICBwYXJ0aWNpcGFudCBjb25zb2xlXG4gKiAgIHByaW50QmFubmVyLT4+Z2V0U2xvZ2FuOiBDYWxsIGdldFNsb2dhbigpXG4gKiAgIGdldFNsb2dhbi0tPj5wcmludEJhbm5lcjogUmV0dXJuIHJhbmRvbSBzbG9nYW5cbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ3JlYXRlIGJhbm5lciBBU0NJSSBhcnRcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogU3BsaXQgYmFubmVyIGludG8gbGluZXNcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ2FsY3VsYXRlIG1heCBsaW5lIGxlbmd0aFxuICogICBwcmludEJhbm5lci0+PnBhZEVuZDogQ2FsbCBwYWRFbmQgd2l0aCBzbG9nYW5cbiAqICAgcGFkRW5kLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcGFkZGVkIHNsb2dhbiBsaW5lXG4gKiAgIGxvb3AgRm9yIGVhY2ggYmFubmVyIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PnN0eWxlOiBDYWxsIHN0eWxlKGxpbmUpXG4gKiAgICAgc3R5bGUtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBzdHlsZWQgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+Y29uc29sZTogTG9nIHN0eWxlZCBsaW5lXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIobG9nZ2VyPzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcbiAgY29uc3QgYmFubmVyOiBzdHJpbmcgfCBzdHJpbmdbXSA9XG4gICAgYCMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSBcbiMgICAgICAoICggICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgICAgICkgKSAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgWz09PT09PT1dICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIFxuIyAgICAgXFxgLS0tLS3CtCAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIFxuI2Auc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1heExlbmd0aCA9IGJhbm5lci5yZWR1Y2UoKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksIDApO1xuICBiYW5uZXIucHVzaChgIyAgJHttZXNzYWdlLnBhZFN0YXJ0KG1heExlbmd0aCAtIDMpfWApO1xuICBiYW5uZXIuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAobG9nZ2VyID8gbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSkoXG4gICAgICBzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNsb2dhbiBmcm9tIHRoZSBwcmVkZWZpbmVkIGxpc3QuXG4gKiBAc3VtbWFyeSBGZXRjaGVzIGEgcmFuZG9tIHNsb2dhbiBvciBhIHNwZWNpZmljIG9uZSBieSBpbmRleCBmcm9tIHRoZSBzbG9nYW5zIGxpc3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ldIC0gT3B0aW9uYWwgaW5kZXggdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBzbG9nYW4uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZWxlY3RlZCBzbG9nYW4uXG4gKiBAZnVuY3Rpb24gZ2V0U2xvZ2FuXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBNYXRoLnJhbmRvbVxuICogICBwYXJ0aWNpcGFudCBzbG9nYW5zXG4gKiAgIGFsdCBpIGlzIHVuZGVmaW5lZFxuICogICAgIGdldFNsb2dhbi0+Pk1hdGgucmFuZG9tOiBHZW5lcmF0ZSByYW5kb20gaW5kZXhcbiAqICAgICBNYXRoLnJhbmRvbS0tPj5nZXRTbG9nYW46IFJldHVybiByYW5kb20gaW5kZXhcbiAqICAgZWxzZSBpIGlzIGRlZmluZWRcbiAqICAgICBOb3RlIG92ZXIgZ2V0U2xvZ2FuOiBVc2UgcHJvdmlkZWQgaW5kZXhcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0+PnNsb2dhbnM6IEFjY2VzcyBzbG9nYW4gYXQgaW5kZXhcbiAqICAgc2xvZ2Fucy0tPj5nZXRTbG9nYW46IFJldHVybiBzbG9nYW5cbiAqICAgYWx0IEVycm9yIG9jY3Vyc1xuICogICAgIGdldFNsb2dhbi0+PmdldFNsb2dhbjogVGhyb3cgZXJyb3JcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0tPj5DYWxsZXI6IFJldHVybiBzbG9nYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpID1cbiAgICAgIHR5cGVvZiBpID09PSBcInVuZGVmaW5lZFwiID8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2xvZ2Fucy5sZW5ndGgpIDogaTtcbiAgICByZXR1cm4gc2xvZ2Fuc1tpXS5TbG9nYW47XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuIl19
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL291dHB1dC9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlDOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRztJQUNiLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsUUFBUTtJQUMxQixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLGdCQUFnQixFQUFFLFNBQVM7SUFDM0IsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsYUFBYTtJQUMvQixnQkFBZ0IsRUFBRSxhQUFhO0NBQ2hDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUNWOzs7Ozs7O0VBT0YsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzdELEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2xvZ2FucyBmcm9tIFwiLi4vYXNzZXRzL3Nsb2dhbnMuanNvblwiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgQU5TSSBjb2xvciBjb2RlcyBmb3IgYmFubmVyIHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgc2V0IG9mIEFOU0kgY29sb3IgY29kZXMgdXNlZCB0byBzdHlsZSB0aGUgYmFubmVyIHRleHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJpbnRzIGEgc3R5bGVkIGJhbm5lciB0byB0aGUgY29uc29sZS5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgcHJpbnRzIGEgY29sb3JmdWwgQVNDSUkgYXJ0IGJhbm5lciB3aXRoIGEgcmFuZG9tIHNsb2dhbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBbbG9nZ2VyXSAtIE9wdGlvbmFsIGxvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZnVuY3Rpb24gcHJpbnRCYW5uZXJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IHBhZEVuZFxuICogICBwYXJ0aWNpcGFudCBjb25zb2xlXG4gKiAgIHByaW50QmFubmVyLT4+Z2V0U2xvZ2FuOiBDYWxsIGdldFNsb2dhbigpXG4gKiAgIGdldFNsb2dhbi0tPj5wcmludEJhbm5lcjogUmV0dXJuIHJhbmRvbSBzbG9nYW5cbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ3JlYXRlIGJhbm5lciBBU0NJSSBhcnRcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogU3BsaXQgYmFubmVyIGludG8gbGluZXNcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ2FsY3VsYXRlIG1heCBsaW5lIGxlbmd0aFxuICogICBwcmludEJhbm5lci0+PnBhZEVuZDogQ2FsbCBwYWRFbmQgd2l0aCBzbG9nYW5cbiAqICAgcGFkRW5kLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcGFkZGVkIHNsb2dhbiBsaW5lXG4gKiAgIGxvb3AgRm9yIGVhY2ggYmFubmVyIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PnN0eWxlOiBDYWxsIHN0eWxlKGxpbmUpXG4gKiAgICAgc3R5bGUtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBzdHlsZWQgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+Y29uc29sZTogTG9nIHN0eWxlZCBsaW5lXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIobG9nZ2VyPzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcbiAgY29uc3QgYmFubmVyOiBzdHJpbmcgfCBzdHJpbmdbXSA9XG4gICAgYCMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSBcbiMgICAgICAoICggICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgICAgICkgKSAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgWz09PT09PT1dICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIFxuIyAgICAgXFxgLS0tLS3CtCAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIFxuI2Auc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1heExlbmd0aCA9IGJhbm5lci5yZWR1Y2UoKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksIDApO1xuICBiYW5uZXIucHVzaChgIyAgJHttZXNzYWdlLnBhZFN0YXJ0KG1heExlbmd0aCAtIDMpfWApO1xuICBiYW5uZXIuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAobG9nZ2VyID8gbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSkoXG4gICAgICBzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNsb2dhbiBmcm9tIHRoZSBwcmVkZWZpbmVkIGxpc3QuXG4gKiBAc3VtbWFyeSBGZXRjaGVzIGEgcmFuZG9tIHNsb2dhbiBvciBhIHNwZWNpZmljIG9uZSBieSBpbmRleCBmcm9tIHRoZSBzbG9nYW5zIGxpc3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ldIC0gT3B0aW9uYWwgaW5kZXggdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBzbG9nYW4uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZWxlY3RlZCBzbG9nYW4uXG4gKiBAZnVuY3Rpb24gZ2V0U2xvZ2FuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBNYXRoLnJhbmRvbVxuICogICBwYXJ0aWNpcGFudCBzbG9nYW5zXG4gKiAgIGFsdCBpIGlzIHVuZGVmaW5lZFxuICogICAgIGdldFNsb2dhbi0+Pk1hdGgucmFuZG9tOiBHZW5lcmF0ZSByYW5kb20gaW5kZXhcbiAqICAgICBNYXRoLnJhbmRvbS0tPj5nZXRTbG9nYW46IFJldHVybiByYW5kb20gaW5kZXhcbiAqICAgZWxzZSBpIGlzIGRlZmluZWRcbiAqICAgICBOb3RlIG92ZXIgZ2V0U2xvZ2FuOiBVc2UgcHJvdmlkZWQgaW5kZXhcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0+PnNsb2dhbnM6IEFjY2VzcyBzbG9nYW4gYXQgaW5kZXhcbiAqICAgc2xvZ2Fucy0tPj5nZXRTbG9nYW46IFJldHVybiBzbG9nYW5cbiAqICAgYWx0IEVycm9yIG9jY3Vyc1xuICogICAgIGdldFNsb2dhbi0+PmdldFNsb2dhbjogVGhyb3cgZXJyb3JcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0tPj5DYWxsZXI6IFJldHVybiBzbG9nYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpID1cbiAgICAgIHR5cGVvZiBpID09PSBcInVuZGVmaW5lZFwiID8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2xvZ2Fucy5sZW5ndGgpIDogaTtcbiAgICByZXR1cm4gc2xvZ2Fuc1tpXS5TbG9nYW47XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
- export * from "./common";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3V0cHV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29tbW9uXCI7XG4iXX0=
1
+ export * from "./common.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3V0cHV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbW1vblwiO1xuIl19