@microsoft/windows-admin-center-sdk 4.123.0 → 4.232.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 (581) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  21. package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
  22. package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
  23. package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
  24. package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
  25. package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
  26. package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
  27. package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
  28. package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
  29. package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
  30. package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
  31. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  32. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  33. package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
  34. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  35. package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
  36. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  37. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  38. package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
  39. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  40. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  41. package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
  42. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  43. package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
  44. package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
  45. package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
  46. package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
  47. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  48. package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
  49. package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
  50. package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
  51. package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
  52. package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
  53. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  54. package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
  55. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  56. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  57. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  58. package/angular/esm2020/src/data/index.mjs +2 -1
  59. package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
  60. package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
  61. package/angular/esm2020/src/generated/strings.mjs +1 -1
  62. package/angular/esm2020/src/service/navigation.service.mjs +3 -8
  63. package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
  64. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +665 -239
  65. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  66. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +636 -237
  67. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  68. package/angular/package.json +1 -1
  69. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  70. package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
  71. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  72. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  73. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  74. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  75. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  76. package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
  77. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  78. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  79. package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
  80. package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
  81. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  82. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  83. package/angular/src/data/index.d.ts +1 -0
  84. package/angular/src/directives/svg/svg.directive.d.ts +1 -2
  85. package/angular/src/generated/strings.d.ts +12 -0
  86. package/core/async/cancellation.js +312 -0
  87. package/core/async/index.js +312 -0
  88. package/core/async/progress.js +312 -0
  89. package/core/azure/azure-constants.d.ts +2 -2
  90. package/core/azure/azure-constants.d.ts.map +1 -1
  91. package/core/azure/azure-constants.js +322 -3
  92. package/core/azure/azure-constants.js.map +1 -1
  93. package/core/azure/azure-logging.js +312 -0
  94. package/core/azure/azure-manager.js +312 -0
  95. package/core/azure/models/aadAppConfig-data.js +312 -0
  96. package/core/azure/models/azureArcStatusEnum.js +312 -0
  97. package/core/azure/models/azureTokenResult-data.js +312 -0
  98. package/core/azure/resources/deployment-operation-request-body.js +312 -0
  99. package/core/azure/resources/deployment-operation-response.js +312 -0
  100. package/core/azure/resources/location-data.js +315 -0
  101. package/core/azure/resources/resource-group-data.js +312 -0
  102. package/core/azure/resources/subscription-data.js +312 -0
  103. package/core/base/data-store/browser-storage-data-store.js +315 -0
  104. package/core/base/data-store/cached-data-store.js +312 -0
  105. package/core/base/data-store/data-store.js +312 -0
  106. package/core/base/data-store/local-data-store.js +312 -0
  107. package/core/base/data-store/memory-data-store.js +312 -0
  108. package/core/base/data-store/session-data-store.js +312 -0
  109. package/core/base/date/date-like.js +312 -0
  110. package/core/base/date/date-range.js +312 -0
  111. package/core/base/date/date-time.js +312 -0
  112. package/core/base/date/date-type.js +312 -0
  113. package/core/base/date/time-unit.js +312 -0
  114. package/core/base/decorators/base.js +312 -0
  115. package/core/base/decorators/debounce.decorators.js +312 -0
  116. package/core/base/decorators/delay.decorator.js +315 -0
  117. package/core/base/decorators/yield.decorator.js +312 -0
  118. package/core/base/environment.js +312 -0
  119. package/core/base/json.js +312 -0
  120. package/core/base/msft-sme.mock.js +316 -0
  121. package/core/base/polyfills/array.js +315 -0
  122. package/core/base/polyfills/string.js +312 -0
  123. package/core/base/rxjs-lifetime-manager.js +312 -0
  124. package/core/base/utilities.js +312 -0
  125. package/core/base/versioned-object.js +312 -0
  126. package/core/data/accessibility-manager.js +312 -0
  127. package/core/data/active-directory/active-directory.js +312 -0
  128. package/core/data/active-directory/models/account-info.js +312 -0
  129. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  130. package/core/data/active-directory/models/search-type.js +312 -0
  131. package/core/data/animation.js +312 -0
  132. package/core/data/app-context.js +312 -0
  133. package/core/data/asset-manager.js +315 -0
  134. package/core/data/base64-array-buffer.js +312 -0
  135. package/core/data/batch-connection.js +312 -0
  136. package/core/data/cim-connection.js +312 -0
  137. package/core/data/cim-stream.js +312 -0
  138. package/core/data/cim.js +312 -0
  139. package/core/data/column-picker.js +312 -0
  140. package/core/data/cookie.js +312 -0
  141. package/core/data/core-environment.js +315 -0
  142. package/core/data/crypto.js +312 -0
  143. package/core/data/deployment-share.js +312 -0
  144. package/core/data/disposable.js +312 -0
  145. package/core/data/electron.js +315 -0
  146. package/core/data/error-extended.js +312 -0
  147. package/core/data/extension-broker/dialog-listener.js +312 -0
  148. package/core/data/extension-broker/extension-broker.js +312 -0
  149. package/core/data/extension-broker/extension-listener.js +312 -0
  150. package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
  151. package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
  152. package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
  153. package/core/data/extension-broker/model/extension-entries.js +315 -0
  154. package/core/data/extension-broker/model/extension-instance.js +315 -0
  155. package/core/data/extension-broker/model/extension-rect.js +312 -0
  156. package/core/data/extension-broker/model/extension-search-options.js +312 -0
  157. package/core/data/extension-broker/service-listener.js +312 -0
  158. package/core/data/extension-broker/worker-listener.js +312 -0
  159. package/core/data/extension-broker/worker-set.js +312 -0
  160. package/core/data/file-transfer.js +312 -0
  161. package/core/data/gateway-connection.js +312 -0
  162. package/core/data/gateway-status.js +312 -0
  163. package/core/data/gateway-url-builder.js +312 -0
  164. package/core/data/gateway-url-translator.d.ts +1 -0
  165. package/core/data/gateway-url-translator.d.ts.map +1 -1
  166. package/core/data/gateway-url-translator.js +337 -6
  167. package/core/data/gateway-url-translator.js.map +1 -1
  168. package/core/data/gateway-urls.js +312 -0
  169. package/core/data/globalization.js +315 -0
  170. package/core/data/http-constants.js +315 -0
  171. package/core/data/http.js +312 -0
  172. package/core/data/jobs/jobs-manager.js +312 -0
  173. package/core/data/jobs/models/job-credentials.js +312 -0
  174. package/core/data/jobs/models/job-node.js +312 -0
  175. package/core/data/jobs/models/job-paginated-response.js +315 -0
  176. package/core/data/jobs/models/job-pagination-options.js +315 -0
  177. package/core/data/jobs/models/job.js +312 -0
  178. package/core/data/jobs/models/node-job.js +312 -0
  179. package/core/data/jobs/models/powershell-job.js +312 -0
  180. package/core/data/language.js +315 -0
  181. package/core/data/lifetime-data.js +312 -0
  182. package/core/data/localization-manager.js +312 -0
  183. package/core/data/native-q.js +312 -0
  184. package/core/data/net.d.ts.map +1 -1
  185. package/core/data/net.js +313 -1
  186. package/core/data/net.js.map +1 -1
  187. package/core/data/node-connection.d.ts.map +1 -1
  188. package/core/data/node-connection.js +312 -2
  189. package/core/data/node-connection.js.map +1 -1
  190. package/core/data/node-extension-install.js +312 -0
  191. package/core/data/powershell-alternate.js +312 -0
  192. package/core/data/powershell-batch.js +312 -0
  193. package/core/data/powershell-connection.js +312 -0
  194. package/core/data/powershell-crypto.js +312 -0
  195. package/core/data/powershell-stream.js +312 -0
  196. package/core/data/powershell.js +312 -0
  197. package/core/data/query-cache.js +312 -0
  198. package/core/data/resource-cache.js +312 -0
  199. package/core/data/schedule-reboot.js +312 -0
  200. package/core/data/settings-manager.js +312 -0
  201. package/core/data/settings-manger.mock.js +312 -0
  202. package/core/data/sme-extension.js +312 -0
  203. package/core/data/ssh-stream.js +312 -0
  204. package/core/data/units.js +312 -0
  205. package/core/data/uri-builder.js +315 -0
  206. package/core/data/wdac-operations.js +312 -0
  207. package/core/data/websocket-stream.js +312 -0
  208. package/core/diagnostics/error-monitor.js +312 -0
  209. package/core/diagnostics/log-level.js +312 -0
  210. package/core/diagnostics/log-record.js +312 -0
  211. package/core/diagnostics/logging-constants.js +312 -0
  212. package/core/diagnostics/logging.js +312 -0
  213. package/core/diagnostics/logging.mock.js +312 -0
  214. package/core/diagnostics/sme-web-telemetry-models.js +312 -0
  215. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  216. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  217. package/core/diagnostics/sme-web-telemetry.js +336 -15
  218. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  219. package/core/diagnostics/telemetry-control-type.js +312 -0
  220. package/core/diagnostics/telemetry-options.js +312 -0
  221. package/core/diagnostics/telemetry-record.js +312 -0
  222. package/core/dom/dom.js +312 -0
  223. package/core/frame/frame-connection.js +312 -0
  224. package/core/frame/frame-connection.mock.js +312 -0
  225. package/core/frame/shell-navigation-connection.js +312 -0
  226. package/core/generated/powershell-scripts.d.ts.map +1 -1
  227. package/core/generated/powershell-scripts.js +313 -1
  228. package/core/generated/powershell-scripts.js.map +1 -1
  229. package/core/generated/strings.js +312 -0
  230. package/core/host/host-core-manager.js +312 -0
  231. package/core/host/host-core-message-type.js +312 -0
  232. package/core/host/host-core-messages.js +312 -0
  233. package/core/index.d.ts +0 -1
  234. package/core/index.d.ts.map +1 -1
  235. package/core/index.js +312 -1
  236. package/core/index.js.map +1 -1
  237. package/core/manifest/environment-modules.js +312 -0
  238. package/core/manifest/manifest-loader.js +312 -0
  239. package/core/notification/client-notification-instance.js +312 -0
  240. package/core/notification/client-notification.js +312 -0
  241. package/core/notification/notification-connection.js +312 -0
  242. package/core/notification/notification-link-type.js +312 -0
  243. package/core/notification/notification-manager.js +312 -0
  244. package/core/notification/notification-message.js +312 -0
  245. package/core/notification/notification-state.js +312 -0
  246. package/core/notification/notification.js +312 -0
  247. package/core/notification/powershell-notification.js +312 -0
  248. package/core/notification/socket-signalr.js +312 -0
  249. package/core/notification/work-item-connection.js +312 -0
  250. package/core/notification/work-item-manager.js +312 -0
  251. package/core/notification/work-item-request.js +312 -0
  252. package/core/performance/performance-profile-data-type.js +312 -0
  253. package/core/performance/performance-profile-data.js +312 -0
  254. package/core/performance/performance-profile-database.js +312 -0
  255. package/core/performance/performance-profile-record.js +312 -0
  256. package/core/performance/performance-profile.d.ts.map +1 -1
  257. package/core/performance/performance-profile.js +321 -9
  258. package/core/performance/performance-profile.js.map +1 -1
  259. package/core/performance/performance-tracker.js +312 -0
  260. package/core/polyfills.js +312 -0
  261. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
  262. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
  263. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  264. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  265. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  266. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
  267. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
  268. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
  269. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +246 -8
  270. package/core/rpc/alive/rpc-alive-client.js +312 -0
  271. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  272. package/core/rpc/alive/rpc-alive-model.js +315 -0
  273. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  274. package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
  275. package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
  276. package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
  277. package/core/rpc/azure/rpc-azure-model.js +312 -0
  278. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  279. package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
  280. package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
  281. package/core/rpc/azure/rpc-azure-response-client.js +312 -0
  282. package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
  283. package/core/rpc/credssp/rpc-credssp-model.js +312 -0
  284. package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
  285. package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
  286. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
  287. package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
  288. package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
  289. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  290. package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
  291. package/core/rpc/dialog/rpc-dialog-model.js +312 -0
  292. package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
  293. package/core/rpc/electron/rpc-electron-model.js +312 -0
  294. package/core/rpc/electron/rpc-electron-request-client.js +312 -0
  295. package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
  296. package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
  297. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  298. package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
  299. package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
  300. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  301. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  302. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
  303. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
  304. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  305. package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
  306. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
  307. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  308. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  309. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  310. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  311. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  312. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
  313. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  314. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
  315. package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
  316. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  317. package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
  318. package/core/rpc/forward/rpc-forward-model.js +312 -0
  319. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  320. package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
  321. package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
  322. package/core/rpc/log/rpc-log-client.js +312 -0
  323. package/core/rpc/log/rpc-log-handler.js +312 -0
  324. package/core/rpc/log/rpc-log-model.js +312 -0
  325. package/core/rpc/log/rpc-log-subject-server.js +312 -0
  326. package/core/rpc/notification/rpc-notification-client.js +312 -0
  327. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  328. package/core/rpc/notification/rpc-notification-model.js +312 -0
  329. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  330. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  331. package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
  332. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  333. package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
  334. package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
  335. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
  336. package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
  337. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  338. package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
  339. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  340. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  341. package/core/rpc/report/rpc-report-client.js +312 -0
  342. package/core/rpc/report/rpc-report-handler.js +312 -0
  343. package/core/rpc/report/rpc-report-model.js +312 -0
  344. package/core/rpc/report/rpc-report-subject-server.js +315 -0
  345. package/core/rpc/rpc-base.js +312 -0
  346. package/core/rpc/rpc-channel.js +312 -0
  347. package/core/rpc/rpc-forwarder.js +312 -0
  348. package/core/rpc/rpc-inbound-client.js +312 -0
  349. package/core/rpc/rpc-inbound.js +312 -0
  350. package/core/rpc/rpc-manager.js +312 -0
  351. package/core/rpc/rpc-module-subject-server.js +315 -0
  352. package/core/rpc/rpc-observable-client.js +312 -0
  353. package/core/rpc/rpc-observable-request.js +312 -0
  354. package/core/rpc/rpc-observable-result.js +312 -0
  355. package/core/rpc/rpc-observable-server.js +312 -0
  356. package/core/rpc/rpc-outbound-client.js +312 -0
  357. package/core/rpc/rpc-outbound.js +312 -0
  358. package/core/rpc/rpc-subject-server.js +312 -0
  359. package/core/rpc/rpc.js +312 -0
  360. package/core/rpc/seek/rpc-seek-client.js +312 -0
  361. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  362. package/core/rpc/seek/rpc-seek-model.js +312 -0
  363. package/core/rpc/settings/rpc-settings-client.js +315 -0
  364. package/core/rpc/settings/rpc-settings-handler.js +312 -0
  365. package/core/rpc/settings/rpc-settings-model.js +312 -0
  366. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  367. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
  368. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
  369. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
  370. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
  371. package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
  372. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
  373. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  374. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  375. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
  376. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
  377. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  378. package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
  379. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  380. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
  381. package/core/rpc/update-data/rpc-update-data-client.js +312 -0
  382. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  383. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  384. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  385. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
  386. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
  387. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
  388. package/core/rpc/work-item/rpc-work-item-client.js +312 -0
  389. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  390. package/core/rpc/work-item/rpc-work-item-model.js +312 -0
  391. package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
  392. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  393. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
  394. package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
  395. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  396. package/core/security/active-connection.js +312 -0
  397. package/core/security/authorization-manager.js +312 -0
  398. package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
  399. package/core/security/connection-manager-settings/connection-settings.js +312 -0
  400. package/core/security/connection-manager.js +312 -0
  401. package/core/security/connection-stream.js +312 -0
  402. package/core/security/connection.js +312 -0
  403. package/core/security/credssp-manager.js +312 -0
  404. package/core/security/sign-on-manager.js +312 -0
  405. package/core/security/tag-manager.js +312 -0
  406. package/core/security/tool-condition-validator.js +312 -0
  407. package/core/security/tool-connection-query.js +312 -0
  408. package/core/security/user-principal.js +312 -0
  409. package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
  410. package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
  411. package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
  412. package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
  413. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
  414. package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
  415. package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
  416. package/core/shared/inventory-query-caches.js +312 -0
  417. package/core/shared/server-inventory/server-inventory-cache.js +312 -0
  418. package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
  419. package/core/shared/server-inventory/server-inventory-detail.js +315 -0
  420. package/core/shared/server-inventory/server-inventory.js +312 -0
  421. package/core/shared/shared-cache.js +312 -0
  422. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  423. package/core/shared/tool-inventory/tool-inventory.js +312 -0
  424. package/core/special.js +315 -0
  425. package/core/test-utilities/accessibility-tester.js +312 -0
  426. package/core/test-utilities/console.mock.js +312 -0
  427. package/core/test-utilities/jasmine-axe-matcher.js +312 -0
  428. package/core/test-utilities/wait-async.js +312 -0
  429. package/core/test.js +312 -0
  430. package/core/testing.js +312 -0
  431. package/core/workflow/persistent-local-storage.js +312 -0
  432. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  433. package/core/workflow/persistent-work-item-state.js +312 -0
  434. package/core/workflow/persistent-work-item.js +315 -0
  435. package/core/workflow/persistent-workflow-builder.js +312 -0
  436. package/core/workflow/persistent-workflow-context.js +312 -0
  437. package/core/workflow/persistent-workflow-runner.js +312 -0
  438. package/core/workflow/persistent-workflow-snapshot.js +312 -0
  439. package/core/workflow/persistent-workflow-store.js +312 -0
  440. package/core/workflow/persistent-workflow.js +312 -0
  441. package/package.json +11 -9
  442. package/styles/css/main-v2.css +1 -1
  443. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  444. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  445. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  446. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  447. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  448. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  449. package/tools/build/webpack/index-html.transform.js +312 -0
  450. package/tools/build/webpack/shell.index-html.transform.js +312 -0
  451. package/tools/build/webpack/shell.webpack.config.js +312 -0
  452. package/tools/build/webpack/webpack.config.js +312 -0
  453. package/tools/code-formatter/.eslintrc.base.json +3 -1
  454. package/tools/code-formatter/lint.d.ts.map +1 -1
  455. package/tools/code-formatter/lint.js +319 -1
  456. package/tools/code-formatter/lint.js.map +1 -1
  457. package/tools/code-formatter/utilities.d.ts +7 -0
  458. package/tools/code-formatter/utilities.d.ts.map +1 -0
  459. package/tools/code-formatter/utilities.js +395 -0
  460. package/tools/code-formatter/utilities.js.map +1 -0
  461. package/tools/gulp-doc-generator/index.js +312 -0
  462. package/tools/gulp-manifest-resource/index.js +312 -0
  463. package/tools/gulp-manifest-validator/index.js +312 -0
  464. package/tools/gulp-merge-json-in-folders/index.js +312 -0
  465. package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
  466. package/tools/gulp-ps-cim/index.js +315 -0
  467. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  468. package/tools/gulp-ps-code/index.js +323 -2
  469. package/tools/gulp-ps-code/index.js.map +1 -1
  470. package/tools/gulp-ps-code/ps-code-convert.js +312 -0
  471. package/tools/gulp-ps-manifest/index.js +312 -0
  472. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  473. package/tools/gulp-ps-module/index.js +327 -3
  474. package/tools/gulp-ps-module/index.js.map +1 -1
  475. package/tools/gulp-ps-resjson/index.js +315 -0
  476. package/tools/gulp-resjson/index.js +315 -0
  477. package/tools/gulp-resjson/resjson-convert.js +312 -0
  478. package/tools/gulp-schema-form/index.js +312 -0
  479. package/tools/gulp-svg-code/index.js +312 -0
  480. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  481. package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
  482. package/tools/gulp-update-notes-resource/index.js +316 -4
  483. package/tools/gulp-update-notes-resource/index.js.map +1 -1
  484. package/tools/module-template/.eslintrc.json +3 -0
  485. package/tools/module-template/build/increment-package-version.ps1 +216 -0
  486. package/tools/module-template/build/push-incremented-version.ps1 +216 -1
  487. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  488. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  489. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  490. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  491. package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
  492. package/tools/pack-nuget/index.d.ts.map +1 -1
  493. package/tools/pack-nuget/index.js +321 -3
  494. package/tools/pack-nuget/index.js.map +1 -1
  495. package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
  496. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  497. package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
  498. package/tools/scripts/package-information/README.md +3 -0
  499. package/tools/scripts/package-information/ms-logo.png +0 -0
  500. package/tools/test-runner/index.js +312 -0
  501. package/tools/utilities/index.js +312 -0
  502. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
  503. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  504. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  505. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
  506. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
  507. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +328 -0
  508. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
  509. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
  510. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
  511. package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
  512. package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
  513. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
  514. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
  515. package/tools/wac-cli/src/angular15/main.d.ts +19 -3
  516. package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
  517. package/tools/wac-cli/src/angular15/main.js +353 -7
  518. package/tools/wac-cli/src/angular15/main.js.map +1 -1
  519. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  520. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
  521. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
  522. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  523. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
  524. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  525. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
  526. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
  527. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
  528. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
  529. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  530. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
  531. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
  532. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
  533. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
  534. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
  535. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +361 -0
  536. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
  537. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
  538. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
  539. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
  540. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
  541. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
  542. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
  543. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
  544. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
  545. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  546. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  547. package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
  548. package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
  549. package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
  550. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  551. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  552. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  553. package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
  554. package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
  555. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  556. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
  557. package/tools/wac-cli/src/common.js +312 -0
  558. package/tools/wac-cli/src/create/main.js +312 -0
  559. package/tools/wac-cli/src/eslint/main.js +312 -0
  560. package/tools/wac-cli/src/index.js +312 -0
  561. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  562. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
  563. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
  564. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  565. package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
  566. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  567. package/tools/wac-cli/src/upgrade/main.js +312 -0
  568. package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
  569. package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
  570. package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
  571. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  572. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
  573. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
  574. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  575. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  576. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  577. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
  578. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  579. package/core/data/extension-broker/snap-in-listener.js +0 -73
  580. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  581. package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
