@c8y/ngx-components 1020.33.1 → 1020.39.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 (140) hide show
  1. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts +2 -0
  2. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts.map +1 -1
  3. package/auth-configuration/sso-configuration/sso-configuration.service.d.ts.map +1 -1
  4. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts +5 -0
  5. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  6. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts +7 -0
  7. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  8. package/auth-configuration/sso-configuration/templates/aad-configuration-mapper.d.ts.map +1 -1
  9. package/auth-configuration/sso-configuration/templates/aad.model.d.ts +1 -0
  10. package/auth-configuration/sso-configuration/templates/aad.model.d.ts.map +1 -1
  11. package/auth-configuration/sso-configuration/templates/custom-configuration-mapper.d.ts.map +1 -1
  12. package/auth-configuration/sso-configuration/templates/custom.model.d.ts +1 -0
  13. package/auth-configuration/sso-configuration/templates/custom.model.d.ts.map +1 -1
  14. package/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.d.ts.map +1 -1
  15. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts +1 -0
  16. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts.map +1 -1
  17. package/context-dashboard/context-dashboard.component.d.ts +4 -0
  18. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  19. package/context-dashboard/context-dashboard.model.d.ts +2 -32
  20. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  21. package/context-dashboard/dashboard-detail.component.d.ts +2 -0
  22. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  23. package/core/dynamic-component/dynamic-component.model.d.ts +135 -1
  24. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  25. package/core/dynamic-forms/typeahead/typeahead.type.component.d.ts.map +1 -1
  26. package/core/product-experience/gainsight.service.d.ts +1 -0
  27. package/core/product-experience/gainsight.service.d.ts.map +1 -1
  28. package/core/select/typeahead.component.d.ts.map +1 -1
  29. package/esm2022/auth-configuration/sso-configuration/sso-configuration.model.mjs +1 -1
  30. package/esm2022/auth-configuration/sso-configuration/sso-configuration.service.mjs +5 -3
  31. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +25 -11
  32. package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +18 -8
  33. package/esm2022/auth-configuration/sso-configuration/templates/aad-configuration-mapper.mjs +5 -3
  34. package/esm2022/auth-configuration/sso-configuration/templates/aad-template.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/templates/aad.model.mjs +1 -1
  36. package/esm2022/auth-configuration/sso-configuration/templates/custom-configuration-mapper.mjs +5 -3
  37. package/esm2022/auth-configuration/sso-configuration/templates/custom-template.component.mjs +3 -3
  38. package/esm2022/auth-configuration/sso-configuration/templates/custom.model.mjs +1 -1
  39. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.mjs +5 -3
  40. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-template.component.mjs +3 -3
  41. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak.model.mjs +1 -1
  42. package/esm2022/context-dashboard/context-dashboard.component.mjs +85 -23
  43. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  44. package/esm2022/context-dashboard/dashboard-detail.component.mjs +42 -11
  45. package/esm2022/core/dynamic-component/dynamic-component.model.mjs +28 -1
  46. package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +2 -3
  47. package/esm2022/core/product-experience/gainsight.service.mjs +15 -1
  48. package/esm2022/core/select/typeahead.component.mjs +9 -4
  49. package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +3 -3
  50. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +2 -2
  51. package/esm2022/widgets/cockpit/index.mjs +1 -1
  52. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +3 -3
  53. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +3 -3
  54. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +3 -3
  55. package/esm2022/widgets/definitions/applications/index.mjs +3 -3
  56. package/esm2022/widgets/definitions/cockpit-legacy-welcome/index.mjs +3 -3
  57. package/esm2022/widgets/definitions/cockpit-welcome/index.mjs +3 -3
  58. package/esm2022/widgets/definitions/device-control-message/index.mjs +3 -3
  59. package/esm2022/widgets/definitions/device-management-welcome/index.mjs +1 -1
  60. package/esm2022/widgets/definitions/help-and-service/index.mjs +3 -3
  61. package/esm2022/widgets/definitions/image/index.mjs +3 -3
  62. package/esm2022/widgets/definitions/info-gauge/index.mjs +3 -3
  63. package/esm2022/widgets/definitions/kpi/index.mjs +3 -3
  64. package/esm2022/widgets/definitions/map/index.mjs +3 -3
  65. package/esm2022/widgets/definitions/markdown/index.mjs +3 -3
  66. package/esm2022/widgets/definitions/three-d-rotation/index.mjs +3 -3
  67. package/esm2022/widgets/device-management/index.mjs +1 -1
  68. package/esm2022/widgets/widgets.module.mjs +3 -3
  69. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +118 -86
  70. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +123 -31
  72. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
  74. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  76. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -2
  79. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -2
  81. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -2
  83. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -2
  89. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -2
  91. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -2
  94. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +2 -2
  96. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -2
  98. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -2
  100. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -2
  102. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  104. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  105. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -2
  106. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets.mjs +2 -2
  109. package/fesm2022/c8y-ngx-components-widgets.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components.mjs +49 -4
  111. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  112. package/locales/de.po +46 -12
  113. package/locales/en.po +7 -7
  114. package/locales/es.po +40 -12
  115. package/locales/fr.po +40 -12
  116. package/locales/ja_JP.po +43 -12
  117. package/locales/locales.pot +35 -14
  118. package/locales/nl.po +40 -12
  119. package/locales/pl.po +40 -12
  120. package/locales/pt_BR.po +40 -12
  121. package/package.json +1 -1
  122. package/widgets/cockpit/index.d.ts.map +1 -1
  123. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  124. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  125. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  126. package/widgets/definitions/applications/index.d.ts.map +1 -1
  127. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  128. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  129. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  130. package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
  131. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  132. package/widgets/definitions/image/index.d.ts.map +1 -1
  133. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  134. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  135. package/widgets/definitions/map/index.d.ts.map +1 -1
  136. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  137. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  138. package/widgets/device-management/index.d.ts.map +1 -1
  139. package/widgets/widgets.module.d.ts +2 -2
  140. package/widgets/widgets.module.d.ts.map +1 -1
@@ -254,6 +254,20 @@ export class GainsightService {
254
254
  this.cookieBannerService.isConfigCookiePreferencesDefined() &&
255
255
  !!this.cookieBannerService.getUserCookiePreferences());
256
256
  }
