footprintjs 10.3.0 → 10.4.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/dist/esm/index.d.ts +2 -0
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  4. package/dist/esm/lib/capture/absentEntries.js +81 -0
  5. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  6. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  7. package/dist/esm/lib/capture/historyData.d.ts +9 -0
  8. package/dist/esm/lib/capture/historyData.js +79 -0
  9. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  10. package/dist/esm/lib/capture/historyNote.js +52 -0
  11. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  12. package/dist/esm/lib/capture/historyTarget.js +35 -0
  13. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  14. package/dist/esm/lib/capture/historyTypes.js +4 -0
  15. package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
  16. package/dist/esm/lib/capture/nativeCoverage.js +50 -12
  17. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  18. package/dist/esm/lib/capture/noteShape.js +93 -0
  19. package/dist/esm/lib/capture/readSources.d.ts +43 -0
  20. package/dist/esm/lib/capture/readSources.js +78 -0
  21. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
  22. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  23. package/dist/esm/lib/engine/types.d.ts +3 -0
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/memory/StageContext.d.ts +8 -0
  26. package/dist/esm/lib/memory/StageContext.js +84 -9
  27. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  28. package/dist/esm/lib/memory/runPolicy.js +2 -1
  29. package/dist/esm/lib/pause/record.js +8 -2
  30. package/dist/esm/lib/pause/types.d.ts +2 -0
  31. package/dist/esm/lib/pause/types.js +1 -1
  32. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +17 -3
  33. package/dist/esm/lib/runner/ExecutionRuntime.js +33 -4
  34. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
  35. package/dist/esm/lib/runner/FlowChartExecutor.js +48 -10
  36. package/dist/esm/lib/runner/attach.js +3 -1
  37. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  38. package/dist/esm/lib/runner/captureHistory.js +106 -0
  39. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  40. package/dist/esm/lib/runner/checkpoint.js +3 -1
  41. package/dist/esm/lib/runner/index.d.ts +1 -0
  42. package/dist/esm/lib/runner/index.js +1 -1
  43. package/dist/esm/lib/runner/options.js +42 -3
  44. package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
  45. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  46. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  47. package/dist/esm/lib/runner/recordSink.js +47 -4
  48. package/dist/esm/lib/runner/snapshot.js +2 -2
  49. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  50. package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
  51. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  52. package/dist/esm/lib/sinks/fileSink.js +8 -2
  53. package/dist/esm/trace.d.ts +2 -0
  54. package/dist/esm/trace.js +2 -1
  55. package/dist/index.js +1 -1
  56. package/dist/lib/capture/absentEntries.js +86 -0
  57. package/dist/lib/capture/checkpointCapture.js +110 -0
  58. package/dist/lib/capture/historyData.js +85 -0
  59. package/dist/lib/capture/historyNote.js +56 -0
  60. package/dist/lib/capture/historyTarget.js +40 -0
  61. package/dist/lib/capture/historyTypes.js +7 -0
  62. package/dist/lib/capture/nativeCoverage.js +52 -13
  63. package/dist/lib/capture/noteShape.js +103 -0
  64. package/dist/lib/capture/readSources.js +83 -0
  65. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
  66. package/dist/lib/engine/types.js +1 -1
  67. package/dist/lib/memory/StageContext.js +84 -9
  68. package/dist/lib/memory/runPolicy.js +2 -1
  69. package/dist/lib/pause/record.js +8 -2
  70. package/dist/lib/pause/types.js +1 -1
  71. package/dist/lib/runner/ExecutionRuntime.js +32 -3
  72. package/dist/lib/runner/FlowChartExecutor.js +48 -10
  73. package/dist/lib/runner/attach.js +3 -1
  74. package/dist/lib/runner/captureHistory.js +110 -0
  75. package/dist/lib/runner/checkpoint.js +3 -1
  76. package/dist/lib/runner/index.js +1 -1
  77. package/dist/lib/runner/options.js +42 -3
  78. package/dist/lib/runner/readStoredCapture.js +40 -0
  79. package/dist/lib/runner/recordSink.js +47 -4
  80. package/dist/lib/runner/snapshot.js +2 -2
  81. package/dist/lib/runner/storedCaptureAdmission.js +101 -0
  82. package/dist/lib/sinks/fileSink.js +8 -2
  83. package/dist/trace.js +4 -2
  84. package/dist/types/index.d.ts +2 -0
  85. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  86. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  87. package/dist/types/lib/capture/historyData.d.ts +9 -0
  88. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  89. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  90. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  91. package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
  92. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  93. package/dist/types/lib/capture/readSources.d.ts +43 -0
  94. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  95. package/dist/types/lib/engine/types.d.ts +3 -0
  96. package/dist/types/lib/memory/StageContext.d.ts +8 -0
  97. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  98. package/dist/types/lib/pause/types.d.ts +2 -0
  99. package/dist/types/lib/runner/ExecutionRuntime.d.ts +17 -3
  100. package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
  101. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  102. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  103. package/dist/types/lib/runner/index.d.ts +1 -0
  104. package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
  105. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  106. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  107. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  108. package/dist/types/trace.d.ts +2 -0
  109. package/package.json +2 -2
@@ -33,4 +33,4 @@ var ArrayMergeMode;
33
33
  /** Overwrite parent array with subflow output. Use for Dynamic loops. */
34
34
  ArrayMergeMode["Replace"] = "replace";