@@ -1,10 +1,10 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { Component, HostBinding, Injector, Input } from '@angular/core';
3
- import { Dom, ElementPosition } from '@microsoft/windows-admin-center-sdk/core/dom/dom';
2
+ import { Component, ElementRef, HostBinding, Injector, Input, ViewChild } from '@angular/core';
4
3
  import { SmeSchemaProperty } from '../../../schema/schema-decorator';
5
4
  import { SimplePropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
6
5
  import { SchemaPrimitiveType } from '../../../schema/schema-models';
7
6
  import { SmeInternalOptionsFormFieldComponent } from '../options-form-field/options-form-field.component';
7
+ import { OrderedListFormFieldAccessibilityManagerService } from './ordered-list-form-field-accessibility-manager.service';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/common";
10
10
  import * as i2 from "@angular/forms";
@@ -12,11 +12,12 @@ import * as i3 from "../options-form-field/form-field-option.component";
12
12
  import * as i4 from "../form-field-accessor.directive";
13
13
  import * as i5 from "../form-field-validator.directive";
14
14
  import * as i6 from "../form-field-async-validator.directive";
15
- import * as i7 from "../../../../directives/disabled/disabled.directive";
16
- import * as i8 from "../../../tooltip/tooltip.directive";
17
- import * as i9 from "../combobox/combobox-form-field.component";
18
- import * as i10 from "../../validation-alert/validation-alert.component";
19
- import * as i11 from "../../form-field-layout/form-field-layout.component";
15
+ import * as i7 from "./ordered-list-form-field-accessibility-manager.service";
16
+ import * as i8 from "../../../../directives/disabled/disabled.directive";
17
+ import * as i9 from "../../../tooltip/tooltip.directive";
18
+ import * as i10 from "../combobox/combobox-form-field.component";
19
+ import * as i11 from "../../validation-alert/validation-alert.component";
20
+ import * as i12 from "../../form-field-layout/form-field-layout.component";
20
21
  function OrderedListFormFieldLoaderComponent_sme_option_2_Template(rf, ctx) { if (rf & 1) {
21
22
  i0.ɵɵelement(0, "sme-option", 4);
22
23
  } if (rf & 2) {
@@ -40,7 +41,8 @@ function OrderedListFormFieldLoaderComponent_ng_container_3_Template(rf, ctx) {
40
41
  i0.ɵɵadvance(1);
41
42
  i0.ɵɵproperty("ngForOf", ctx_r2.resolveComponentMember(ctx_r2.propertySchema.options.itemsBinding));
42
43
  } }
43
- const _c0 = ["type", "orderedlist"];
44
+ const _c0 = ["addButton"];
45
+ const _c1 = ["type", "orderedlist"];
44
46
  function OrderedListFormFieldComponent_div_1_div_1_p_3_Template(rf, ctx) { if (rf & 1) {
45
47
  i0.ɵɵelementStart(0, "p", 14);
46
48
  i0.ɵɵtext(1);
@@ -48,9 +50,9 @@ function OrderedListFormFieldComponent_div_1_div_1_p_3_Template(rf, ctx) { if (r
48
50
  } if (rf & 2) {
49
51
  const i_r4 = i0.ɵɵnextContext().index;
50
52
  const ctx_r5 = i0.ɵɵnextContext(2);
51
- i0.ɵɵattribute("aria-describedby", ctx_r5.idBag.detailsSpan + i_r4);
53
+ i0.ɵɵattribute("aria-label", ctx_r5.idBag.detailsSpan + i_r4);
52
54
  i0.ɵɵadvance(1);
53
- i0.ɵɵtextInterpolate(ctx_r5.arrayGetValueDisplayString(ctx_r5.value[i_r4]));
55
+ i0.ɵɵtextInterpolate1(" ", ctx_r5.arrayGetValueDisplayString(ctx_r5.value[i_r4]), "");
54
56
  } }
55
57
  function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_ng_container_1_sme_option_1_Template(rf, ctx) { if (rf & 1) {
56
58
  i0.ɵɵelement(0, "sme-option", 18);
@@ -72,22 +74,22 @@ function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_ng_container
72
74
  function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template(rf, ctx) { if (rf & 1) {
73
75
  const _r17 = i0.ɵɵgetCurrentView();
74
76
  i0.ɵɵelementStart(0, "sme-form-field", 15);
75
- i0.ɵɵlistener("ngModelChange", function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template_sme_form_field_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r17); const i_r4 = i0.ɵɵnextContext().index; const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView((ctx_r16.value[i_r4] = $event)); })("ngModelChange", function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template_sme_form_field_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r19 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r19.triggerValueChange()); })("customValidate", function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template_sme_form_field_customValidate_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r20 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r20.newItemCheck()); });
77
+ i0.ɵɵlistener("ngModelChange", function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template_sme_form_field_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r17); const i_r4 = i0.ɵɵnextContext().index; const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView((ctx_r16.value[i_r4] = $event)); })("ngModelChange", function OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_Template_sme_form_field_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r19 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r19.triggerValueChange()); });
76
78
  i0.ɵɵtemplate(1, OrderedListFormFieldComponent_div_1_div_1_sme_form_field_5_ng_container_1_Template, 2, 1, "ng-container", 16);