257
+ async hashGroupName(groupName) {
258
+ if (!groupName) {
259
+ return;
260
+ }
261
+ // Convert the group name to an ArrayBuffer
262
+ const encoder = new TextEncoder();
263
+ const data = encoder.encode(groupName);
264
+ // Use the SHA-256 algorithm to hash the data
265
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
266
+ // Convert the hash to a hexadecimal string
267
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
268
+ const hashedName = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
269
+ return hashedName;
270
+ }
257
271
  /**
258
272
  * Sets the global context for Gainsight with the current application name.
259
273
  * The global context can be utilized by Gainsight for various purposes, such as segmenting users.
@@ -377,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
377
391
  providedIn: 'root'
378
392
  }]
379
393
  }], ctorParameters: () => [{ type: i1.AppStateService }, { type: i2.OptionsService }, { type: i3.CookieBannerService }, { type: i4.UserPreferencesService }, { type: i5.TranslateService }] });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FpbnNpZ2h0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7QUF1QjdGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUEyQjNCLFlBQ1UsUUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFKbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWxEOzs7V0FHRztRQUNNLG1DQUE4QixHQUFHLGtCQUFrQixDQUFDO1FBQzdEOztXQUVHO1FBQ00sK0NBQTBDLEdBQUcscUJBQXFCLENBQUM7UUFDbkUsZ0NBQTJCLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsMkNBQTJDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLCtCQUEwQixHQUFHLEdBQUcsQ0FBQztRQUNqQyx5QkFBb0IsR0FBRyxXQUFXLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBVzVCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLGNBQXNCO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTVGLE9BQU8saUJBQWlCLEtBQUssS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFjO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQzVCLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDekIsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBUSxNQUFjLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQTZCLEVBQUUsV0FBb0I7UUFDL0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDMUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQUcsV0FBVztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO2dCQUN0RCxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCLElBQUksQ0FDSCxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FDekQ7aUJBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQixNQUFNLENBQUMsSUFBSSxFQUFFLEFBQUQsRUFBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUV4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxTQUFTLEdBQVcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7b0JBQzFDLE1BQU0sU0FBUyxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0JBQzNDLE1BQU0sb0JBQW9CLEdBQWlCO3dCQUN6QyxJQUFJO3dCQUNKLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixTQUFTO3dCQUNULFNBQVM7cUJBQ1YsQ0FBQztvQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxvQkFBb0IsR0FBaUIsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDO29CQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLFdBQW9CLEVBQUUsWUFBMEI7UUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBYSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDcEYsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBRTFEOzs7Ozs7O1dBT0c7UUFDSCxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCOztlQUVHO1lBQ0gsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFO1lBQ3pELDJDQUEyQyxFQUFFLElBQUk7WUFDakQsUUFBUSxFQUFFLFFBQVE7WUFDbEIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVO1lBQ1YsU0FBUztZQUNULFNBQVM7WUFDVCxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVc7WUFDL0MsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7WUFDdkQsVUFBVTtZQUNWLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQjtZQUN0RCxTQUFTLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDMUQsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QyxZQUFZLEVBQUUsV0FBVztTQUMxQixDQUFDO1FBRUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBRTVELE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLEdBQUcsZ0JBQWdCO2dCQUNuQixLQUFLO2dCQUNMLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxRQUFRO2FBQ1QsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ25FLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxVQUFVLEVBQUU7Z0JBQy9CLFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCxPQUFPO1FBQ1QsQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLFNBQWlCLEVBQUUsS0FBbUI7UUFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBdUI7UUFDeEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUU5QyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDbEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixPQUFPLENBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdDQUFnQyxFQUFFO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRTtZQUNwRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsOENBQThDLENBQ3pELElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsS0FBdUM7UUFDdkUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxnQ0FBZ0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3hELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMzQyxJQUNFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixJQUFJLENBQUMsMkNBQTJDLENBQUMsZ0JBQWdCLENBQUMsRUFDbEUsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDN0UsT0FBTyxDQUNMLFlBQVk7WUFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0NBQWdDLEVBQUU7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxDQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuRCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUVoRCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQXlCO1FBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkNBQTJDLENBQUMsZ0JBQW1DO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7UUFDL0UsT0FBTyxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0I7UUFDZCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRSxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxhQUFxQjtRQUM1QyxPQUFPLGFBQWE7YUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUViLFNBQVMsd0JBQXdCLENBQUMsYUFBcUI7WUFDckQsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUE0QixFQUFFLEdBQVc7UUFDN0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ25DLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3pELFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMzRCxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLGdEQUFnRDtvQkFDaEQsVUFBVSxHQUFHLElBQUk7d0JBQ2YsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0YsQ0FBQyxDQUFDO2dCQUNGLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssdUJBQXVCLENBQUMsV0FBbUI7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FDdEIsZUFBdUIsRUFDdkIsWUFBdUM7UUFFdkMsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUMxQixhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs4R0E1WlUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUN1cnJlbnRUZW5hbnQsIElDdXN0b21Qcm9wZXJ0aWVzLCBJSWRlbnRpZmllZCwgSVVzZXIgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGZsYXRNYXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvb2tpZUJhbm5lclNlcnZpY2UgfSBmcm9tICcuLi9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHhFdmVudERhdGEgfSBmcm9tICcuL3Byb2R1Y3QtZXhwZXJpZW5jZS5tb2RlbCc7XG5cbmludGVyZmFjZSBVc2VyUm9sZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJvcGVydHkgdXNlciBUaGUgdXNlciB3aGljaCBpcyBnaXZlbiB0byBHYWluc2lnaHQuXG4gKiBAcHJvcGVydHkgdGVuYW50IFRoZSB0ZW5hbnQgd2hpY2ggaXMgZ2l2ZW4gdG8gR2FpbnNpZ2h0LlxuICogQHByb3BlcnR5IGluc3RhbmNlSWQgRXh0cmFjdGVkIGRvbWFpbiBwYXJ0IG9mIGFuIFVSTC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uVUkgVGhlIFVJIHZlcnNpb24gdXNlZC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uQkUgVGhlIEJFIHZlcnNpb24gdXNlZC5cbiAqL1xuaW50ZXJmYWNlIElkZW50aWZ5RGF0YSB7XG4gIHVzZXI6IElVc2VyO1xuICBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudDtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB2ZXJzaW9uVUk/OiBzdHJpbmc7XG4gIHZlcnNpb25CRT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBHYWluc2lnaHQgaW50ZWdyYXRpb24uIEl0IGFsbG93cyB0byBsb2FkIHRoZVxuICogdGFnIGFuZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHYWluc2lnaHRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgc3ViamVjdCB0aGF0IGVtaXRzIHRoZSB0YWcgZnVuY3Rpb24gYXMgc29vbiBhcyBhIG5ldyB0YWcgaXMgc2V0LlxuICAgKi9cbiAgdGFnRnVuY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgdHJhY2tpbmdMb2FkZWQkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogR2FpbnNpZ2h0IGlzIGFjdGl2YXRlZCBvbmx5IHdoZW4gdGhlIGNvb2tpZSBiYW5uZXIgaXMgcHJlc2VudC4gSWYgZnVuY3Rpb25hbCBjb29raWVzIGFyZSBlbmFibGVkLCBib3RoIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIGFuZCByZXF1aXJlZCBkYXRhIGFyZSBzZW50LlxuICAgKiBPdGhlcndpc2UsIG9ubHkgdGhlIHJlcXVpcmVkIGRhdGEgaXMgdHJhbnNtaXR0ZWQgZHVyaW5nIHRoZSBpZGVudGl0eSBzdGVwIGV4ZWN1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IFVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWSA9ICdnYWluc2lnaHRFbmFibGVkJztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBrZXkgcmVtYWluZWQgdW5jaGFuZ2VkLCBidXQgYXBwbGllcyB0byBhbGwgZW5nYWdlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBVU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVkgPSAnZ2FpbnNpZ2h0Qm90RW5hYmxlZCc7XG4gIHJlYWRvbmx5IEhJREVfR0FJTlNJR0hUX0JPVF9TVFlMRV9JRCA9ICdoaWRlLWdzLWJvdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX1VSTCA9ICd3ZWItc2RrLmFwdHJpbnNpYy5jb20vYXBpL2FwdHJpbnNpYy5qcz9hPSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX0dMT0JBTF9TQ09QRSA9ICdhcHRyaW5zaWMnO1xuICBwcml2YXRlIHJlYWRvbmx5IFNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FID0gNTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE9QVElPTlNfS0VZX0NBVEVHT1JZID0gJ2dhaW5zaWdodCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgT1BUSU9OU19LRVlfTkFNRSA9ICdhcGkua2V5JztcbiAgcHJpdmF0ZSBpc1NjcmlwdExvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGdhaW5zaWdodEtleTogc3RyaW5nO1xuICBwcml2YXRlIGNhY2hlZFJldmVydGVkVHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIGNhY2hlZExhbmd1YWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uczogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBHYWluc2lnaHQgcHJlZmVyZW5jZSBpcyBkaXNhYmxlZCBpbiB1c2VyIHByZWZlcmVuY2VzLlxuICAgKiBAcGFyYW0gcHJlZmVyZW5jZU5hbWUgLSBOYW1lIG9mIHRoZSBHYWluc2lnaHQgcHJlZmVyZW5jZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGFzeW5jIGlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMocHJlZmVyZW5jZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXJHYWluc2lnaHRQcmVmID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChwcmVmZXJlbmNlTmFtZSkudG9Qcm9taXNlKCk7XG5cbiAgICByZXR1cm4gdXNlckdhaW5zaWdodFByZWYgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBmdW5jdGlvbmFsIGNvb2tpZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gQSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZ1bmN0aW9uYWwgY29va2llIHNob3VsZCBiZSBlbmFibGVkIChgdHJ1ZWApIG9yIGRpc2FibGVkIChgZmFsc2VgKS5cbiAgICovXG4gIHNldEZ1bmN0aW9uYWxDb29raWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb29raWVzID0gdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmdldFVzZXJDb29raWVQcmVmZXJlbmNlcygpO1xuICAgIGlmIChjb29raWVzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb29raWVzKS5mb3JFYWNoKGNvb2tpZU5hbWUgPT4ge1xuICAgICAgICBpZiAoY29va2llTmFtZSA9PT0gJ2Z1bmN0aW9uYWwnKSB7XG4gICAgICAgICAgY29va2llc1tjb29raWVOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWNjZXB0Q29va2llTm90aWNlJywgSlNPTi5zdHJpbmdpZnkoY29va2llcykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdhaW5zaWdodEtleSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodEtleSA9XG4gICAgICB0aGlzLm9wdGlvbnMuZ2FpbnNpZ2h0S2V5IHx8XG4gICAgICAoYXdhaXQgdGhpcy5vcHRpb25zLmdldFN5c3RlbU9wdGlvbih0aGlzLk9QVElPTlNfS0VZX0NBVEVHT1JZLCB0aGlzLk9QVElPTlNfS0VZX05BTUUpKTtcbiAgICByZXR1cm4gdGhpcy5nYWluc2lnaHRLZXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFnIGdsb2JhbCBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB1c2VyXG4gICAqIG9yIGFkZCBzcGVjaWFsIGV2ZW50cy5cbiAgICovXG4gIGdldCB0YWdGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpW3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgc2NyaXB0IHRhZyBhbmQgY2FsbHMgdGhlIGlkZW50aWZ5IGZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSB0cmFja2luZy5cbiAgICogQHBhcmFtIGN1cnJlbnRUZW5hbnQgVGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcGFyYW0gc2VuZFBpaURhdGEgRmxhZyBmb3Igc2VuZGluZyBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiAoUElJKSBkdXJpbmcgaWRlbnRpZmljYXRpb24gaW4gR2FpbnNpZ2h0LlxuICAgKi9cbiAgYXN5bmMgbG9hZFRhZyhjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCwgc2VuZFBpaURhdGE6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzY3JpcHRUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpO1xuXG4gICAgaWYgKGtleSAmJiAhdGhpcy5pc1NjcmlwdExvYWRlZCkge1xuICAgICAgdGhpcy5sb2FkU2NyaXB0VGFnKHNjcmlwdFRhZywga2V5KTtcblxuICAgICAgY29uc3QgY3VycmVudFVzZXJTdHJlYW0gPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyO1xuICAgICAgY29uc3Qgc2NyaXB0TG9hZFN0cmVhbSA9IGZyb21FdmVudChzY3JpcHRUYWcsICdsb2FkJyk7XG4gICAgICBjb25zdCB2ZXJzaW9uU3RyZWFtID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZSQucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IHZlcnNpb25zIH0pID0+IHZlcnNpb25zLmJhY2tlbmQpLFxuICAgICAgICBtYXAoKHsgdmVyc2lvbnMgfSkgPT4gdmVyc2lvbnMpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzb3VyY2VTdHJlYW1zID0gc2VuZFBpaURhdGFcbiAgICAgICAgPyBbY3VycmVudFVzZXJTdHJlYW0sIHNjcmlwdExvYWRTdHJlYW0sIHZlcnNpb25TdHJlYW1dXG4gICAgICAgIDogW2N1cnJlbnRVc2VyU3RyZWFtLCBzY3JpcHRMb2FkU3RyZWFtXTtcblxuICAgICAgY29tYmluZUxhdGVzdChzb3VyY2VTdHJlYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSh0aGlzLlNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FKSxcbiAgICAgICAgICBmaWx0ZXIoKFt1c2VyLCBzY3JpcHRFdmVudF0pID0+ICEhKHNjcmlwdEV2ZW50ICYmIHVzZXIpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB7XG4gICAgICAgICAgY29uc3QgW3VzZXIsICwgdmVyc2lvbnNdID0gYXJncztcbiAgICAgICAgICB0aGlzLnNldEdsb2JhbENvbnRleHQoKTtcblxuICAgICAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSB0aGlzLmdldEluc3RhbmNlSWRGcm9tVXJsKCk7XG4gICAgICAgICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uVUk6IHN0cmluZyA9IHZlcnNpb25zLnVpLm5neDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25CRTogc3RyaW5nID0gdmVyc2lvbnMuYmFja2VuZDtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkSWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEgPSB7XG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRUZW5hbnQsXG4gICAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIHZlcnNpb25VSSxcbiAgICAgICAgICAgICAgdmVyc2lvbkJFXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmeShzZW5kUGlpRGF0YSwgZXh0ZW5kZWRJZGVudGlmeURhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZElkZW50aWZ5RGF0YTogSWRlbnRpZnlEYXRhID0geyB1c2VyLCBjdXJyZW50VGVuYW50LCBpbnN0YW5jZUlkIH07XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5KHNlbmRQaWlEYXRhLCByZXF1aXJlZElkZW50aWZ5RGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudGFnRnVuY3Rpb24kLm5leHQodGhpcy50YWdGdW5jdGlvbik7XG4gICAgICAgICAgdGhpcy50cmFja2luZ0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHVzZXIvYWNjb3VudCBhdCBHYWluc2lnaHQuXG4gICAqIEBwYXJhbSBzZW5kUGlpRGF0YSBGbGFnIGZvciBzZW5kaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gaWRlbnRpZnlEYXRhIE9iamVjdCBjb250YWluaW5nIGlkZW50aWZpY2F0aW9uIGRhdGEuXG4gICAqL1xuICBpZGVudGlmeShzZW5kUGlpRGF0YTogYm9vbGVhbiwgaWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEpIHtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSB3aW5kb3cgYXMgYW55O1xuICAgIGNvbnN0IHsgaWQ6IHVzZXJJZCwgZW1haWwsIHJvbGVzIH0gPSBpZGVudGlmeURhdGEudXNlcjtcbiAgICBjb25zdCB7IG5hbWU6IHRlbmFudElELCBjdXN0b21Qcm9wZXJ0aWVzLCBkb21haW5OYW1lIH0gPSBpZGVudGlmeURhdGEuY3VycmVudFRlbmFudDtcbiAgICBjb25zdCB7IGluc3RhbmNlSWQsIHZlcnNpb25VSSwgdmVyc2lvbkJFIH0gPSBpZGVudGlmeURhdGE7XG5cbiAgICAvKipcbiAgICAgKiBQYXNzaW5nIElEIGlzIGEgbWluaW11bSByZXF1aXJlZCBkYXRhIHRvIG1ha2UgYW4gaWRlbnRpZnkgY2FsbCB0byBHYWluc2lnaHQuXG4gICAgICogaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGxhdGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXNlcnMgY3JlYXRlZCBiZWZvcmUgYW5kIGFmdGVyIGRhdGEgYW5vbnltaXphdGlvbiBkb25lIGJ5IEdhaW5zaWdodC5cbiAgICAgKiB0ZW5hbnRJRCBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGVuYW50cyB3aGVuIHNhbWUgZW1haWwgaXMgdXNlZCBmb3IgZGlmZmVyZW50IHRlbmFudHMuXG4gICAgICpcbiAgICAgKiBEdWUgdG8gR1MgbGltaXRhdGlvbnMgKEdTIGRvZXMgbm90IGFsbG93IGNsZWFyaW5nIHVzZXIgYXR0ci9wcmVmZXJlbmNlcyB2aWEgdGhlIEdTIHRhZyEpLFxuICAgICAqIHdlIGFsd2F5cyBuZWVkIHRvIGluaXRpYWxpemUgZmllbGRzIHJlbGF0ZWQgdG8gUElJIHRvIHByZXZlbnQgbGVha2luZyB0aGlzIGRhdGEgdG8gR1Mgd2hlbiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgZnVuY3Rpb25hbCBjb29raWVzLlxuICAgICAqL1xuICAgIGNvbnN0IHJlcXVpcmVkSWRlbnRpZnkgPSB7XG4gICAgICAvKipcbiAgICAgICAqIEVtYWlsIHdhcyBub3QgbWFuZGF0b3J5IGZvcm0gZmllbGQgdW50aWwgMTAuMTRcbiAgICAgICAqL1xuICAgICAgaWQ6IGVtYWlsID8gZW1haWwgOiBgJHt1c2VySWR9XyR7dGVuYW50SUR9XyR7aW5zdGFuY2VJZH1gLFxuICAgICAgaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZDogdHJ1ZSxcbiAgICAgIHRlbmFudElEOiB0ZW5hbnRJRCxcbiAgICAgIGVtYWlsOiAnLS0nLFxuICAgICAgdXNlck5hbWU6ICctLScsXG4gICAgICBmaXJzdE5hbWU6ICctLScsXG4gICAgICBsYXN0TmFtZTogJy0tJyxcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICB2ZXJzaW9uVUksXG4gICAgICB2ZXJzaW9uQkUsXG4gICAgICB1c2VyTGFuZ3VhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyxcbiAgICAgIGJyb3dzZXJMYW5ndWFnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEJyb3dzZXJMYW5nKCksXG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgZXh0ZXJuYWxSZWZlcmVuY2U6IGN1c3RvbVByb3BlcnRpZXM/LmV4dGVybmFsUmVmZXJlbmNlLFxuICAgICAgdXNlclJvbGVzOiB0aGlzLnRyYW5zZm9ybVVzZXJSb2xlc1RvU3RyKHJvbGVzPy5yZWZlcmVuY2VzKSxcbiAgICAgIGN1c3RvbUJyYW5kaW5nOiB0aGlzLmlzQ3VzdG9tQnJhbmRpbmcoKSxcbiAgICAgIGZ1bGxUcmFja2luZzogc2VuZFBpaURhdGFcbiAgICB9O1xuXG4gICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICBjb25zdCB7IHVzZXJOYW1lLCBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gPSBpZGVudGlmeURhdGEudXNlcjtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRJZGVudGlmeSA9IHtcbiAgICAgICAgLi4ucmVxdWlyZWRJZGVudGlmeSxcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHVzZXJOYW1lLFxuICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lXG4gICAgICB9O1xuXG4gICAgICB3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSgnaWRlbnRpZnknLCBleHRlbmRlZElkZW50aWZ5LCB7XG4gICAgICAgIGlkOiBgJHt0ZW5hbnRJRH1fJHtpbnN0YW5jZUlkfWAsXG4gICAgICAgIGluc3RhbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdKCdpZGVudGlmeScsIHJlcXVpcmVkSWRlbnRpZnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGFuIGV2ZW50IHRvIGJlIHJlY29yZGVkIGJ5IEdhaW5zaWdodCBQWC5cbiAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIEdhaW5zaWdodCBQWCdzIHRyYWNraW5nIG1lY2hhbmlzbSB0byBsb2cgYSBzcGVjaWZpYyBldmVudFxuICAgKiBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOYW1lIG9mIHRoZSBldmVudCB0byBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC5cbiAgICovXG4gIHRyaWdnZXJFdmVudChldmVudE5hbWU6IHN0cmluZywgcHJvcHM/OiBQeEV2ZW50RGF0YSkge1xuICAgIGlmICh0aGlzLnRhZ0Z1bmN0aW9uICYmIGV2ZW50TmFtZSkge1xuICAgICAgZXZlbnROYW1lID0gdGhpcy5wcmVwYXJlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICB0aGlzLnRhZ0Z1bmN0aW9uKCd0cmFjaycsIGV2ZW50TmFtZSwgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zbGF0ZVRvRW5nbGlzaCh0ZXh0VG9UcmFuc2xhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBjdXJyZW50TGFuZyB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xuXG4gICAgaWYgKGN1cnJlbnRMYW5nID09PSAnZW4nKSB7XG4gICAgICByZXR1cm4gdGV4dFRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TGFuZyAmJiBjdXJyZW50TGFuZyAhPT0gdGhpcy5jYWNoZWRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMpIHtcbiAgICAgIHRoaXMuY2FjaGVkTGFuZ3VhZ2UgPSBjdXJyZW50TGFuZztcbiAgICAgIHRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMgPSB0aGlzLmdldFJldmVydGVkVHJhbnNsYXRpb25zKGN1cnJlbnRMYW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRFblRyYW5zbGF0aW9uKHRleHRUb1RyYW5zbGF0ZSwgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIHNob3VsZCBiZSBzZW50IHdoaWxlIGxvYWRpbmcgYSB0YWcuXG4gICAqIFRoZSBkZWNpc2lvbiB0byBhY3RpdmF0ZSBHYWluc2lnaHQgYW5kIHNlbmQgUElJIHJlbGllcyBvbiB3aGV0aGVyIHRoZSBjb29raWVQcmVmZXJlbmNlcyBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MsXG4gICAqIGlmIHRoZSBmdW5jdGlvbmFsIGNvb2tpZSBpcyBlbmFibGVkLCBhbmQgaWYgdGhlIHVzZXIgZ3JhbnRzIHBlcm1pc3Npb24uXG4gICAqL1xuICBhc3luYyBzaG91bGRTZW5kUGlpRGF0YSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzQ29uZmlnQ29va2llUHJlZmVyZW5jZXNEZWZpbmVkKCkgJiZcbiAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5pc0Z1bmN0aW9uYWxDb29raWVFbmFibGVkKCkgJiZcbiAgICAgICEoYXdhaXQgdGhpcy5pc0dhaW5zaWdodFByZWZlcmVuY2VEaXNhYmxlZEluVXNlclByZWZlcmVuY2VzKFxuICAgICAgICB0aGlzLlVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWVxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzcGVjaWZpYyB1c2VyIGF0dHJpYnV0ZSBpbiB0aGUgR2FpbnNpZ2h0IGdsb2JhbCBzY29wZS5cbiAgICogVGhpcyBtZXRob2QgaW50ZXJmYWNlcyB3aXRoIHRoZSBHYWluc2lnaHQgZ2xvYmFsIG9iamVjdCB0byBzZXQgYSB1c2VyJ3Mgc3BlY2lmaWMgYXR0cmlidXRlIHdpdGggYSBwcm92aWRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSB1c2VyIGF0dHJpYnV0ZSB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBzZXQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBhdHRyaWJ1dGUuXG4gICAqL1xuICB1cGRhdGVVc2VyQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuKTogdm9pZCB7XG4gICAgd2luZG93W3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0/Lignc2V0JywgJ3VzZXInLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBtb2RpZnkgR2FpbnNpZ2h0IFBYIHNldHRpbmdzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgbXVsdGlwbGUgY29uZGl0aW9uczpcbiAgICogMS4gV2hldGhlciB0cmFja2luZyBoYXMgYmVlbiBkaXNhYmxlZCBnbG9iYWxseSB2aWEgYXBwbGljYXRpb24gb3B0aW9ucy5cbiAgICogMi4gV2hldGhlciBHYWluc2lnaHQgaXMgZGlzYWJsZWQgYXQgdGhlIHRlbmFudCBsZXZlbCB0aHJvdWdoIGN1c3RvbSBwcm9wZXJ0aWVzLlxuICAgKiAzLiBXaGV0aGVyIGEgR2FpbnNpZ2h0IGtleSBpcyBhdmFpbGFibGUsIGVpdGhlciBjdXJyZW50bHkgbG9hZGVkIG9yIGZldGNoZWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIDQuIFdoZXRoZXIgY29va2llIHByZWZlcmVuY2VzIGFyZSBkZWZpbmVkIGFuZCBhdmFpbGFibGUgZm9yIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuLiBUcnVlIGluZGljYXRlcyB0aGUgdXNlciBjYW4gZWRpdCBwcm9kdWN0IGV4cGVyaWVuY2Ugc2V0dGluZ3MsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBjYW5FZGl0UHJvZHVjdEV4cGVyaWVuY2VTZXR0aW5ncygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IHsgY3VzdG9tUHJvcGVydGllcyB9ID0gY3VycmVudFRlbmFudDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVHJhY2tpbmdEaXNhYmxlZCgpIHx8XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0RGlzYWJsZWRBdFRlbmFudEN1c3RvbVByb3BlcnRpZXMoY3VzdG9tUHJvcGVydGllcylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZ2FpbnNpZ2h0S2V5ID0gISF0aGlzLmdhaW5zaWdodEtleSB8fCAhIShhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpKTtcbiAgICByZXR1cm4gKFxuICAgICAgZ2FpbnNpZ2h0S2V5ICYmXG4gICAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb25maWdDb29raWVQcmVmZXJlbmNlc0RlZmluZWQoKSAmJlxuICAgICAgISF0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0VXNlckNvb2tpZVByZWZlcmVuY2VzKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdsb2JhbCBjb250ZXh0IGZvciBHYWluc2lnaHQgd2l0aCB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBuYW1lLlxuICAgKiBUaGUgZ2xvYmFsIGNvbnRleHQgY2FuIGJlIHV0aWxpemVkIGJ5IEdhaW5zaWdodCBmb3IgdmFyaW91cyBwdXJwb3Nlcywgc3VjaCBhcyBzZWdtZW50aW5nIHVzZXJzLlxuICAgKi9cbiAgc2V0R2xvYmFsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50QXBwU3RhdGUgPSB0aGlzLmFwcFN0YXRlLnN0YXRlJC52YWx1ZTtcbiAgICBjb25zdCBjdXJyZW50QXBwTmFtZSA9IGN1cnJlbnRBcHBTdGF0ZS5hcHAubmFtZTtcblxuICAgIHdpbmRvd1t0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdPy4oJ3NldCcsICdnbG9iYWxDb250ZXh0JywgeyBwcm9qZWN0TmFtZTogY3VycmVudEFwcE5hbWUgfSk7XG4gIH1cblxuICB0cmFuc2Zvcm1Vc2VyUm9sZXNUb1N0cih1c2VyUm9sZXM/OiBJSWRlbnRpZmllZFtdKTogc3RyaW5nIHtcbiAgICBpZiAoIXVzZXJSb2xlcykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0TWFwKHVzZXJSb2xlcywgKHVzZXJSb2xlOiB7IHJvbGU6IFVzZXJSb2xlIH0pID0+IHVzZXJSb2xlLnJvbGUubmFtZSkuam9pbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBHYWluc2lnaHQgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGVuYW50IGN1c3RvbSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gY3VzdG9tUHJvcGVydGllcyAtIFRoZSBjdXN0b20gcHJvcGVydGllcyBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGlmIEdhaW5zaWdodCBpcyBkaXNhYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNHYWluc2lnaHREaXNhYmxlZEF0VGVuYW50Q3VzdG9tUHJvcGVydGllcyhjdXN0b21Qcm9wZXJ0aWVzOiBJQ3VzdG9tUHJvcGVydGllcykge1xuICAgIGNvbnN0IGdhaW5zaWdodEVuYWJsZWQgPSBjdXN0b21Qcm9wZXJ0aWVzICYmIGN1c3RvbVByb3BlcnRpZXMuZ2FpbnNpZ2h0RW5hYmxlZDtcbiAgICByZXR1cm4gZ2FpbnNpZ2h0RW5hYmxlZCA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBjdXN0b20gYnJhbmRpbmcgaXMgZW5hYmxlZCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgYSBicmFuZCBsb2dvLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGlmIGN1c3RvbSBicmFuZGluZyBpcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc0N1c3RvbUJyYW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJyYW5kaW5nQ3NzVmFycyA9IHRoaXMub3B0aW9ucy5nZXQoJ2JyYW5kaW5nQ3NzVmFycycpIHx8IHt9O1xuICAgIHJldHVybiAhIWJyYW5kaW5nQ3NzVmFyc1snYnJhbmQtbG9nby1pbWcnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRyYWNraW5nIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBhcHBsaWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdHJhY2tpbmcgaXMgZGlzYWJsZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNUcmFja2luZ0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGlzYWJsZVRyYWNraW5nID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlRXZlbnROYW1lKGJhc2VFdmVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJhc2VFdmVudE5hbWVcbiAgICAgIC5zcGxpdCgnOicpXG4gICAgICAubWFwKGV2ZW50TmFtZVBhcnQgPT4gY2FtZWxDYXNlKHJlbW92ZVRyYW5zbGF0aW9uQ29udGV4dChldmVudE5hbWVQYXJ0KSkpXG4gICAgICAuam9pbignOicpO1xuXG4gICAgZnVuY3Rpb24gcmVtb3ZlVHJhbnNsYXRpb25Db250ZXh0KGV2ZW50TmFtZVBhcnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gZXZlbnROYW1lUGFydC5yZXBsYWNlKC9gW1xcd1xcV10qYC9nLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU2NyaXB0VGFnKHNjcmlwdFRhZzogSFRNTFNjcmlwdEVsZW1lbnQsIGtleTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdpbmRvd1JlZiA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBmaXJzdFRhZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgIGNvbnN0IHByb3RvY29sID0gbG9jYXRpb24ucHJvdG9jb2w7XG4gICAgICBjb25zdCBnYWluc2lnaHRHbG9iYWxTY29wZSA9IHRoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRTtcbiAgICAgIHNjcmlwdFRhZy5zcmMgPSBgJHtwcm90b2NvbH0vLyR7dGhpcy5HQUlOU0lHSFRfVVJMfSR7a2V5fWA7XG4gICAgICAod2luZG93UmVmW3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0gPVxuICAgICAgICB3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSB8fFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b25seS1hcnJvdy1mdW5jdGlvbnNcbiAgICAgICAgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAod2luZG93UmVmW2dhaW5zaWdodEdsb2JhbFNjb3BlXS5xID0gd2luZG93UmVmW2dhaW5zaWdodEdsb2JhbFNjb3BlXS5xIHx8IFtdKS5wdXNoKGFyZ3MpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHdpbmRvd1JlZltnYWluc2lnaHRHbG9iYWxTY29wZV0ucCA9IGtleSk7XG4gICAgICBzY3JpcHRUYWcuYXN5bmMgPSB0cnVlO1xuICAgICAgZmlyc3RUYWcucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0VGFnLCBmaXJzdFRhZyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgR2FpbnNpZ2h0IFBYJywgZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFuY2VJZEZyb21VcmwoKSB7XG4gICAgY29uc3QgaG9zdE5hbWUgPSBsb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gaG9zdE5hbWUuc3Vic3RyaW5nKGhvc3ROYW1lLmluZGV4T2YoJy4nKSArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVyc2VzIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QuXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIHsgQWRkIHdpZGdldDogXCJXaWRnZXQgaGluenVmw7xnZW5cIiB9XG4gICAqXG4gICAqIHdpbGwgYmUgY2hhbmdlZCB0bzpcbiAgICpcbiAgICogeyBXaWRnZXQgaGluenVmw7xnZW46IFwiQWRkIHdpZGdldFwiIH1cbiAgICpcbiAgICogQHBhcmFtIGN1cnJlbnRMYW5nIExhbmd1YWdlIHdob3NlIHRyYW5zbGF0ZWQgdmFsdWVzIGFyZSB0byBiZSBwbGFjZWQgaW4gdGhlIG9iamVjdCBrZXkuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gaW52ZXJ0ZWQgb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGhhdmUgYmVlbiBzd2FwcGVkIHdpdGggdGhlIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmV2ZXJ0ZWRUcmFuc2xhdGlvbnMoY3VycmVudExhbmc6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdG9yZS50cmFuc2xhdGlvbnNbY3VycmVudExhbmddO1xuXG4gICAgaWYgKCF0cmFuc2xhdGlvbnMpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3Qgc3dhcHBlZEtleXNXaXRoVmFsdWVzID0ge307XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBzd2FwcGVkS2V5c1dpdGhWYWx1ZXNbdHJhbnNsYXRpb25zW2tleV1dID0ga2V5O1xuICAgIH0pO1xuICAgIHJldHVybiBzd2FwcGVkS2V5c1dpdGhWYWx1ZXM7XG4gIH1cblxuICAvKipUcmFuc2xhdGVzIHN0cmluZyBiYWNrIGludG8gRW5nbGlzaC5cbiAgICogSWYgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gbGFuZ3VhZ2UgaXMgc2V0IHRvIEVuZ2xpc2gsIHRoZSBzdHJpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0gdGV4dFRvVHJhbnNsYXRlIHN0cmluZyB0byB0cmFuc2xhdGUuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHN0cmluZyB0cmFuc2xhdGVkIGludG8gRW5nbGlzaC5cbiAgICovXG4gIHByaXZhdGUgZ2V0RW5UcmFuc2xhdGlvbihcbiAgICB0ZXh0VG9UcmFuc2xhdGU6IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgZW5UcmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uc1t0ZXh0VG9UcmFuc2xhdGVdO1xuICAgIGlmICghZW5UcmFuc2xhdGlvbikge1xuICAgICAgcmV0dXJuIHRleHRUb1RyYW5zbGF0ZTtcbiAgICB9XG4gICAgLyoqIHJlbW92ZSB0cmFuc2xhdGlvbiBjb250ZXh0ICovXG4gICAgY29uc3QgcmVnZXggPSAvXFxgKC4qPylcXGAvO1xuICAgIGVuVHJhbnNsYXRpb24gPSBlblRyYW5zbGF0aW9uLnJlcGxhY2UocmVnZXgsICcnKTtcblxuICAgIHJldHVybiBlblRyYW5zbGF0aW9uO1xuICB9XG59XG4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FpbnNpZ2h0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7QUF1QjdGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxnQkFBZ0I7SUEyQjNCLFlBQ1UsUUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFKbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjVDOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxJ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Q0FBQztZQUNuQixPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUMxQixhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzs4R0E5YVUsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUN1cnJlbnRUZW5hbnQsIElDdXN0b21Qcm9wZXJ0aWVzLCBJSWRlbnRpZmllZCwgSVVzZXIgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGZsYXRNYXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvb2tpZUJhbm5lclNlcnZpY2UgfSBmcm9tICcuLi9ib290c3RyYXAvY29va2llLWJhbm5lci9jb29raWUtYmFubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHhFdmVudERhdGEgfSBmcm9tICcuL3Byb2R1Y3QtZXhwZXJpZW5jZS5tb2RlbCc7XG5cbmludGVyZmFjZSBVc2VyUm9sZSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJvcGVydHkgdXNlciBUaGUgdXNlciB3aGljaCBpcyBnaXZlbiB0byBHYWluc2lnaHQuXG4gKiBAcHJvcGVydHkgdGVuYW50IFRoZSB0ZW5hbnQgd2hpY2ggaXMgZ2l2ZW4gdG8gR2FpbnNpZ2h0LlxuICogQHByb3BlcnR5IGluc3RhbmNlSWQgRXh0cmFjdGVkIGRvbWFpbiBwYXJ0IG9mIGFuIFVSTC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uVUkgVGhlIFVJIHZlcnNpb24gdXNlZC5cbiAqIEBwcm9wZXJ0eSB2ZXJzaW9uQkUgVGhlIEJFIHZlcnNpb24gdXNlZC5cbiAqL1xuaW50ZXJmYWNlIElkZW50aWZ5RGF0YSB7XG4gIHVzZXI6IElVc2VyO1xuICBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudDtcbiAgaW5zdGFuY2VJZDogc3RyaW5nO1xuICB2ZXJzaW9uVUk/OiBzdHJpbmc7XG4gIHZlcnNpb25CRT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBHYWluc2lnaHQgaW50ZWdyYXRpb24uIEl0IGFsbG93cyB0byBsb2FkIHRoZVxuICogdGFnIGFuZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHYWluc2lnaHRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEEgc3ViamVjdCB0aGF0IGVtaXRzIHRoZSB0YWcgZnVuY3Rpb24gYXMgc29vbiBhcyBhIG5ldyB0YWcgaXMgc2V0LlxuICAgKi9cbiAgdGFnRnVuY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgdHJhY2tpbmdMb2FkZWQkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogR2FpbnNpZ2h0IGlzIGFjdGl2YXRlZCBvbmx5IHdoZW4gdGhlIGNvb2tpZSBiYW5uZXIgaXMgcHJlc2VudC4gSWYgZnVuY3Rpb25hbCBjb29raWVzIGFyZSBlbmFibGVkLCBib3RoIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIGFuZCByZXF1aXJlZCBkYXRhIGFyZSBzZW50LlxuICAgKiBPdGhlcndpc2UsIG9ubHkgdGhlIHJlcXVpcmVkIGRhdGEgaXMgdHJhbnNtaXR0ZWQgZHVyaW5nIHRoZSBpZGVudGl0eSBzdGVwIGV4ZWN1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IFVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWSA9ICdnYWluc2lnaHRFbmFibGVkJztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBrZXkgcmVtYWluZWQgdW5jaGFuZ2VkLCBidXQgYXBwbGllcyB0byBhbGwgZW5nYWdlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBVU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9FTkdBR0VNRU5UU19LRVkgPSAnZ2FpbnNpZ2h0Qm90RW5hYmxlZCc7XG4gIHJlYWRvbmx5IEhJREVfR0FJTlNJR0hUX0JPVF9TVFlMRV9JRCA9ICdoaWRlLWdzLWJvdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX1VSTCA9ICd3ZWItc2RrLmFwdHJpbnNpYy5jb20vYXBpL2FwdHJpbnNpYy5qcz9hPSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgR0FJTlNJR0hUX0dMT0JBTF9TQ09QRSA9ICdhcHRyaW5zaWMnO1xuICBwcml2YXRlIHJlYWRvbmx5IFNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FID0gNTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE9QVElPTlNfS0VZX0NBVEVHT1JZID0gJ2dhaW5zaWdodCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgT1BUSU9OU19LRVlfTkFNRSA9ICdhcGkua2V5JztcbiAgcHJpdmF0ZSBpc1NjcmlwdExvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGdhaW5zaWdodEtleTogc3RyaW5nO1xuICBwcml2YXRlIGNhY2hlZFJldmVydGVkVHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIGNhY2hlZExhbmd1YWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uczogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb29raWVCYW5uZXJTZXJ2aWNlOiBDb29raWVCYW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBHYWluc2lnaHQgcHJlZmVyZW5jZSBpcyBkaXNhYmxlZCBpbiB1c2VyIHByZWZlcmVuY2VzLlxuICAgKiBAcGFyYW0gcHJlZmVyZW5jZU5hbWUgLSBOYW1lIG9mIHRoZSBHYWluc2lnaHQgcHJlZmVyZW5jZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGFzeW5jIGlzR2FpbnNpZ2h0UHJlZmVyZW5jZURpc2FibGVkSW5Vc2VyUHJlZmVyZW5jZXMocHJlZmVyZW5jZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHVzZXJHYWluc2lnaHRQcmVmID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChwcmVmZXJlbmNlTmFtZSkudG9Qcm9taXNlKCk7XG5cbiAgICByZXR1cm4gdXNlckdhaW5zaWdodFByZWYgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBmdW5jdGlvbmFsIGNvb2tpZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gQSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZ1bmN0aW9uYWwgY29va2llIHNob3VsZCBiZSBlbmFibGVkIChgdHJ1ZWApIG9yIGRpc2FibGVkIChgZmFsc2VgKS5cbiAgICovXG4gIHNldEZ1bmN0aW9uYWxDb29raWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb29raWVzID0gdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmdldFVzZXJDb29raWVQcmVmZXJlbmNlcygpO1xuICAgIGlmIChjb29raWVzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb29raWVzKS5mb3JFYWNoKGNvb2tpZU5hbWUgPT4ge1xuICAgICAgICBpZiAoY29va2llTmFtZSA9PT0gJ2Z1bmN0aW9uYWwnKSB7XG4gICAgICAgICAgY29va2llc1tjb29raWVOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWNjZXB0Q29va2llTm90aWNlJywgSlNPTi5zdHJpbmdpZnkoY29va2llcykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdhaW5zaWdodEtleSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodEtleSA9XG4gICAgICB0aGlzLm9wdGlvbnMuZ2FpbnNpZ2h0S2V5IHx8XG4gICAgICAoYXdhaXQgdGhpcy5vcHRpb25zLmdldFN5c3RlbU9wdGlvbih0aGlzLk9QVElPTlNfS0VZX0NBVEVHT1JZLCB0aGlzLk9QVElPTlNfS0VZX05BTUUpKTtcbiAgICByZXR1cm4gdGhpcy5nYWluc2lnaHRLZXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFnIGdsb2JhbCBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB1c2VyXG4gICAqIG9yIGFkZCBzcGVjaWFsIGV2ZW50cy5cbiAgICovXG4gIGdldCB0YWdGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpW3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgc2NyaXB0IHRhZyBhbmQgY2FsbHMgdGhlIGlkZW50aWZ5IGZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSB0cmFja2luZy5cbiAgICogQHBhcmFtIGN1cnJlbnRUZW5hbnQgVGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcGFyYW0gc2VuZFBpaURhdGEgRmxhZyBmb3Igc2VuZGluZyBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiAoUElJKSBkdXJpbmcgaWRlbnRpZmljYXRpb24gaW4gR2FpbnNpZ2h0LlxuICAgKi9cbiAgYXN5bmMgbG9hZFRhZyhjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCwgc2VuZFBpaURhdGE6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzY3JpcHRUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpO1xuXG4gICAgaWYgKGtleSAmJiAhdGhpcy5pc1NjcmlwdExvYWRlZCkge1xuICAgICAgdGhpcy5sb2FkU2NyaXB0VGFnKHNjcmlwdFRhZywga2V5KTtcblxuICAgICAgY29uc3QgY3VycmVudFVzZXJTdHJlYW0gPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyO1xuICAgICAgY29uc3Qgc2NyaXB0TG9hZFN0cmVhbSA9IGZyb21FdmVudChzY3JpcHRUYWcsICdsb2FkJyk7XG4gICAgICBjb25zdCB2ZXJzaW9uU3RyZWFtID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZSQucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IHZlcnNpb25zIH0pID0+IHZlcnNpb25zLmJhY2tlbmQpLFxuICAgICAgICBtYXAoKHsgdmVyc2lvbnMgfSkgPT4gdmVyc2lvbnMpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzb3VyY2VTdHJlYW1zID0gc2VuZFBpaURhdGFcbiAgICAgICAgPyBbY3VycmVudFVzZXJTdHJlYW0sIHNjcmlwdExvYWRTdHJlYW0sIHZlcnNpb25TdHJlYW1dXG4gICAgICAgIDogW2N1cnJlbnRVc2VyU3RyZWFtLCBzY3JpcHRMb2FkU3RyZWFtXTtcblxuICAgICAgY29tYmluZUxhdGVzdChzb3VyY2VTdHJlYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSh0aGlzLlNDUklQVF9FWEVDVVRJT05fV0FJVF9USU1FKSxcbiAgICAgICAgICBmaWx0ZXIoKFt1c2VyLCBzY3JpcHRFdmVudF0pID0+ICEhKHNjcmlwdEV2ZW50ICYmIHVzZXIpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB7XG4gICAgICAgICAgY29uc3QgW3VzZXIsICwgdmVyc2lvbnNdID0gYXJncztcbiAgICAgICAgICB0aGlzLnNldEdsb2JhbENvbnRleHQoKTtcblxuICAgICAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSB0aGlzLmdldEluc3RhbmNlSWRGcm9tVXJsKCk7XG4gICAgICAgICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uVUk6IHN0cmluZyA9IHZlcnNpb25zLnVpLm5neDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb25CRTogc3RyaW5nID0gdmVyc2lvbnMuYmFja2VuZDtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkSWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEgPSB7XG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRUZW5hbnQsXG4gICAgICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIHZlcnNpb25VSSxcbiAgICAgICAgICAgICAgdmVyc2lvbkJFXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5pZGVudGlmeShzZW5kUGlpRGF0YSwgZXh0ZW5kZWRJZGVudGlmeURhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZElkZW50aWZ5RGF0YTogSWRlbnRpZnlEYXRhID0geyB1c2VyLCBjdXJyZW50VGVuYW50LCBpbnN0YW5jZUlkIH07XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5KHNlbmRQaWlEYXRhLCByZXF1aXJlZElkZW50aWZ5RGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudGFnRnVuY3Rpb24kLm5leHQodGhpcy50YWdGdW5jdGlvbik7XG4gICAgICAgICAgdGhpcy50cmFja2luZ0xvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIHVzZXIvYWNjb3VudCBhdCBHYWluc2lnaHQuXG4gICAqIEBwYXJhbSBzZW5kUGlpRGF0YSBGbGFnIGZvciBzZW5kaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gaWRlbnRpZnlEYXRhIE9iamVjdCBjb250YWluaW5nIGlkZW50aWZpY2F0aW9uIGRhdGEuXG4gICAqL1xuICBpZGVudGlmeShzZW5kUGlpRGF0YTogYm9vbGVhbiwgaWRlbnRpZnlEYXRhOiBJZGVudGlmeURhdGEpIHtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSB3aW5kb3cgYXMgYW55O1xuICAgIGNvbnN0IHsgaWQ6IHVzZXJJZCwgZW1haWwsIHJvbGVzIH0gPSBpZGVudGlmeURhdGEudXNlcjtcbiAgICBjb25zdCB7IG5hbWU6IHRlbmFudElELCBjdXN0b21Qcm9wZXJ0aWVzLCBkb21haW5OYW1lIH0gPSBpZGVudGlmeURhdGEuY3VycmVudFRlbmFudDtcbiAgICBjb25zdCB7IGluc3RhbmNlSWQsIHZlcnNpb25VSSwgdmVyc2lvbkJFIH0gPSBpZGVudGlmeURhdGE7XG5cbiAgICAvKipcbiAgICAgKiBQYXNzaW5nIElEIGlzIGEgbWluaW11bSByZXF1aXJlZCBkYXRhIHRvIG1ha2UgYW4gaWRlbnRpZnkgY2FsbCB0byBHYWluc2lnaHQuXG4gICAgICogaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGxhdGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXNlcnMgY3JlYXRlZCBiZWZvcmUgYW5kIGFmdGVyIGRhdGEgYW5vbnltaXphdGlvbiBkb25lIGJ5IEdhaW5zaWdodC5cbiAgICAgKiB0ZW5hbnRJRCBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGVuYW50cyB3aGVuIHNhbWUgZW1haWwgaXMgdXNlZCBmb3IgZGlmZmVyZW50IHRlbmFudHMuXG4gICAgICpcbiAgICAgKiBEdWUgdG8gR1MgbGltaXRhdGlvbnMgKEdTIGRvZXMgbm90IGFsbG93IGNsZWFyaW5nIHVzZXIgYXR0ci9wcmVmZXJlbmNlcyB2aWEgdGhlIEdTIHRhZyEpLFxuICAgICAqIHdlIGFsd2F5cyBuZWVkIHRvIGluaXRpYWxpemUgZmllbGRzIHJlbGF0ZWQgdG8gUElJIHRvIHByZXZlbnQgbGVha2luZyB0aGlzIGRhdGEgdG8gR1Mgd2hlbiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgZnVuY3Rpb25hbCBjb29raWVzLlxuICAgICAqL1xuICAgIGNvbnN0IHJlcXVpcmVkSWRlbnRpZnkgPSB7XG4gICAgICAvKipcbiAgICAgICAqIEVtYWlsIHdhcyBub3QgbWFuZGF0b3J5IGZvcm0gZmllbGQgdW50aWwgMTAuMTRcbiAgICAgICAqL1xuICAgICAgaWQ6IGVtYWlsID8gZW1haWwgOiBgJHt1c2VySWR9XyR7dGVuYW50SUR9XyR7aW5zdGFuY2VJZH1gLFxuICAgICAgaXNVc2VyQ3JlYXRlZEFmdGVyQW5vbnltaXphdGlvbldhc0FjdGl2YXRlZDogdHJ1ZSxcbiAgICAgIHRlbmFudElEOiB0ZW5hbnRJRCxcbiAgICAgIGVtYWlsOiAnLS0nLFxuICAgICAgdXNlck5hbWU6ICctLScsXG4gICAgICBmaXJzdE5hbWU6ICctLScsXG4gICAgICBsYXN0TmFtZTogJy0tJyxcbiAgICAgIGRvbWFpbk5hbWUsXG4gICAgICB2ZXJzaW9uVUksXG4gICAgICB2ZXJzaW9uQkUsXG4gICAgICB1c2VyTGFuZ3VhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyxcbiAgICAgIGJyb3dzZXJMYW5ndWFnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEJyb3dzZXJMYW5nKCksXG4gICAgICBpbnN0YW5jZUlkLFxuICAgICAgZXh0ZXJuYWxSZWZlcmVuY2U6IGN1c3RvbVByb3BlcnRpZXM/LmV4dGVybmFsUmVmZXJlbmNlLFxuICAgICAgdXNlclJvbGVzOiB0aGlzLnRyYW5zZm9ybVVzZXJSb2xlc1RvU3RyKHJvbGVzPy5yZWZlcmVuY2VzKSxcbiAgICAgIGN1c3RvbUJyYW5kaW5nOiB0aGlzLmlzQ3VzdG9tQnJhbmRpbmcoKSxcbiAgICAgIGZ1bGxUcmFja2luZzogc2VuZFBpaURhdGFcbiAgICB9O1xuXG4gICAgaWYgKHNlbmRQaWlEYXRhKSB7XG4gICAgICBjb25zdCB7IHVzZXJOYW1lLCBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gPSBpZGVudGlmeURhdGEudXNlcjtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRJZGVudGlmeSA9IHtcbiAgICAgICAgLi4ucmVxdWlyZWRJZGVudGlmeSxcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHVzZXJOYW1lLFxuICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lXG4gICAgICB9O1xuXG4gICAgICB3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSgnaWRlbnRpZnknLCBleHRlbmRlZElkZW50aWZ5LCB7XG4gICAgICAgIGlkOiBgJHt0ZW5hbnRJRH1fJHtpbnN0YW5jZUlkfWAsXG4gICAgICAgIGluc3RhbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdKCdpZGVudGlmeScsIHJlcXVpcmVkSWRlbnRpZnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGFuIGV2ZW50IHRvIGJlIHJlY29yZGVkIGJ5IEdhaW5zaWdodCBQWC5cbiAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIEdhaW5zaWdodCBQWCdzIHRyYWNraW5nIG1lY2hhbmlzbSB0byBsb2cgYSBzcGVjaWZpYyBldmVudFxuICAgKiBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOYW1lIG9mIHRoZSBldmVudCB0byBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIE9wdGlvbmFsIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC5cbiAgICovXG4gIHRyaWdnZXJFdmVudChldmVudE5hbWU6IHN0cmluZywgcHJvcHM/OiBQeEV2ZW50RGF0YSkge1xuICAgIGlmICh0aGlzLnRhZ0Z1bmN0aW9uICYmIGV2ZW50TmFtZSkge1xuICAgICAgZXZlbnROYW1lID0gdGhpcy5wcmVwYXJlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICB0aGlzLnRhZ0Z1bmN0aW9uKCd0cmFjaycsIGV2ZW50TmFtZSwgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zbGF0ZVRvRW5nbGlzaCh0ZXh0VG9UcmFuc2xhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBjdXJyZW50TGFuZyB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xuXG4gICAgaWYgKGN1cnJlbnRMYW5nID09PSAnZW4nKSB7XG4gICAgICByZXR1cm4gdGV4dFRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TGFuZyAmJiBjdXJyZW50TGFuZyAhPT0gdGhpcy5jYWNoZWRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMpIHtcbiAgICAgIHRoaXMuY2FjaGVkTGFuZ3VhZ2UgPSBjdXJyZW50TGFuZztcbiAgICAgIHRoaXMuY2FjaGVkUmV2ZXJ0ZWRUcmFuc2xhdGlvbnMgPSB0aGlzLmdldFJldmVydGVkVHJhbnNsYXRpb25zKGN1cnJlbnRMYW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRFblRyYW5zbGF0aW9uKHRleHRUb1RyYW5zbGF0ZSwgdGhpcy5jYWNoZWRSZXZlcnRlZFRyYW5zbGF0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpIHNob3VsZCBiZSBzZW50IHdoaWxlIGxvYWRpbmcgYSB0YWcuXG4gICAqIFRoZSBkZWNpc2lvbiB0byBhY3RpdmF0ZSBHYWluc2lnaHQgYW5kIHNlbmQgUElJIHJlbGllcyBvbiB3aGV0aGVyIHRoZSBjb29raWVQcmVmZXJlbmNlcyBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MsXG4gICAqIGlmIHRoZSBmdW5jdGlvbmFsIGNvb2tpZSBpcyBlbmFibGVkLCBhbmQgaWYgdGhlIHVzZXIgZ3JhbnRzIHBlcm1pc3Npb24uXG4gICAqL1xuICBhc3luYyBzaG91bGRTZW5kUGlpRGF0YSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb29raWVCYW5uZXJTZXJ2aWNlLmlzQ29uZmlnQ29va2llUHJlZmVyZW5jZXNEZWZpbmVkKCkgJiZcbiAgICAgIHRoaXMuY29va2llQmFubmVyU2VydmljZS5pc0Z1bmN0aW9uYWxDb29raWVFbmFibGVkKCkgJiZcbiAgICAgICEoYXdhaXQgdGhpcy5pc0dhaW5zaWdodFByZWZlcmVuY2VEaXNhYmxlZEluVXNlclByZWZlcmVuY2VzKFxuICAgICAgICB0aGlzLlVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0tFWVxuICAgICAgKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzcGVjaWZpYyB1c2VyIGF0dHJpYnV0ZSBpbiB0aGUgR2FpbnNpZ2h0IGdsb2JhbCBzY29wZS5cbiAgICogVGhpcyBtZXRob2QgaW50ZXJmYWNlcyB3aXRoIHRoZSBHYWluc2lnaHQgZ2xvYmFsIG9iamVjdCB0byBzZXQgYSB1c2VyJ3Mgc3BlY2lmaWMgYXR0cmlidXRlIHdpdGggYSBwcm92aWRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSB1c2VyIGF0dHJpYnV0ZSB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBzZXQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBhdHRyaWJ1dGUuXG4gICAqL1xuICB1cGRhdGVVc2VyQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuKTogdm9pZCB7XG4gICAgd2luZG93W3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0/Lignc2V0JywgJ3VzZXInLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBtb2RpZnkgR2FpbnNpZ2h0IFBYIHNldHRpbmdzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgbXVsdGlwbGUgY29uZGl0aW9uczpcbiAgICogMS4gV2hldGhlciB0cmFja2luZyBoYXMgYmVlbiBkaXNhYmxlZCBnbG9iYWxseSB2aWEgYXBwbGljYXRpb24gb3B0aW9ucy5cbiAgICogMi4gV2hldGhlciBHYWluc2lnaHQgaXMgZGlzYWJsZWQgYXQgdGhlIHRlbmFudCBsZXZlbCB0aHJvdWdoIGN1c3RvbSBwcm9wZXJ0aWVzLlxuICAgKiAzLiBXaGV0aGVyIGEgR2FpbnNpZ2h0IGtleSBpcyBhdmFpbGFibGUsIGVpdGhlciBjdXJyZW50bHkgbG9hZGVkIG9yIGZldGNoZWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIDQuIFdoZXRoZXIgY29va2llIHByZWZlcmVuY2VzIGFyZSBkZWZpbmVkIGFuZCBhdmFpbGFibGUgZm9yIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuLiBUcnVlIGluZGljYXRlcyB0aGUgdXNlciBjYW4gZWRpdCBwcm9kdWN0IGV4cGVyaWVuY2Ugc2V0dGluZ3MsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBjYW5FZGl0UHJvZHVjdEV4cGVyaWVuY2VTZXR0aW5ncygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IHsgY3VzdG9tUHJvcGVydGllcyB9ID0gY3VycmVudFRlbmFudDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVHJhY2tpbmdEaXNhYmxlZCgpIHx8XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0RGlzYWJsZWRBdFRlbmFudEN1c3RvbVByb3BlcnRpZXMoY3VzdG9tUHJvcGVydGllcylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZ2FpbnNpZ2h0S2V5ID0gISF0aGlzLmdhaW5zaWdodEtleSB8fCAhIShhd2FpdCB0aGlzLmdldEdhaW5zaWdodEtleSgpKTtcbiAgICByZXR1cm4gKFxuICAgICAgZ2FpbnNpZ2h0S2V5ICYmXG4gICAgICB0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuaXNDb25maWdDb29raWVQcmVmZXJlbmNlc0RlZmluZWQoKSAmJlxuICAgICAgISF0aGlzLmNvb2tpZUJhbm5lclNlcnZpY2UuZ2V0VXNlckNvb2tpZVByZWZlcmVuY2VzKClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaGFzaEdyb3VwTmFtZShncm91cE5hbWU6IHN0cmluZykge1xuICAgIGlmICghZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdGhlIGdyb3VwIG5hbWUgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGdyb3VwTmFtZSk7XG5cbiAgICAvLyBVc2UgdGhlIFNIQS0yNTYgYWxnb3JpdGhtIHRvIGhhc2ggdGhlIGRhdGFcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcblxuICAgIC8vIENvbnZlcnQgdGhlIGhhc2ggdG8gYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICBjb25zdCBoYXNoZWROYW1lID0gaGFzaEFycmF5Lm1hcChieXRlID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGhhc2hlZE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2xvYmFsIGNvbnRleHQgZm9yIEdhaW5zaWdodCB3aXRoIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIFRoZSBnbG9iYWwgY29udGV4dCBjYW4gYmUgdXRpbGl6ZWQgYnkgR2FpbnNpZ2h0IGZvciB2YXJpb3VzIHB1cnBvc2VzLCBzdWNoIGFzIHNlZ21lbnRpbmcgdXNlcnMuXG4gICAqL1xuICBzZXRHbG9iYWxDb250ZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRBcHBTdGF0ZSA9IHRoaXMuYXBwU3RhdGUuc3RhdGUkLnZhbHVlO1xuICAgIGNvbnN0IGN1cnJlbnRBcHBOYW1lID0gY3VycmVudEFwcFN0YXRlLmFwcC5uYW1lO1xuXG4gICAgd2luZG93W3RoaXMuR0FJTlNJR0hUX0dMT0JBTF9TQ09QRV0/Lignc2V0JywgJ2dsb2JhbENvbnRleHQnLCB7IHByb2plY3ROYW1lOiBjdXJyZW50QXBwTmFtZSB9KTtcbiAgfVxuXG4gIHRyYW5zZm9ybVVzZXJSb2xlc1RvU3RyKHVzZXJSb2xlcz86IElJZGVudGlmaWVkW10pOiBzdHJpbmcge1xuICAgIGlmICghdXNlclJvbGVzKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRNYXAodXNlclJvbGVzLCAodXNlclJvbGU6IHsgcm9sZTogVXNlclJvbGUgfSkgPT4gdXNlclJvbGUucm9sZS5uYW1lKS5qb2luKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIEdhaW5zaWdodCBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0ZW5hbnQgY3VzdG9tIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdXN0b21Qcm9wZXJ0aWVzIC0gVGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgR2FpbnNpZ2h0IGlzIGRpc2FibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc0dhaW5zaWdodERpc2FibGVkQXRUZW5hbnRDdXN0b21Qcm9wZXJ0aWVzKGN1c3RvbVByb3BlcnRpZXM6IElDdXN0b21Qcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZ2FpbnNpZ2h0RW5hYmxlZCA9IGN1c3RvbVByb3BlcnRpZXMgJiYgY3VzdG9tUHJvcGVydGllcy5nYWluc2lnaHRFbmFibGVkO1xuICAgIHJldHVybiBnYWluc2lnaHRFbmFibGVkID09PSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGN1c3RvbSBicmFuZGluZyBpcyBlbmFibGVkIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIGJyYW5kIGxvZ28uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgY3VzdG9tIGJyYW5kaW5nIGlzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQ3VzdG9tQnJhbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gdGhpcy5vcHRpb25zLmdldCgnYnJhbmRpbmdDc3NWYXJzJykgfHwge307XG4gICAgcmV0dXJuICEhYnJhbmRpbmdDc3NWYXJzWydicmFuZC1sb2dvLWltZyddO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdHJhY2tpbmcgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGFwcGxpY2F0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0cmFja2luZyBpcyBkaXNhYmxlZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1RyYWNraW5nRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNhYmxlVHJhY2tpbmcgPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVFdmVudE5hbWUoYmFzZUV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYmFzZUV2ZW50TmFtZVxuICAgICAgLnNwbGl0KCc6JylcbiAgICAgIC5tYXAoZXZlbnROYW1lUGFydCA9PiBjYW1lbENhc2UocmVtb3ZlVHJhbnNsYXRpb25Db250ZXh0KGV2ZW50TmFtZVBhcnQpKSlcbiAgICAgIC5qb2luKCc6Jyk7XG5cbiAgICBmdW5jdGlvbiByZW1vdmVUcmFuc2xhdGlvbkNvbnRleHQoZXZlbnROYW1lUGFydDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBldmVudE5hbWVQYXJ0LnJlcGxhY2UoL2BbXFx3XFxXXSpgL2csICcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRTY3JpcHRUYWcoc2NyaXB0VGFnOiBIVE1MU2NyaXB0RWxlbWVudCwga2V5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgd2luZG93UmVmID0gd2luZG93IGFzIGFueTtcbiAgICAgIGNvbnN0IGZpcnN0VGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgIGNvbnN0IGdhaW5zaWdodEdsb2JhbFNjb3BlID0gdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFO1xuICAgICAgc2NyaXB0VGFnLnNyYyA9IGAke3Byb3RvY29sfS8vJHt0aGlzLkdBSU5TSUdIVF9VUkx9JHtrZXl9YDtcbiAgICAgICh3aW5kb3dSZWZbdGhpcy5HQUlOU0lHSFRfR0xPQkFMX1NDT1BFXSA9XG4gICAgICAgIHdpbmRvd1JlZlt0aGlzLkdBSU5TSUdIVF9HTE9CQUxfU0NPUEVdIHx8XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgICBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICh3aW5kb3dSZWZbZ2FpbnNpZ2h0R2xvYmFsU2NvcGVdLnEgPSB3aW5kb3dSZWZbZ2FpbnNpZ2h0R2xvYmFsU2NvcGVdLnEgfHwgW10pLnB1c2goYXJncyk7XG4gICAgICAgIH0pLFxuICAgICAgICAod2luZG93UmVmW2dhaW5zaWdodEdsb2JhbFNjb3BlXS5wID0ga2V5KTtcbiAgICAgIHNjcmlwdFRhZy5hc3luYyA9IHRydWU7XG4gICAgICBmaXJzdFRhZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHRUYWcsIGZpcnN0VGFnKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBHYWluc2lnaHQgUFgnLCBleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZUlkRnJvbVVybCgpIHtcbiAgICBjb25zdCBob3N0TmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuICAgIHJldHVybiBob3N0TmFtZS5zdWJzdHJpbmcoaG9zdE5hbWUuaW5kZXhPZignLicpICsgMSk7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJzZXMgdGhlIHRyYW5zbGF0aW9uIG9iamVjdC5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogeyBBZGQgd2lkZ2V0OiBcIldpZGdldCBoaW56dWbDvGdlblwiIH1cbiAgICpcbiAgICogd2lsbCBiZSBjaGFuZ2VkIHRvOlxuICAgKlxuICAgKiB7IFdpZGdldCBoaW56dWbDvGdlbjogXCJBZGQgd2lkZ2V0XCIgfVxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudExhbmcgTGFuZ3VhZ2Ugd2hvc2UgdHJhbnNsYXRlZCB2YWx1ZXMgYXJlIHRvIGJlIHBsYWNlZCBpbiB0aGUgb2JqZWN0IGtleS5cbiAgICogQHJldHVybnMgUmV0dXJucyBhbiBpbnZlcnRlZCBvYmplY3Qgd2hlcmUgdGhlIGtleXMgaGF2ZSBiZWVuIHN3YXBwZWQgd2l0aCB0aGUgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSZXZlcnRlZFRyYW5zbGF0aW9ucyhjdXJyZW50TGFuZzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0b3JlLnRyYW5zbGF0aW9uc1tjdXJyZW50TGFuZ107XG5cbiAgICBpZiAoIXRyYW5zbGF0aW9ucykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBzd2FwcGVkS2V5c1dpdGhWYWx1ZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHN3YXBwZWRLZXlzV2l0aFZhbHVlc1t0cmFuc2xhdGlvbnNba2V5XV0gPSBrZXk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN3YXBwZWRLZXlzV2l0aFZhbHVlcztcbiAgfVxuXG4gIC8qKlRyYW5zbGF0ZXMgc3RyaW5nIGJhY2sgaW50byBFbmdsaXNoLlxuICAgKiBJZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBsYW5ndWFnZSBpcyBzZXQgdG8gRW5nbGlzaCwgdGhlIHN0cmluZyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgaXMgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB0ZXh0VG9UcmFuc2xhdGUgc3RyaW5nIHRvIHRyYW5zbGF0ZS5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgc3RyaW5nIHRyYW5zbGF0ZWQgaW50byBFbmdsaXNoLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFblRyYW5zbGF0aW9uKFxuICAgIHRleHRUb1RyYW5zbGF0ZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICApOiBzdHJpbmcge1xuICAgIGxldCBlblRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zW3RleHRUb1RyYW5zbGF0ZV07XG4gICAgaWYgKCFlblRyYW5zbGF0aW9uKSB7XG4gICAgICByZXR1cm4gdGV4dFRvVHJhbnNsYXRlO1xuICAgIH1cbiAgICAvKiogcmVtb3ZlIHRyYW5zbGF0aW9uIGNvbnRleHQgKi9cbiAgICBjb25zdCByZWdleCA9IC9cXGAoLio/KVxcYC87XG4gICAgZW5UcmFuc2xhdGlvbiA9IGVuVHJhbnNsYXRpb24ucmVwbGFjZShyZWdleCwgJycpO1xuXG4gICAgcmV0dXJuIGVuVHJhbnNsYXRpb247XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Component, ContentChildren, ElementRef, EventEmitter, forwardRef, Input, Output, QueryList, ViewChild } from '@angular/core';
2
2
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { findIndex, get, set } from 'lodash-es';
3
+ import { findIndex, get, isEqual, set } from 'lodash-es';
4
4
  import { BsDropdownDirective } from 'ngx-bootstrap/dropdown';
5
5
  import { fromEvent, Subject } from 'rxjs';
6
6
  import { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';
@@ -37,10 +37,15 @@ export class TypeaheadComponent {
37
37
  this.destroyed$ = new Subject();
38
38
  }
39
39
  writeValue(value) {
40
- this.selected = value;
41
40
  if (value && this.searchControl) {
42
41
  this.searchControl.nativeElement.value = get(value, this.displayProperty, '');
43
42
  }
43
+ if (typeof this.onChange === 'function' &&
44
+ !isEqual(value, this.selected) &&
45
+ this.selected != null) {
46
+ this.onChange(value);
47
+ }
48
+ this.selected = value;
44
49
  }
45
50
  registerOnChange(fn) {
46
51
  this.onChange = fn;
@@ -136,7 +141,7 @@ export class TypeaheadComponent {
136
141
  if (!this.allowFreeEntries &&
137
142
  this.selected &&
138
143
  this.selected.id === null &&
139
- _ctrl.value[this.displayProperty]) {
144
+ get(_ctrl.value, this.displayProperty)) {
140
145
  return { notExisting: true };
141
146
  }
142
147
  return null;
@@ -219,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
219
224
  }], onIconClick: [{
220
225
  type: Output
221
226
  }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc2VsZWN0L3R5cGVhaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3NlbGVjdC90eXBlYWhlYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEVBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBa0J0RSxNQUFNLE9BQU8sa0JBQWtCO0lBaEIvQjtRQXVCRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBTWpCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBTXhCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBR3pCLFNBQUksR0FBRyxZQUFZLENBQUM7UUFHcEIsU0FBSSxHQUFXLElBQUksQ0FBQyxlQUFlLENBQUM7UUFHcEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUdqQixZ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QkFEUixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFNTixRQUFRO3NCQURQLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmluZEluZGV4LCBnZXQsIHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xpc3QtZ3JvdXAvbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10eXBlYWhlYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFR5cGVhaGVhZENvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUeXBlYWhlYWRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVHlwZWFoZWFkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoQ29udHJvbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ29udHJvbE1vZGVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaENvbnRyb2xNb2RlbDtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgZHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1Db21wb25lbnQpIGxpc3Q6IFF1ZXJ5TGlzdDxMaXN0SXRlbUNvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBtYXhsZW5ndGg6IHN0cmluZyB8IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93RnJlZUVudHJpZXMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZGlzcGxheVByb3BlcnR5ID0gJ25hbWUnO1xuXG4gIEBJbnB1dCgpXG4gIGljb24gPSAnY2FyZXQtZG93bic7XG5cbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nID0gdGhpcy5kaXNwbGF5UHJvcGVydHk7XG5cbiAgQElucHV0KClcbiAgYXV0b0Nsb3NlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBoaWRlTmV3ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY29udGFpbmVyOiAnJyB8ICdib2R5JyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkOiBJSWRlbnRpZmllZCA9IHtcbiAgICBpZDogbnVsbFxuICB9O1xuXG4gIEBPdXRwdXQoKVxuICBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkljb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpY29uOiBzdHJpbmc7ICRldmVudDogTW91c2VFdmVudCB9PigpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6IChuYW1lKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEtFWUNPREVfVVAgPSAzODtcbiAgcHJpdmF0ZSByZWFkb25seSBLRVlDT0RFX0RPV04gPSA0MDtcbiAgcHJpdmF0ZSByZWFkb25seSBLRVlDT0RFX1RBQiA9IDk7XG4gIHByaXZhdGUgcmVhZG9ubHkgS0VZQ09ERV9FTlRFUiA9IDEzO1xuICBwcml2YXRlIHJlYWRvbmx5IEtFWUNPREVfRVNDID0gMjc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ZWQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLnNlYXJjaENvbnRyb2wpIHtcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gZ2V0KHZhbHVlLCB0aGlzLmRpc3BsYXlQcm9wZXJ0eSwgJycpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBkb0JsdXIoKSB7XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldERpc3BsYXlQcm9wZXJ0eSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMuc2VsZWN0ZWQsIHRoaXMuZGlzcGxheVByb3BlcnR5LCAnJyk7XG4gIH1cblxuICBvblNob3duKCkge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpbnB1dCBmaWVsZCAtIGNsZWFyIHZhbHVlIGFuZCBjbGVhbiBmaWVsZCB0byBiZSBwcmlzdGluZSBhbmQgdW50b3VjaGVkLlxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sTW9kZWwucmVzZXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHRoaXMuc2VhcmNoQ29udHJvbC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChlOiBhbnkpID0+IHRoaXMuaGFuZGxlS2V5Ym9hcmQoZSkpLFxuICAgICAgICBmaWx0ZXIoKGU6IGFueSkgPT4gZSksXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgICBtYXAoKGU6IGFueSkgPT4gZS50YXJnZXQudmFsdWUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB7XG4gICAgICAgICAgaWQ6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgc2V0KHRoaXMuc2VsZWN0ZWQsIHRoaXMuZGlzcGxheVByb3BlcnR5LCB2YWx1ZSB8fCAnJyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAvLyBtYWtlIGZpcnN0IHJlc3VsdCBhY3RpdmVcbiAgICB0aGlzLmxpc3QuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuc2VhcmNoQ29udHJvbE1vZGVsPy5tb2RlbCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChxdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxMaXN0SXRlbUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RhYmxlID0gcXVlcnlMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLnNlbGVjdGFibGUpO1xuICAgICAgICBpZiAoZmlyc3RTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgZmlyc3RTZWxlY3RhYmxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlS2V5Ym9hcmQoZXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBpZiAoXG4gICAgICBbdGhpcy5LRVlDT0RFX0VOVEVSLCB0aGlzLktFWUNPREVfRE9XTiwgdGhpcy5LRVlDT0RFX1RBQiwgdGhpcy5LRVlDT0RFX1VQXS5pbmNsdWRlcyhrZXlDb2RlKVxuICAgICkge1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmxpc3QudG9BcnJheSgpO1xuICAgICAgY29uc3QgaW5kZXggPSBmaW5kSW5kZXgoaXRlbXMsIGl0ZW0gPT4gaXRlbS5hY3RpdmUpO1xuICAgICAgaWYgKGtleUNvZGUgPT09IHRoaXMuS0VZQ09ERV9FTlRFUiB8fCBrZXlDb2RlID09PSB0aGlzLktFWUNPREVfVEFCKSB7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpdGVtc1tpbmRleF0uZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wZG93bi5oaWRlKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uc2hvdygpO1xuICAgICAgICBjb25zdCB1cE9yRG93biA9IGtleUNvZGUgPT09IHRoaXMuS0VZQ09ERV9ET1dOID8gMSA6IC0xO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGl0ZW1zW2luZGV4XS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdE5leHRJdGVtT25LZXlib2FyZE1vdmUoaXRlbXMsIGluZGV4LCB1cE9yRG93bik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSB0aGlzLktFWUNPREVfRVNDICYmIHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuZHJvcGRvd24uaGlkZSgpO1xuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLnNob3coKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgdmFsaWRhdGUoX2N0cmw6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICFnZXQoX2N0cmwudmFsdWUsIHRoaXMuZGlzcGxheVByb3BlcnR5LCAnJykpIHtcbiAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuYWxsb3dGcmVlRW50cmllcyAmJlxuICAgICAgdGhpcy5zZWxlY3RlZCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZC5pZCA9PT0gbnVsbCAmJlxuICAgICAgX2N0cmwudmFsdWVbdGhpcy5kaXNwbGF5UHJvcGVydHldXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBub3RFeGlzdGluZzogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3ROZXh0SXRlbU9uS2V5Ym9hcmRNb3ZlKGl0ZW1zOiBMaXN0SXRlbUNvbXBvbmVudFtdLCBpbmRleDogYW55LCB1cE9yRG93bjogbnVtYmVyKSB7XG4gICAgaWYgKGl0ZW1zW2luZGV4ICsgdXBPckRvd25dKSB7XG4gICAgICBpZiAoIWl0ZW1zW2luZGV4ICsgdXBPckRvd25dLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0SXRlbU9uS2V5Ym9hcmRNb3ZlKGl0ZW1zLCBpbmRleCArIHVwT3JEb3duLCB1cE9yRG93bik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW1zW2luZGV4ICsgdXBPckRvd25dLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYzh5LXNlYXJjaC1kcm9wZG93biBkcm9wZG93biBmaXQtd1wiXG4gIGRyb3Bkb3duXG4gIFtjb250YWluZXJdPVwiY29udGFpbmVyXCJcbiAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnRcIlxuICAjZHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gIChvblNob3duKT1cIm9uU2hvd24oKVwiXG4gIFtpc0Rpc2FibGVkXT1cImRpc2FibGVkXCJcbj5cbiAgPGRpdiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1kcm9wZG93blwiPlxuICAgIDxpbnB1dFxuICAgICAgI3NlYXJjaENvbnRyb2xcbiAgICAgICNzZWFyY2hDb250cm9sTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncC1yLTgwJzpcbiAgICAgICAgICAhaGlkZU5ldyAmJlxuICAgICAgICAgIChzZWxlY3RlZFxuICAgICAgICAgICAgPyBzZWxlY3RlZC5pZCA9PT0gbnVsbCAmJiBnZXREaXNwbGF5UHJvcGVydHkoKT8ubGVuZ3RoID4gMCAmJiBhbGxvd0ZyZWVFbnRyaWVzXG4gICAgICAgICAgICA6IGZhbHNlKSxcbiAgICAgICAgJ3Atci00MCc6IGhpZGVOZXcgfHwgZ2V0RGlzcGxheVByb3BlcnR5KCk/Lmxlbmd0aCA9PT0gMFxuICAgICAgfVwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWQgPyBnZXREaXNwbGF5UHJvcGVydHkoKSA6ICcnXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAoYmx1cik9XCJkb0JsdXIoKVwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgLz5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvIHAtYWJzb2x1dGVcIlxuICAgICAgc3R5bGU9XCJ0b3A6IDEwcHg7IHJpZ2h0OiA0MHB4OyB6LWluZGV4OiAxMFwiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhaGlkZU5ldyAmJlxuICAgICAgICAoc2VsZWN0ZWRcbiAgICAgICAgICA/IHNlbGVjdGVkLmlkID09PSBudWxsICYmIGdldERpc3BsYXlQcm9wZXJ0eSgpPy5sZW5ndGggPiAwICYmIGFsbG93RnJlZUVudHJpZXNcbiAgICAgICAgICA6IGZhbHNlKVxuICAgICAgXCJcbiAgICA+XG4gICAgICB7eyAnTmV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3RcIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJvbkljb25DbGljay5lbWl0KHsgaWNvbiwgJGV2ZW50IH0pO1wiXG4gICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgIGRhdGEtY3k9XCJ0eXBlYWhlYWQtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiaWNvblwiIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8Yzh5LWxpc3QtZ3JvdXBcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS0tbW9kYWxcIlxuICAgIGRhdGEtY3k9XCJ0eXBlYWhlYWQtLWRyb3Bkb3duLW1lbnVcIlxuICAgIHJvbGU9XCJtZW51XCJcbiAgICAqZHJvcGRvd25NZW51XG4gICAgW3N0eWxlLndpZHRoXT1cImNvbnRhaW5lciA9PT0gJ2JvZHknID8gc2VhcmNoQ29udHJvbC5jbGllbnRXaWR0aCArICdweCcgOiB1bmRlZmluZWRcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2LCBjOHktbGksIGM4eS1saXN0LWl0ZW0sIGJ1dHRvbiwgYVwiPjwvbmctY29udGVudD5cbiAgPC9jOHktbGlzdC1ncm91cD5cbjwvZGl2PlxuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc2VsZWN0L3R5cGVhaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3NlbGVjdC90eXBlYWhlYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEVBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7OztBQWtCdEUsTUFBTSxPQUFPLGtCQUFrQjtJQWhCL0I7UUF1QkUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU1qQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQU14QixvQkFBZSxHQUFHLE1BQU0sQ0FBQztRQUd6QixTQUFJLEdBQUcsWUFBWSxDQUFDO1FBR3BCLFNBQUksR0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBR3BDLGNBQVMsR0FBRyxJQUFJLENB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QVM7c0JBRFIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFNTixRQUFRO3NCQURQLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmluZEluZGV4LCBnZXQsIGlzRXF1YWwsIHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xpc3QtZ3JvdXAvbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10eXBlYWhlYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFR5cGVhaGVhZENvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUeXBlYWhlYWRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVHlwZWFoZWFkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoQ29udHJvbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQ29udHJvbE1vZGVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaENvbnRyb2xNb2RlbDtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgZHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdEl0ZW1Db21wb25lbnQpIGxpc3Q6IFF1ZXJ5TGlzdDxMaXN0SXRlbUNvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBtYXhsZW5ndGg6IHN0cmluZyB8IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbG93RnJlZUVudHJpZXMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZGlzcGxheVByb3BlcnR5ID0gJ25hbWUnO1xuXG4gIEBJbnB1dCgpXG4gIGljb24gPSAnY2FyZXQtZG93bic7XG5cbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nID0gdGhpcy5kaXNwbGF5UHJvcGVydHk7XG5cbiAgQElucHV0KClcbiAgYXV0b0Nsb3NlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBoaWRlTmV3ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY29udGFpbmVyOiAnJyB8ICdib2R5JyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkOiBJSWRlbnRpZmllZCA9IHtcbiAgICBpZDogbnVsbFxuICB9O1xuXG4gIEBPdXRwdXQoKVxuICBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkljb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpY29uOiBzdHJpbmc7ICRldmVudDogTW91c2VFdmVudCB9PigpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6IChuYW1lKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEtFWUNPREVfVVAgPSAzODtcbiAgcHJpdmF0ZSByZWFkb25seSBLRVlDT0RFX0RPV04gPSA0MDtcbiAgcHJpdmF0ZSByZWFkb25seSBLRVlDT0RFX1RBQiA9IDk7XG4gIHByaXZhdGUgcmVhZG9ubHkgS0VZQ09ERV9FTlRFUiA9IDEzO1xuICBwcml2YXRlIHJlYWRvbmx5IEtFWUNPREVfRVNDID0gMjc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ZWQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuc2VhcmNoQ29udHJvbCkge1xuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBnZXQodmFsdWUsIHRoaXMuZGlzcGxheVByb3BlcnR5LCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICFpc0VxdWFsKHZhbHVlLCB0aGlzLnNlbGVjdGVkKSAmJlxuICAgICAgdGhpcy5zZWxlY3RlZCAhPSBudWxsXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgZG9CbHVyKCkge1xuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXREaXNwbGF5UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLnNlbGVjdGVkLCB0aGlzLmRpc3BsYXlQcm9wZXJ0eSwgJycpO1xuICB9XG5cbiAgb25TaG93bigpIHtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW5wdXQgZmllbGQgLSBjbGVhciB2YWx1ZSBhbmQgY2xlYW4gZmllbGQgdG8gYmUgcHJpc3RpbmUgYW5kIHVudG91Y2hlZC5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbE1vZGVsLnJlc2V0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaENvbnRyb2wubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZTogYW55KSA9PiB0aGlzLmhhbmRsZUtleWJvYXJkKGUpKSxcbiAgICAgICAgZmlsdGVyKChlOiBhbnkpID0+IGUpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgbWFwKChlOiBhbnkpID0+IGUudGFyZ2V0LnZhbHVlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0ge1xuICAgICAgICAgIGlkOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHNldCh0aGlzLnNlbGVjdGVkLCB0aGlzLmRpc3BsYXlQcm9wZXJ0eSwgdmFsdWUgfHwgJycpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gbWFrZSBmaXJzdCByZXN1bHQgYWN0aXZlXG4gICAgdGhpcy5saXN0LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLnNlYXJjaENvbnRyb2xNb2RlbD8ubW9kZWwpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocXVlcnlMaXN0OiBRdWVyeUxpc3Q8TGlzdEl0ZW1Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0YWJsZSA9IHF1ZXJ5TGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5zZWxlY3RhYmxlKTtcbiAgICAgICAgaWYgKGZpcnN0U2VsZWN0YWJsZSkge1xuICAgICAgICAgIGZpcnN0U2VsZWN0YWJsZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUtleWJvYXJkKGV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgaWYgKFxuICAgICAgW3RoaXMuS0VZQ09ERV9FTlRFUiwgdGhpcy5LRVlDT0RFX0RPV04sIHRoaXMuS0VZQ09ERV9UQUIsIHRoaXMuS0VZQ09ERV9VUF0uaW5jbHVkZXMoa2V5Q29kZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5saXN0LnRvQXJyYXkoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmluZEluZGV4KGl0ZW1zLCBpdGVtID0+IGl0ZW0uYWN0aXZlKTtcbiAgICAgIGlmIChrZXlDb2RlID09PSB0aGlzLktFWUNPREVfRU5URVIgfHwga2V5Q29kZSA9PT0gdGhpcy5LRVlDT0RFX1RBQikge1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaXRlbXNbaW5kZXhdLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJvcGRvd24uaGlkZSgpO1xuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLnNob3coKTtcbiAgICAgICAgY29uc3QgdXBPckRvd24gPSBrZXlDb2RlID09PSB0aGlzLktFWUNPREVfRE9XTiA/IDEgOiAtMTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBpdGVtc1tpbmRleF0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0SXRlbU9uS2V5Ym9hcmRNb3ZlKGl0ZW1zLCBpbmRleCwgdXBPckRvd24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PT0gdGhpcy5LRVlDT0RFX0VTQyAmJiB0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmRyb3Bkb3duLmhpZGUoKTtcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wZG93bi5zaG93KCk7XG4gICAgfVxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHZhbGlkYXRlKF9jdHJsOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhZ2V0KF9jdHJsLnZhbHVlLCB0aGlzLmRpc3BsYXlQcm9wZXJ0eSwgJycpKSB7XG4gICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmFsbG93RnJlZUVudHJpZXMgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWQuaWQgPT09IG51bGwgJiZcbiAgICAgIGdldChfY3RybC52YWx1ZSwgdGhpcy5kaXNwbGF5UHJvcGVydHkpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBub3RFeGlzdGluZzogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3ROZXh0SXRlbU9uS2V5Ym9hcmRNb3ZlKGl0ZW1zOiBMaXN0SXRlbUNvbXBvbmVudFtdLCBpbmRleDogYW55LCB1cE9yRG93bjogbnVtYmVyKSB7XG4gICAgaWYgKGl0ZW1zW2luZGV4ICsgdXBPckRvd25dKSB7XG4gICAgICBpZiAoIWl0ZW1zW2luZGV4ICsgdXBPckRvd25dLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0SXRlbU9uS2V5Ym9hcmRNb3ZlKGl0ZW1zLCBpbmRleCArIHVwT3JEb3duLCB1cE9yRG93bik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW1zW2luZGV4ICsgdXBPckRvd25dLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYzh5LXNlYXJjaC1kcm9wZG93biBkcm9wZG93biBmaXQtd1wiXG4gIGRyb3Bkb3duXG4gIFtjb250YWluZXJdPVwiY29udGFpbmVyXCJcbiAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnRcIlxuICAjZHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gIChvblNob3duKT1cIm9uU2hvd24oKVwiXG4gIFtpc0Rpc2FibGVkXT1cImRpc2FibGVkXCJcbj5cbiAgPGRpdiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1kcm9wZG93blwiPlxuICAgIDxpbnB1dFxuICAgICAgI3NlYXJjaENvbnRyb2xcbiAgICAgICNzZWFyY2hDb250cm9sTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncC1yLTgwJzpcbiAgICAgICAgICAhaGlkZU5ldyAmJlxuICAgICAgICAgIChzZWxlY3RlZFxuICAgICAgICAgICAgPyBzZWxlY3RlZC5pZCA9PT0gbnVsbCAmJiBnZXREaXNwbGF5UHJvcGVydHkoKT8ubGVuZ3RoID4gMCAmJiBhbGxvd0ZyZWVFbnRyaWVzXG4gICAgICAgICAgICA6IGZhbHNlKSxcbiAgICAgICAgJ3Atci00MCc6IGhpZGVOZXcgfHwgZ2V0RGlzcGxheVByb3BlcnR5KCk/Lmxlbmd0aCA9PT0gMFxuICAgICAgfVwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWQgPyBnZXREaXNwbGF5UHJvcGVydHkoKSA6ICcnXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAoYmx1cik9XCJkb0JsdXIoKVwiXG4gICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgLz5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvIHAtYWJzb2x1dGVcIlxuICAgICAgc3R5bGU9XCJ0b3A6IDEwcHg7IHJpZ2h0OiA0MHB4OyB6LWluZGV4OiAxMFwiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhaGlkZU5ldyAmJlxuICAgICAgICAoc2VsZWN0ZWRcbiAgICAgICAgICA/IHNlbGVjdGVkLmlkID09PSBudWxsICYmIGdldERpc3BsYXlQcm9wZXJ0eSgpPy5sZW5ndGggPiAwICYmIGFsbG93RnJlZUVudHJpZXNcbiAgICAgICAgICA6IGZhbHNlKVxuICAgICAgXCJcbiAgICA+XG4gICAgICB7eyAnTmV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3RcIlxuICAgICAgICB0aXRsZT1cInt7ICdTZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJvbkljb25DbGljay5lbWl0KHsgaWNvbiwgJGV2ZW50IH0pO1wiXG4gICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgIGRhdGEtY3k9XCJ0eXBlYWhlYWQtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiaWNvblwiIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8Yzh5LWxpc3QtZ3JvdXBcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS0tbW9kYWxcIlxuICAgIGRhdGEtY3k9XCJ0eXBlYWhlYWQtLWRyb3Bkb3duLW1lbnVcIlxuICAgIHJvbGU9XCJtZW51XCJcbiAgICAqZHJvcGRvd25NZW51XG4gICAgW3N0eWxlLndpZHRoXT1cImNvbnRhaW5lciA9PT0gJ2JvZHknID8gc2VhcmNoQ29udHJvbC5jbGllbnRXaWR0aCArICdweCcgOiB1bmRlZmluZWRcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2LCBjOHktbGksIGM4eS1saXN0LWl0ZW0sIGJ1dHRvbiwgYVwiPjwvbmctY29udGVudD5cbiAgPC9jOHktbGlzdC1ncm91cD5cbjwvZGl2PlxuIl19
@@ -50,8 +50,8 @@ export class AddFirmwarePatchModalComponent {
50
50
  }
51
51
  }), switchMap(() => of(null))), this.firmwareSelected$).pipe(switchMap(selectedFirmware => selectedFirmware ? this.repository.listBaseVersions(selectedFirmware) : of(null)), shareReplay(1));
52
52
  this.baseVersionsFilterPipe = pipe(switchMap((data) => this.patchDependencyInput$.pipe(map(partialVersion => data.filter((mo) => {
53
- const version = mo.c8y_Firmware.version.toLowerCase();
54
- return (partialVersion.length === 0 || version.indexOf(partialVersion.toLowerCase()) > -1);
53
+ const version = mo.c8y_Firmware.version?.toLowerCase();
54
+ return (partialVersion.length === 0 || version?.indexOf(partialVersion.toLowerCase()) > -1);
55
55
  })))));
56
56
  }
57
57
  async ngOnInit() {
@@ -122,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
122
122
  type: ViewChild,
123
123
  args: ['firmwarePatchForm', { static: false }]
124
124
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZpcm13YXJlLXBhdGNoLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvZmlybXdhcmUvbGlzdC9hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9maXJtd2FyZS9saXN0L2FkZC1maXJtd2FyZS1wYXRjaC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFFTCxvQ0FBb0MsRUFFcEMsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBTXhCLE1BQU0sT0FBTyw4QkFBOEI7SUEwRXpDLFlBQ1UsS0FBaUIsRUFDakIsVUFBNkIsRUFDN0IsS0FBbUI7UUFGbkIsVUFBSyxHQUFM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QyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQW9CO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzthQUNqQixDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNuQyxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxTQUFTO2dCQUNmLEdBQUcsRUFBRSxTQUFTO2FBQ2YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQXZJVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qiw2U0M1QjNDLCsyS0FvSkE7OzJGRHhIYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0Usd0NBQXdDOzBJQUt4QyxLQUFLO3NCQUFkLE1BQU07Z0JBRW1DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVyxJQUFJO3NCQUF0RCxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0LCBQaWNrZWRGaWxlcyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxNb2RlbCxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX1JFUE9TSVRPUllfU0hBUkVELFxuICBSZXBvc2l0b3J5Q2F0ZWdvcnksXG4gIFJlcG9zaXRvcnlTZXJ2aWNlLFxuICBSZXBvc2l0b3J5VHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlcG9zaXRvcnkvc2hhcmVkJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzd2l0Y2hNYXAsXG4gIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICdhZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEZpcm13YXJlUGF0Y2hNb2RhbENvbXBvbmVudCB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRDtcbiAgQE91dHB1dCgpIHNhdmVkOiBFdmVudEVtaXR0ZXI8UmVwb3NpdG9yeUNhdGVnb3J5PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVwb3NpdG9yeUNhdGVnb3J5PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duOiBCc0Ryb3Bkb3duRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKCdmaXJtd2FyZVBhdGNoRm9ybScsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtOiBOZ0Zvcm07XG4gIHRleHRGb3JGaXJtd2FyZVVybFBvcG92ZXI6IHN0cmluZyA9XG4gICAgZ2V0dGV4dChgUGF0aCBmb3IgYmluYXJpZXMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIGRldmljZSBhZ2VudCBpbXBsZW1lbnRhdGlvbiwgZm9yIGV4YW1wbGU6XG4gICAgL2Zpcm13YXJlL2JpbmFyaWVzL2Zpcm13YXJlMS5iaW5cbiAgICBodHRwczovL2Zpcm13YXJlL2JpbmFyeS8xMjNcbiAgICBmdHA6Ly9maXJtd2FyZS9iaW5hcnkvMTIzLnRhci5nelxuICBgKTtcblxuICBtb2RlbDogTW9kYWxNb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGRlcGVuZGVuY3k6IG51bGwsXG4gICAgcGF0Y2hWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgYmluYXJ5OiB7XG4gICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICB1cmw6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcblxuICBmaXJtd2FyZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGZpcm13YXJlcyQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9IHRoaXMuZmlybXdhcmVJbnB1dCQucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHN3aXRjaE1hcChzZWFyY2hTdHIgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgICBwYXJ0aWFsTmFtZTogc2VhcmNoU3RyLFxuICAgICAgICAgIHNraXBMZWdhY3k6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIGZpcm13YXJlU2VsZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPFJlcG9zaXRvcnlDYXRlZ29yeT4+KG51bGwpO1xuICBwYXRjaERlcGVuZGVuY3lJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHNhdmluZyA9IGZhbHNlO1xuICBmaXJtd2FyZVByZXNlbGVjdGVkID0gZmFsc2U7XG4gIGJhc2VWZXJzaW9ucyQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9IG1lcmdlKFxuICAgIHRoaXMuZmlybXdhcmVJbnB1dCQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwuZGVwZW5kZW5jeSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICB0aGlzLmZvcm0uZm9ybS5nZXQoJ3BhdGNoRGVwZW5kZW5jeScpLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKG51bGwpKVxuICAgICksXG4gICAgdGhpcy5maXJtd2FyZVNlbGVjdGVkJFxuICApLnBpcGUoXG4gICAgc3dpdGNoTWFwKHNlbGVjdGVkRmlybXdhcmUgPT5cbiAgICAgIHNlbGVjdGVkRmlybXdhcmUgPyB0aGlzLnJlcG9zaXRvcnkubGlzdEJhc2VWZXJzaW9ucyhzZWxlY3RlZEZpcm13YXJlKSA6IG9mKG51bGwpXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBiYXNlVmVyc2lvbnNGaWx0ZXJQaXBlID0gcGlwZShcbiAgICBzd2l0Y2hNYXAoKGRhdGE6IFtdKSA9PlxuICAgICAgdGhpcy5wYXRjaERlcGVuZGVuY3lJbnB1dCQucGlwZShcbiAgICAgICAgbWFwKHBhcnRpYWxWZXJzaW9uID0+XG4gICAgICAgICAgZGF0YS5maWx0ZXIoKG1vOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBtby5jOHlfRmlybXdhcmUudmVyc2lvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgcGFydGlhbFZlcnNpb24ubGVuZ3RoID09PSAwIHx8IHZlcnNpb24uaW5kZXhPZihwYXJ0aWFsVmVyc2lvbi50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5tb2RlbC5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5maXJtd2FyZVByZXNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlybXdhcmVTZWxlY3RlZCQubmV4dCh0aGlzLm1vZGVsLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlcG9zaXRvcnlcbiAgICAgIC5jcmVhdGUodGhpcy5tb2RlbCwgUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUpXG4gICAgICAudGhlbihzYXZlZEZpcm13YXJlID0+IHtcbiAgICAgICAgdGhpcy5zdWNjZXNzTXNnKCk7XG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZWQubmV4dChzYXZlZEZpcm13YXJlKTtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZWQuZXJyb3IoZSk7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN1Y2Nlc3NNc2coKSB7XG4gICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnRmlybXdhcmUgcGF0Y2ggYWRkZWQuJyk7XG4gICAgdGhpcy5hbGVydC5zdWNjZXNzKG1zZyk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gICAgdGhpcy5zYXZlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25GaWxlKGRyb3BwZWQ6IFBpY2tlZEZpbGVzKSB7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChkcm9wcGVkLnVybCkpIHtcbiAgICAgIHRoaXMubW9kZWwuYmluYXJ5ID0ge1xuICAgICAgICB1cmw6IGRyb3BwZWQudXJsXG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZHJvcHBlZC5kcm9wcGVkRmlsZXMpIHtcbiAgICAgIHRoaXMubW9kZWwuYmluYXJ5ID0ge1xuICAgICAgICBmaWxlOiBkcm9wcGVkLmRyb3BwZWRGaWxlc1swXS5maWxlXG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsLmJpbmFyeSA9IHtcbiAgICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgICB1cmw6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3cG9ydC1tb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBbYzh5SWNvbl09XCInYzh5LWZpcm13YXJlJ1wiPjwvaT5cbiAgICA8aDQgdHJhbnNsYXRlIGlkPVwiYWRkRmlybXdhcmVQYXRjaE1vZGFsVGl0bGVcIj5BZGQgZmlybXdhcmUgcGF0Y2g8L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXIgc2VwYXJhdG9yLWJvdHRvbVwiIGlkPVwiYWRkRmlybXdhcmVQYXRjaE1vZGFsRGVzY3JpcHRpb25cIj5cbiAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTYgbS0wXCIgdHJhbnNsYXRlPlNlbGVjdCBhIGZpcm13YXJlIHZlcnNpb248L3A+XG4gIDwvZGl2PlxuXG4gIDxmb3JtXG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICNmaXJtd2FyZVBhdGNoRm9ybT1cIm5nRm9ybVwiXG4gICAgKG5nU3VibWl0KT1cImZpcm13YXJlUGF0Y2hGb3JtLmZvcm0udmFsaWQgJiYgc2F2ZSgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJmaXJtd2FyZVByZXNlbGVjdGVkXCI+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpcm13YXJlTmFtZVwiIHRyYW5zbGF0ZT5GaXJtd2FyZTwvbGFiZWw+XG4gICAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJtb2RlbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJmaXJtd2FyZU5hbWVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWxlY3Qgb3IgZW50ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKG9uU2VhcmNoKT1cImZpcm13YXJlSW5wdXQkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFthbGxvd0ZyZWVFbnRyaWVzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgICAgKmM4eUZvcj1cImxldCBmaXJtd2FyZSBvZiBmaXJtd2FyZXMkIHwgYXN5bmM7IGxvYWRNb3JlOiAnYXV0bydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RlbC5zZWxlY3RlZCA9IGZpcm13YXJlOyBmaXJtd2FyZVNlbGVjdGVkJC5uZXh0KGZpcm13YXJlKVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJtb2RlbC5zZWxlY3RlZCA9PT0gZmlybXdhcmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImZpcm13YXJlLm5hbWUgfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJmaXJtd2FyZUlucHV0JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJub3RFeGlzdGluZ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ1NlbGVjdCBvbmUgb2YgdGhlIGV4aXN0aW5nIGZpcm13YXJlcy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cInBhdGNoRGVwZW5kZW5jeVwiIGNsYXNzPVwibS1yLThcIiB0cmFuc2xhdGU+VmVyc2lvbjwvbGFiZWw+XG4gICAgICAgICAgPGM4eS10eXBlYWhlYWRcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsLmRlcGVuZGVuY3lcIlxuICAgICAgICAgICAgbmFtZT1cInBhdGNoRGVwZW5kZW5jeVwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiYWRkLWZpcm13YXJlLXBhdGNoLW1vZGFsLS1wYXRjaERlcGVuZGVuY3lcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU2VsZWN0IG9yIGVudGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAob25TZWFyY2gpPVwicGF0Y2hEZXBlbmRlbmN5SW5wdXQkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidjOHlfRmlybXdhcmUudmVyc2lvbidcIlxuICAgICAgICAgICAgW2FsbG93RnJlZUVudHJpZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAoYmFzZVZlcnNpb25zJCB8IGFzeW5jKSA9PT0gbnVsbCB8fCAoYmFzZVZlcnNpb25zJCB8IGFzeW5jKT8uZGF0YS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1saVxuICAgICAgICAgICAgICAqYzh5Rm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGJhc2VWZXJzaW9uIG9mIGJhc2VWZXJzaW9ucyQ7XG4gICAgICAgICAgICAgICAgbG9hZE1vcmU6ICdhdXRvJztcbiAgICAgICAgICAgICAgICBwaXBlOiBiYXNlVmVyc2lvbnNGaWx0ZXJQaXBlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibW9kZWwuZGVwZW5kZW5jeSA9IGJhc2VWZXJzaW9uXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJtb2RlbC5kZXBlbmRlbmN5ID09PSBiYXNlVmVyc2lvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgW3RleHRdPVwiYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb24gfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgW3BhdHRlcm5dPVwicGF0Y2hEZXBlbmRlbmN5SW5wdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgPC9jOHktdHlwZWFoZWFkPlxuICAgICAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgbmFtZT1cIm5vdEV4aXN0aW5nXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiJ1NlbGVjdCBvbmUgb2YgdGhlIGV4aXN0aW5nIHZlcnNpb25zLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYXRjaFZlcnNpb25cIiB0cmFuc2xhdGU+UGF0Y2g8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJwYXRjaFZlcnNpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIG5hbWU9XCJwYXRjaFZlcnNpb25cIlxuICAgICAgICAgICAgZGF0YS1jeT1cImFkZC1maXJtd2FyZS1wYXRjaC1tb2RhbC0tcGF0Y2hWZXJzaW9uXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwucGF0Y2hWZXJzaW9uXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IDEuMC4wXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrIG0tdC00MFwiIHRyYW5zbGF0ZT5QYXRjaCBmaWxlPC9kaXY+XG4gICAgICAgICAgPGM4eS1maWxlLXBpY2tlclxuICAgICAgICAgICAgW21heEFsbG93ZWRGaWxlc109XCIxXCJcbiAgICAgICAgICAgIChvbkZpbGVzUGlja2VkKT1cIm9uRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtmaWxlVXJsUG9wb3Zlcl09XCJ0ZXh0Rm9yRmlybXdhcmVVcmxQb3BvdmVyXCJcbiAgICAgICAgICA+PC9jOHktZmlsZS1waWNrZXI+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBkYXRhLWN5PVwiYWRkLWZpcm13YXJlLXBhdGNoLW1vZGFsLS1jYW5jZWwtYnRuXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInNhdmluZ1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdBZGQgZmlybXdhcmUgcGF0Y2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBzYXZpbmcgfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAhZmlybXdhcmVQYXRjaEZvcm0uZm9ybS52YWxpZCB8fFxuICAgICAgICAgIGZpcm13YXJlUGF0Y2hGb3JtLmZvcm0ucHJpc3RpbmUgfHxcbiAgICAgICAgICAoIW1vZGVsLmJpbmFyeT8udXJsICYmICFtb2RlbC5iaW5hcnk/LmZpbGUpIHx8XG4gICAgICAgICAgc2F2aW5nXG4gICAgICAgIFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRklSTVdBUkUuRVZFTlRTLlJFUE9TSVRPUllcIlxuICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuRklSTVdBUkUuQ09NUE9ORU5UUy5BRERfRklSTVdBUl9QQVRDSF9NT0RBTCxcbiAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GSVJNV0FSRS5SRVNVTFRTLkFERF9GSVJNV0FSRV9QQVRDSFxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgQWRkIGZpcm13YXJlIHBhdGNoXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZpcm13YXJlLXBhdGNoLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvZmlybXdhcmUvbGlzdC9hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9maXJtd2FyZS9saXN0L2FkZC1maXJtd2FyZS1wYXRjaC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFFTCxvQ0FBb0MsRUFFcEMsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBTXhCLE1BQU0sT0FBTyw4QkFBOEI7SUEwRXpDLFlBQ1UsS0FBaUIsRUFDakIsVUFBNkIsRUFDN0IsS0FBbUI7UUFGbkIsVUFBSyxHQUFM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QyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQW9CO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzthQUNqQixDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNuQyxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxTQUFTO2dCQUNmLEdBQUcsRUFBRSxTQUFTO2FBQ2YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQXZJVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qiw2U0M1QjNDLCsyS0FvSkE7OzJGRHhIYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0Usd0NBQXdDOzBJQUt4QyxLQUFLO3NCQUFkLE1BQU07Z0JBRW1DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVyxJQUFJO3NCQUF0RCxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0LCBQaWNrZWRGaWxlcyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxNb2RlbCxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX1JFUE9TSVRPUllfU0hBUkVELFxuICBSZXBvc2l0b3J5Q2F0ZWdvcnksXG4gIFJlcG9zaXRvcnlTZXJ2aWNlLFxuICBSZXBvc2l0b3J5VHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlcG9zaXRvcnkvc2hhcmVkJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzd2l0Y2hNYXAsXG4gIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICdhZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEZpcm13YXJlUGF0Y2hNb2RhbENvbXBvbmVudCB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRDtcbiAgQE91dHB1dCgpIHNhdmVkOiBFdmVudEVtaXR0ZXI8UmVwb3NpdG9yeUNhdGVnb3J5PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVwb3NpdG9yeUNhdGVnb3J5PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duOiBCc0Ryb3Bkb3duRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKCdmaXJtd2FyZVBhdGNoRm9ybScsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtOiBOZ0Zvcm07XG4gIHRleHRGb3JGaXJtd2FyZVVybFBvcG92ZXI6IHN0cmluZyA9XG4gICAgZ2V0dGV4dChgUGF0aCBmb3IgYmluYXJpZXMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIGRldmljZSBhZ2VudCBpbXBsZW1lbnRhdGlvbiwgZm9yIGV4YW1wbGU6XG4gICAgL2Zpcm13YXJlL2JpbmFyaWVzL2Zpcm13YXJlMS5iaW5cbiAgICBodHRwczovL2Zpcm13YXJlL2JpbmFyeS8xMjNcbiAgICBmdHA6Ly9maXJtd2FyZS9iaW5hcnkvMTIzLnRhci5nelxuICBgKTtcblxuICBtb2RlbDogTW9kYWxNb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGRlcGVuZGVuY3k6IG51bGwsXG4gICAgcGF0Y2hWZXJzaW9uOiB1bmRlZmluZWQsXG4gICAgYmluYXJ5OiB7XG4gICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICB1cmw6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcblxuICBmaXJtd2FyZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGZpcm13YXJlcyQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9IHRoaXMuZmlybXdhcmVJbnB1dCQucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHN3aXRjaE1hcChzZWFyY2hTdHIgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgICBwYXJ0aWFsTmFtZTogc2VhcmNoU3RyLFxuICAgICAgICAgIHNraXBMZWdhY3k6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIGZpcm13YXJlU2VsZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPFJlcG9zaXRvcnlDYXRlZ29yeT4+KG51bGwpO1xuICBwYXRjaERlcGVuZGVuY3lJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHNhdmluZyA9IGZhbHNlO1xuICBmaXJtd2FyZVByZXNlbGVjdGVkID0gZmFsc2U7XG4gIGJhc2VWZXJzaW9ucyQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9IG1lcmdlKFxuICAgIHRoaXMuZmlybXdhcmVJbnB1dCQucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwuZGVwZW5kZW5jeSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICB0aGlzLmZvcm0uZm9ybS5nZXQoJ3BhdGNoRGVwZW5kZW5jeScpLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKG51bGwpKVxuICAgICksXG4gICAgdGhpcy5maXJtd2FyZVNlbGVjdGVkJFxuICApLnBpcGUoXG4gICAgc3dpdGNoTWFwKHNlbGVjdGVkRmlybXdhcmUgPT5cbiAgICAgIHNlbGVjdGVkRmlybXdhcmUgPyB0aGlzLnJlcG9zaXRvcnkubGlzdEJhc2VWZXJzaW9ucyhzZWxlY3RlZEZpcm13YXJlKSA6IG9mKG51bGwpXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBiYXNlVmVyc2lvbnNGaWx0ZXJQaXBlID0gcGlwZShcbiAgICBzd2l0Y2hNYXAoKGRhdGE6IFtdKSA9PlxuICAgICAgdGhpcy5wYXRjaERlcGVuZGVuY3lJbnB1dCQucGlwZShcbiAgICAgICAgbWFwKHBhcnRpYWxWZXJzaW9uID0+XG4gICAgICAgICAgZGF0YS5maWx0ZXIoKG1vOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBtby5jOHlfRmlybXdhcmUudmVyc2lvbj8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHBhcnRpYWxWZXJzaW9uLmxlbmd0aCA9PT0gMCB8fCB2ZXJzaW9uPy5pbmRleE9mKHBhcnRpYWxWZXJzaW9uLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmZpcm13YXJlUHJlc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5maXJtd2FyZVNlbGVjdGVkJC5uZXh0KHRoaXMubW9kZWwuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVwb3NpdG9yeVxuICAgICAgLmNyZWF0ZSh0aGlzLm1vZGVsLCBSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSlcbiAgICAgIC50aGVuKHNhdmVkRmlybXdhcmUgPT4ge1xuICAgICAgICB0aGlzLnN1Y2Nlc3NNc2coKTtcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlZC5uZXh0KHNhdmVkRmlybXdhcmUpO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlZC5lcnJvcihlKTtcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3VjY2Vzc01zZygpIHtcbiAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdGaXJtd2FyZSBwYXRjaCBhZGRlZC4nKTtcbiAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MobXNnKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICB0aGlzLnNhdmVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkZpbGUoZHJvcHBlZDogUGlja2VkRmlsZXMpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGRyb3BwZWQudXJsKSkge1xuICAgICAgdGhpcy5tb2RlbC5iaW5hcnkgPSB7XG4gICAgICAgIHVybDogZHJvcHBlZC51cmxcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChkcm9wcGVkLmRyb3BwZWRGaWxlcykge1xuICAgICAgdGhpcy5tb2RlbC5iaW5hcnkgPSB7XG4gICAgICAgIGZpbGU6IGRyb3BwZWQuZHJvcHBlZEZpbGVzWzBdLmZpbGVcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWwuYmluYXJ5ID0ge1xuICAgICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICAgIHVybDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXdwb3J0LW1vZGFsXCI+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZGlhbG9nLWhlYWRlclwiPlxuICAgIDxpIFtjOHlJY29uXT1cIidjOHktZmlybXdhcmUnXCI+PC9pPlxuICAgIDxoNCB0cmFuc2xhdGUgaWQ9XCJhZGRGaXJtd2FyZVBhdGNoTW9kYWxUaXRsZVwiPkFkZCBmaXJtd2FyZSBwYXRjaDwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tXCIgaWQ9XCJhZGRGaXJtd2FyZVBhdGNoTW9kYWxEZXNjcmlwdGlvblwiPlxuICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC0xNiBtLTBcIiB0cmFuc2xhdGU+U2VsZWN0IGEgZmlybXdhcmUgdmVyc2lvbjwvcD5cbiAgPC9kaXY+XG5cbiAgPGZvcm1cbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgI2Zpcm13YXJlUGF0Y2hGb3JtPVwibmdGb3JtXCJcbiAgICAobmdTdWJtaXQpPVwiZmlybXdhcmVQYXRjaEZvcm0uZm9ybS52YWxpZCAmJiBzYXZlKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWlubmVyLXNjcm9sbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgPGRpdiBbaGlkZGVuXT1cImZpcm13YXJlUHJlc2VsZWN0ZWRcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlybXdhcmVOYW1lXCIgdHJhbnNsYXRlPkZpcm13YXJlPC9sYWJlbD5cbiAgICAgICAgICAgIDxjOHktdHlwZWFoZWFkXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgbmFtZT1cImZpcm13YXJlTmFtZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBvciBlbnRlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwiZmlybXdhcmVJbnB1dCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2FsbG93RnJlZUVudHJpZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgICAgICAqYzh5Rm9yPVwibGV0IGZpcm13YXJlIG9mIGZpcm13YXJlcyQgfCBhc3luYzsgbG9hZE1vcmU6ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWwtOCBwLXItOCBjOHktbGlzdF9faXRlbS0tbGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGVsLnNlbGVjdGVkID0gZmlybXdhcmU7IGZpcm13YXJlU2VsZWN0ZWQkLm5leHQoZmlybXdhcmUpXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cIm1vZGVsLnNlbGVjdGVkID09PSBmaXJtd2FyZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwiZmlybXdhcmUubmFtZSB8fCAnLS0nXCJcbiAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cImZpcm13YXJlSW5wdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgPC9jOHktdHlwZWFoZWFkPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgbmFtZT1cIm5vdEV4aXN0aW5nXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInU2VsZWN0IG9uZSBvZiB0aGUgZXhpc3RpbmcgZmlybXdhcmVzLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicGF0Y2hEZXBlbmRlbmN5XCIgY2xhc3M9XCJtLXItOFwiIHRyYW5zbGF0ZT5WZXJzaW9uPC9sYWJlbD5cbiAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgW25nTW9kZWxdPVwibW9kZWwuZGVwZW5kZW5jeVwiXG4gICAgICAgICAgICBuYW1lPVwicGF0Y2hEZXBlbmRlbmN5XCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJhZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwtLXBhdGNoRGVwZW5kZW5jeVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWxlY3Qgb3IgZW50ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIChvblNlYXJjaCk9XCJwYXRjaERlcGVuZGVuY3lJbnB1dCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNwbGF5UHJvcGVydHldPVwiJ2M4eV9GaXJtd2FyZS52ZXJzaW9uJ1wiXG4gICAgICAgICAgICBbYWxsb3dGcmVlRW50cmllc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIChiYXNlVmVyc2lvbnMkIHwgYXN5bmMpID09PSBudWxsIHx8IChiYXNlVmVyc2lvbnMkIHwgYXN5bmMpPy5kYXRhLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgICpjOHlGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgYmFzZVZlcnNpb24gb2YgYmFzZVZlcnNpb25zJDtcbiAgICAgICAgICAgICAgICBsb2FkTW9yZTogJ2F1dG8nO1xuICAgICAgICAgICAgICAgIHBpcGU6IGJhc2VWZXJzaW9uc0ZpbHRlclBpcGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWwtOCBwLXItOCBjOHktbGlzdF9faXRlbS0tbGlua1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJtb2RlbC5kZXBlbmRlbmN5ID0gYmFzZVZlcnNpb25cIlxuICAgICAgICAgICAgICBbYWN0aXZlXT1cIm1vZGVsLmRlcGVuZGVuY3kgPT09IGJhc2VWZXJzaW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJiYXNlVmVyc2lvbi5jOHlfRmlybXdhcmUudmVyc2lvbiB8fCAnLS0nXCJcbiAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJwYXRjaERlcGVuZGVuY3lJbnB1dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgICA8L2M4eS10eXBlYWhlYWQ+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlcz5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICBuYW1lPVwibm90RXhpc3RpbmdcIlxuICAgICAgICAgICAgICBbdGV4dF09XCInU2VsZWN0IG9uZSBvZiB0aGUgZXhpc3RpbmcgdmVyc2lvbnMuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cInBhdGNoVmVyc2lvblwiIHRyYW5zbGF0ZT5QYXRjaDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInBhdGNoVmVyc2lvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbmFtZT1cInBhdGNoVmVyc2lvblwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiYWRkLWZpcm13YXJlLXBhdGNoLW1vZGFsLS1wYXRjaFZlcnNpb25cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbC5wYXRjaFZlcnNpb25cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gMS4wLjBcIlxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2sgbS10LTQwXCIgdHJhbnNsYXRlPlBhdGNoIGZpbGU8L2Rpdj5cbiAgICAgICAgICA8Yzh5LWZpbGUtcGlja2VyXG4gICAgICAgICAgICBbbWF4QWxsb3dlZEZpbGVzXT1cIjFcIlxuICAgICAgICAgICAgKG9uRmlsZXNQaWNrZWQpPVwib25GaWxlKCRldmVudClcIlxuICAgICAgICAgICAgW2ZpbGVVcmxQb3BvdmVyXT1cInRleHRGb3JGaXJtd2FyZVVybFBvcG92ZXJcIlxuICAgICAgICAgID48L2M4eS1maWxlLXBpY2tlcj5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIGRhdGEtY3k9XCJhZGQtZmlybXdhcmUtcGF0Y2gtbW9kYWwtLWNhbmNlbC1idG5cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwic2F2aW5nXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ0FkZCBmaXJtd2FyZSBwYXRjaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IHNhdmluZyB9XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICFmaXJtd2FyZVBhdGNoRm9ybS5mb3JtLnZhbGlkIHx8XG4gICAgICAgICAgZmlybXdhcmVQYXRjaEZvcm0uZm9ybS5wcmlzdGluZSB8fFxuICAgICAgICAgICghbW9kZWwuYmluYXJ5Py51cmwgJiYgIW1vZGVsLmJpbmFyeT8uZmlsZSkgfHxcbiAgICAgICAgICBzYXZpbmdcbiAgICAgICAgXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5GSVJNV0FSRS5FVkVOVFMuUkVQT1NJVE9SWVwiXG4gICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5GSVJNV0FSRS5DT01QT05FTlRTLkFERF9GSVJNV0FSX1BBVENIX01PREFMLFxuICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkZJUk1XQVJFLlJFU1VMVFMuQUREX0ZJUk1XQVJFX1BBVENIXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICBBZGQgZmlybXdhcmUgcGF0Y2hcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==