35
35
  })(ArrayMergeMode || (exports.ArrayMergeMode = ArrayMergeMode = {}));
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWlCSCw4Q0FBOEU7QUFBckUseUdBQUEsYUFBYSxPQUFBO0FBQUUseUdBQUEsYUFBYSxPQUFBO0FBQUUsdUdBQUEsV0FBVyxPQUFBO0FBZWxELG9DQUFvQztBQUNwQyx3REFBd0Q7QUFDM0MsUUFBQSxhQUFhLEdBQVk7SUFDcEMsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN2RSxHQUFHLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3JFLEtBQUssRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3hFLENBQUM7QUF1SEYsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUU7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyw4QkFBZCxjQUFjLFFBS3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0eXBlcy50cyDigJQgQWxsIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbmdpbmUgbGlicmFyeS5cbiAqXG4gKiBDZW50cmFsaXplcyB0eXBlIGRlZmluaXRpb25zIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAqIEV2ZXJ5IGhhbmRsZXIgcmVjZWl2ZXMgSGFuZGxlckRlcHMgKHRoZSBESSBiYWcpIGluc3RlYWQgb2YgaW1wb3J0aW5nIHRoZSB0cmF2ZXJzZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzLCBMb2dPdXRjb21lLCBNZXRhIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB0eXBlIHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBRdWV1ZWRQYXVzZSwgUmVzdW1lRW50cnkgfSBmcm9tICcuL2hhbmRsZXJzL1Jlc3VtZUVudHJ5LmpzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgU3RhZ2VOb2RlIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vLyBSZS1leHBvcnQgcGF1c2UgdHlwZXMgZnJvbSBwYXVzZS8gbGlicmFyeVxuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlUmVzdWx0IH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1pbmltYWwgbG9nZ2luZyBjb250cmFjdC4gTWlycm9ycyBDb25zb2xlIEFQSSBzdWJzZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8qKiBEZWZhdWx0IGNvbnNvbGUtYmFzZWQgbG9nZ2VyLiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLS0gdHJpdmlhbCBjb25zb2xlIGRlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBJTG9nZ2VyID0ge1xuICBpbmZvOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICB3YXJuOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5hcmdzKSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2UgRnVuY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0b2tlbnMgZHVyaW5nIHN0cmVhbWluZy4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3Igc3RhZ2UgaGFuZGxlcnMuXG4gKiAtIFRPdXQ6IHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogLSBUU2NvcGU6IHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICogLSBPcHRpb25hbCAzcmQgcGFyYW1ldGVyIGBzdHJlYW1DYWxsYmFja2AgaW5qZWN0ZWQgZm9yIHN0cmVhbWluZyBzdGFnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0IHwgdm9pZD4gfCBUT3V0IHwgdm9pZDtcblxuLyoqXG4gKiBTdGFnZSBmdW5jdGlvbiBmb3IgcGF1c2FibGUgc3RhZ2VzIOKAlCByZXR1cm4gdmFsdWUgaXMgdGhlIHBhdXNlIGRhdGEgKGFueSB0eXBlKS5cbiAqIFJldHVybiBub24tdm9pZCB0byBwYXVzZSwgcmV0dXJuIHZvaWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdXNhYmxlU3RhZ2VGdW5jdGlvbjxUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcblxuLyoqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgc2NvcGUgaW5zdGFuY2UgZm9yIGVhY2ggc3RhZ2UuICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlID0gYW55PiA9IChcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52LFxuKSA9PiBUU2NvcGU7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU3RyZWFtVG9rZW5IYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIGZ1bGxUZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUhhbmRsZXJzIHtcbiAgb25Ub2tlbj86IFN0cmVhbVRva2VuSGFuZGxlcjtcbiAgb25TdGFydD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG4gIG9uRW5kPzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJhbGxlbC1mb3ItZWFjaCAoZHluYW1pYyBmYW4tb3V0KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQSBidWlsdCBjaGFydCwgYXMgYGFkZFBhcmFsbGVsRm9yRWFjaGAncyBgYnJhbmNoYCBmYWN0b3J5IHJldHVybnMgaXQuXG4gKlxuICogU3RydWN0dXJhbGx5IHRoZSBzdWJzZXQgb2YgYEZsb3dDaGFydGAgdGhlIGVuZ2luZSBuZWVkcyB0byBtb3VudCBhIGJyYW5jaCDigJRcbiAqIGRlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gYGVuZ2luZS9gIGtlZXBzIGl0cyBvbmUtd2F5IGRlcGVuZGVuY3lcbiAqIG9uIGBidWlsZGVyL2AuIEFueSBgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKWAgcmVzdWx0IHNhdGlzZmllcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8qKlxuICogUnVudGltZSBmYW4tb3V0IGNvbmZpZyDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIENPVU5UIGRlY2lkZWQgYXRcbiAqIHJ1bnRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDIpLlxuICpcbiAqIEVhY2ggYnJhbmNoIHJ1bnMgYXMgYSBnZW5lcmF0ZWQgU1VCRkxPVyAoaXNvbGF0ZWQgcnVudGltZSwgb3duIGNvbW1pdCBsb2csXG4gKiBhZGRyZXNzYWJsZSBhdCBgPHN0YWdlSWQ+fjxpbmRleD5gIGluIGV2ZXJ5IHRyYWNlIHF1ZXJ5KSwgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgYnJhbmNoZXMgdW5hYmxlIHRvIGNvcnJ1cHQgZWFjaCBvdGhlcidzIGluLWZsaWdodCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hDb25maWc8VEl0ZW0gPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogUGlja3MgdGhlIGl0ZW1zIHRvIGZhbiBvdXQgb3ZlciwgZnJvbSB0aGUgbGl2ZSBzY29wZS4gUmVhZHMgaGVyZSBhcmVcbiAgICogdHJhY2tlZCBsaWtlIGFueSBvdGhlciBzdGFnZSByZWFkLCBzbyB0aGUgZmFuLW91dCdzIG93biBpbnB1dHMgc2hvdyB1cCBpblxuICAgKiB0aGUgdHJhY2UgYW5kIGluIGEgYmFja3dhcmQgc2xpY2UuXG4gICAqL1xuICBpdGVtczogKHNjb3BlOiBUU2NvcGUpID0+IHJlYWRvbmx5IFRJdGVtW107XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNoYXJ0IGZvciBPTkUgaXRlbS4gQ2FsbGVkIG9uY2UgcGVyIGV4ZWN1dGVkIGJyYW5jaCwgd2l0aCB0aGVcbiAgICogaXRlbSBhbmQgaXRzIGluZGV4IOKAlCBjbG9zZSBvdmVyIHRoZW0sIG9yIHJlYWQgdGhlIGBpdGVtYCAvIGBpbmRleGAgdmFsdWVzXG4gICAqIHNlZWRlZCBpbnRvIHRoZSBicmFuY2gncyBvd24gc2NvcGUuXG4gICAqL1xuICBicmFuY2g6IChpdGVtOiBUSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gQnJhbmNoQ2hhcnQ7XG4gIC8qKlxuICAgKiBIYXJkIGNlaWxpbmcgb24gYnJhbmNoZXMgcGVyIGV4ZWN1dGlvbi4gUkVRVUlSRUQ6IGFuIHVuYm91bmRlZCBmYW4tb3V0XG4gICAqIGRyaXZlbiBieSBtb2RlbCBvdXRwdXQgaXMgYSByZXNvdXJjZSBhdHRhY2ssIHNvIHRoZXJlIGlzIG5vIGRlZmF1bHQgdG9cbiAgICogZm9yZ2V0LiBFeHRyYSBpdGVtcyBkbyBub3QgcnVuIOKAlCB0aGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgbWF4QnJhbmNoZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFN0YXRlIGtleSB0aGUgb3JkZXJlZCByZXN1bHRzIGFycmF5IGlzIHdyaXR0ZW4gdG8gb24gdGhlIHBhcmVudCBzY29wZS5cbiAgICogUkVRVUlSRUQg4oCUIGEga2V5IGRlcml2ZWQgZnJvbSB0aGUgc3RhZ2UgaWQgY291bGQgc2lsZW50bHkgb3ZlcndyaXRlIHN0YXRlXG4gICAqIHRoZSBjaGFydCBhbHJlYWR5IG93bnMuXG4gICAqL1xuICBpbnRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYW4tb3V0IGVycm9yIHBvbGljeSDigJQgdGhlIFNBTUUgcG9saWN5IHRoZSBleGlzdGluZyBwYXJhbGxlbCBmYW4tb3V0IHVzZXMuXG4gICAqIGB0cnVlYCA9IGBQcm9taXNlLmFsbGAgKHRoZSBmaXJzdCBmYWlsaW5nIGJyYW5jaCByZWplY3RzIHRoZSBzdGFnZSk7XG4gICAqIG9taXR0ZWQvZmFsc2UgPSBiZXN0LWVmZm9ydCBgUHJvbWlzZS5hbGxTZXR0bGVkYCAoZXZlcnkgYnJhbmNoIHJ1bnM7IGFcbiAgICogZmFpbGVkIGJyYW5jaCdzIHNsb3QgaW4gdGhlIHJlc3VsdHMgYXJyYXkgaXMgYHVuZGVmaW5lZGApLlxuICAgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHJ5IChwZXItc3RhZ2UgZGVjbGFyYXRpdmUgcG9saWN5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRoZSBwb2xpY3kgdGhlIGF0dGVtcHQgcnVubmVyIHJ1bnM6IGRlY2xhcmVkIG9uY2UsIGluIHRoZSBhdHRlbXB0IGxlYWYgKGBhdHRlbXB0L3R5cGVzLnRzYCwgMTAuMSksIGFuZCBuYW1lZFxuLy8gaGVyZSBzbyBldmVyeSBlbmdpbmUgYW5kIGJ1aWxkZXIgc2l0ZSBrZWVwcyBpdHMgaW1wb3J0LlxuZXhwb3J0IHR5cGUgeyBSZXRyeVBvbGljeSwgU3RhZ2VUb3VjaGVzIH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiB0aGUgZG93bnN0cmVhbSBzdGFnZSBpZCB0aGlzIGJyYW5jaCdzIGNvbnZlcmdlbmNlIGVkZ2VcbiAgICogcG9pbnRzIHRvLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IFwiY29udmVyZ2UgYXQgdGhlIG5leHQgbGluZWFyIHN0YWdlLlwiXG4gICAqXG4gICAqIFdoZW4gYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoIGNhcnJpZXMgYGNvbnZlcmdlQXRgLCBpdHMgdmlzdWFsaXplZFxuICAgKiBgbmV4dGAgZWRnZSBpcyBmaXJlZCB0byB0aGUgbmFtZWQgc3RhZ2UgaW5zdGVhZCBvZiB0byB0aGUgc2hhcmVkXG4gICAqIGNvbnZlcmdlbmNlIG5vZGUgaXRzIHNpYmxpbmdzIHVzZS4gVGhpcyBleHByZXNzZXMgYW4gdW5lcXVhbC1kZXB0aCBtZXJnZVxuICAgKiDigJQgZS5nLiBhIGB0b29sc2Agc2xvdCB0aGF0IGJ5cGFzc2VzIHRoZSBgbWVzc2FnZUFQSWAgYXNzZW1ibHkgbm9kZSBhbmRcbiAgICogcGFpcnMgd2l0aCBpdHMgb3V0cHV0IGF0IGBjYWxsLWxsbWAgKHNvIGBjYWxsLWxsbWAgcmVhZHMgYXMgYSAyLXBhcmVudFxuICAgKiBtZXJnZSksIGZhaXRoZnVsIHRvIHRoZSBBbnRocm9waWMgd2lyZSBwcm90b2NvbCAoc3lzdGVtK21lc3NhZ2VzID0gdGhlXG4gICAqIG1lc3NhZ2UgcGF5bG9hZDsgdG9vbHMgPSBhIHNlcGFyYXRlIHRvcC1sZXZlbCBmaWVsZCkuXG4gICAqXG4gICAqICoqVGhpcyBhZmZlY3RzIHRoZSBTVFJVQ1RVUkUvdG9wb2xvZ3kgZ3JhcGggb25seSoqIOKAlCB0aGUgcnVudGltZSBpc1xuICAgKiB1bmNoYW5nZWQgKHRoZSBicmFuY2gncyBvdXRwdXRzIHJpZGUgc2hhcmVkIHNjb3BlOyB0aGUgbmFtZWQgdGFyZ2V0IHJlYWRzXG4gICAqIHRoZW0gd2hlbiBpdCBydW5zKS4gSXQgZG9lcyBOT1QgaW50cm9kdWNlIGEgam9pbiBiYXJyaWVyLiBUaGUgdGFyZ2V0IGlzIGFcbiAgICogRk9SV0FSRCBzdGFnZSAoYWRkZWQgbGF0ZXIgaW4gdGhlIGNoYWluKSwgc28gaXQgaXMgbm90IHZhbGlkYXRlZCBhdFxuICAgKiBicmFuY2gtZGVjbGFyYXRpb24gdGltZS5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMSkgZm9yIHRoZSBNT1VOVCBpdHNlbGYg4oCUIHRoZSBOQU1FUyB0aGUgYXV0aG9yIHB1dHNcbiAgICogb24gdGhpcyBtb3VudCBhdCBidWlsZCB0aW1lLCBsYW5kZWQgYnkgdGhlIHNhbWUgYGFwcGx5VGFnc2AgZXZlcnkgb3RoZXJcbiAgICogYG9wdGlvbnMudGFnc2Agc2l0ZSB1c2VzLCB3aXRoIHRoZSBzYW1lIHJlZnVzYWxzIChlbXB0eSwgbm9uLXN0cmluZywgdGhlXG4gICAqIHJlc2VydmVkIGB+YCBtYXJrZXIsIGEgZHVwbGljYXRlLCBhIHNlY29uZCBkZWNsYXJhdGlvbikuXG4gICAqXG4gICAqIEEgbW91bnQgaXMgYSBzdGFnZSB0aGF0IGNvbW1pdHM6IGl0cyBmaXJzdCBidW5kbGUgaW4gdGhlIFBBUkVOVCBsb2cgaXMgYVxuICAgKiBzdG9wIGluIGBjb21taXRTdG9wc2AsIHNvIGB0YWdTdG9wc2Aga2VlcHMgaXQgbGlrZSBhbnkgdGFnZ2VkIHN0YWdlIGFuZFxuICAgKiBjYXJyaWVzIHRoZXNlIG5hbWVzIGFzIGBTdG9wLm1ldGFgLiBTdGFtcGVkIG9uIHRoYXQgZmlyc3QgYnVuZGxlIG9ubHlcbiAgICogKHRoZSBtb3VudCdzIGV4aXQgYnVuZGxlIGNhcnJpZXMgbm9uZSDigJQgdGhlIG9uY2UtcGVyLWV4ZWN1dGlvbiBsYXcpLlxuICAgKiBUaGUgc3ViZmxvdydzIE9XTiBsb2cgaXMgdW50b3VjaGVkOiBpdHMgaW5uZXIgc3RhZ2VzIGRlY2xhcmUgdGhlaXIgb3duXG4gICAqIHRhZ3MsIGFuZCBgZHJpbGwobW91bnQpYCByZWFkcyB0aG9zZSBvZmYgdGhlIGlubmVyIGxvZy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgT05MWSB0YWcgc2l0ZSBmb3IgYSBmb3JrLWNoaWxkIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCkgb3JcbiAgICogYSBicmFuY2ggbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgKSDigJQgYWZ0ZXIgdGhvc2UgdGhlIGN1cnNvciBzdGlsbFxuICAgKiBwb2ludHMgYXQgdGhlIHBhcmVudCwgc28gYC50YWcoKWAgcmVmdXNlcyByYXRoZXIgdGhhbiBtaXMtYXR0cmlidXRlLiBBXG4gICAqIGxpbmVhciBtb3VudCAoYGFkZFN1YkZsb3dDaGFydE5leHRgKSBtb3ZlcyB0aGUgY3Vyc29yLCBzbyBgLnRhZygpYCB3b3Jrc1xuICAgKiB0aGVyZSB0b287IGRlY2xhcmUgaW4gb25lIHBsYWNlLCBub3QgYm90aC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAuYWRkU2VsZWN0b3JGdW5jdGlvbignU2xvdHMnLCBwaWNrU2xvdHMsICdzbG90cycpXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgnbWVtb3J5JywgbWVtb3J5Q2hhcnQsICdNZW1vcnknLCB7IHRhZ3M6IFsnc2xvdDptZW1vcnknXSB9KVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ3Rvb2xzJywgdG9vbHNDaGFydCwgJ1Rvb2xzJywgeyB0YWdzOiBbJ3Nsb3Q6dG9vbHMnXSB9KVxuICAgKiAuZW5kKClcbiAgICogYGBgXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgZmluYWwgc3RhdGUuIFRoZSB0cmF2ZXJzZXIncyByZWNvcmQgaG9sZHMgdGhlIExJVkUgaGVhcFxuICAgICAqIOKAlCB3aGF0IGEgcGxhaW4gYGdldFNuYXBzaG90KClgIGFuZCB0aGUgY2hlY2twb2ludCBzZWUuIFVuZGVyXG4gICAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCB0aGUgZXhlY3V0b3Igc2VydmVzIHRoZSBzdWJmbG93J3Mgb3duXG4gICAgICogcmVkYWN0ZWQgbWlycm9yIGhlcmUgaW5zdGVhZCAoOS4yMC4wOyBgaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHNgKSxcbiAgICAgKiB3aGljaCBpcyBleGFjdGx5IHdoYXQgYHN0YXRlQXRgIGZvbGRzIGBoaXN0b3J5YCB0by5cbiAgICAgKi9cbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gICAgLyoqIElkZW50aXR5IG9mIHRoZSBsb2NhbCBoaXN0b3J5LCBub3QgaXRzIHBhcmVudCdzIGxvZy4gKi9cbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIE9XTiBmb2xkIGJhc2Ug4oCUIHRoZSBzdGF0ZSBpdHMgaXNvbGF0ZWQgcnVudGltZSBzdGFydGVkXG4gICAgICogZnJvbSwgYmVmb3JlIGl0cyBmaXJzdCBjb21taXQuIFRoZSBzaWJsaW5nIG9mXG4gICAgICogYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLCBjYXJyaWVkIGhlcmUgc28gYSBzdWJmbG93J3MgYGhpc3RvcnlgXG4gICAgICogY2FuIGJlIGZvbGRlZCBvZmZsaW5lIGV4YWN0bHkgbGlrZSB0aGUgcnVuJ3MgbG9nIChgc3RhdGVBdGAsXG4gICAgICogYHRpbWVUcmF2ZWwoLi4uKS5kcmlsbChtb3VudClgKS4gRnJvemVuIGFuZCBkZXRhY2hlZC5cbiAgICAgKlxuICAgICAqIE5vcm1hbGx5IGB7fWA6IGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBpcyBpdHNlbGYgdGhlIGZpcnN0XG4gICAgICogQ09NTUlUIGluIGBoaXN0b3J5YCAodGhlIHJvb3QgY29udGV4dCBjb21taXRzIGl0KSwgbm90IGEgcHJlLXJ1biBiYXNlLlxuICAgICAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKSDigJQgdGhlIGdyYXBoIGV2ZXJ5IGlkIGluc2lkZSB0aGUgc3ViZmxvdyByZXNvbHZlcyBhZ2FpbnN0LiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyB3aGVuIG5vdCBhdCBgcm9vdGAg4oCUIGEgcmVzdW1lJ3NcbiAgICogb25lLXNob3QgcmUtZW50cnkgKGBSZXN1bWVIb3AuZW50cnlgKTogdGhlIG5leHQgbW91bnQgb24gdGhlIHBhdXNlIHBhdGgsXG4gICAqIG9yIHRoZSBwYXVzZWQgc3RhZ2UncyBzdGFuZC1pbiwgZWFjaCB3aXRoIGl0cyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uXG4gICAqIGF0dGFjaGVkLiBWaXNpdGVkIG9uY2UsIGZpcnN0OyBuZXZlciByZXNvbHZhYmxlIGJ5IGlkLlxuICAgKi9cbiAgZW50cnk/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBpbiB0aGlzIHN1YmZsb3cgKGBSZXN1bWVIb3AucGVuZGluZ1BhdXNlc2AsXG4gICAqIDkuMjguMCkg4oCUIHJhaXNlZCBpbiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzLlxuICAgKi9cbiAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKipcbiAgICogUkZDLTAwMyBEMTogcnVudGltZVN0YWdlSWQgb2YgdGhlIHN1YmZsb3cgTU9VTlQgc3RhZ2UgaW4gdGhlIHBhcmVudFxuICAgKiB0cmF2ZXJzZXIuIEJlY29tZXMgdGhlIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgZmFsbGJhY2sgZm9yIHRoZSBzdWJmbG93J3NcbiAgICogcm9vdCBzdGFnZSBzbyBydW50aW1lIGFuY2VzdG9yIGNoYWlucyBjcm9zcyBzdWJmbG93IGJvdW5kYXJpZXMuXG4gICAqL1xuICBwYXJlbnRNb3VudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0PjtcbiAgLyoqXG4gICAqIEZpbmFsIGJyZWFrIHN0YXRlIG9mIHRoZSBzdWJmbG93IGFmdGVyIGBleGVjdXRlKClgIHJldHVybnMuXG4gICAqXG4gICAqICAgLSBgc2hvdWxkQnJlYWs6IHRydWVgICDihpIgYSBzdGFnZSBpbnNpZGUgdGhlIHN1YmZsb3cgY2FsbGVkXG4gICAqICAgICBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLCBzdG9wcGluZyB0aGUgc3ViZmxvdydzIG93biB0cmF2ZXJzYWwuXG4gICAqICAgLSBgcmVhc29uYCAgICAgICAgICAgICDihpIgdGhlIG9wdGlvbmFsIHN0cmluZyBwYXNzZWQgdG8gYCRicmVha2AuXG4gICAqXG4gICAqIFVzZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgdG8gaW1wbGVtZW50IGBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrYDpcbiAgICogaWYgdGhlIG1vdW50IG9wdHMgaW4gQU5EIHRoZSBzdWJmbG93IGJyb2tlLCB0aGUgcGFyZW50J3MgYnJlYWsgZmxhZyBpc1xuICAgKiBmb3J3YXJkZWQuXG4gICAqL1xuICBnZXRCcmVha1N0YXRlKCk6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSdW50aW1lIEludGVyZmFjZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSUV4ZWN1dGlvblJ1bnRpbWUg4oCUIEludGVyZmFjZSBmb3IgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogRGVmaW5lcyB0aGUgY29udHJhY3QgdGhhdCBlbmdpbmUgaGFuZGxlcnMgbmVlZCBmcm9tIHRoZSBydW5uZXIgbGF5ZXIsXG4gKiBhdm9pZGluZyBjaXJjdWxhciBpbXBvcnRzIGJldHdlZW4gZW5naW5lLyBhbmQgcnVubmVyLy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXhlY3V0aW9uUnVudGltZSB7XG4gIGdsb2JhbFN0b3JlOiB7IGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0ZWQgbWlycm9yIG9mIGBnbG9iYWxTdG9yZWAg4oCUIHByZXNlbnQgd2hlbiB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGtlZXBzIG9uZSAoYFJ1blBvbGljeS5taXJyb3JgOiBhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSksIGVsc2UgYWJzZW50LlxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByZWFkcyBpdCB0byBzZXJ2ZSBhIHN1YmZsb3cncyBzdGF0ZSAoOS4yMC4wKS5cbiAgICovXG4gIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHJvb3RTdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgZXhlY3V0aW9uSGlzdG9yeTogeyBsaXN0KCk6IHVua25vd25bXSB9O1xuICAvKipcbiAgICogQSBmcmVzaCByb290IGZyYW1lIG9uIHRoaXMgcnVudGltZSDigJQgaXRzIHN0b3JlLCBpdHMgbG9nLCB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGFuZCBtaXJyb3IgKGBFeGVjdXRpb25SdW50aW1lLm5ld1Jvb3RgKS4gYFN1YmZsb3dFeGVjdXRvcmAgc3dhcHMgYVxuICAgKiBzdWJmbG93J3Mgc2VlZCBmcmFtZSBmb3IgdGhlIGZyYW1lIGl0cyBmaXJzdCBzdGFnZSBydW5zIG9uIHdpdGggaXQuXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dDtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIC8qKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgYmFzZSDigJQgc2VlIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYC4gKi9cbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKiogRHVhbC1rZXllZCBieSBzdWJmbG93IHBhdGggKGxhc3QgaXRlcmF0aW9uKSBBTkQgcGVyLWV4ZWN1dGlvbiBtb3VudCBydW50aW1lU3RhZ2VJZFxuICAgICAqICAoZWFjaCBpdGVyYXRpb24pIOKAlCBzZWUgUnVudGltZVNuYXBzaG90LnN1YmZsb3dSZXN1bHRzIC8gc3ViZmxvdy1jb21taXQtdmlzaWJpbGl0eS4gKi9cbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGVyZSBhIG1vdW50J3Mgb3duIGxvZyB3cml0ZXMgYXMgaXQgbGFuZHMgKDEwLjEsIFA2KSDigJQgdGhlIHJ1bidzIHNpbmsgYXQgdGhpcyBsb2cncyBhZGRyZXNzIHBsdXMgdGhlIG1vdW50J3NcbiAgICogYHJ1bnRpbWVTdGFnZUlkYC4gYHVuZGVmaW5lZGAgd2hlbiB0aGlzIHJ1bnRpbWUncyBsb2cgd3JpdGVzIHRvIG5vIHNpbmsuIGBTdWJmbG93RXhlY3V0b3JgIGhhbmRzIGl0IHRvIHRoZVxuICAgKiBuZXN0ZWQgcnVudGltZSBpdCBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcmVjb3JkRm9yPyhtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIG1ldGE/OiBNZXRhKTogdW5rbm93bjtcbiAgLyoqIFRlbGwgdGhlIHNpbmsgdGhpcyBydW50aW1lJ3MgbG9nIGVuZGVkICgxMC4xLCBQNikg4oCUIGEgbW91bnQncyBhdCBpdHMgZXhpdC4gTm8tb3Agd2l0aG91dCBhIHNpbmsuICovXG4gIGNsb3NlUmVjb3JkPyhvdXRjb21lOiBMb2dPdXRjb21lLCBtZXRhPzogTWV0YSk6IHZvaWQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqXG4gICAqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuIEhvbm91cmVkIGJ5IHRoZSBlbmdpbmUgKDEwLjEpOiBpdCBlbmRzIHRoZVxuICAgKiBydW4gbGlrZSBgUnVuT3B0aW9ucy5zaWduYWxgLiBVbmRlciBhIHJ1biB0aGF0IGhhcyBhIHNpZ25hbCBvciBhIGRlYWRsaW5lIEFORCBhbiBlbnYsIGEgc3RhZ2UgcmVhZHMgdGhlIHJ1bidzXG4gICAqIE9ORSBlZmZlY3RpdmUgc2lnbmFsIGhlcmUg4oCUIGBSdW5PcHRpb25zLnNpZ25hbGAsIHRoaXMgb25lIGFuZCB0aGUgZGVhZGxpbmUncyB0aW1lciwgY29tcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRpbWVvdXQgYnVkZ2V0IGluIG1pbGxpc2Vjb25kcy4gUmVhZGFibGUgb25seSDigJQgdGhlIHJ1bidzIGRlYWRsaW5lIGlzIHtAbGluayBkZWFkbGluZX0uICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiBXaXRoIGBvcGVyYXRpb25JZGAgKG9yIGFsb25lKSBpdCBiZWNvbWVzIHRoZSBydW4nc1xuICAgKiBgUnVuQ29ycmVsYXRpb25gOyBpdCB3aW5zIG92ZXIgdGhlIHRyYWNlIGlkIG9mIGB0cmFjZXBhcmVudGAuIDHigJMyNTYgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgd2l0aCBubyBzcGFjZVxuICAgKiAoc2luY2UgMTAuMSBhbnl0aGluZyBlbHNlIHJlamVjdHMgdGhlIHJ1biB3aXRoIGEgYFR5cGVFcnJvcmAgbmFtaW5nIHRoZSBmaWVsZCDigJQgdGhlIGlkIHJpZGVzIGV2ZXJ5IGV2ZW50KTtcbiAgICogYW4gZW1wdHkgc3RyaW5nIGlzIG5vIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjYWxsZXIncyB1bml0IG9mIHdvcmsgKFczQydzIHBhcmVudC1pZCkg4oCUIHBhcnQgb2YgdGhlIHJ1bidzIGBSdW5Db3JyZWxhdGlvbmA7IHdpbnMgb3ZlciB0aGUgaGVhZGVyJ3NcbiAgICogcGFyZW50LWlkLiBOZWVkcyBhIHRyYWNlOiBgdHJhY2VJZGAgb3IgYHRyYWNlcGFyZW50YCAocmVmdXNlZCBhbG9uZSkuIFNhbWUgY2hhcmFjdGVyIHJ1bGUgYXMgYHRyYWNlSWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIFczQyBgdHJhY2VwYXJlbnRgIGhlYWRlciwgdXN1YWxseSBzdHJhaWdodCBmcm9tIGFuIGluYm91bmQgcmVxdWVzdC4gUGFyc2VkIFNUUklDVExZIG9uY2UgcGVyIHJ1biDigJQgYVxuICAgKiBtYWxmb3JtZWQgb25lIHJlZnVzZXMgdGhlIHJ1biB3aXRoIGEgYFRyYWNlcGFyZW50RXJyb3JgIG5hbWluZyB0aGUgcmVhc29uIChuZXZlciB0aGUgaGVhZGVyKS4gU3RhZ2VzIHJlYWRcbiAgICogYmFjayAoYCRnZXRFbnYoKWApIGV4YWN0bHkgYFJ1bkNvcnJlbGF0aW9uLnRyYWNlcGFyZW50YCDigJQgdGhlIGNhbm9uaWNhbCBoZWFkZXIgb2YgdGhlIGVmZmVjdGl2ZSBpZHMg4oCUIG9yIG5vXG4gICAqIGtleSB3aGVuIHRoZSBydW4ncyBjb3JyZWxhdGlvbiBjYXJyaWVzIG5vbmUuIENvcnJlbGF0aW9uIG9ubHk6IG5ldmVyIGlkZW50aXR5IG9yIGF1dGhvcmlzYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0cmFjZXBhcmVudD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBydW4ncyBkZWFkbGluZSwgZXBvY2ggbWlsbGlzZWNvbmRzICgxMC4xKSDigJQgdGhlIGVhcmxpZXN0IG9mIGBSdW5PcHRpb25zLmRlYWRsaW5lYCwgYG5vdyArIFJ1bk9wdGlvbnMudGltZW91dE1zYFxuICAgKiBhbmQgYSBkZWFkbGluZSBnaXZlbiBoZXJlLiBUaGUgcnVuJ3Mgc2lnbmFsIGFib3J0cyB3aGVuIGl0IHBhc3NlczsgZXZlcnkgYXR0ZW1wdCBpcyBjYXBwZWQgYnkgdGhlIHRpbWUgbGVmdC5cbiAgICogSW5oZXJpdGVkIGJ5IHN1YmZsb3dzLiBSZWFkIGl0IHRocm91Z2ggYHNjb3BlLiRhdHRlbXB0KCkudGltZUxlZnRNcygpYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRsaW5lPzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogVGhlIHJlc3VtZSdzIG9uZS1zaG90IHJlLWVudHJ5IChNMikg4oCUIHNoYXJlZCBieSByZWZlcmVuY2Ugd2l0aCBldmVyeVxuICAgKiBuZXN0ZWQgdHJhdmVyc2VyLCBsaWtlIHRoZSBleGVjdXRpb24gY291bnRlci4gYFN1YmZsb3dFeGVjdXRvcmAgYXNrcyBpdFxuICAgKiBhdCBlYWNoIHN1YmZsb3cgZW50cnk6IHRoZSBGSVJTVCBlbnRyeSBpbnRvIGEgc3ViZmxvdyBvbiB0aGUgcGF1c2UgcGF0aFxuICAgKiB0YWtlcyB0aGF0IHN1YmZsb3cncyBjYXB0dXJlZCBzdGF0ZSAoc2VlZGluZyB0aGUgbmVzdGVkIHJ1bnRpbWUgaW4gcGxhY2VcbiAgICogb2YgdGhlIGlucHV0TWFwcGVyJ3MgdmFsdWVzIOKAlCB0aGUgbWFwcGVyIHN0aWxsIHJ1bnMgZm9yIHRoZSByZWFkLW9ubHlcbiAgICogYXJncyksIGl0cyBlbnRyeSBwb2ludCBhbmQgYW55IHNpYmxpbmcgcGF1c2VzIHdhaXRpbmcgdGhlcmU7IGV2ZXJ5IGxhdGVyXG4gICAqIGVudHJ5IGlzIGFuIG9yZGluYXJ5IG9uZS4gU2VlIGBSZXN1bWVFbnRyeWAuIFVuZGVmaW5lZCBvbiBub3JtYWwgYHJ1bigpYFxuICAgKiBwYXRocy5cbiAgICovXG4gIHJlc3VtZT86IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT47XG59XG5cbi8qKiBPcHRpb25zIGZvciBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuT3B0aW9ucyB7XG4gIC8qKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uLiBDb21wb3NlZCB3aXRoIGBlbnYuc2lnbmFsYCBhbmQgdGhlIGRlYWRsaW5lICgxMC4xKS4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kczogdGhlIHJ1bidzIGRlYWRsaW5lIGlzIGBub3cgKyB0aW1lb3V0TXNgLiBUaGUgcnVuIGFib3J0cyB3aGVuIGl0IHBhc3NlcyAocmVqZWN0aW5nIHdpdGhcbiAgICogYEV4ZWN1dGlvbiB0aW1lZCBvdXQgYWZ0ZXIgPHRpbWVvdXRNcz5tc2ApLCBzdGFnZXMgcmVhZCBpdCBhcyBgZW52LmRlYWRsaW5lYCwgYW5kIGV2ZXJ5IHN0YWdlIHJlY29yZHMgaXRzXG4gICAqIGF0dGVtcHQgKGBTdGFnZVNuYXBzaG90LmF0dGVtcHRzYCkuIEhvbm91cmVkIGJlc2lkZSBhIGBzaWduYWxgIHNpbmNlIDEwLjEgKGl0IHVzZWQgdG8gYmUgaWdub3JlZCB0aGVyZSkuXG4gICAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgZGVhZGxpbmUsIGVwb2NoIG1pbGxpc2Vjb25kcyAoMTAuMSkg4oCUIGBEYXRlLm5vdygpICsgMTIwXzAwMGAuIFNhbWUgZWZmZWN0IGFzIGB0aW1lb3V0TXNgOyB3aGVuIGJvdGhcbiAgICogYXJlIGdpdmVuLCB0aGUgZWFybGllciB3aW5zLiBBIGRlYWRsaW5lIGFscmVhZHkgcGFzdCBzdG9wcyB0aGUgcnVuIGJlZm9yZSBpdHMgZmlyc3Qgc3RhZ2UuIEEgcmVzdW1lZCBsZWcgaGFzXG4gICAqIGl0cyBvd246IHBhc3MgaXQgYWdhaW4gdG8gYHJlc3VtZSgpYC5cbiAgICovXG4gIGRlYWRsaW5lPzogbnVtYmVyO1xuICAvKipcbiAgICogUnVudGltZSBpbnB1dCBkYXRhIGZvciB0aGUgcGlwZWxpbmUuXG4gICAqIEJlY29tZXMgdGhlIHJlYWRPbmx5Q29udGV4dCBhY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0QXJncygpYC5cbiAgICogU3RhZ2VzIGNhbm5vdCBvdmVyd3JpdGUgdGhlc2Uga2V5cyB3aXRoIGBzZXRWYWx1ZSgpYC5cbiAgICovXG4gIGlucHV0PzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5IGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZVxuICAgKiB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMgKGxpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0cykuXG4gICAqIEFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRFbnYoKWAuIEluaGVyaXRlZCBieSBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgZW52PzogRXhlY3V0aW9uRW52O1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gbmVzdGVkIGBleGVjdXRlTm9kZWAgZGVwdGggZm9yIHRoaXMgcnVuLlxuICAgKiBEZWZhdWx0cyB0byBgRmxvd2NoYXJ0VHJhdmVyc2VyLk1BWF9FWEVDVVRFX0RFUFRIYCAoNTAwKS5cbiAgICpcbiAgICogRGVwdGggY291bnRzIFRSRUUgbmVzdGluZyBvbmx5IOKAlCBmb3JrIGNoaWxkcmVuLCBkZWNpZGVyL3NlbGVjdG9yIGJyYW5jaFxuICAgKiBkaXNwYXRjaCwgcmVjdXJzaXZlIGNvbXBvc2l0aW9uLiBMaW5lYXIgY2hhaW5zIGFuZCBsb29wIGl0ZXJhdGlvbnMgcnVuXG4gICAqIG9uIGEgZmxhdCB0cmFtcG9saW5lIGFuZCBuZXZlciBjb25zdW1lIGRlcHRoLCBzbyB0aGlzIHJhcmVseSBuZWVkc1xuICAgKiByYWlzaW5nLiBNdXN0IGJlID49IDEuXG4gICAqL1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIGxvb3AgaXRlcmF0aW9ucyBwZXIgbm9kZSBmb3IgdGhpcyBydW4gKHRoZVxuICAgKiBgQ29udGludWF0aW9uUmVzb2x2ZXJgIGluZmluaXRlLWxvb3AgZ3VhcmQpLiBEZWZhdWx0cyB0byAxMDAwLlxuICAgKiBUaGlzIGlzIHRoZSBiaW5kaW5nIGNvbnN0cmFpbnQgZm9yIGxvb3AtaGVhdnkgcGlwZWxpbmVzIOKAlCByYWlzZSBpdCBmb3JcbiAgICogbGVnaXRpbWF0ZWx5IGxvbmcgbG9vcHMgKGBsb29wVG9gIGNoYWlucyBydW4gd2l0aCBhIGZsYXQgc3RhY2ssIHNvIGhpZ2hcbiAgICogdmFsdWVzIGFyZSBzYWZlOyBtZW1vcnkgZm9yIHN0YXRlL25hcnJhdGl2ZSBzdGlsbCBncm93cyBwZXIgaXRlcmF0aW9uKS5cbiAgICogQWxzbyBib3VuZHMgdGhlIHJ1bi10b3RhbCBjaGFpbiBvZiBmdW5jdGlvbi1iZWFyaW5nIGR5bmFtaWMgYG5leHRgXG4gICAqIGNvbnRpbnVhdGlvbnMgKGZyZXNoIG5vZGVzIHJldHVybmVkIGZyb20gc3RhZ2VzKSDigJQgYSBydW5hd2F5IGR5bmFtaWNcbiAgICogY2hhaW4gZXJyb3JzIGluc3RlYWQgb2YgcnVubmluZyBmb3JldmVyLlxuICAgKiBQcm9wYWdhdGVzIHRvIHN1YmZsb3dzLiBNdXN0IGJlID49IDEuXG4gICAqL1xuICBtYXhJdGVyYXRpb25zPzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3cgQ29udHJvbCBOYXJyYXRpdmUg4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9ucyBsaXZlIGluIG1lbW9yeS90eXBlcy50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bnRpbWUgU3RydWN0dXJlIE1ldGFkYXRhICh1c2VkIGJ5IFJ1bnRpbWVTdHJ1Y3R1cmVNYW5hZ2VyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVN0cnVjdHVyZU1ldGFkYXRhIHtcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0ICh0eXBlIHN0YXlzIGAnZm9yaydgKS4gKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5vZGUgUmVzdWx0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgTm9kZVJlc3VsdFR5cGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHJlc3VsdDogdW5rbm93bjtcbiAgaXNFcnJvcj86IGJvb2xlYW47XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSZXNwb25zZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdCA9IHtcbiAgcmVzdWx0OiBzdHJpbmcgfCBFcnJvcjtcbiAgaXNFcnJvcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdHMgPSB7IFticmFuY2hJZDogc3RyaW5nXTogQnJhbmNoUmVzdWx0IH07XG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxSZXN1bHQgPSBCcmFuY2hSZXN1bHRzIHwgc3RyaW5nIHwgRXJyb3I7XG5cbi8qKiBSZXR1cm5lZCBieSBydW4oKS9yZXN1bWUoKSB3aGVuIGV4ZWN1dGlvbiBwYXVzZXMuICovXG5leHBvcnQgdHlwZSBQYXVzZWRSZXN1bHQgPSB7XG4gIHJlYWRvbmx5IHBhdXNlZDogdHJ1ZTtcbiAgcmVhZG9ubHkgY2hlY2twb2ludDogaW1wb3J0KCcuLi9wYXVzZS90eXBlcy5qcycpLkZsb3djaGFydENoZWNrcG9pbnQ7XG59O1xuXG4vKiogRnVsbCByZXR1cm4gdHlwZSBvZiBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKSBhbmQgcmVzdW1lKCkuICovXG5leHBvcnQgdHlwZSBFeGVjdXRvclJlc3VsdCA9IFRyYXZlcnNhbFJlc3VsdCB8IFBhdXNlZFJlc3VsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoZm9yIHZpc3VhbGl6YXRpb24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8ICdzdGFnZSdcbiAgICB8ICdkZWNpZGVyJ1xuICAgIHwgJ3NlbGVjdG9yJ1xuICAgIHwgJ2ZvcmsnXG4gICAgfCAnc3RyZWFtaW5nJ1xuICAgIHwgJ3N1YmZsb3cnXG4gICAgfCAnbG9vcCdcbiAgICB8ICd1c2VyJ1xuICAgIHwgJ3Rvb2wnXG4gICAgfCAnZnVuY3Rpb24nXG4gICAgfCAnc2VxdWVuY2UnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlO1xuICBicmFuY2hlcz86IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU+O1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBoYXNTdWJ0cmVlPzogYm9vbGVhbjtcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdGhpcyBzdGFnZSBjYW4gcGF1c2UgZXhlY3V0aW9uIChQYXVzYWJsZUhhbmRsZXIgcGF0dGVybikuICovXG4gIGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCDigJQgYnJhbmNoIENPVU5UIGRlY2lkZWQgYXQgcnVudGltZVxuICAgKiBmcm9tIHRoZSBwYXlsb2FkLiBBIGZsYWcsIG5vdCBhIHR5cGU6IGB0eXBlYCBzdGF5cyBgJ2ZvcmsnYCBzbyBldmVyeVxuICAgKiBleGlzdGluZyBjb25zdW1lciByZW5kZXJzIGl0IGNvcnJlY3RseSAoaXQgSVMgYSBmYW4tb3V0KSwgYW5kIGEgY29uc3VtZXJcbiAgICogdGhhdCB3YW50cyB0byBzYXkgXCJvbmUgYnJhbmNoIHBlciBpdGVtXCIgY2FuIHJlYWQgdGhpcy5cbiAgICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvdGFsIGF0dGVtcHRzIHRoaXMgc3RhZ2UncyBmdW5jdGlvbiBtYXkgcnVuLCBmcm9tIGl0cyBkZWNsYXJlZFxuICAgKiB7QGxpbmsgUmV0cnlQb2xpY3l9LiBQcmVzZW50IG9ubHkgd2hlbiBhIHBvbGljeSB3YXMgZGVjbGFyZWQuIFRoZSBDT1VOVFxuICAgKiBvbmx5IOKAlCBgYmFja29mZk1zYCBhbmQgYHJldHJ5T25gIGNhbiBiZSBmdW5jdGlvbnMsIHdoaWNoIGEgSlNPTi1zYWZlIHNwZWNcbiAgICogY2Fubm90IGNhcnJ5LlxuICAgKi9cbiAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMCkg4oCUIHRoZSBuYW1lcyB0aGUgYXV0aG9yIHB1dCBvbiB0aGlzIHN0YWdlIGF0IGJ1aWxkXG4gICAqIHRpbWUsIGNvcGllZCBhcy1pcy4gRnJlZSBzdHJpbmdzOyBmb290cHJpbnRqcyBhc3NpZ25zIHRoZW0gbm8gbWVhbmluZy5cbiAgICogQWJzZW50IHdoZW4gdGhlIHN0YWdlIGRlY2xhcmVzIG5vbmUuXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvd0NoYXJ0IGlzIGRlZmluZWQgaW4gYC4uL2J1aWxkZXIvdHlwZXMudHNgLiBUaGUgZW5naW5lIGxheWVyIGNvbnN1bWVzIGl0XG4vLyB2aWEgaW1wb3J0IGZyb20gdGhlcmUuIEEgZHVwbGljYXRlIG1pbmltYWwgZGVmaW5pdGlvbiBwcmV2aW91c2x5IGxpdmVkIGhlcmVcbi8vIGFuZCBjYXVzZWQgVFMgY29uZnVzaW9uIGF0IGNvbXBvc2l0aW9uIGJvdW5kYXJpZXMgKENvbXBvc2FibGVSdW5uZXIgdnNcbi8vIGFkZFN1YkZsb3dDaGFydCBwYXJhbWV0ZXIpLiBTaW5nbGUgc291cmNlIG9mIHRydXRoIG5vdyBsaXZlcyBpbiBidWlsZGVyLy5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQWxpYXMgZm9yIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgdXNlZCBhcyBmdWxsIHN0cnVjdHVyZSAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0gU2VyaWFsaXplZFBpcGVsaW5lTm9kZSAmIHtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufTtcbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWlCSCw4Q0FBOEU7QUFBckUseUdBQUEsYUFBYSxPQUFBO0FBQUUseUdBQUEsYUFBYSxPQUFBO0FBQUUsdUdBQUEsV0FBVyxPQUFBO0FBZWxELG9DQUFvQztBQUNwQyx3REFBd0Q7QUFDM0MsUUFBQSxhQUFhLEdBQVk7SUFDcEMsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN2RSxHQUFHLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3JFLEtBQUssRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQ3hFLENBQUM7QUF1SEYsOEVBQThFO0FBQzlFLFVBQVU7QUFDViw4RUFBOEU7QUFFOUU7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyw4QkFBZCxjQUFjLFFBS3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0eXBlcy50cyDigJQgQWxsIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbmdpbmUgbGlicmFyeS5cbiAqXG4gKiBDZW50cmFsaXplcyB0eXBlIGRlZmluaXRpb25zIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAqIEV2ZXJ5IGhhbmRsZXIgcmVjZWl2ZXMgSGFuZGxlckRlcHMgKHRoZSBESSBiYWcpIGluc3RlYWQgb2YgaW1wb3J0aW5nIHRoZSB0cmF2ZXJzZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzLCBMb2dPdXRjb21lLCBNZXRhIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB0eXBlIHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBRdWV1ZWRQYXVzZSwgUmVzdW1lRW50cnkgfSBmcm9tICcuL2hhbmRsZXJzL1Jlc3VtZUVudHJ5LmpzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgU3RhZ2VOb2RlIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vLyBSZS1leHBvcnQgcGF1c2UgdHlwZXMgZnJvbSBwYXVzZS8gbGlicmFyeVxuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlUmVzdWx0IH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1pbmltYWwgbG9nZ2luZyBjb250cmFjdC4gTWlycm9ycyBDb25zb2xlIEFQSSBzdWJzZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8qKiBEZWZhdWx0IGNvbnNvbGUtYmFzZWQgbG9nZ2VyLiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLS0gdHJpdmlhbCBjb25zb2xlIGRlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBJTG9nZ2VyID0ge1xuICBpbmZvOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICB3YXJuOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5hcmdzKSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2UgRnVuY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0b2tlbnMgZHVyaW5nIHN0cmVhbWluZy4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3Igc3RhZ2UgaGFuZGxlcnMuXG4gKiAtIFRPdXQ6IHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogLSBUU2NvcGU6IHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICogLSBPcHRpb25hbCAzcmQgcGFyYW1ldGVyIGBzdHJlYW1DYWxsYmFja2AgaW5qZWN0ZWQgZm9yIHN0cmVhbWluZyBzdGFnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0IHwgdm9pZD4gfCBUT3V0IHwgdm9pZDtcblxuLyoqXG4gKiBTdGFnZSBmdW5jdGlvbiBmb3IgcGF1c2FibGUgc3RhZ2VzIOKAlCByZXR1cm4gdmFsdWUgaXMgdGhlIHBhdXNlIGRhdGEgKGFueSB0eXBlKS5cbiAqIFJldHVybiBub24tdm9pZCB0byBwYXVzZSwgcmV0dXJuIHZvaWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdXNhYmxlU3RhZ2VGdW5jdGlvbjxUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcblxuLyoqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgc2NvcGUgaW5zdGFuY2UgZm9yIGVhY2ggc3RhZ2UuICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlID0gYW55PiA9IChcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52LFxuKSA9PiBUU2NvcGU7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU3RyZWFtVG9rZW5IYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIGZ1bGxUZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUhhbmRsZXJzIHtcbiAgb25Ub2tlbj86IFN0cmVhbVRva2VuSGFuZGxlcjtcbiAgb25TdGFydD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG4gIG9uRW5kPzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJhbGxlbC1mb3ItZWFjaCAoZHluYW1pYyBmYW4tb3V0KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQSBidWlsdCBjaGFydCwgYXMgYGFkZFBhcmFsbGVsRm9yRWFjaGAncyBgYnJhbmNoYCBmYWN0b3J5IHJldHVybnMgaXQuXG4gKlxuICogU3RydWN0dXJhbGx5IHRoZSBzdWJzZXQgb2YgYEZsb3dDaGFydGAgdGhlIGVuZ2luZSBuZWVkcyB0byBtb3VudCBhIGJyYW5jaCDigJRcbiAqIGRlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gYGVuZ2luZS9gIGtlZXBzIGl0cyBvbmUtd2F5IGRlcGVuZGVuY3lcbiAqIG9uIGBidWlsZGVyL2AuIEFueSBgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKWAgcmVzdWx0IHNhdGlzZmllcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8qKlxuICogUnVudGltZSBmYW4tb3V0IGNvbmZpZyDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIENPVU5UIGRlY2lkZWQgYXRcbiAqIHJ1bnRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDIpLlxuICpcbiAqIEVhY2ggYnJhbmNoIHJ1bnMgYXMgYSBnZW5lcmF0ZWQgU1VCRkxPVyAoaXNvbGF0ZWQgcnVudGltZSwgb3duIGNvbW1pdCBsb2csXG4gKiBhZGRyZXNzYWJsZSBhdCBgPHN0YWdlSWQ+fjxpbmRleD5gIGluIGV2ZXJ5IHRyYWNlIHF1ZXJ5KSwgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgYnJhbmNoZXMgdW5hYmxlIHRvIGNvcnJ1cHQgZWFjaCBvdGhlcidzIGluLWZsaWdodCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hDb25maWc8VEl0ZW0gPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogUGlja3MgdGhlIGl0ZW1zIHRvIGZhbiBvdXQgb3ZlciwgZnJvbSB0aGUgbGl2ZSBzY29wZS4gUmVhZHMgaGVyZSBhcmVcbiAgICogdHJhY2tlZCBsaWtlIGFueSBvdGhlciBzdGFnZSByZWFkLCBzbyB0aGUgZmFuLW91dCdzIG93biBpbnB1dHMgc2hvdyB1cCBpblxuICAgKiB0aGUgdHJhY2UgYW5kIGluIGEgYmFja3dhcmQgc2xpY2UuXG4gICAqL1xuICBpdGVtczogKHNjb3BlOiBUU2NvcGUpID0+IHJlYWRvbmx5IFRJdGVtW107XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNoYXJ0IGZvciBPTkUgaXRlbS4gQ2FsbGVkIG9uY2UgcGVyIGV4ZWN1dGVkIGJyYW5jaCwgd2l0aCB0aGVcbiAgICogaXRlbSBhbmQgaXRzIGluZGV4IOKAlCBjbG9zZSBvdmVyIHRoZW0sIG9yIHJlYWQgdGhlIGBpdGVtYCAvIGBpbmRleGAgdmFsdWVzXG4gICAqIHNlZWRlZCBpbnRvIHRoZSBicmFuY2gncyBvd24gc2NvcGUuXG4gICAqL1xuICBicmFuY2g6IChpdGVtOiBUSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gQnJhbmNoQ2hhcnQ7XG4gIC8qKlxuICAgKiBIYXJkIGNlaWxpbmcgb24gYnJhbmNoZXMgcGVyIGV4ZWN1dGlvbi4gUkVRVUlSRUQ6IGFuIHVuYm91bmRlZCBmYW4tb3V0XG4gICAqIGRyaXZlbiBieSBtb2RlbCBvdXRwdXQgaXMgYSByZXNvdXJjZSBhdHRhY2ssIHNvIHRoZXJlIGlzIG5vIGRlZmF1bHQgdG9cbiAgICogZm9yZ2V0LiBFeHRyYSBpdGVtcyBkbyBub3QgcnVuIOKAlCB0aGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgbWF4QnJhbmNoZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFN0YXRlIGtleSB0aGUgb3JkZXJlZCByZXN1bHRzIGFycmF5IGlzIHdyaXR0ZW4gdG8gb24gdGhlIHBhcmVudCBzY29wZS5cbiAgICogUkVRVUlSRUQg4oCUIGEga2V5IGRlcml2ZWQgZnJvbSB0aGUgc3RhZ2UgaWQgY291bGQgc2lsZW50bHkgb3ZlcndyaXRlIHN0YXRlXG4gICAqIHRoZSBjaGFydCBhbHJlYWR5IG93bnMuXG4gICAqL1xuICBpbnRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYW4tb3V0IGVycm9yIHBvbGljeSDigJQgdGhlIFNBTUUgcG9saWN5IHRoZSBleGlzdGluZyBwYXJhbGxlbCBmYW4tb3V0IHVzZXMuXG4gICAqIGB0cnVlYCA9IGBQcm9taXNlLmFsbGAgKHRoZSBmaXJzdCBmYWlsaW5nIGJyYW5jaCByZWplY3RzIHRoZSBzdGFnZSk7XG4gICAqIG9taXR0ZWQvZmFsc2UgPSBiZXN0LWVmZm9ydCBgUHJvbWlzZS5hbGxTZXR0bGVkYCAoZXZlcnkgYnJhbmNoIHJ1bnM7IGFcbiAgICogZmFpbGVkIGJyYW5jaCdzIHNsb3QgaW4gdGhlIHJlc3VsdHMgYXJyYXkgaXMgYHVuZGVmaW5lZGApLlxuICAgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHJ5IChwZXItc3RhZ2UgZGVjbGFyYXRpdmUgcG9saWN5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRoZSBwb2xpY3kgdGhlIGF0dGVtcHQgcnVubmVyIHJ1bnM6IGRlY2xhcmVkIG9uY2UsIGluIHRoZSBhdHRlbXB0IGxlYWYgKGBhdHRlbXB0L3R5cGVzLnRzYCwgMTAuMSksIGFuZCBuYW1lZFxuLy8gaGVyZSBzbyBldmVyeSBlbmdpbmUgYW5kIGJ1aWxkZXIgc2l0ZSBrZWVwcyBpdHMgaW1wb3J0LlxuZXhwb3J0IHR5cGUgeyBSZXRyeVBvbGljeSwgU3RhZ2VUb3VjaGVzIH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiB0aGUgZG93bnN0cmVhbSBzdGFnZSBpZCB0aGlzIGJyYW5jaCdzIGNvbnZlcmdlbmNlIGVkZ2VcbiAgICogcG9pbnRzIHRvLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IFwiY29udmVyZ2UgYXQgdGhlIG5leHQgbGluZWFyIHN0YWdlLlwiXG4gICAqXG4gICAqIFdoZW4gYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoIGNhcnJpZXMgYGNvbnZlcmdlQXRgLCBpdHMgdmlzdWFsaXplZFxuICAgKiBgbmV4dGAgZWRnZSBpcyBmaXJlZCB0byB0aGUgbmFtZWQgc3RhZ2UgaW5zdGVhZCBvZiB0byB0aGUgc2hhcmVkXG4gICAqIGNvbnZlcmdlbmNlIG5vZGUgaXRzIHNpYmxpbmdzIHVzZS4gVGhpcyBleHByZXNzZXMgYW4gdW5lcXVhbC1kZXB0aCBtZXJnZVxuICAgKiDigJQgZS5nLiBhIGB0b29sc2Agc2xvdCB0aGF0IGJ5cGFzc2VzIHRoZSBgbWVzc2FnZUFQSWAgYXNzZW1ibHkgbm9kZSBhbmRcbiAgICogcGFpcnMgd2l0aCBpdHMgb3V0cHV0IGF0IGBjYWxsLWxsbWAgKHNvIGBjYWxsLWxsbWAgcmVhZHMgYXMgYSAyLXBhcmVudFxuICAgKiBtZXJnZSksIGZhaXRoZnVsIHRvIHRoZSBBbnRocm9waWMgd2lyZSBwcm90b2NvbCAoc3lzdGVtK21lc3NhZ2VzID0gdGhlXG4gICAqIG1lc3NhZ2UgcGF5bG9hZDsgdG9vbHMgPSBhIHNlcGFyYXRlIHRvcC1sZXZlbCBmaWVsZCkuXG4gICAqXG4gICAqICoqVGhpcyBhZmZlY3RzIHRoZSBTVFJVQ1RVUkUvdG9wb2xvZ3kgZ3JhcGggb25seSoqIOKAlCB0aGUgcnVudGltZSBpc1xuICAgKiB1bmNoYW5nZWQgKHRoZSBicmFuY2gncyBvdXRwdXRzIHJpZGUgc2hhcmVkIHNjb3BlOyB0aGUgbmFtZWQgdGFyZ2V0IHJlYWRzXG4gICAqIHRoZW0gd2hlbiBpdCBydW5zKS4gSXQgZG9lcyBOT1QgaW50cm9kdWNlIGEgam9pbiBiYXJyaWVyLiBUaGUgdGFyZ2V0IGlzIGFcbiAgICogRk9SV0FSRCBzdGFnZSAoYWRkZWQgbGF0ZXIgaW4gdGhlIGNoYWluKSwgc28gaXQgaXMgbm90IHZhbGlkYXRlZCBhdFxuICAgKiBicmFuY2gtZGVjbGFyYXRpb24gdGltZS5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMSkgZm9yIHRoZSBNT1VOVCBpdHNlbGYg4oCUIHRoZSBOQU1FUyB0aGUgYXV0aG9yIHB1dHNcbiAgICogb24gdGhpcyBtb3VudCBhdCBidWlsZCB0aW1lLCBsYW5kZWQgYnkgdGhlIHNhbWUgYGFwcGx5VGFnc2AgZXZlcnkgb3RoZXJcbiAgICogYG9wdGlvbnMudGFnc2Agc2l0ZSB1c2VzLCB3aXRoIHRoZSBzYW1lIHJlZnVzYWxzIChlbXB0eSwgbm9uLXN0cmluZywgdGhlXG4gICAqIHJlc2VydmVkIGB+YCBtYXJrZXIsIGEgZHVwbGljYXRlLCBhIHNlY29uZCBkZWNsYXJhdGlvbikuXG4gICAqXG4gICAqIEEgbW91bnQgaXMgYSBzdGFnZSB0aGF0IGNvbW1pdHM6IGl0cyBmaXJzdCBidW5kbGUgaW4gdGhlIFBBUkVOVCBsb2cgaXMgYVxuICAgKiBzdG9wIGluIGBjb21taXRTdG9wc2AsIHNvIGB0YWdTdG9wc2Aga2VlcHMgaXQgbGlrZSBhbnkgdGFnZ2VkIHN0YWdlIGFuZFxuICAgKiBjYXJyaWVzIHRoZXNlIG5hbWVzIGFzIGBTdG9wLm1ldGFgLiBTdGFtcGVkIG9uIHRoYXQgZmlyc3QgYnVuZGxlIG9ubHlcbiAgICogKHRoZSBtb3VudCdzIGV4aXQgYnVuZGxlIGNhcnJpZXMgbm9uZSDigJQgdGhlIG9uY2UtcGVyLWV4ZWN1dGlvbiBsYXcpLlxuICAgKiBUaGUgc3ViZmxvdydzIE9XTiBsb2cgaXMgdW50b3VjaGVkOiBpdHMgaW5uZXIgc3RhZ2VzIGRlY2xhcmUgdGhlaXIgb3duXG4gICAqIHRhZ3MsIGFuZCBgZHJpbGwobW91bnQpYCByZWFkcyB0aG9zZSBvZmYgdGhlIGlubmVyIGxvZy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgT05MWSB0YWcgc2l0ZSBmb3IgYSBmb3JrLWNoaWxkIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCkgb3JcbiAgICogYSBicmFuY2ggbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgKSDigJQgYWZ0ZXIgdGhvc2UgdGhlIGN1cnNvciBzdGlsbFxuICAgKiBwb2ludHMgYXQgdGhlIHBhcmVudCwgc28gYC50YWcoKWAgcmVmdXNlcyByYXRoZXIgdGhhbiBtaXMtYXR0cmlidXRlLiBBXG4gICAqIGxpbmVhciBtb3VudCAoYGFkZFN1YkZsb3dDaGFydE5leHRgKSBtb3ZlcyB0aGUgY3Vyc29yLCBzbyBgLnRhZygpYCB3b3Jrc1xuICAgKiB0aGVyZSB0b287IGRlY2xhcmUgaW4gb25lIHBsYWNlLCBub3QgYm90aC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAuYWRkU2VsZWN0b3JGdW5jdGlvbignU2xvdHMnLCBwaWNrU2xvdHMsICdzbG90cycpXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgnbWVtb3J5JywgbWVtb3J5Q2hhcnQsICdNZW1vcnknLCB7IHRhZ3M6IFsnc2xvdDptZW1vcnknXSB9KVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ3Rvb2xzJywgdG9vbHNDaGFydCwgJ1Rvb2xzJywgeyB0YWdzOiBbJ3Nsb3Q6dG9vbHMnXSB9KVxuICAgKiAuZW5kKClcbiAgICogYGBgXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgZmluYWwgc3RhdGUuIFRoZSB0cmF2ZXJzZXIncyByZWNvcmQgaG9sZHMgdGhlIExJVkUgaGVhcFxuICAgICAqIOKAlCB3aGF0IGEgcGxhaW4gYGdldFNuYXBzaG90KClgIGFuZCB0aGUgY2hlY2twb2ludCBzZWUuIFVuZGVyXG4gICAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCB0aGUgZXhlY3V0b3Igc2VydmVzIHRoZSBzdWJmbG93J3Mgb3duXG4gICAgICogcmVkYWN0ZWQgbWlycm9yIGhlcmUgaW5zdGVhZCAoOS4yMC4wOyBgaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHNgKSxcbiAgICAgKiB3aGljaCBpcyBleGFjdGx5IHdoYXQgYHN0YXRlQXRgIGZvbGRzIGBoaXN0b3J5YCB0by5cbiAgICAgKi9cbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gICAgLyoqIFVua25vd24gdW50aWwgZWFjaCBjaGlsZCBpbnZvY2F0aW9uIGhhcyBpdHMgb3duIHNvdXJjZSBvd25lcnNoaXAgcHJvdG9jb2wuICovXG4gICAgcmVhZG9ubHkgcmVhZFNvdXJjZXM/OiBpbXBvcnQoJy4uL2NhcHR1cmUvcmVhZFNvdXJjZXMuanMnKS5FbmdpbmVSZWFkU291cmNlcztcbiAgICAvKiogSWRlbnRpdHkgb2YgdGhlIGxvY2FsIGhpc3RvcnksIG5vdCBpdHMgcGFyZW50J3MgbG9nLiAqL1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgT1dOIGZvbGQgYmFzZSDigJQgdGhlIHN0YXRlIGl0cyBpc29sYXRlZCBydW50aW1lIHN0YXJ0ZWRcbiAgICAgKiBmcm9tLCBiZWZvcmUgaXRzIGZpcnN0IGNvbW1pdC4gVGhlIHNpYmxpbmcgb2ZcbiAgICAgKiBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAsIGNhcnJpZWQgaGVyZSBzbyBhIHN1YmZsb3cncyBgaGlzdG9yeWBcbiAgICAgKiBjYW4gYmUgZm9sZGVkIG9mZmxpbmUgZXhhY3RseSBsaWtlIHRoZSBydW4ncyBsb2cgKGBzdGF0ZUF0YCxcbiAgICAgKiBgdGltZVRyYXZlbCguLi4pLmRyaWxsKG1vdW50KWApLiBGcm96ZW4gYW5kIGRldGFjaGVkLlxuICAgICAqXG4gICAgICogTm9ybWFsbHkgYHt9YDogYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIGlzIGl0c2VsZiB0aGUgZmlyc3RcbiAgICAgKiBDT01NSVQgaW4gYGhpc3RvcnlgICh0aGUgcm9vdCBjb250ZXh0IGNvbW1pdHMgaXQpLCBub3QgYSBwcmUtcnVuIGJhc2UuXG4gICAgICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpIOKAlCB0aGUgZ3JhcGggZXZlcnkgaWQgaW5zaWRlIHRoZSBzdWJmbG93IHJlc29sdmVzIGFnYWluc3QuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogV2hlcmUgdGhlIHN1YmZsb3cncyB0cmF2ZXJzYWwgc3RhcnRzIHdoZW4gbm90IGF0IGByb290YCDigJQgYSByZXN1bWUnc1xuICAgKiBvbmUtc2hvdCByZS1lbnRyeSAoYFJlc3VtZUhvcC5lbnRyeWApOiB0aGUgbmV4dCBtb3VudCBvbiB0aGUgcGF1c2UgcGF0aCxcbiAgICogb3IgdGhlIHBhdXNlZCBzdGFnZSdzIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb25cbiAgICogYXR0YWNoZWQuIFZpc2l0ZWQgb25jZSwgZmlyc3Q7IG5ldmVyIHJlc29sdmFibGUgYnkgaWQuXG4gICAqL1xuICBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGluIHRoaXMgc3ViZmxvdyAoYFJlc3VtZUhvcC5wZW5kaW5nUGF1c2VzYCxcbiAgICogOS4yOC4wKSDigJQgcmFpc2VkIGluIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMuXG4gICAqL1xuICBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQxOiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgc3ViZmxvdyBNT1VOVCBzdGFnZSBpbiB0aGUgcGFyZW50XG4gICAqIHRyYXZlcnNlci4gQmVjb21lcyB0aGUgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBmYWxsYmFjayBmb3IgdGhlIHN1YmZsb3cnc1xuICAgKiByb290IHN0YWdlIHNvIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW5zIGNyb3NzIHN1YmZsb3cgYm91bmRhcmllcy5cbiAgICovXG4gIHBhcmVudE1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgLyoqXG4gICAqIFRoZSByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYCDigJQgcHJlc2VudCB3aGVuIHRoZSBydW4ncyBwb2xpY3lcbiAgICoga2VlcHMgb25lIChgUnVuUG9saWN5Lm1pcnJvcmA6IGEgcnVuIHdpdGggYSByZWRhY3Rpb24gcG9saWN5KSwgZWxzZSBhYnNlbnQuXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJlYWRzIGl0IHRvIHNlcnZlIGEgc3ViZmxvdydzIHN0YXRlICg5LjIwLjApLlxuICAgKi9cbiAgcmVkYWN0ZWRTdG9yZT86IFNoYXJlZE1lbW9yeTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIC8qKlxuICAgKiBBIGZyZXNoIHJvb3QgZnJhbWUgb24gdGhpcyBydW50aW1lIOKAlCBpdHMgc3RvcmUsIGl0cyBsb2csIHRoZSBydW4ncyBwb2xpY3lcbiAgICogYW5kIG1pcnJvciAoYEV4ZWN1dGlvblJ1bnRpbWUubmV3Um9vdGApLiBgU3ViZmxvd0V4ZWN1dG9yYCBzd2FwcyBhXG4gICAqIHN1YmZsb3cncyBzZWVkIGZyYW1lIGZvciB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24gd2l0aCBpdC5cbiAgICovXG4gIG5ld1Jvb3QobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nKTogU3RhZ2VDb250ZXh0O1xuICBnZXRTbmFwc2hvdChvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0pOiB7XG4gICAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGV4ZWN1dGlvblRyZWU6IHVua25vd247XG4gICAgLyoqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBiYXNlIOKAlCBzZWUgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLiAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IHJlYWRTb3VyY2VzPzogaW1wb3J0KCcuLi9jYXB0dXJlL3JlYWRTb3VyY2VzLmpzJykuRW5naW5lUmVhZFNvdXJjZXM7XG4gICAgcmVhZG9ubHkgbG9nQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gICAgLyoqIER1YWwta2V5ZWQgYnkgc3ViZmxvdyBwYXRoIChsYXN0IGl0ZXJhdGlvbikgQU5EIHBlci1leGVjdXRpb24gbW91bnQgcnVudGltZVN0YWdlSWRcbiAgICAgKiAgKGVhY2ggaXRlcmF0aW9uKSDigJQgc2VlIFJ1bnRpbWVTbmFwc2hvdC5zdWJmbG93UmVzdWx0cyAvIHN1YmZsb3ctY29tbWl0LXZpc2liaWxpdHkuICovXG4gICAgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZWNvcmRlcnM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbiAgc2V0Um9vdE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgZ2V0UGlwZWxpbmVzKCk6IHN0cmluZ1tdO1xuICAvKipcbiAgICogV2hlcmUgYSBtb3VudCdzIG93biBsb2cgd3JpdGVzIGFzIGl0IGxhbmRzICgxMC4xLCBQNikg4oCUIHRoZSBydW4ncyBzaW5rIGF0IHRoaXMgbG9nJ3MgYWRkcmVzcyBwbHVzIHRoZSBtb3VudCdzXG4gICAqIGBydW50aW1lU3RhZ2VJZGAuIGB1bmRlZmluZWRgIHdoZW4gdGhpcyBydW50aW1lJ3MgbG9nIHdyaXRlcyB0byBubyBzaW5rLiBgU3ViZmxvd0V4ZWN1dG9yYCBoYW5kcyBpdCB0byB0aGVcbiAgICogbmVzdGVkIHJ1bnRpbWUgaXQgY29uc3RydWN0cy5cbiAgICovXG4gIHJlY29yZEZvcj8obW91bnRSdW50aW1lU3RhZ2VJZDogc3RyaW5nLCBtZXRhPzogTWV0YSk6IHVua25vd247XG4gIC8qKiBUZWxsIHRoZSBzaW5rIHRoaXMgcnVudGltZSdzIGxvZyBlbmRlZCAoMTAuMSwgUDYpIOKAlCBhIG1vdW50J3MgYXQgaXRzIGV4aXQuIE5vLW9wIHdpdGhvdXQgYSBzaW5rLiAqL1xuICBjbG9zZVJlY29yZD8ob3V0Y29tZTogTG9nT3V0Y29tZSwgbWV0YT86IE1ldGEpOiB2b2lkO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBwcm9wYWdhdGVzIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXhlY3V0aW9uRW52IOKAlCBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzLlxuICpcbiAqIExpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0czogcmVhZC1vbmx5LCBpbmhlcml0ZWQgYnkgY2hpbGQgZXhlY3V0b3JzLFxuICogaW5mcmFzdHJ1Y3R1cmUtb25seSAobm90IGJ1c2luZXNzIGxvZ2ljKS5cbiAqXG4gKiBMaXRtdXMgdGVzdDogQ3JlYXRlZCBleHRlcm5hbCB0byB0aGUgZmxvd2NoYXJ0ICsgcGFzc2VkIGluIGZvciBleGVjdXRpb24gPSBlbnYuXG4gKiBCdXNpbmVzcyBjb25maWcgZm9yIGEgc3BlY2lmaWMgZmxvd2NoYXJ0ID0gYXJncyAoZ2V0QXJncygpKS5cbiAqXG4gKiBJbnRlbnRpb25hbGx5IGEgY2xvc2VkIHR5cGUg4oCUIG5vdCBleHRlbnNpYmxlIHRvIHByZXZlbnQgY291cGxpbmcgYmV0d2VlblxuICogcGFyZW50IGFuZCBjaGlsZCBmbG93Y2hhcnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkVudiB7XG4gIC8qKlxuICAgKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uIGFjcm9zcyBuZXN0ZWQgZXhlY3V0b3JzLiBIb25vdXJlZCBieSB0aGUgZW5naW5lICgxMC4xKTogaXQgZW5kcyB0aGVcbiAgICogcnVuIGxpa2UgYFJ1bk9wdGlvbnMuc2lnbmFsYC4gVW5kZXIgYSBydW4gdGhhdCBoYXMgYSBzaWduYWwgb3IgYSBkZWFkbGluZSBBTkQgYW4gZW52LCBhIHN0YWdlIHJlYWRzIHRoZSBydW4nc1xuICAgKiBPTkUgZWZmZWN0aXZlIHNpZ25hbCBoZXJlIOKAlCBgUnVuT3B0aW9ucy5zaWduYWxgLCB0aGlzIG9uZSBhbmQgdGhlIGRlYWRsaW5lJ3MgdGltZXIsIGNvbXBvc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuIFJlYWRhYmxlIG9ubHkg4oCUIHRoZSBydW4ncyBkZWFkbGluZSBpcyB7QGxpbmsgZGVhZGxpbmV9LiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gV2l0aCBgb3BlcmF0aW9uSWRgIChvciBhbG9uZSkgaXQgYmVjb21lcyB0aGUgcnVuJ3NcbiAgICogYFJ1bkNvcnJlbGF0aW9uYDsgaXQgd2lucyBvdmVyIHRoZSB0cmFjZSBpZCBvZiBgdHJhY2VwYXJlbnRgLiAx4oCTMjU2IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIHdpdGggbm8gc3BhY2VcbiAgICogKHNpbmNlIDEwLjEgYW55dGhpbmcgZWxzZSByZWplY3RzIHRoZSBydW4gd2l0aCBhIGBUeXBlRXJyb3JgIG5hbWluZyB0aGUgZmllbGQg4oCUIHRoZSBpZCByaWRlcyBldmVyeSBldmVudCk7XG4gICAqIGFuIGVtcHR5IHN0cmluZyBpcyBubyBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWNlSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGVyJ3MgdW5pdCBvZiB3b3JrIChXM0MncyBwYXJlbnQtaWQpIOKAlCBwYXJ0IG9mIHRoZSBydW4ncyBgUnVuQ29ycmVsYXRpb25gOyB3aW5zIG92ZXIgdGhlIGhlYWRlcidzXG4gICAqIHBhcmVudC1pZC4gTmVlZHMgYSB0cmFjZTogYHRyYWNlSWRgIG9yIGB0cmFjZXBhcmVudGAgKHJlZnVzZWQgYWxvbmUpLiBTYW1lIGNoYXJhY3RlciBydWxlIGFzIGB0cmFjZUlkYC5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBXM0MgYHRyYWNlcGFyZW50YCBoZWFkZXIsIHVzdWFsbHkgc3RyYWlnaHQgZnJvbSBhbiBpbmJvdW5kIHJlcXVlc3QuIFBhcnNlZCBTVFJJQ1RMWSBvbmNlIHBlciBydW4g4oCUIGFcbiAgICogbWFsZm9ybWVkIG9uZSByZWZ1c2VzIHRoZSBydW4gd2l0aCBhIGBUcmFjZXBhcmVudEVycm9yYCBuYW1pbmcgdGhlIHJlYXNvbiAobmV2ZXIgdGhlIGhlYWRlcikuIFN0YWdlcyByZWFkXG4gICAqIGJhY2sgKGAkZ2V0RW52KClgKSBleGFjdGx5IGBSdW5Db3JyZWxhdGlvbi50cmFjZXBhcmVudGAg4oCUIHRoZSBjYW5vbmljYWwgaGVhZGVyIG9mIHRoZSBlZmZlY3RpdmUgaWRzIOKAlCBvciBub1xuICAgKiBrZXkgd2hlbiB0aGUgcnVuJ3MgY29ycmVsYXRpb24gY2FycmllcyBub25lLiBDb3JyZWxhdGlvbiBvbmx5OiBuZXZlciBpZGVudGl0eSBvciBhdXRob3Jpc2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhY2VwYXJlbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgZGVhZGxpbmUsIGVwb2NoIG1pbGxpc2Vjb25kcyAoMTAuMSkg4oCUIHRoZSBlYXJsaWVzdCBvZiBgUnVuT3B0aW9ucy5kZWFkbGluZWAsIGBub3cgKyBSdW5PcHRpb25zLnRpbWVvdXRNc2BcbiAgICogYW5kIGEgZGVhZGxpbmUgZ2l2ZW4gaGVyZS4gVGhlIHJ1bidzIHNpZ25hbCBhYm9ydHMgd2hlbiBpdCBwYXNzZXM7IGV2ZXJ5IGF0dGVtcHQgaXMgY2FwcGVkIGJ5IHRoZSB0aW1lIGxlZnQuXG4gICAqIEluaGVyaXRlZCBieSBzdWJmbG93cy4gUmVhZCBpdCB0aHJvdWdoIGBzY29wZS4kYXR0ZW1wdCgpLnRpbWVMZWZ0TXMoKWAuXG4gICAqL1xuICByZWFkb25seSBkZWFkbGluZT86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRoZSByZXN1bWUncyBvbmUtc2hvdCByZS1lbnRyeSAoTTIpIOKAlCBzaGFyZWQgYnkgcmVmZXJlbmNlIHdpdGggZXZlcnlcbiAgICogbmVzdGVkIHRyYXZlcnNlciwgbGlrZSB0aGUgZXhlY3V0aW9uIGNvdW50ZXIuIGBTdWJmbG93RXhlY3V0b3JgIGFza3MgaXRcbiAgICogYXQgZWFjaCBzdWJmbG93IGVudHJ5OiB0aGUgRklSU1QgZW50cnkgaW50byBhIHN1YmZsb3cgb24gdGhlIHBhdXNlIHBhdGhcbiAgICogdGFrZXMgdGhhdCBzdWJmbG93J3MgY2FwdHVyZWQgc3RhdGUgKHNlZWRpbmcgdGhlIG5lc3RlZCBydW50aW1lIGluIHBsYWNlXG4gICAqIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlcyDigJQgdGhlIG1hcHBlciBzdGlsbCBydW5zIGZvciB0aGUgcmVhZC1vbmx5XG4gICAqIGFyZ3MpLCBpdHMgZW50cnkgcG9pbnQgYW5kIGFueSBzaWJsaW5nIHBhdXNlcyB3YWl0aW5nIHRoZXJlOyBldmVyeSBsYXRlclxuICAgKiBlbnRyeSBpcyBhbiBvcmRpbmFyeSBvbmUuIFNlZSBgUmVzdW1lRW50cnlgLiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWBcbiAgICogcGF0aHMuXG4gICAqL1xuICByZXN1bWU/OiBSZXN1bWVFbnRyeTxUT3V0LCBUU2NvcGU+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gQ29tcG9zZWQgd2l0aCBgZW52LnNpZ25hbGAgYW5kIHRoZSBkZWFkbGluZSAoMTAuMSkuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHM6IHRoZSBydW4ncyBkZWFkbGluZSBpcyBgbm93ICsgdGltZW91dE1zYC4gVGhlIHJ1biBhYm9ydHMgd2hlbiBpdCBwYXNzZXMgKHJlamVjdGluZyB3aXRoXG4gICAqIGBFeGVjdXRpb24gdGltZWQgb3V0IGFmdGVyIDx0aW1lb3V0TXM+bXNgKSwgc3RhZ2VzIHJlYWQgaXQgYXMgYGVudi5kZWFkbGluZWAsIGFuZCBldmVyeSBzdGFnZSByZWNvcmRzIGl0c1xuICAgKiBhdHRlbXB0IChgU3RhZ2VTbmFwc2hvdC5hdHRlbXB0c2ApLiBIb25vdXJlZCBiZXNpZGUgYSBgc2lnbmFsYCBzaW5jZSAxMC4xIChpdCB1c2VkIHRvIGJlIGlnbm9yZWQgdGhlcmUpLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHJ1bidzIGRlYWRsaW5lLCBlcG9jaCBtaWxsaXNlY29uZHMgKDEwLjEpIOKAlCBgRGF0ZS5ub3coKSArIDEyMF8wMDBgLiBTYW1lIGVmZmVjdCBhcyBgdGltZW91dE1zYDsgd2hlbiBib3RoXG4gICAqIGFyZSBnaXZlbiwgdGhlIGVhcmxpZXIgd2lucy4gQSBkZWFkbGluZSBhbHJlYWR5IHBhc3Qgc3RvcHMgdGhlIHJ1biBiZWZvcmUgaXRzIGZpcnN0IHN0YWdlLiBBIHJlc3VtZWQgbGVnIGhhc1xuICAgKiBpdHMgb3duOiBwYXNzIGl0IGFnYWluIHRvIGByZXN1bWUoKWAuXG4gICAqL1xuICBkZWFkbGluZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=