77
79
  i0.ɵɵelementEnd();
78
80
  } if (rf & 2) {
79
- const ctx_r21 = i0.ɵɵnextContext();
80
- const item_r3 = ctx_r21.$implicit;
81
- const i_r4 = ctx_r21.index;
81
+ const ctx_r20 = i0.ɵɵnextContext();
82
+ const item_r3 = ctx_r20.$implicit;
83
+ const i_r4 = ctx_r20.index;
82
84
  const ctx_r6 = i0.ɵɵnextContext(2);
83
85
  i0.ɵɵproperty("utaId", item_r3 ? item_r3.toString() + "-combobox" : "new-combobox")("hideHeader", true)("valueComparator", ctx_r6.valueComparator)("ngModel", ctx_r6.value[i_r4])("label", ctx_r6.label)("searchable", ctx_r6.searchable);
84
86
  i0.ɵɵadvance(1);
85
87
  i0.ɵɵproperty("ngForOf", ctx_r6.options);
86
88
  } }
87
89
  function OrderedListFormFieldComponent_div_1_div_1_button_6_Template(rf, ctx) { if (rf & 1) {
88
- const _r24 = i0.ɵɵgetCurrentView();
90
+ const _r23 = i0.ɵɵgetCurrentView();
89
91
  i0.ɵɵelementStart(0, "button", 19);
90
- i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const i_r4 = i0.ɵɵnextContext().index; const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.promoteItemAt(i_r4)); });
92
+ i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const i_r4 = i0.ɵɵnextContext().index; const ctx_r21 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r21.promoteItemAt(i_r4)); });
91
93
  i0.ɵɵelement(1, "span", 20);
92
94
  i0.ɵɵelementEnd();
93
95
  } if (rf & 2) {
@@ -97,9 +99,9 @@ function OrderedListFormFieldComponent_div_1_div_1_button_6_Template(rf, ctx) {
97
99
  i0.ɵɵattribute("aria-label", ctx_r7.strings.MsftSmeShell.Angular.Form.OrderedList.promoteButtonAriaLabel);
98
100
  } }
99
101
  function OrderedListFormFieldComponent_div_1_div_1_button_7_Template(rf, ctx) { if (rf & 1) {
100
- const _r28 = i0.ɵɵgetCurrentView();
102
+ const _r27 = i0.ɵɵgetCurrentView();
101
103
  i0.ɵɵelementStart(0, "button", 21);
102
- i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const i_r4 = i0.ɵɵnextContext().index; const ctx_r26 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r26.demoteItemAt(i_r4)); });
104
+ i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const i_r4 = i0.ɵɵnextContext().index; const ctx_r25 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r25.demoteItemAt(i_r4)); });
103
105
  i0.ɵɵelement(1, "span", 22);
104
106
  i0.ɵɵelementEnd();
105
107
  } if (rf & 2) {
@@ -109,9 +111,9 @@ function OrderedListFormFieldComponent_div_1_div_1_button_7_Template(rf, ctx) {
109
111
  i0.ɵɵattribute("aria-label", ctx_r8.strings.MsftSmeShell.Angular.Form.OrderedList.demoteButtonAriaLabel);
110
112
  } }
111
113
  function OrderedListFormFieldComponent_div_1_div_1_button_8_Template(rf, ctx) { if (rf & 1) {
112
- const _r32 = i0.ɵɵgetCurrentView();
114
+ const _r31 = i0.ɵɵgetCurrentView();
113
115
  i0.ɵɵelementStart(0, "button", 23);
114
- i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r32); const i_r4 = i0.ɵɵnextContext().index; const ctx_r30 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r30.removeItemAt(i_r4)); });
116
+ i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_div_1_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r31); const i_r4 = i0.ɵɵnextContext().index; const ctx_r29 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r29.removeItemAt(i_r4)); });
115
117
  i0.ɵɵelement(1, "span", 24);
116
118
  i0.ɵɵelementEnd();
117
119
  } if (rf & 2) {
@@ -155,21 +157,21 @@ function OrderedListFormFieldComponent_div_1_div_1_Template(rf, ctx) { if (rf &
155
157
  } }
156
158
  function OrderedListFormFieldComponent_div_1_button_2_Template(rf, ctx) { if (rf & 1) {
157
159
  const _r34 = i0.ɵɵgetCurrentView();
158
- i0.ɵɵelementStart(0, "button", 25);
160
+ i0.ɵɵelementStart(0, "button", 25, 26);
159
161
  i0.ɵɵlistener("click", function OrderedListFormFieldComponent_div_1_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r34); const ctx_r33 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r33.addListItem()); });
160
- i0.ɵɵtext(1);
162
+ i0.ɵɵtext(2);
161
163
  i0.ɵɵelementEnd();
162
164
  } if (rf & 2) {
163
165
  const ctx_r2 = i0.ɵɵnextContext(2);
164
166
  i0.ɵɵproperty("smeDisabled", ctx_r2.loadingOrDisabled || ctx_r2.value.length === ctx_r2.options.length)("title", ctx_r2.strings.MsftSmeShell.Angular.Form.OrderedList.addButtonTooltip);
165
- i0.ɵɵattribute("aria-label", ctx_r2.strings.MsftSmeShell.Angular.Form.OrderedList.addButtonAriaLabel);
166
- i0.ɵɵadvance(1);
167
+ i0.ɵɵattribute("aria-label", ctx_r2.addRemoveButtonArialLabel);
168
+ i0.ɵɵadvance(2);
167
169
  i0.ɵɵtextInterpolate1(" ", ctx_r2.addButtonText, " ");
168
170
  } }
169
171
  function OrderedListFormFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
170
172
  i0.ɵɵelementStart(0, "div", 3);
171
173
  i0.ɵɵtemplate(1, OrderedListFormFieldComponent_div_1_div_1_Template, 9, 10, "div", 4);
172
- i0.ɵɵtemplate(2, OrderedListFormFieldComponent_div_1_button_2_Template, 2, 4, "button", 5);
174
+ i0.ɵɵtemplate(2, OrderedListFormFieldComponent_div_1_button_2_Template, 3, 4, "button", 5);
173
175
  i0.ɵɵelementEnd();
174
176
  } if (rf & 2) {
175
177
  const ctx_r0 = i0.ɵɵnextContext();
@@ -242,8 +244,9 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
242
244
  /**
243
245
  * Initializes a new instance of the OrderedListFormFieldComponent
244
246
  */
245
- constructor(injector) {
247
+ constructor(injector, orderedListFormFieldAccessibilityManagerService) {
246
248
  super(injector);
249
+ this.orderedListFormFieldAccessibilityManagerService = orderedListFormFieldAccessibilityManagerService;
247
250
  /**
248
251
  * Single selection is not supported by ordered list
249
252
  */
@@ -260,10 +263,6 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
260
263
  * Indicates allow empty selection
261
264
  */
262
265
  this.allowEmpty = true;
263
- /**
264
- * Tracks when new item is added to place focus on.
265
- */
266
- this.newItemAdded = false;
267
266
  this.instructions = this.strings.MsftSmeShell.Angular.Form.OrderedList.instructions;
268
267
  this.showAddRemove = true;
269
268
  this.showMove = true;
@@ -287,6 +286,17 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
287
286
  get ariaLabel() {
288
287
  return this.getMergedDescriptionLabel();
289
288
  }
289
+ /**
290
+ * The aria label for the add/remove button when aria label is passed in.
291
+ * The aria label needs to be in sync with the add button text so that narrator can read the correct content.
292
+ * It should also respect the required state.
293
+ */
294
+ get addRemoveButtonArialLabel() {
295
+ if (this.addButtonText) {
296
+ return this.required ? this.strings.MsftSmeShell.Angular.Calendar.AriaLabel.Required.format(this.addButtonText) : this.addButtonText;
297
+ }
298
+ return this.required ? this.strings.MsftSmeShell.Angular.Calendar.AriaLabel.Required.format(this.strings.MsftSmeShell.Angular.Form.OrderedList.addButtonAriaLabel) : this.strings.MsftSmeShell.Angular.Form.OrderedList.addButtonAriaLabel;
299
+ }
290
300
  /**
291
301
  * The method called after the component is initialized.
292
302
  */
@@ -324,7 +334,7 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
324
334
  return false;
325
335
  }
326
336
  this.value = [...this.value, value];
327
- this.newItemAdded = true;
337
+ this.orderedListFormFieldAccessibilityManagerService.add(this.value, this.addButton, this.hostElement);
328
338
  return true;
329
339
  }
330
340
  /**
@@ -332,26 +342,22 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
332
342
  * @param index The index of the item being demoted.
333
343
  */
334
344
  demoteItemAt(index) {
335
- if (index !== this.value.length - 1) {
336
- this.moveItem(index, index + 1);
337
- const focusable = document.getElementById(`${this.idBag.demote}${index + 1}`);
338
- if (focusable) {
339
- focusable.focus();
340
- }
345
+ if (index === this.value.length - 1) {
346
+ return;
341
347
  }
348
+ this.moveItem(index, index + 1);
349
+ this.orderedListFormFieldAccessibilityManagerService.demote(this.value, this.hostElement, `#${this.idBag.demote}${index + 1}`);
342
350
  }
343
351
  /**
344
352
  * Promotes an item at the given index by 1
345
353
  * @param index The index of the item being promoted.
346
354
  */
347
355
  promoteItemAt(index) {
348
- if (index !== 0) {
349
- this.moveItem(index, index - 1);
350
- const focusable = document.getElementById(`${this.idBag.promote}${index - 1}`);
351
- if (focusable) {
352
- focusable.focus();
353
- }
356
+ if (index === 0) {
357
+ return;
354
358
  }
359
+ this.moveItem(index, index - 1);
360
+ this.orderedListFormFieldAccessibilityManagerService.promote(this.value, this.hostElement, `#${this.idBag.promote}${index - 1}`);
355
361
  }
356
362
  /**
357
363
  * Returns the index to track items in the array.
@@ -363,10 +369,7 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
363
369
  removeItemAt(index) {
364
370
  this.value.splice(index, 1);
365
371
  this.triggerValueChange();
366
- const firstFocusable = Dom.getFirstFocusableDescendent(this.hostElement.nativeElement);
367
- if (firstFocusable) {
368
- firstFocusable.focus();
369
- }
372
+ this.orderedListFormFieldAccessibilityManagerService.delete(this.value, this.addButton, this.hostElement);
370
373
  }
371
374
  /**
372
375
  * Moves an element of an array from a starting index to a destination index.
@@ -389,18 +392,6 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
389
392
  }
390
393
  this.value = value;
391
394
  }
392
- /**
393
- * Places focus on new item when it is added.
394
- */
395
- newItemCheck() {
396
- if (this.newItemAdded) {
397
- const focusable = Dom.findChildElementDFS(this.hostElement.nativeElement, (element) => element.tagName.toUpperCase() === 'INPUT', ElementPosition.Last);
398
- if (focusable) {
399
- focusable.focus();
400
- }
401
- this.newItemAdded = false;
402
- }
403
- }
404
395
  /**
405
396
  * The method called when a <select> element's value changes.
406
397
  */
@@ -438,10 +429,15 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
438
429
  return super.validate(c);
439
430
  }
440
431
  };
441
- /** @nocollapse */ OrderedListFormFieldComponent.ɵfac = function OrderedListFormFieldComponent_Factory(t) { return new (t || OrderedListFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
442
- /** @nocollapse */ OrderedListFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: OrderedListFormFieldComponent, selectors: [["sme-form-field", "type", "orderedlist"]], hostVars: 1, hostBindings: function OrderedListFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
432
+ /** @nocollapse */ OrderedListFormFieldComponent.ɵfac = function OrderedListFormFieldComponent_Factory(t) { return new (t || OrderedListFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i7.OrderedListFormFieldAccessibilityManagerService)); };
433
+ /** @nocollapse */ OrderedListFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: OrderedListFormFieldComponent, selectors: [["sme-form-field", "type", "orderedlist"]], viewQuery: function OrderedListFormFieldComponent_Query(rf, ctx) { if (rf & 1) {
434
+ i0.ɵɵviewQuery(_c0, 5);
435
+ } if (rf & 2) {
436
+ let _t;
437
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.addButton = _t.first);
438
+ } }, hostVars: 1, hostBindings: function OrderedListFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
443
439
  i0.ɵɵattribute("aria-label", ctx.ariaLabel);
444
- } }, inputs: { showAddRemove: "showAddRemove", showMove: "showMove", showSelect: "showSelect", addButtonText: "addButtonText", searchable: "searchable", allowEmpty: "allowEmpty" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 3, vars: 3, consts: [[3, "formField"], ["class", "sme-margin-bottom-xs sme-form-field-editor", 4, "ngIf"], [3, "alert"], [1, "sme-margin-bottom-xs", "sme-form-field-editor"], ["class", "sme-arrange-stack-h sme-margin-bottom-xs sme-form-field-width", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", "data-uta-id", "add-button", 3, "smeDisabled", "title", "click", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-margin-bottom-xs", "sme-form-field-width"], [1, "sme-screen-reader", 3, "id"], ["class", "sme-position-flex-auto", "role", "textbox", 4, "ngIf"], [1, "sme-layout-relative", "sme-position-flex-auto"], ["type", "combobox", 3, "utaId", "hideHeader", "valueComparator", "ngModel", "label", "searchable", "ngModelChange", "customValidate", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "promote-button", 3, "id", "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "demote-button", 3, "id", "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "remove-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["role", "textbox", 1, "sme-position-flex-auto"], ["type", "combobox", 3, "utaId", "hideHeader", "valueComparator", "ngModel", "label", "searchable", "ngModelChange", "customValidate"], [4, "ngFor", "ngForOf"], [3, "utaId", "value", "label", "disabled", 4, "ngIf"], [3, "utaId", "value", "label", "disabled"], ["type", "button", "data-uta-id", "promote-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "id", "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], ["type", "button", "data-uta-id", "demote-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "id", "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-down"], ["type", "button", "data-uta-id", "remove-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-cancel", "sme-color-red"], ["type", "button", "data-uta-id", "add-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"]], template: function OrderedListFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
440
+ } }, inputs: { showAddRemove: "showAddRemove", showMove: "showMove", showSelect: "showSelect", addButtonText: "addButtonText", searchable: "searchable", allowEmpty: "allowEmpty" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c1, decls: 3, vars: 3, consts: [[3, "formField"], ["class", "sme-margin-bottom-xs sme-form-field-editor", 4, "ngIf"], [3, "alert"], [1, "sme-margin-bottom-xs", "sme-form-field-editor"], ["class", "sme-arrange-stack-h sme-margin-bottom-xs sme-form-field-width", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", "data-uta-id", "add-button", 3, "smeDisabled", "title", "click", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-margin-bottom-xs", "sme-form-field-width"], [1, "sme-screen-reader", 3, "id"], ["class", "sme-position-flex-auto", "role", "textbox", 4, "ngIf"], [1, "sme-layout-relative", "sme-position-flex-auto"], ["type", "combobox", 3, "utaId", "hideHeader", "valueComparator", "ngModel", "label", "searchable", "ngModelChange", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "promote-button", 3, "id", "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "demote-button", 3, "id", "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height", "data-uta-id", "remove-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["role", "textbox", 1, "sme-position-flex-auto"], ["type", "combobox", 3, "utaId", "hideHeader", "valueComparator", "ngModel", "label", "searchable", "ngModelChange"], [4, "ngFor", "ngForOf"], [3, "utaId", "value", "label", "disabled", 4, "ngIf"], [3, "utaId", "value", "label", "disabled"], ["type", "button", "data-uta-id", "promote-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "id", "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], ["type", "button", "data-uta-id", "demote-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "id", "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-down"], ["type", "button", "data-uta-id", "remove-button", 1, "sme-button-trigger", "sme-position-flex-none", "sme-button-auto-width", "sme-form-field-height", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-cancel", "sme-color-red"], ["type", "button", "data-uta-id", "add-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"], ["addButton", ""]], template: function OrderedListFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
445
441
  i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
446
442
  i0.ɵɵtemplate(1, OrderedListFormFieldComponent_div_1_Template, 3, 3, "div", 1);
447
443
  i0.ɵɵelement(2, "sme-validation-alert", 2);
@@ -452,7 +448,7 @@ let OrderedListFormFieldComponent = class OrderedListFormFieldComponent extends
452
448
  i0.ɵɵproperty("ngIf", ctx.value);
453
449
  i0.ɵɵadvance(1);
454
450
  i0.ɵɵproperty("alert", ctx.alert);
455
- } }, dependencies: [i1.NgForOf, i1.NgIf, i2.NgControlStatus, i2.NgModel, i7.DisabledDirective, i8.TooltipDirective, i9.ComboboxFormFieldComponent, i3.FormFieldOptionComponent, i10.ValidationAlertComponent, i4.FormFieldAccessorDirective, i5.FormFieldValidatorDirective, i11.FormFieldLayoutComponent], encapsulation: 2 });
451
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.NgControlStatus, i2.NgModel, i8.DisabledDirective, i9.TooltipDirective, i10.ComboboxFormFieldComponent, i3.FormFieldOptionComponent, i11.ValidationAlertComponent, i4.FormFieldAccessorDirective, i5.FormFieldValidatorDirective, i12.FormFieldLayoutComponent], encapsulation: 2 });
456
452
  OrderedListFormFieldComponent = __decorate([
457
453
  SmeSchemaProperty({
458
454
  type: SchemaPrimitiveType.Array,
@@ -497,13 +493,17 @@ OrderedListFormFieldComponent = __decorate([
497
493
  }
498
494
  ]
499
495
  }),
500
- __metadata("design:paramtypes", [Injector])
496
+ __metadata("design:paramtypes", [Injector,
497
+ OrderedListFormFieldAccessibilityManagerService])
501
498
  ], OrderedListFormFieldComponent);
502
499
  export { OrderedListFormFieldComponent };
503
500
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OrderedListFormFieldComponent, [{
504
501
  type: Component,
505
- args: [{ selector: 'sme-form-field[type="orderedlist"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div *ngIf=\"value\" class=\"sme-margin-bottom-xs sme-form-field-editor\">\r\n <div *ngFor=\"let item of value; trackBy: trackByIndex; let i = index\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-xs sme-form-field-width\"\r\n [attr.data-uta-id]=\"item ? item.toString() + '-row' : 'new-item-row'\">\r\n <label class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan + i\">\r\n {{strings.MsftSmeShell.Angular.Form.OrderedList.itemAriaDescription.format(i + 1, value.length)}}\r\n </label>\r\n <p *ngIf=\"!showSelect\" class=\"sme-position-flex-auto\" role=\"textbox\"\r\n [attr.aria-describedby]=\"idBag.detailsSpan + i\">{{arrayGetValueDisplayString(value[i])}}</p>\r\n <div class=\"sme-layout-relative sme-position-flex-auto\" [class.sme-margin-right-xs]=\"showMove || showAddRemove\">\r\n <sme-form-field *ngIf=\"showSelect\" [utaId]=\"item ? item.toString() + '-combobox' : 'new-combobox'\"\r\n type=\"combobox\" [hideHeader]=\"true\" [valueComparator]=\"valueComparator\" [(ngModel)]=\"value[i]\"\r\n (ngModelChange)=\"triggerValueChange()\" (customValidate)=\"newItemCheck()\" [label]=\"label\"\r\n [searchable]=\"searchable\">\r\n <ng-container *ngFor=\"let option of options\">\r\n <sme-option *ngIf=\"!option.isSelected || arrayValueComparator(option.value, value[i])\"\r\n [utaId]=\"option.utaId ? option.utaId : option.value\" [value]=\"option.value\" [label]=\"option.toString()\"\r\n [disabled]=\"option.disabled\">\r\n </sme-option>\r\n </ng-container>\r\n </sme-form-field>\r\n </div>\r\n <button *ngIf=\"showMove\" [id]=\"idBag.promote + i\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.promoteButtonTooltip\" (click)=\"promoteItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" [id]=\"idBag.demote + i\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.demoteButtonTooltip\" (click)=\"demoteItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"showAddRemove\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.removeButtonTooltip\" (click)=\"removeItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-cancel sme-color-red\"></span>\r\n </button>\r\n </div>\r\n <button *ngIf=\"showAddRemove\" type=\"button\" [smeDisabled]=\"loadingOrDisabled || value.length === options.length\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.addButtonAriaLabel\" data-uta-id=\"add-button\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.addButtonTooltip\" (click)=\"addListItem()\">\r\n {{addButtonText}}\r\n </button>\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }]
506
- }], function () { return [{ type: i0.Injector }]; }, { showAddRemove: [{
502
+ args: [{ selector: 'sme-form-field[type="orderedlist"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div *ngIf=\"value\" class=\"sme-margin-bottom-xs sme-form-field-editor\">\r\n <div *ngFor=\"let item of value; trackBy: trackByIndex; let i = index\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-xs sme-form-field-width\"\r\n [attr.data-uta-id]=\"item ? item.toString() + '-row' : 'new-item-row'\">\r\n <label class=\"sme-screen-reader\" [id]=\"idBag.detailsSpan + i\">\r\n {{ strings.MsftSmeShell.Angular.Form.OrderedList.itemAriaDescription.format(i + 1, value.length) }}\r\n </label>\r\n <p *ngIf=\"!showSelect\" class=\"sme-position-flex-auto\" role=\"textbox\" [attr.aria-label]=\"idBag.detailsSpan + i\">\r\n {{ arrayGetValueDisplayString(value[i]) }}</p>\r\n <div class=\"sme-layout-relative sme-position-flex-auto\" [class.sme-margin-right-xs]=\"showMove || showAddRemove\">\r\n <sme-form-field *ngIf=\"showSelect\" [utaId]=\"item ? item.toString() + '-combobox' : 'new-combobox'\"\r\n type=\"combobox\" [hideHeader]=\"true\" [valueComparator]=\"valueComparator\" [(ngModel)]=\"value[i]\"\r\n (ngModelChange)=\"triggerValueChange()\" [label]=\"label\"\r\n [searchable]=\"searchable\">\r\n <ng-container *ngFor=\"let option of options\">\r\n <sme-option *ngIf=\"!option.isSelected || arrayValueComparator(option.value, value[i])\"\r\n [utaId]=\"option.utaId ? option.utaId : option.value\" [value]=\"option.value\" [label]=\"option.toString()\"\r\n [disabled]=\"option.disabled\">\r\n </sme-option>\r\n </ng-container>\r\n </sme-form-field>\r\n </div>\r\n <button *ngIf=\"showMove\" [id]=\"idBag.promote + i\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.promoteButtonTooltip\" (click)=\"promoteItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" [id]=\"idBag.demote + i\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.demoteButtonTooltip\" (click)=\"demoteItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"showAddRemove\" type=\"button\"\r\n class=\"sme-button-trigger sme-position-flex-none sme-button-auto-width sme-form-field-height\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.OrderedList.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.removeButtonTooltip\" (click)=\"removeItemAt(i)\"\r\n [smeDisabled]=\"loadingOrDisabled || allowEmptyDisableActions\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-cancel sme-color-red\"></span>\r\n </button>\r\n </div>\r\n <button #addButton *ngIf=\"showAddRemove\" type=\"button\" [smeDisabled]=\"loadingOrDisabled || value.length === options.length\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs\"\r\n [attr.aria-label]=\"addRemoveButtonArialLabel\" data-uta-id=\"add-button\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.OrderedList.addButtonTooltip\" (click)=\"addListItem()\">\r\n {{ addButtonText }}\r\n </button>\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }]
503
+ }], function () { return [{ type: i0.Injector }, { type: i7.OrderedListFormFieldAccessibilityManagerService }]; }, { addButton: [{
504
+ type: ViewChild,
505
+ args: ['addButton']
506
+ }], showAddRemove: [{
507
507
  type: Input
508
508
  }], showMove: [{
509
509
  type: Input
@@ -519,4 +519,4 @@ export { OrderedListFormFieldComponent };
519
519
  type: HostBinding,
520
520
  args: ['attr.aria-label']
521
521
  }] }); })();
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1saXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL29yZGVyZWQtbGlzdC9vcmRlcmVkLWxpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvb3JkZXJlZC1saXN0L29yZGVyZWQtbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7Ozs7OztJQWdCOUYsZ0NBQStIOzs7O0lBQWpFLHFDQUFvQix5Q0FBQTs7O0lBRTlFLGdDQUNxRTs7OztJQUFqRSxxQ0FBb0IseUNBQUE7OztJQUY1Qiw2QkFBMEQ7SUFDdEQsaUhBQ3FFO0lBQ3pFLDBCQUFlOzs7SUFGa0IsZUFBOEQ7SUFBOUQsbUdBQThEOzs7O0lDakJyRyw2QkFDa0Q7SUFBQSxZQUF3QztJQUFBLGlCQUFJOzs7O0lBQTVGLG1FQUErQztJQUFDLGVBQXdDO0lBQXhDLDJFQUF3Qzs7O0lBT3BGLGlDQUdh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LFFBQVE7a0JBRGQsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFPQyxhQUFhO2tCQURuQixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLFVBQVU7a0JBRGhCLEtBQUs7WUFhSyxTQUFTO2tCQURuQixXQUFXO21CQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEb20sIEVsZW1lbnRQb3NpdGlvbiB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBTaW1wbGVQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1maWVsZC1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUFycmF5UHJvcGVydHksIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9ucy1mb3JtLWZpZWxkL29wdGlvbnMtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJvcmRlcmVkbGlzdFwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbdmFsdWVDb21wYXJhdG9yXT1cInZhbHVlQ29tcGFyYXRvclwiXHJcbiAgICAgICAgW2xhYmVsXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmxhYmVsKVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCIgW2Rlc2NyaXB0aW9uXT1cImxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiEhZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEucmVhZG9ubHlDb25kaXRpb24pXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiISEocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24gJiYgZXZhbEV4cHJlc3Npb24ocHJvcGVydHlTY2hlbWEuZGlzYWJsZWRDb25kaXRpb24pKVwiXHJcbiAgICAgICAgKGN1c3RvbVZhbGlkYXRlKT1cInJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uKSgkZXZlbnQpXCJcclxuICAgICAgICAoY3VzdG9tQXN5bmNWYWxpZGF0ZSk9XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgcmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyKSgkZXZlbnQpXCJcclxuICAgICAgICBbcGVuZGluZ01lc3NhZ2VdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIGxvY2FsaXplKHByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5wZW5kaW5nTWVzc2FnZSlcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWRdPVwic2hvdWxkQ3VzdG9tQXN5bmNWYWxpZGF0aW9uQmVEaXNhYmxlZCgpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURlYm91bmNlVGltZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgK3Byb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbi5oYW5kbGVyXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNcIiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShpdGVtLmxhYmVsKVwiPjwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNvbHZlQ29tcG9uZW50TWVtYmVyKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuaXRlbXNCaW5kaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIiBbbGFiZWxdPVwibG9jYWxpemUoaXRlbS5sYWJlbClcIj48L3NtZS1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgIGBcclxufSlcclxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXHJcbmV4cG9ydCBjbGFzcyBPcmRlcmVkTGlzdEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCBleHRlbmRzIFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJlIGFycmF5IGVxdWFsaXR5LlxyXG4gICAgICogQHBhcmFtIGEgY29tcGFyaXNvbiBhcnJheS5cclxuICAgICAqIEBwYXJhbSBiIGNvbXBhcmlzb24gYXJyYXkuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGVxdWFsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsdWVDb21wYXJhdG9yOiBNc2Z0U21lLkZ1bmMyPEFycmF5PHN0cmluZz4sIEFycmF5PHN0cmluZz4sIGJvb2xlYW4+ID0gKGE6IEFycmF5PHN0cmluZz4sIGI6IEFycmF5PHN0cmluZz4pID0+IHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhKSAhPT0gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGEpIHx8IGEgPT09IGI7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQWNjZXNzaWJsZSBJbXBsZW1lbnRhdGlvbiBvZiBhIGZvcm0gZmllbGQgY29tYm8gYm94LlxyXG4gKi9cclxuQFNtZVNjaGVtYVByb3BlcnR5KHtcclxuICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICBmb3JtYXQ6ICdvcmRlcmVkbGlzdCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ2Egb3JkZXJlZCBsaXN0IGNvbnRyb2wgYmluZGluZyB0byBzdHJpbmcgZGF0YS4nLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBPcmRlcmVkTGlzdEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCxcclxuICAgIG9wdGlvblByb3BlcnRpZXM6IFtcclxuICAgICAgICA8U2NoZW1hQXJyYXlQcm9wZXJ0eT57XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ3NpbXBsZS1saXN0JyxcclxuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5TdGF0aWNPcHRpb25zJyxcclxuICAgICAgICAgICAgaXRlbTogPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuTGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuVmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQ6IDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgZm9ybWF0OiAndGV4dGJveCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdpdGVtc0JpbmRpbmcnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLkR5bmFtaWNPcHRpb25zJ1xyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCJvcmRlcmVkbGlzdFwiXScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXJlZC1saXN0LWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmRlcmVkTGlzdEZvcm1GaWVsZENvbXBvbmVudDxUVmFsdWU+XHJcbiAgICBleHRlbmRzIFNtZUludGVybmFsT3B0aW9uc0Zvcm1GaWVsZENvbXBvbmVudDxBcnJheTxUVmFsdWU+PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdPcmRlcmVkTGlzdEZvcm1GaWVsZENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW5nbGUgc2VsZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgb3JkZXJlZCBsaXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBtdWx0aXBsZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFkZCBhbmQgcmVtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0FkZFJlbW92ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dNb3ZlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlIGFsbG93ZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93U2VsZWN0OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBhZGQgYnV0dG9uIGlubmVyIGh0bWxcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGRCdXR0b25UZXh0OiBzdHJpbmcgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmFkZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgY29tYm9ib3ggc2VhcmNoYWJsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBhbGxvdyBlbXB0eSBzZWxlY3Rpb25cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhbGxvd0VtcHR5ID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgd2lsbCBub3QgYWxsb3cgdXNlciB0byByZW1vdmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgb3JkZXIgbGlzdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFsbG93RW1wdHlEaXNhYmxlQWN0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuYWxsb3dFbXB0eSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhY2tzIHdoZW4gbmV3IGl0ZW0gaXMgYWRkZWQgdG8gcGxhY2UgZm9jdXMgb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbmV3SXRlbUFkZGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgT3JkZXJlZExpc3RGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnMgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5pbnN0cnVjdGlvbnM7XHJcbiAgICAgICAgdGhpcy5zaG93QWRkUmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dNb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZWxlY3QgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZ3JvdXAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgdmFsdWUgaW5zaWRlIG9mIGFycmF5LlxyXG4gICAgICogQHBhcmFtIGxlZnQgVGhlIGRhdGEgdG8gY29tcGFyZS5cclxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgZGF0YSB0byBjb21wYXJlLlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBlcXVhbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFycmF5VmFsdWVDb21wYXJhdG9yKGxlZnQ6IFRWYWx1ZSwgcmlnaHQ6IFRWYWx1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGxlZnQpICE9PSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHJpZ2h0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGxlZnQpIHx8IGxlZnQgPT09IHJpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSB2YWx1ZSBpbnNpZGUgb2YgYXJyYXkuIHRoaXMuZ2V0VmFsdWVEaXNwbGF5U3RyaW5nKCkgdXNlcyBUTW9kZWwgd2hpY2ggaXMgQXJyYXk8VFZhbHVlPiB3cm9uZ2x5LlxyXG4gICAgICogUmUtY2FzdGluZyB0byA8YW55PiBtYWtpbmcgYSB3b3JrYXJvdW5kLlxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBkaXNwbGF5LlxyXG4gICAgICogQHJldHVybnMgdGhlIGRpc3BsYXkgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlHZXRWYWx1ZURpc3BsYXlTdHJpbmcodmFsdWU6IFRWYWx1ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVEaXNwbGF5U3RyaW5nKDxhbnk+dmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBpdGVtIHRvIHRoZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRMaXN0SXRlbSh2YWx1ZTogVFZhbHVlID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIGRvIG5vdCBhZGQgYW4gaXRlbSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gb3B0aW9uIGZvciBlYWNoIG9wdGlvbiBvciB0aGUgdmFsdWUgaXMgYWxyZWFkeSBzZWxlY3RlZFxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm9wdGlvbnMubGVuZ3RoIHx8IHRoaXMudmFsdWUuc29tZSh2ID0+IHYgPT09IHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHZhbHVlXTtcclxuICAgICAgICB0aGlzLm5ld0l0ZW1BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZW1vdGVzIGFuIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4IGJ5IDFcclxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gYmVpbmcgZGVtb3RlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbW90ZUl0ZW1BdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlSXRlbShpbmRleCwgaW5kZXggKyAxKTtcclxuICAgICAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5pZEJhZy5kZW1vdGV9JHtpbmRleCArIDF9YCk7XHJcbiAgICAgICAgICAgIGlmIChmb2N1c2FibGUpIHtcclxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvbW90ZXMgYW4gaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXggYnkgMVxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSBiZWluZyBwcm9tb3RlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHByb21vdGVJdGVtQXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVJdGVtKGluZGV4LCBpbmRleCAtIDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0aGlzLmlkQmFnLnByb21vdGV9JHtpbmRleCAtIDF9YCk7XHJcbiAgICAgICAgICAgIGlmIChmb2N1c2FibGUpIHtcclxuICAgICAgICAgICAgICAgIGZvY3VzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5kZXggdG8gdHJhY2sgaXRlbXMgaW4gdGhlIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4LCBpdGVtKSB7IHJldHVybiBpbmRleDsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbiBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbUF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVDaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBEb20uZ2V0Rmlyc3RGb2N1c2FibGVEZXNjZW5kZW50KHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XHJcbiAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgYW4gZWxlbWVudCBvZiBhbiBhcnJheSBmcm9tIGEgc3RhcnRpbmcgaW5kZXggdG8gYSBkZXN0aW5hdGlvbiBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgdG8gbW92ZS5cclxuICAgICAqIEBwYXJhbSBzdGFydGluZ0luZGV4IFRoZSBpbml0aWFsIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUuXHJcbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb25JbmRleCBUaGUgZGVzdGluYXRpb24gaW5kZXggb2YgdGhlIG1vdmVkIGVsZW1lbnQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgYXJyYXkgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlSXRlbShzdGFydGluZ0luZGV4OiBudW1iZXIsIGRlc3RpbmF0aW9uSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB2YWx1ZVtzdGFydGluZ0luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0aW5nSW5kZXggPCBkZXN0aW5hdGlvbkluZGV4KSB7XHJcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ICsgMSwgMCwgdGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZShzdGFydGluZ0luZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2Uoc3RhcnRpbmdJbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZShkZXN0aW5hdGlvbkluZGV4LCAwLCB0YXJnZXRFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlcyBmb2N1cyBvbiBuZXcgaXRlbSB3aGVuIGl0IGlzIGFkZGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV3SXRlbUNoZWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld0l0ZW1BZGRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBEb20uZmluZENoaWxkRWxlbWVudERGUyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnSU5QVVQnLFxyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBvc2l0aW9uLkxhc3QpO1xyXG4gICAgICAgICAgICBpZiAoZm9jdXNhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5ld0l0ZW1BZGRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSA8c2VsZWN0PiBlbGVtZW50J3MgdmFsdWUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyaWdnZXJWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyB0aGUgaWRCYWcgdXNlZCBieSB0aGlzIGNvbXBvbmVudCB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnLFxyXG4gICAgICAgICAgICBwcm9tb3RlOiAnJyxcclxuICAgICAgICAgICAgZGVtb3RlOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgICAqIEByZXR1cm5zIEFueSB2YWxpZGF0aW9uIGFsZXJ0cyBmb3IgdGhpcyBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLnNvbWUoKHgpID0+IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoeCkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBudWxsVmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5lbXB0eVZhbHVlc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGMpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPGRpdiAqbmdJZj1cInZhbHVlXCIgY2xhc3M9XCJzbWUtbWFyZ2luLWJvdHRvbS14cyBzbWUtZm9ybS1maWVsZC1lZGl0b3JcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWU7IHRyYWNrQnk6IHRyYWNrQnlJbmRleDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtbWFyZ2luLWJvdHRvbS14cyBzbWUtZm9ybS1maWVsZC13aWR0aFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdXRhLWlkXT1cIml0ZW0gPyBpdGVtLnRvU3RyaW5nKCkgKyAnLXJvdycgOiAnbmV3LWl0ZW0tcm93J1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5kZXRhaWxzU3BhbiArIGlcIj5cclxuICAgICAgICB7e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5pdGVtQXJpYURlc2NyaXB0aW9uLmZvcm1hdChpICsgMSwgdmFsdWUubGVuZ3RoKX19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxwICpuZ0lmPVwiIXNob3dTZWxlY3RcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiByb2xlPVwidGV4dGJveFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZEJhZy5kZXRhaWxzU3BhbiArIGlcIj57e2FycmF5R2V0VmFsdWVEaXNwbGF5U3RyaW5nKHZhbHVlW2ldKX19PC9wPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW2NsYXNzLnNtZS1tYXJnaW4tcmlnaHQteHNdPVwic2hvd01vdmUgfHwgc2hvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgIDxzbWUtZm9ybS1maWVsZCAqbmdJZj1cInNob3dTZWxlY3RcIiBbdXRhSWRdPVwiaXRlbSA/IGl0ZW0udG9TdHJpbmcoKSArICctY29tYm9ib3gnIDogJ25ldy1jb21ib2JveCdcIlxyXG4gICAgICAgICAgdHlwZT1cImNvbWJvYm94XCIgW2hpZGVIZWFkZXJdPVwidHJ1ZVwiIFt2YWx1ZUNvbXBhcmF0b3JdPVwidmFsdWVDb21wYXJhdG9yXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVtpXVwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyVmFsdWVDaGFuZ2UoKVwiIChjdXN0b21WYWxpZGF0ZSk9XCJuZXdJdGVtQ2hlY2soKVwiIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgICBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdJZj1cIiFvcHRpb24uaXNTZWxlY3RlZCB8fCBhcnJheVZhbHVlQ29tcGFyYXRvcihvcHRpb24udmFsdWUsIHZhbHVlW2ldKVwiXHJcbiAgICAgICAgICAgICAgW3V0YUlkXT1cIm9wdGlvbi51dGFJZCA/IG9wdGlvbi51dGFJZCA6IG9wdGlvbi52YWx1ZVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBbbGFiZWxdPVwib3B0aW9uLnRvU3RyaW5nKClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIFtpZF09XCJpZEJhZy5wcm9tb3RlICsgaVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1mb3JtLWZpZWxkLWhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QucHJvbW90ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5wcm9tb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJwcm9tb3RlSXRlbUF0KGkpXCJcclxuICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgYWxsb3dFbXB0eURpc2FibGVBY3Rpb25zXCIgZGF0YS11dGEtaWQ9XCJwcm9tb3RlLWJ1dHRvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tdXBcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd01vdmVcIiBbaWRdPVwiaWRCYWcuZGVtb3RlICsgaVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1mb3JtLWZpZWxkLWhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QuZGVtb3RlQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LmRlbW90ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiZGVtb3RlSXRlbUF0KGkpXCJcclxuICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgYWxsb3dFbXB0eURpc2FibGVBY3Rpb25zXCIgZGF0YS11dGEtaWQ9XCJkZW1vdGUtYnV0dG9uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRSZW1vdmVcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LnJlbW92ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5yZW1vdmVCdXR0b25Ub29sdGlwXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW1BdChpKVwiXHJcbiAgICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8IGFsbG93RW1wdHlEaXNhYmxlQWN0aW9uc1wiIGRhdGEtdXRhLWlkPVwicmVtb3ZlLWJ1dHRvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2FuY2VsIHNtZS1jb2xvci1yZWRcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0FkZFJlbW92ZVwiIHR5cGU9XCJidXR0b25cIiBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgdmFsdWUubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXHJcbiAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtaWNvbiBzbWUtaWNvbi1hZGQgc21lLW1hcmdpbi1ib3R0b20teHNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5hZGRCdXR0b25BcmlhTGFiZWxcIiBkYXRhLXV0YS1pZD1cImFkZC1idXR0b25cIlxyXG4gICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LmFkZEJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiYWRkTGlzdEl0ZW0oKVwiPlxyXG4gICAgICB7e2FkZEJ1dHRvblRleHR9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1saXN0LWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL29yZGVyZWQtbGlzdC9vcmRlcmVkLWxpc3QtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvb3JkZXJlZC1saXN0L29yZGVyZWQtbGlzdC1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUE2QyxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLHlEQUF5RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7SUFnQjlHLGdDQUErSDs7OztJQUFqRSxxQ0FBb0IseUNBQUE7OztJQUU5RSxnQ0FDcUU7Ozs7SUFBakUscUNBQW9CLHlDQUFBOzs7SUFGNUIsNkJBQTBEO0lBQ3RELGlIQUNxRTtJQUN6RSwwQkFBZTs7O0lBRmtCLGVBQThEO0lBQTlELG1HQUE4RDs7Ozs7SUNqQnJHLDZCQUErRztJQUM3RyxZQUEwQztJQUFBLGlCQUFJOzs7O0lBRHFCLDZEQUF5QztJQUM1RyxlQUEwQztJQUExQyxxRkFB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QixDQUFDLE1BQU07Z0JBQ2hDLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLDhGQUE4RjthQUN4RztTQUNKO0tBQ0osQ0FBQztxQ0ErRmdCLFFBQVE7UUFDeUMsK0NBQStDO0dBM0ZyRyw2QkFBNkIsQ0E0UHpDO1NBNVBZLDZCQUE2Qjt1RkFBN0IsNkJBQTZCO2NBSnpDLFNBQVM7MkJBQ0ksb0NBQW9DO3lIQXVCdkMsU0FBUztrQkFEZixTQUFTO21CQUFDLFdBQVc7WUFPZixhQUFhO2tCQURuQixLQUFLO1lBT0MsUUFBUTtrQkFEZCxLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLGFBQWE7a0JBRG5CLEtBQUs7WUFPQyxVQUFVO2tCQURoQixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU21lU2NoZW1hUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWRlY29yYXRvcic7XHJcbmltcG9ydCB7IFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hQXJyYXlQcm9wZXJ0eSwgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbE9wdGlvbnNGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zLWZvcm0tZmllbGQvb3B0aW9ucy1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9yZGVyZWRMaXN0Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9vcmRlcmVkLWxpc3QtZm9ybS1maWVsZC1hY2Nlc3NpYmlsaXR5LW1hbmFnZXIuc2VydmljZSc7XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cIm9yZGVyZWRsaXN0XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFt2YWx1ZUNvbXBhcmF0b3JdPVwidmFsdWVDb21wYXJhdG9yXCJcclxuICAgICAgICBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHNtZS1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgW2xhYmVsXT1cImxvY2FsaXplKGl0ZW0ubGFiZWwpXCI+PC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxzbWUtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc29sdmVDb21wb25lbnRNZW1iZXIocHJvcGVydHlTY2hlbWEub3B0aW9ucy5pdGVtc0JpbmRpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShpdGVtLmxhYmVsKVwiPjwvc21lLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cclxuZXhwb3J0IGNsYXNzIE9yZGVyZWRMaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgYXJyYXkgZXF1YWxpdHkuXHJcbiAgICAgKiBAcGFyYW0gYSBjb21wYXJpc29uIGFycmF5LlxyXG4gICAgICogQHBhcmFtIGIgY29tcGFyaXNvbiBhcnJheS5cclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgZXF1YWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWx1ZUNvbXBhcmF0b3I6IE1zZnRTbWUuRnVuYzI8QXJyYXk8c3RyaW5nPiwgQXJyYXk8c3RyaW5nPiwgYm9vbGVhbj4gPSAoYTogQXJyYXk8c3RyaW5nPiwgYjogQXJyYXk8c3RyaW5nPikgPT4ge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGEpICE9PSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoYSkgfHwgYSA9PT0gYjtcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIEltcGxlbWVudGF0aW9uIG9mIGEgZm9ybSBmaWVsZCBjb21ibyBib3guXHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgIGZvcm1hdDogJ29yZGVyZWRsaXN0JyxcclxuICAgIGRlc2NyaXB0aW9uOiAnYSBvcmRlcmVkIGxpc3QgY29udHJvbCBiaW5kaW5nIHRvIHN0cmluZyBkYXRhLicsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IE9yZGVyZWRMaXN0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgb3B0aW9uUHJvcGVydGllczogW1xyXG4gICAgICAgIDxTY2hlbWFBcnJheVByb3BlcnR5PntcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgICAgICAgICAgZm9ybWF0OiAnc2ltcGxlLWxpc3QnLFxyXG4gICAgICAgICAgICBuYW1lOiAnaXRlbXMnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PcHRpb25zLlN0YXRpY09wdGlvbnMnLFxyXG4gICAgICAgICAgICBpdGVtOiA8U2NoZW1hT2JqZWN0UHJvcGVydHk+e1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdyZXNvdXJjZS1zdHJpbmctcGlja2VyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5MYWJlbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT3B0aW9ucy5WYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgbmFtZTogJ2l0ZW1zQmluZGluZycsXHJcbiAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9wdGlvbnMuRHluYW1pY09wdGlvbnMnXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cIm9yZGVyZWRsaXN0XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlcmVkLWxpc3QtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyZWRMaXN0Rm9ybUZpZWxkQ29tcG9uZW50PFRWYWx1ZT5cclxuICAgIGV4dGVuZHMgU21lSW50ZXJuYWxPcHRpb25zRm9ybUZpZWxkQ29tcG9uZW50PEFycmF5PFRWYWx1ZT4+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ09yZGVyZWRMaXN0Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNpbmdsZSBzZWxlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSBvcmRlcmVkIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG11bHRpcGxlID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aWV3IGNoaWxkIGNvbXBvbmVudCBmb3IgdGhlIGFkZCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2FkZEJ1dHRvbicpXHJcbiAgICBwdWJsaWMgYWRkQnV0dG9uOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBhZGQgYW5kIHJlbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dBZGRSZW1vdmU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIG1vdmUgYWN0aW9ucyBzaG91bGQgYmUgc2hvd25cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93TW92ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgc2VsZWN0aW9uIHNob3VsZCBiZSBhbGxvd2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd1NlbGVjdDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgYWRkIGJ1dHRvbiBpbm5lciBodG1sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRkQnV0dG9uVGV4dDogc3RyaW5nID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5hZGQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGNvbWJvYm94IHNlYXJjaGFibGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWFyY2hhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgYWxsb3cgZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWxsb3dFbXB0eSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHdpbGwgbm90IGFsbG93IHVzZXIgdG8gcmVtb3ZlIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIG9yZGVyIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBhbGxvd0VtcHR5RGlzYWJsZUFjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmFsbG93RW1wdHkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDE7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGFyaWFMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lcmdlZERlc2NyaXB0aW9uTGFiZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGUgYWRkL3JlbW92ZSBidXR0b24gd2hlbiBhcmlhIGxhYmVsIGlzIHBhc3NlZCBpbi5cclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCB0aGUgYWRkIGJ1dHRvbiB0ZXh0IHNvIHRoYXQgbmFycmF0b3IgY2FuIHJlYWQgdGhlIGNvcnJlY3QgY29udGVudC5cclxuICAgICAqIEl0IHNob3VsZCBhbHNvIHJlc3BlY3QgdGhlIHJlcXVpcmVkIHN0YXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGFkZFJlbW92ZUJ1dHRvbkFyaWFsTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5hZGRCdXR0b25UZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVkID8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNhbGVuZGFyLkFyaWFMYWJlbC5SZXF1aXJlZC5mb3JtYXQodGhpcy5hZGRCdXR0b25UZXh0KSA6IHRoaXMuYWRkQnV0dG9uVGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVkID8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNhbGVuZGFyLkFyaWFMYWJlbC5SZXF1aXJlZC5mb3JtYXQoXHJcbiAgICAgICAgICAgIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LmFkZEJ1dHRvbkFyaWFMYWJlbCkgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5hZGRCdXR0b25BcmlhTGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgT3JkZXJlZExpc3RGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByb3RlY3RlZCBvcmRlcmVkTGlzdEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZTogT3JkZXJlZExpc3RGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLmluc3RydWN0aW9ucyA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0Lmluc3RydWN0aW9ucztcclxuICAgICAgICB0aGlzLnNob3dBZGRSZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd01vdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZSB2YWx1ZSBpbnNpZGUgb2YgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0gbGVmdCBUaGUgZGF0YSB0byBjb21wYXJlLlxyXG4gICAgICogQHBhcmFtIHJpZ2h0IFRoZSBkYXRhIHRvIGNvbXBhcmUuXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGVxdWFsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlWYWx1ZUNvbXBhcmF0b3IobGVmdDogVFZhbHVlLCByaWdodDogVFZhbHVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQobGVmdCkgIT09IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQocmlnaHQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQobGVmdCkgfHwgbGVmdCA9PT0gcmlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IHZhbHVlIGluc2lkZSBvZiBhcnJheS4gdGhpcy5nZXRWYWx1ZURpc3BsYXlTdHJpbmcoKSB1c2VzIFRNb2RlbCB3aGljaCBpcyBBcnJheTxUVmFsdWU+IHdyb25nbHkuXHJcbiAgICAgKiBSZS1jYXN0aW5nIHRvIDxhbnk+IG1ha2luZyBhIHdvcmthcm91bmQuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGRpc3BsYXkuXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgZGlzcGxheSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheUdldFZhbHVlRGlzcGxheVN0cmluZyh2YWx1ZTogVFZhbHVlKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZURpc3BsYXlTdHJpbmcoPGFueT52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZExpc3RJdGVtKHZhbHVlOiBUVmFsdWUgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLy8gZG8gbm90IGFkZCBhbiBpdGVtIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBvcHRpb24gZm9yIGVhY2ggb3B0aW9uIG9yIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHNlbGVjdGVkXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMub3B0aW9ucy5sZW5ndGggfHwgdGhpcy52YWx1ZS5zb21lKHYgPT4gdiA9PT0gdmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdmFsdWVdO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyZWRMaXN0Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLmFkZCh0aGlzLnZhbHVlLCB0aGlzLmFkZEJ1dHRvbiwgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZW1vdGVzIGFuIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4IGJ5IDFcclxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gYmVpbmcgZGVtb3RlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbW90ZUl0ZW1BdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlSXRlbShpbmRleCwgaW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgdGhpcy5vcmRlcmVkTGlzdEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZS5kZW1vdGUodGhpcy52YWx1ZSwgdGhpcy5ob3N0RWxlbWVudCwgYCMke3RoaXMuaWRCYWcuZGVtb3RlfSR7aW5kZXggKyAxfWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvbW90ZXMgYW4gaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXggYnkgMVxyXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSBiZWluZyBwcm9tb3RlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHByb21vdGVJdGVtQXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vdmVJdGVtKGluZGV4LCBpbmRleCAtIDEpO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyZWRMaXN0Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLnByb21vdGUodGhpcy52YWx1ZSwgdGhpcy5ob3N0RWxlbWVudCwgYCMke3RoaXMuaWRCYWcucHJvbW90ZX0ke2luZGV4IC0gMX1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGluZGV4IHRvIHRyYWNrIGl0ZW1zIGluIHRoZSBhcnJheS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYWNrQnlJbmRleChpbmRleCwgaXRlbSkgeyByZXR1cm4gaW5kZXg7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYW4gaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXhcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZUl0ZW1BdChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclZhbHVlQ2hhbmdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMub3JkZXJlZExpc3RGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuZGVsZXRlKHRoaXMudmFsdWUsIHRoaXMuYWRkQnV0dG9uLCB0aGlzLmhvc3RFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkgZnJvbSBhIHN0YXJ0aW5nIGluZGV4IHRvIGEgZGVzdGluYXRpb24gaW5kZXguXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBjb250YWluaW5nIHRoZSBlbGVtZW50IHRvIG1vdmUuXHJcbiAgICAgKiBAcGFyYW0gc3RhcnRpbmdJbmRleCBUaGUgaW5pdGlhbCBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBtb3ZlLlxyXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uSW5kZXggVGhlIGRlc3RpbmF0aW9uIGluZGV4IG9mIHRoZSBtb3ZlZCBlbGVtZW50LlxyXG4gICAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIGFycmF5IHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50IG1vdmVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZUl0ZW0oc3RhcnRpbmdJbmRleDogbnVtYmVyLCBkZXN0aW5hdGlvbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdmFsdWVbc3RhcnRpbmdJbmRleF07XHJcblxyXG4gICAgICAgIGlmIChzdGFydGluZ0luZGV4IDwgZGVzdGluYXRpb25JbmRleCkge1xyXG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UoZGVzdGluYXRpb25JbmRleCArIDEsIDAsIHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2Uoc3RhcnRpbmdJbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHN0YXJ0aW5nSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UoZGVzdGluYXRpb25JbmRleCwgMCwgdGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgPHNlbGVjdD4gZWxlbWVudCdzIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyVmFsdWVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRldGFpbHNTcGFuOiAnJyxcclxuICAgICAgICAgICAgcHJvbW90ZTogJycsXHJcbiAgICAgICAgICAgIGRlbW90ZTogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2UuXHJcbiAgICAgKiBAcmV0dXJucyBBbnkgdmFsaWRhdGlvbiBhbGVydHMgZm9yIHRoaXMgY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5zb21lKCh4KSA9PiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbnVsbFZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QuZW1wdHlWYWx1ZXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdXBlci52YWxpZGF0ZShjKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWZvcm0tZmllbGQtbGF5b3V0IFtmb3JtRmllbGRdPVwidGhpc1wiPlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWx1ZVwiIGNsYXNzPVwic21lLW1hcmdpbi1ib3R0b20teHMgc21lLWZvcm0tZmllbGQtZWRpdG9yXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlOyB0cmFja0J5OiB0cmFja0J5SW5kZXg7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLW1hcmdpbi1ib3R0b20teHMgc21lLWZvcm0tZmllbGQtd2lkdGhcIlxyXG4gICAgICBbYXR0ci5kYXRhLXV0YS1pZF09XCJpdGVtID8gaXRlbS50b1N0cmluZygpICsgJy1yb3cnIDogJ25ldy1pdGVtLXJvdydcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIiBbaWRdPVwiaWRCYWcuZGV0YWlsc1NwYW4gKyBpXCI+XHJcbiAgICAgICAge3sgc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0Lml0ZW1BcmlhRGVzY3JpcHRpb24uZm9ybWF0KGkgKyAxLCB2YWx1ZS5sZW5ndGgpIH19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxwICpuZ0lmPVwiIXNob3dTZWxlY3RcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiByb2xlPVwidGV4dGJveFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiaWRCYWcuZGV0YWlsc1NwYW4gKyBpXCI+XHJcbiAgICAgICAge3sgYXJyYXlHZXRWYWx1ZURpc3BsYXlTdHJpbmcodmFsdWVbaV0pIH19PC9wPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW2NsYXNzLnNtZS1tYXJnaW4tcmlnaHQteHNdPVwic2hvd01vdmUgfHwgc2hvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgIDxzbWUtZm9ybS1maWVsZCAqbmdJZj1cInNob3dTZWxlY3RcIiBbdXRhSWRdPVwiaXRlbSA/IGl0ZW0udG9TdHJpbmcoKSArICctY29tYm9ib3gnIDogJ25ldy1jb21ib2JveCdcIlxyXG4gICAgICAgICAgdHlwZT1cImNvbWJvYm94XCIgW2hpZGVIZWFkZXJdPVwidHJ1ZVwiIFt2YWx1ZUNvbXBhcmF0b3JdPVwidmFsdWVDb21wYXJhdG9yXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVtpXVwiXHJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0cmlnZ2VyVmFsdWVDaGFuZ2UoKVwiIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgICBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8c21lLW9wdGlvbiAqbmdJZj1cIiFvcHRpb24uaXNTZWxlY3RlZCB8fCBhcnJheVZhbHVlQ29tcGFyYXRvcihvcHRpb24udmFsdWUsIHZhbHVlW2ldKVwiXHJcbiAgICAgICAgICAgICAgW3V0YUlkXT1cIm9wdGlvbi51dGFJZCA/IG9wdGlvbi51dGFJZCA6IG9wdGlvbi52YWx1ZVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBbbGFiZWxdPVwib3B0aW9uLnRvU3RyaW5nKClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPC9zbWUtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIFtpZF09XCJpZEJhZy5wcm9tb3RlICsgaVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1mb3JtLWZpZWxkLWhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QucHJvbW90ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5wcm9tb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJwcm9tb3RlSXRlbUF0KGkpXCJcclxuICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgYWxsb3dFbXB0eURpc2FibGVBY3Rpb25zXCIgZGF0YS11dGEtaWQ9XCJwcm9tb3RlLWJ1dHRvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tdXBcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd01vdmVcIiBbaWRdPVwiaWRCYWcuZGVtb3RlICsgaVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1mb3JtLWZpZWxkLWhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QuZGVtb3RlQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LmRlbW90ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiZGVtb3RlSXRlbUF0KGkpXCJcclxuICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgYWxsb3dFbXB0eURpc2FibGVBY3Rpb25zXCIgZGF0YS11dGEtaWQ9XCJkZW1vdGUtYnV0dG9uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBZGRSZW1vdmVcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLk9yZGVyZWRMaXN0LnJlbW92ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5PcmRlcmVkTGlzdC5yZW1vdmVCdXR0b25Ub29sdGlwXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW1BdChpKVwiXHJcbiAgICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8IGFsbG93RW1wdHlEaXNhYmxlQWN0aW9uc1wiIGRhdGEtdXRhLWlkPVwicmVtb3ZlLWJ1dHRvblwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2FuY2VsIHNtZS1jb2xvci1yZWRcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uICNhZGRCdXR0b24gKm5nSWY9XCJzaG93QWRkUmVtb3ZlXCIgdHlwZT1cImJ1dHRvblwiIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCB8fCB2YWx1ZS5sZW5ndGggPT09IG9wdGlvbnMubGVuZ3RoXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1pY29uIHNtZS1pY29uLWFkZCBzbWUtbWFyZ2luLWJvdHRvbS14c1wiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWRkUmVtb3ZlQnV0dG9uQXJpYWxMYWJlbFwiIGRhdGEtdXRhLWlkPVwiYWRkLWJ1dHRvblwiXHJcbiAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uT3JkZXJlZExpc3QuYWRkQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJhZGRMaXN0SXRlbSgpXCI+XHJcbiAgICAgIHt7IGFkZEJ1dHRvblRleHQgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG48L3NtZS1mb3JtLWZpZWxkLWxheW91dD5cclxuIl19