@microsoft/windows-admin-center-sdk 4.167.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 (499) hide show
  1. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  2. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  3. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  4. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  5. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  6. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  7. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  8. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  9. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  10. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  11. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  12. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  13. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  14. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  15. package/angular/esm2020/src/data/index.mjs +2 -1
  16. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +539 -167
  17. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  18. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +521 -167
  19. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  20. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  21. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  22. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  23. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  24. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  25. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  26. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  27. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  28. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  29. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  30. package/angular/src/data/index.d.ts +1 -0
  31. package/core/async/cancellation.js +312 -0
  32. package/core/async/index.js +312 -0
  33. package/core/async/progress.js +312 -0
  34. package/core/azure/azure-constants.js +312 -0
  35. package/core/azure/azure-logging.js +312 -0
  36. package/core/azure/azure-manager.js +312 -0
  37. package/core/azure/models/aadAppConfig-data.js +312 -0
  38. package/core/azure/models/azureArcStatusEnum.js +312 -0
  39. package/core/azure/models/azureTokenResult-data.js +312 -0
  40. package/core/azure/resources/deployment-operation-request-body.js +312 -0
  41. package/core/azure/resources/deployment-operation-response.js +312 -0
  42. package/core/azure/resources/location-data.js +315 -0
  43. package/core/azure/resources/resource-group-data.js +312 -0
  44. package/core/azure/resources/subscription-data.js +312 -0
  45. package/core/base/data-store/browser-storage-data-store.js +315 -0
  46. package/core/base/data-store/cached-data-store.js +312 -0
  47. package/core/base/data-store/data-store.js +312 -0
  48. package/core/base/data-store/local-data-store.js +312 -0
  49. package/core/base/data-store/memory-data-store.js +312 -0
  50. package/core/base/data-store/session-data-store.js +312 -0
  51. package/core/base/date/date-like.js +312 -0
  52. package/core/base/date/date-range.js +312 -0
  53. package/core/base/date/date-time.js +312 -0
  54. package/core/base/date/date-type.js +312 -0
  55. package/core/base/date/time-unit.js +312 -0
  56. package/core/base/decorators/base.js +312 -0
  57. package/core/base/decorators/debounce.decorators.js +312 -0
  58. package/core/base/decorators/delay.decorator.js +315 -0
  59. package/core/base/decorators/yield.decorator.js +312 -0
  60. package/core/base/environment.js +312 -0
  61. package/core/base/json.js +312 -0
  62. package/core/base/msft-sme.mock.js +316 -0
  63. package/core/base/polyfills/array.js +315 -0
  64. package/core/base/polyfills/string.js +312 -0
  65. package/core/base/rxjs-lifetime-manager.js +312 -0
  66. package/core/base/utilities.js +312 -0
  67. package/core/base/versioned-object.js +312 -0
  68. package/core/data/accessibility-manager.js +312 -0
  69. package/core/data/active-directory/active-directory.js +312 -0
  70. package/core/data/active-directory/models/account-info.js +312 -0
  71. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  72. package/core/data/active-directory/models/search-type.js +312 -0
  73. package/core/data/animation.js +312 -0
  74. package/core/data/app-context.js +312 -0
  75. package/core/data/asset-manager.js +315 -0
  76. package/core/data/base64-array-buffer.js +312 -0
  77. package/core/data/batch-connection.js +312 -0
  78. package/core/data/cim-connection.js +312 -0
  79. package/core/data/cim-stream.js +312 -0
  80. package/core/data/cim.js +312 -0
  81. package/core/data/column-picker.js +312 -0
  82. package/core/data/cookie.js +312 -0
  83. package/core/data/core-environment.js +315 -0
  84. package/core/data/crypto.js +312 -0
  85. package/core/data/deployment-share.js +312 -0
  86. package/core/data/disposable.js +312 -0
  87. package/core/data/electron.js +315 -0
  88. package/core/data/error-extended.js +312 -0
  89. package/core/data/extension-broker/dialog-listener.js +312 -0
  90. package/core/data/extension-broker/extension-broker.js +312 -0
  91. package/core/data/extension-broker/extension-listener.js +312 -0
  92. package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
  93. package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
  94. package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
  95. package/core/data/extension-broker/model/extension-entries.js +315 -0
  96. package/core/data/extension-broker/model/extension-instance.js +315 -0
  97. package/core/data/extension-broker/model/extension-rect.js +312 -0
  98. package/core/data/extension-broker/model/extension-search-options.js +312 -0
  99. package/core/data/extension-broker/service-listener.js +312 -0
  100. package/core/data/extension-broker/worker-listener.js +312 -0
  101. package/core/data/extension-broker/worker-set.js +312 -0
  102. package/core/data/file-transfer.js +312 -0
  103. package/core/data/gateway-connection.js +312 -0
  104. package/core/data/gateway-status.js +312 -0
  105. package/core/data/gateway-url-builder.js +312 -0
  106. package/core/data/gateway-url-translator.js +316 -0
  107. package/core/data/gateway-urls.js +312 -0
  108. package/core/data/globalization.js +315 -0
  109. package/core/data/http-constants.js +315 -0
  110. package/core/data/http.js +312 -0
  111. package/core/data/jobs/jobs-manager.js +312 -0
  112. package/core/data/jobs/models/job-credentials.js +312 -0
  113. package/core/data/jobs/models/job-node.js +312 -0
  114. package/core/data/jobs/models/job-paginated-response.js +315 -0
  115. package/core/data/jobs/models/job-pagination-options.js +315 -0
  116. package/core/data/jobs/models/job.js +312 -0
  117. package/core/data/jobs/models/node-job.js +312 -0
  118. package/core/data/jobs/models/powershell-job.js +312 -0
  119. package/core/data/language.js +315 -0
  120. package/core/data/lifetime-data.js +312 -0
  121. package/core/data/localization-manager.js +312 -0
  122. package/core/data/native-q.js +312 -0
  123. package/core/data/net.d.ts.map +1 -1
  124. package/core/data/net.js +313 -1
  125. package/core/data/net.js.map +1 -1
  126. package/core/data/node-connection.d.ts.map +1 -1
  127. package/core/data/node-connection.js +312 -0
  128. package/core/data/node-connection.js.map +1 -1
  129. package/core/data/node-extension-install.js +312 -0
  130. package/core/data/powershell-alternate.js +312 -0
  131. package/core/data/powershell-batch.js +312 -0
  132. package/core/data/powershell-connection.js +312 -0
  133. package/core/data/powershell-crypto.js +312 -0
  134. package/core/data/powershell-stream.js +312 -0
  135. package/core/data/powershell.js +312 -0
  136. package/core/data/query-cache.js +312 -0
  137. package/core/data/resource-cache.js +312 -0
  138. package/core/data/schedule-reboot.js +312 -0
  139. package/core/data/settings-manager.js +312 -0
  140. package/core/data/settings-manger.mock.js +312 -0
  141. package/core/data/sme-extension.js +312 -0
  142. package/core/data/ssh-stream.js +312 -0
  143. package/core/data/units.js +312 -0
  144. package/core/data/uri-builder.js +315 -0
  145. package/core/data/wdac-operations.js +312 -0
  146. package/core/data/websocket-stream.js +312 -0
  147. package/core/diagnostics/error-monitor.js +312 -0
  148. package/core/diagnostics/log-level.js +312 -0
  149. package/core/diagnostics/log-record.js +312 -0
  150. package/core/diagnostics/logging-constants.js +312 -0
  151. package/core/diagnostics/logging.js +312 -0
  152. package/core/diagnostics/logging.mock.js +312 -0
  153. package/core/diagnostics/sme-web-telemetry-models.js +312 -0
  154. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  155. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  156. package/core/diagnostics/sme-web-telemetry.js +336 -15
  157. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  158. package/core/diagnostics/telemetry-control-type.js +312 -0
  159. package/core/diagnostics/telemetry-options.js +312 -0
  160. package/core/diagnostics/telemetry-record.js +312 -0
  161. package/core/dom/dom.js +312 -0
  162. package/core/frame/frame-connection.js +312 -0
  163. package/core/frame/frame-connection.mock.js +312 -0
  164. package/core/frame/shell-navigation-connection.js +312 -0
  165. package/core/generated/powershell-scripts.js +312 -0
  166. package/core/generated/strings.js +312 -0
  167. package/core/host/host-core-manager.js +312 -0
  168. package/core/host/host-core-message-type.js +312 -0
  169. package/core/host/host-core-messages.js +312 -0
  170. package/core/index.d.ts +0 -1
  171. package/core/index.d.ts.map +1 -1
  172. package/core/index.js +312 -1
  173. package/core/index.js.map +1 -1
  174. package/core/manifest/environment-modules.js +312 -0
  175. package/core/manifest/manifest-loader.js +312 -0
  176. package/core/notification/client-notification-instance.js +312 -0
  177. package/core/notification/client-notification.js +312 -0
  178. package/core/notification/notification-connection.js +312 -0
  179. package/core/notification/notification-link-type.js +312 -0
  180. package/core/notification/notification-manager.js +312 -0
  181. package/core/notification/notification-message.js +312 -0
  182. package/core/notification/notification-state.js +312 -0
  183. package/core/notification/notification.js +312 -0
  184. package/core/notification/powershell-notification.js +312 -0
  185. package/core/notification/socket-signalr.js +312 -0
  186. package/core/notification/work-item-connection.js +312 -0
  187. package/core/notification/work-item-manager.js +312 -0
  188. package/core/notification/work-item-request.js +312 -0
  189. package/core/performance/performance-profile-data-type.js +312 -0
  190. package/core/performance/performance-profile-data.js +312 -0
  191. package/core/performance/performance-profile-database.js +312 -0
  192. package/core/performance/performance-profile-record.js +312 -0
  193. package/core/performance/performance-profile.d.ts.map +1 -1
  194. package/core/performance/performance-profile.js +321 -9
  195. package/core/performance/performance-profile.js.map +1 -1
  196. package/core/performance/performance-tracker.js +312 -0
  197. package/core/polyfills.js +312 -0
  198. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
  199. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
  200. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  201. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  202. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  203. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
  204. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
  205. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
  206. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +216 -0
  207. package/core/rpc/alive/rpc-alive-client.js +312 -0
  208. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  209. package/core/rpc/alive/rpc-alive-model.js +315 -0
  210. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  211. package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
  212. package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
  213. package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
  214. package/core/rpc/azure/rpc-azure-model.js +312 -0
  215. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  216. package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
  217. package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
  218. package/core/rpc/azure/rpc-azure-response-client.js +312 -0
  219. package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
  220. package/core/rpc/credssp/rpc-credssp-model.js +312 -0
  221. package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
  222. package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
  223. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
  224. package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
  225. package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
  226. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  227. package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
  228. package/core/rpc/dialog/rpc-dialog-model.js +312 -0
  229. package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
  230. package/core/rpc/electron/rpc-electron-model.js +312 -0
  231. package/core/rpc/electron/rpc-electron-request-client.js +312 -0
  232. package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
  233. package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
  234. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  235. package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
  236. package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
  237. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  238. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  239. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
  240. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
  241. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  242. package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
  243. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
  244. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  245. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  246. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  247. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  248. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  249. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
  250. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  251. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
  252. package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
  253. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  254. package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
  255. package/core/rpc/forward/rpc-forward-model.js +312 -0
  256. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  257. package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
  258. package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
  259. package/core/rpc/log/rpc-log-client.js +312 -0
  260. package/core/rpc/log/rpc-log-handler.js +312 -0
  261. package/core/rpc/log/rpc-log-model.js +312 -0
  262. package/core/rpc/log/rpc-log-subject-server.js +312 -0
  263. package/core/rpc/notification/rpc-notification-client.js +312 -0
  264. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  265. package/core/rpc/notification/rpc-notification-model.js +312 -0
  266. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  267. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  268. package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
  269. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  270. package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
  271. package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
  272. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
  273. package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
  274. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  275. package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
  276. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  277. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  278. package/core/rpc/report/rpc-report-client.js +312 -0
  279. package/core/rpc/report/rpc-report-handler.js +312 -0
  280. package/core/rpc/report/rpc-report-model.js +312 -0
  281. package/core/rpc/report/rpc-report-subject-server.js +315 -0
  282. package/core/rpc/rpc-base.js +312 -0
  283. package/core/rpc/rpc-channel.js +312 -0
  284. package/core/rpc/rpc-forwarder.js +312 -0
  285. package/core/rpc/rpc-inbound-client.js +312 -0
  286. package/core/rpc/rpc-inbound.js +312 -0
  287. package/core/rpc/rpc-manager.js +312 -0
  288. package/core/rpc/rpc-module-subject-server.js +315 -0
  289. package/core/rpc/rpc-observable-client.js +312 -0
  290. package/core/rpc/rpc-observable-request.js +312 -0
  291. package/core/rpc/rpc-observable-result.js +312 -0
  292. package/core/rpc/rpc-observable-server.js +312 -0
  293. package/core/rpc/rpc-outbound-client.js +312 -0
  294. package/core/rpc/rpc-outbound.js +312 -0
  295. package/core/rpc/rpc-subject-server.js +312 -0
  296. package/core/rpc/rpc.js +312 -0
  297. package/core/rpc/seek/rpc-seek-client.js +312 -0
  298. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  299. package/core/rpc/seek/rpc-seek-model.js +312 -0
  300. package/core/rpc/settings/rpc-settings-client.js +315 -0
  301. package/core/rpc/settings/rpc-settings-handler.js +312 -0
  302. package/core/rpc/settings/rpc-settings-model.js +312 -0
  303. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  304. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
  305. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
  306. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
  307. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
  308. package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
  309. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
  310. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  311. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  312. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
  313. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
  314. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  315. package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
  316. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  317. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
  318. package/core/rpc/update-data/rpc-update-data-client.js +312 -0
  319. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  320. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  321. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  322. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
  323. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
  324. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
  325. package/core/rpc/work-item/rpc-work-item-client.js +312 -0
  326. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  327. package/core/rpc/work-item/rpc-work-item-model.js +312 -0
  328. package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
  329. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  330. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
  331. package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
  332. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  333. package/core/security/active-connection.js +312 -0
  334. package/core/security/authorization-manager.js +312 -0
  335. package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
  336. package/core/security/connection-manager-settings/connection-settings.js +312 -0
  337. package/core/security/connection-manager.js +312 -0
  338. package/core/security/connection-stream.js +312 -0
  339. package/core/security/connection.js +312 -0
  340. package/core/security/credssp-manager.js +312 -0
  341. package/core/security/sign-on-manager.js +312 -0
  342. package/core/security/tag-manager.js +312 -0
  343. package/core/security/tool-condition-validator.js +312 -0
  344. package/core/security/tool-connection-query.js +312 -0
  345. package/core/security/user-principal.js +312 -0
  346. package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
  347. package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
  348. package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
  349. package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
  350. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
  351. package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
  352. package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
  353. package/core/shared/inventory-query-caches.js +312 -0
  354. package/core/shared/server-inventory/server-inventory-cache.js +312 -0
  355. package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
  356. package/core/shared/server-inventory/server-inventory-detail.js +315 -0
  357. package/core/shared/server-inventory/server-inventory.js +312 -0
  358. package/core/shared/shared-cache.js +312 -0
  359. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  360. package/core/shared/tool-inventory/tool-inventory.js +312 -0
  361. package/core/special.js +315 -0
  362. package/core/test-utilities/accessibility-tester.js +312 -0
  363. package/core/test-utilities/console.mock.js +312 -0
  364. package/core/test-utilities/jasmine-axe-matcher.js +312 -0
  365. package/core/test-utilities/wait-async.js +312 -0
  366. package/core/test.js +312 -0
  367. package/core/testing.js +312 -0
  368. package/core/workflow/persistent-local-storage.js +312 -0
  369. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  370. package/core/workflow/persistent-work-item-state.js +312 -0
  371. package/core/workflow/persistent-work-item.js +315 -0
  372. package/core/workflow/persistent-workflow-builder.js +312 -0
  373. package/core/workflow/persistent-workflow-context.js +312 -0
  374. package/core/workflow/persistent-workflow-runner.js +312 -0
  375. package/core/workflow/persistent-workflow-snapshot.js +312 -0
  376. package/core/workflow/persistent-workflow-store.js +312 -0
  377. package/core/workflow/persistent-workflow.js +312 -0
  378. package/package.json +4 -4
  379. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  380. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  381. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  382. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  383. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  384. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  385. package/tools/build/webpack/index-html.transform.js +312 -0
  386. package/tools/build/webpack/shell.index-html.transform.js +312 -0
  387. package/tools/build/webpack/shell.webpack.config.js +312 -0
  388. package/tools/build/webpack/webpack.config.js +312 -0
  389. package/tools/code-formatter/.eslintrc.base.json +2 -1
  390. package/tools/code-formatter/lint.js +312 -0
  391. package/tools/code-formatter/utilities.js +316 -0
  392. package/tools/gulp-doc-generator/index.js +312 -0
  393. package/tools/gulp-manifest-resource/index.js +312 -0
  394. package/tools/gulp-manifest-validator/index.js +312 -0
  395. package/tools/gulp-merge-json-in-folders/index.js +312 -0
  396. package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
  397. package/tools/gulp-ps-cim/index.js +315 -0
  398. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  399. package/tools/gulp-ps-code/index.js +323 -2
  400. package/tools/gulp-ps-code/index.js.map +1 -1
  401. package/tools/gulp-ps-code/ps-code-convert.js +312 -0
  402. package/tools/gulp-ps-manifest/index.js +312 -0
  403. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  404. package/tools/gulp-ps-module/index.js +327 -3
  405. package/tools/gulp-ps-module/index.js.map +1 -1
  406. package/tools/gulp-ps-resjson/index.js +315 -0
  407. package/tools/gulp-resjson/index.js +315 -0
  408. package/tools/gulp-resjson/resjson-convert.js +312 -0
  409. package/tools/gulp-schema-form/index.js +312 -0
  410. package/tools/gulp-svg-code/index.js +312 -0
  411. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  412. package/tools/gulp-update-notes-resource/index.js +312 -0
  413. package/tools/module-template/build/increment-package-version.ps1 +216 -0
  414. package/tools/module-template/build/push-incremented-version.ps1 +216 -1
  415. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  416. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  417. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  418. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  419. package/tools/pack-nuget/index.d.ts.map +1 -1
  420. package/tools/pack-nuget/index.js +321 -3
  421. package/tools/pack-nuget/index.js.map +1 -1
  422. package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
  423. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  424. package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
  425. package/tools/scripts/package-information/README.md +3 -0
  426. package/tools/scripts/package-information/ms-logo.png +0 -0
  427. package/tools/test-runner/index.js +312 -0
  428. package/tools/utilities/index.js +312 -0
  429. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
  430. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  431. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  432. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +312 -0
  433. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
  434. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
  435. package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
  436. package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
  437. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
  438. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
  439. package/tools/wac-cli/src/angular15/main.js +312 -0
  440. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  441. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
  442. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
  443. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  444. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
  445. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  446. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
  447. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
  448. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
  449. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
  450. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  451. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
  452. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
  453. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
  454. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +312 -0
  455. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
  456. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
  457. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
  458. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
  459. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
  460. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
  461. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
  462. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
  463. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  464. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  465. package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
  466. package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
  467. package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
  468. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  469. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  470. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  471. package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
  472. package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
  473. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  474. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
  475. package/tools/wac-cli/src/common.js +312 -0
  476. package/tools/wac-cli/src/create/main.js +312 -0
  477. package/tools/wac-cli/src/eslint/main.js +312 -0
  478. package/tools/wac-cli/src/index.js +312 -0
  479. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  480. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
  481. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
  482. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  483. package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
  484. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  485. package/tools/wac-cli/src/upgrade/main.js +312 -0
  486. package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
  487. package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
  488. package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
  489. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  490. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
  491. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
  492. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  493. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  494. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  495. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
  496. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  497. package/core/data/extension-broker/snap-in-listener.js +0 -73
  498. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  499. package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
4
  const _c0 = ["*"];
@@ -20,9 +20,17 @@ function AccordionPanelComponent_div_8_Template(rf, ctx) { if (rf & 1) {
20
20
  const _c2 = [[["sme-panel-control"]], "*"];
21
21
  const _c3 = ["sme-panel-control", "*"];
22
22
  export class PanelControlComponent {
23
+ constructor() {
24
+ /**
25
+ * Best effort to make sure the buttons, texts can be focused.
26
+ */
27
+ this.defaultFocusZone = true;
28
+ }
23
29
  }
24
30
  /** @nocollapse */ PanelControlComponent.ɵfac = function PanelControlComponent_Factory(t) { return new (t || PanelControlComponent)(); };
25
- /** @nocollapse */ PanelControlComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: PanelControlComponent, selectors: [["sme-panel-control"]], ngContentSelectors: _c0, decls: 1, vars: 0, template: function PanelControlComponent_Template(rf, ctx) { if (rf & 1) {
31
+ /** @nocollapse */ PanelControlComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: PanelControlComponent, selectors: [["sme-panel-control"]], hostVars: 2, hostBindings: function PanelControlComponent_HostBindings(rf, ctx) { if (rf & 2) {
32
+ i0.ɵɵclassProp("sme-focus-zone", ctx.defaultFocusZone);
33
+ } }, ngContentSelectors: _c0, decls: 1, vars: 0, template: function PanelControlComponent_Template(rf, ctx) { if (rf & 1) {
26
34
  i0.ɵɵprojectionDef();
27
35
  i0.ɵɵprojection(0);
28
36
  } }, encapsulation: 2 });
@@ -32,9 +40,21 @@ export class PanelControlComponent {
32
40
  selector: 'sme-panel-control',
33
41
  template: '<ng-content></ng-content>'
34
42
  }]
35
- }], null, null); })();
43
+ }], null, { defaultFocusZone: [{
44
+ type: HostBinding,
45
+ args: ['class.sme-focus-zone']
46
+ }] }); })();
36
47
  export class AccordionPanelComponent {
37
48
  constructor() {
49
+ /**
50
+ * It indicates whether the panel is opened.
51
+ */
52
+ this.opened = true;
53
+ /**
54
+ * It indicates whether the panel is initially opened.
55
+ * This value will no longer be respected after the control fully loaded.
56
+ */
57
+ this.initialOpened = true;
38
58
  /**
39
59
  * It indicates whether the panel is expandable.
40
60
  */
@@ -50,21 +70,24 @@ export class AccordionPanelComponent {
50
70
  */
51
71
  this.paddingInset = false;
52
72
  this.toggled = new EventEmitter();
53
- this.opened = true;
73
+ }
74
+ ngOnInit() {
75
+ this.opened = !!this.initialOpened;
54
76
  this.canClose = this.isExpandable;
55
77
  }
56
78
  /**
57
79
  * The on toggle function implementation.
58
80
  */
59
81
  onToggle() {
60
- if (this.isExpandable) {
61
- this.opened = !this.opened;
62
- this.toggled.emit(this);
82
+ if (!this.isExpandable) {
83
+ return;
63
84
  }
85
+ this.opened = !this.opened;
86
+ this.toggled.emit(this);
64
87
  }
65
88
  }
66
89
  /** @nocollapse */ AccordionPanelComponent.ɵfac = function AccordionPanelComponent_Factory(t) { return new (t || AccordionPanelComponent)(); };
67
- /** @nocollapse */ AccordionPanelComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: AccordionPanelComponent, selectors: [["sme-accordion-panel"]], inputs: { header: "header", opened: "opened", isExpandable: "isExpandable", borderRadius: "borderRadius", paddingInset: "paddingInset" }, outputs: { toggled: "toggled" }, ngContentSelectors: _c3, decls: 9, vars: 14, consts: [[1, "sme-accordion-panel"], [1, "sme-arrange-stack-h", "sme-panel-header", "sme-layout-flex", "sme-position-flex-align-center"], [1, "sme-button", "sme-button-align-left", "sme-button-trigger", "sme-position-flex-auto", "sme-panel-expander", 3, "click"], ["accordionPanelButton", ""], ["class", "sme-position-flex-none sme-icon sme-position-stretch-v", 3, "ngClass", 4, "ngIf"], [1, "sme-arrange-ellipsis", "sme-position-stretch-v", 3, "title"], ["class", "sme-panel-body", 3, "sme-padding-inset-sm", 4, "ngIf"], [1, "sme-position-flex-none", "sme-icon", "sme-position-stretch-v", 3, "ngClass"], [1, "sme-panel-body"]], template: function AccordionPanelComponent_Template(rf, ctx) { if (rf & 1) {
90
+ /** @nocollapse */ AccordionPanelComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: AccordionPanelComponent, selectors: [["sme-accordion-panel"]], inputs: { header: "header", initialOpened: "initialOpened", isExpandable: "isExpandable", borderRadius: "borderRadius", paddingInset: "paddingInset" }, outputs: { toggled: "toggled" }, ngContentSelectors: _c3, decls: 9, vars: 16, consts: [[1, "sme-accordion-panel"], [1, "sme-arrange-stack-h", "sme-panel-header", "sme-layout-flex", "sme-position-flex-align-center"], ["tabindex", "0", 1, "sme-button", "sme-button-align-left", "sme-button-trigger", "sme-position-flex-auto", "sme-panel-expander", 3, "click"], ["accordionPanelButton", ""], ["class", "sme-position-flex-none sme-icon sme-position-stretch-v", 3, "ngClass", 4, "ngIf"], [1, "sme-arrange-ellipsis", "sme-position-stretch-v", 3, "title"], ["class", "sme-panel-body", 3, "sme-padding-inset-sm", 4, "ngIf"], [1, "sme-position-flex-none", "sme-icon", "sme-position-stretch-v", 3, "ngClass"], [1, "sme-panel-body"]], template: function AccordionPanelComponent_Template(rf, ctx) { if (rf & 1) {
68
91
  i0.ɵɵprojectionDef(_c2);
69
92
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2, 3);
70
93
  i0.ɵɵlistener("click", function AccordionPanelComponent_Template_div_click_2_listener() { return ctx.onToggle(); });
@@ -81,6 +104,7 @@ export class AccordionPanelComponent {
81
104
  i0.ɵɵclassProp("sme-panel-header-border-radius", ctx.borderRadius)("sme-panel-header-border-radius-opened", ctx.borderRadius && ctx.opened);
82
105
  i0.ɵɵadvance(1);
83
106
  i0.ɵɵclassProp("sme-focus-zone", ctx.canClose)("sme-panel-header-border-radius", ctx.borderRadius)("sme-panel-header-border-radius-opened", ctx.borderRadius && ctx.opened);
107
+ i0.ɵɵattribute("aria-expanded", !!ctx.opened)("aria-label", ctx.header);
84
108
  i0.ɵɵadvance(2);
85
109
  i0.ɵɵproperty("ngIf", ctx.canClose);
86
110
  i0.ɵɵadvance(1);
@@ -92,10 +116,10 @@ export class AccordionPanelComponent {
92
116
  } }, dependencies: [i1.NgClass, i1.NgIf], encapsulation: 2 });
93
117
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AccordionPanelComponent, [{
94
118
  type: Component,
95
- args: [{ selector: 'sme-accordion-panel', template: "<div class=\"sme-accordion-panel\">\r\n <div class=\"sme-arrange-stack-h sme-panel-header sme-layout-flex sme-position-flex-align-center\" [class.sme-panel-header-border-radius]=\"borderRadius\"\r\n [class.sme-panel-header-border-radius-opened]=\"borderRadius && opened\">\r\n <div #accordionPanelButton [class.sme-focus-zone]=\"canClose\" [class.sme-panel-header-border-radius]=\"borderRadius\"\r\n [class.sme-panel-header-border-radius-opened]=\"borderRadius && opened\"\r\n class=\"sme-button sme-button-align-left sme-button-trigger sme-position-flex-auto sme-panel-expander\"\r\n (click)=\"onToggle()\">\r\n <span *ngIf=\"canClose\" class=\"sme-position-flex-none sme-icon sme-position-stretch-v\"\r\n [ngClass]=\"{'sme-icon-chevronDown':opened, 'sme-icon-chevronRight': !opened}\"></span>\r\n <span class=\"sme-arrange-ellipsis sme-position-stretch-v\" [title]=\"header\">{{ header }}</span>\r\n </div>\r\n <ng-content select=\"sme-panel-control\"></ng-content>\r\n </div>\r\n <div class=\"sme-panel-body\" *ngIf=\"opened\" [class.sme-padding-inset-sm]=\"paddingInset\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n" }]
96
- }], function () { return []; }, { header: [{
119
+ args: [{ selector: 'sme-accordion-panel', template: "<div class=\"sme-accordion-panel\">\r\n <div class=\"sme-arrange-stack-h sme-panel-header sme-layout-flex sme-position-flex-align-center\" [class.sme-panel-header-border-radius]=\"borderRadius\"\r\n [class.sme-panel-header-border-radius-opened]=\"borderRadius && opened\">\r\n <div #accordionPanelButton [class.sme-focus-zone]=\"canClose\" [class.sme-panel-header-border-radius]=\"borderRadius\"\r\n [class.sme-panel-header-border-radius-opened]=\"borderRadius && opened\" [attr.aria-expanded]=\"!!opened\"\r\n [attr.aria-label]=\"header\" tabindex=\"0\"\r\n class=\"sme-button sme-button-align-left sme-button-trigger sme-position-flex-auto sme-panel-expander\"\r\n (click)=\"onToggle()\">\r\n <span *ngIf=\"canClose\" class=\"sme-position-flex-none sme-icon sme-position-stretch-v\"\r\n [ngClass]=\"{'sme-icon-chevronDown':opened, 'sme-icon-chevronRight': !opened}\"></span>\r\n <span class=\"sme-arrange-ellipsis sme-position-stretch-v\" [title]=\"header\">{{ header }}</span>\r\n </div>\r\n <ng-content select=\"sme-panel-control\"></ng-content>\r\n </div>\r\n <div class=\"sme-panel-body\" *ngIf=\"opened\" [class.sme-padding-inset-sm]=\"paddingInset\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n" }]
120
+ }], null, { header: [{
97
121
  type: Input
98
- }], opened: [{
122
+ }], initialOpened: [{
99
123
  type: Input
100
124
  }], isExpandable: [{
101
125
  type: Input
@@ -106,4 +130,4 @@ export class AccordionPanelComponent {
106
130
  }], toggled: [{
107
131
  type: Output
108
132
  }] }); })();
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwvYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwvYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztJQ09qRSwwQkFDdUY7OztJQUFyRixtRkFBNkU7OztJQUtuRiw4QkFBdUY7SUFDckYscUJBQXlCO0lBQzNCLGlCQUFNOzs7SUFGcUMsMkRBQTJDOzs7O0FEUHhGLE1BQU0sT0FBTyxxQkFBcUI7OzZHQUFyQixxQkFBcUI7dUdBQXJCLHFCQUFxQjs7UUFGbkIsa0JBQXlCOzt1RkFFM0IscUJBQXFCO2NBSmpDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixRQUFRLEVBQUUsMkJBQTJCO2FBQ3hDOztBQVFELE1BQU0sT0FBTyx1QkFBdUI7SUFzQ2hDO1FBekJBOztXQUVHO1FBRUksaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFM0I7OztXQUdHO1FBRUksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFNUI7OztXQUdHO1FBRUksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFhckIsWUFBTyxHQUEwQyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUxoRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUtEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtJQUNMLENBQUM7O2lIQXREUSx1QkFBdUI7eUdBQXZCLHVCQUF1Qjs7UUNicEMsOEJBQWlDLGFBQUEsZ0JBQUE7UUFNM0IsaUdBQVMsY0FBVSxJQUFDO1FBQ3BCLDBFQUN1RjtRQUN2RiwrQkFBMkU7UUFBQSxZQUFZO1FBQUEsaUJBQU8sRUFBQTtRQUVoRyxrQkFBb0Q7UUFDdEQsaUJBQU07UUFDTix3RUFFTTtRQUNSLGlCQUFNOztRQWY2RixlQUFxRDtRQUFyRCxrRUFBcUQseUVBQUE7UUFFekgsZUFBaUM7UUFBakMsOENBQWlDLG9EQUFBLHlFQUFBO1FBSW5ELGVBQWM7UUFBZCxtQ0FBYztRQUVxQyxlQUFnQjtRQUFoQixrQ0FBZ0I7UUFBQyxlQUFZO1FBQVosZ0NBQVk7UUFJOUQsZUFBWTtRQUFaLGlDQUFZOzt1RkRBOUIsdUJBQXVCO2NBSm5DLFNBQVM7MkJBQ0kscUJBQXFCO3NDQVF4QixNQUFNO2tCQURaLEtBQUs7WUFPQyxNQUFNO2tCQURaLEtBQUs7WUFPQyxZQUFZO2tCQURsQixLQUFLO1lBUUMsWUFBWTtrQkFEbEIsS0FBSztZQVFDLFlBQVk7a0JBRGxCLEtBQUs7WUFjQyxPQUFPO2tCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1wYW5lbC1jb250cm9sJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PidcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhbmVsQ29udHJvbENvbXBvbmVudCB7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtYWNjb3JkaW9uLXBhbmVsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY2NvcmRpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25QYW5lbENvbXBvbmVudCB7XHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgdGhlIGhlYWRlciBmb3IgdGhlIHBhbmVsLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIG9wZW5lZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcGVuZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFuZWwgaXMgZXhwYW5kYWJsZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc0V4cGFuZGFibGUgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB0aGUgYm9yZGVyIHJhZGl1cyBmb3IgdGhlIHBhbmVsLlxyXG4gICAgICogVHJ1ZSB3aWxsIGFwcGx5IGJvcmRlciByYWRpdXMgdG8gaGF2ZSByb3VuZCBjb3JuZXJzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJvcmRlclJhZGl1cyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB0aGUgcGFkZGluZyBpbnNldCBmb3IgdGhlIHBhbmVsIGJvZHkuXHJcbiAgICAgKiBUcnVlIHdpbGwgYXBwbHkgYSBkZWZhdWx0IHBhZGRpbmcgdG8gdGhlIHBhbmVsIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFkZGluZ0luc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFuZWwgY2FuIGJlIGNsb3NlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbkNsb3NlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbkNsb3NlID0gdGhpcy5pc0V4cGFuZGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdG9nZ2xlZDogRXZlbnRFbWl0dGVyPEFjY29yZGlvblBhbmVsQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWNjb3JkaW9uUGFuZWxDb21wb25lbnQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gdG9nZ2xlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Ub2dnbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZWQuZW1pdCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNtZS1hY2NvcmRpb24tcGFuZWxcIj5cclxuICA8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcGFuZWwtaGVhZGVyIHNtZS1sYXlvdXQtZmxleCBzbWUtcG9zaXRpb24tZmxleC1hbGlnbi1jZW50ZXJcIiBbY2xhc3Muc21lLXBhbmVsLWhlYWRlci1ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXHJcbiAgICBbY2xhc3Muc21lLXBhbmVsLWhlYWRlci1ib3JkZXItcmFkaXVzLW9wZW5lZF09XCJib3JkZXJSYWRpdXMgJiYgb3BlbmVkXCI+XHJcbiAgICA8ZGl2ICNhY2NvcmRpb25QYW5lbEJ1dHRvbiBbY2xhc3Muc21lLWZvY3VzLXpvbmVdPVwiY2FuQ2xvc2VcIiBbY2xhc3Muc21lLXBhbmVsLWhlYWRlci1ib3JkZXItcmFkaXVzXT1cImJvcmRlclJhZGl1c1wiXHJcbiAgICAgIFtjbGFzcy5zbWUtcGFuZWwtaGVhZGVyLWJvcmRlci1yYWRpdXMtb3BlbmVkXT1cImJvcmRlclJhZGl1cyAmJiBvcGVuZWRcIlxyXG4gICAgICBjbGFzcz1cInNtZS1idXR0b24gc21lLWJ1dHRvbi1hbGlnbi1sZWZ0IHNtZS1idXR0b24tdHJpZ2dlciBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYW5lbC1leHBhbmRlclwiXHJcbiAgICAgIChjbGljayk9XCJvblRvZ2dsZSgpXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiY2FuQ2xvc2VcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWljb24gc21lLXBvc2l0aW9uLXN0cmV0Y2gtdlwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydzbWUtaWNvbi1jaGV2cm9uRG93bic6b3BlbmVkLCAnc21lLWljb24tY2hldnJvblJpZ2h0JzogIW9wZW5lZH1cIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLXBvc2l0aW9uLXN0cmV0Y2gtdlwiIFt0aXRsZV09XCJoZWFkZXJcIj57eyBoZWFkZXIgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1wYW5lbC1jb250cm9sXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtcGFuZWwtYm9keVwiICpuZ0lmPVwib3BlbmVkXCIgW2NsYXNzLnNtZS1wYWRkaW5nLWluc2V0LXNtXT1cInBhZGRpbmdJbnNldFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwvYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwvYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7SUNRdEYsMEJBQ3VGOzs7SUFBckYsbUZBQTZFOzs7SUFLbkYsOEJBQXVGO0lBQ3JGLHFCQUF5QjtJQUMzQixpQkFBTTs7O0lBRnFDLDJEQUEyQzs7OztBRFJ4RixNQUFNLE9BQU8scUJBQXFCO0lBSmxDO1FBS0k7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7S0FDbEM7OzZHQU5ZLHFCQUFxQjt1R0FBckIscUJBQXFCOzs7O1FBRm5CLGtCQUF5Qjs7dUZBRTNCLHFCQUFxQjtjQUpqQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFLDJCQUEyQjthQUN4QztnQkFNVSxnQkFBZ0I7a0JBRHRCLFdBQVc7bUJBQUMsc0JBQXNCOztBQVF2QyxNQUFNLE9BQU8sdUJBQXVCO0lBSnBDO1FBV0k7O1dBRUc7UUFDSSxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRXJCOzs7V0FHRztRQUVJLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTVCOztXQUVHO1FBRUksaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFM0I7OztXQUdHO1FBRUksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFNUI7OztXQUdHO1FBRUksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFhckIsWUFBTyxHQUEwQyxJQUFJLFlBQVksRUFBMkIsQ0FBQztLQWF2RztJQW5CVSxRQUFRO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUtEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7O2lIQTlEUSx1QkFBdUI7eUdBQXZCLHVCQUF1Qjs7UUNsQnBDLDhCQUFpQyxhQUFBLGdCQUFBO1FBTzNCLGlHQUFTLGNBQVUsSUFBQztRQUNwQiwwRUFDdUY7UUFDdkYsK0JBQTJFO1FBQUEsWUFBWTtRQUFBLGlCQUFPLEVBQUE7UUFFaEcsa0JBQW9EO1FBQ3RELGlCQUFNO1FBQ04sd0VBRU07UUFDUixpQkFBTTs7UUFoQjZGLGVBQXFEO1FBQXJELGtFQUFxRCx5RUFBQTtRQUV6SCxlQUFpQztRQUFqQyw4Q0FBaUMsb0RBQUEseUVBQUE7UUFDYSw2Q0FBK0IsMEJBQUE7UUFJL0YsZUFBYztRQUFkLG1DQUFjO1FBRXFDLGVBQWdCO1FBQWhCLGtDQUFnQjtRQUFDLGVBQVk7UUFBWixnQ0FBWTtRQUk5RCxlQUFZO1FBQVosaUNBQVk7O3VGREk5Qix1QkFBdUI7Y0FKbkMsU0FBUzsyQkFDSSxxQkFBcUI7Z0JBUXhCLE1BQU07a0JBRFosS0FBSztZQWFDLGFBQWE7a0JBRG5CLEtBQUs7WUFPQyxZQUFZO2tCQURsQixLQUFLO1lBUUMsWUFBWTtrQkFEbEIsS0FBSztZQVFDLFlBQVk7a0JBRGxCLEtBQUs7WUFjQyxPQUFPO2tCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1wYW5lbC1jb250cm9sJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PidcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhbmVsQ29udHJvbENvbXBvbmVudCB7XHJcbiAgICAvKipcclxuICAgICAqIEJlc3QgZWZmb3J0IHRvIG1ha2Ugc3VyZSB0aGUgYnV0dG9ucywgdGV4dHMgY2FuIGJlIGZvY3VzZWQuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvY3VzLXpvbmUnKVxyXG4gICAgcHVibGljIGRlZmF1bHRGb2N1c1pvbmUgPSB0cnVlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWFjY29yZGlvbi1wYW5lbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWNjb3JkaW9uLXBhbmVsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBoZWFkZXIgZm9yIHRoZSBwYW5lbC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBwYW5lbCBpcyBvcGVuZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuZWQgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGluaXRpYWxseSBvcGVuZWQuXHJcbiAgICAgKiBUaGlzIHZhbHVlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlc3BlY3RlZCBhZnRlciB0aGUgY29udHJvbCBmdWxseSBsb2FkZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5pdGlhbE9wZW5lZCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFuZWwgaXMgZXhwYW5kYWJsZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc0V4cGFuZGFibGUgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB0aGUgYm9yZGVyIHJhZGl1cyBmb3IgdGhlIHBhbmVsLlxyXG4gICAgICogVHJ1ZSB3aWxsIGFwcGx5IGJvcmRlciByYWRpdXMgdG8gaGF2ZSByb3VuZCBjb3JuZXJzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJvcmRlclJhZGl1cyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB0aGUgcGFkZGluZyBpbnNldCBmb3IgdGhlIHBhbmVsIGJvZHkuXHJcbiAgICAgKiBUcnVlIHdpbGwgYXBwbHkgYSBkZWZhdWx0IHBhZGRpbmcgdG8gdGhlIHBhbmVsIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFkZGluZ0luc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFuZWwgY2FuIGJlIGNsb3NlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbkNsb3NlOiBib29sZWFuO1xyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLm9wZW5lZCA9ICEhdGhpcy5pbml0aWFsT3BlbmVkO1xyXG4gICAgICAgIHRoaXMuY2FuQ2xvc2UgPSB0aGlzLmlzRXhwYW5kYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB0b2dnbGVkOiBFdmVudEVtaXR0ZXI8QWNjb3JkaW9uUGFuZWxDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBY2NvcmRpb25QYW5lbENvbXBvbmVudD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvbiB0b2dnbGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlZC5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtYWNjb3JkaW9uLXBhbmVsXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBhbmVsLWhlYWRlciBzbWUtbGF5b3V0LWZsZXggc21lLXBvc2l0aW9uLWZsZXgtYWxpZ24tY2VudGVyXCIgW2NsYXNzLnNtZS1wYW5lbC1oZWFkZXItYm9yZGVyLXJhZGl1c109XCJib3JkZXJSYWRpdXNcIlxyXG4gICAgW2NsYXNzLnNtZS1wYW5lbC1oZWFkZXItYm9yZGVyLXJhZGl1cy1vcGVuZWRdPVwiYm9yZGVyUmFkaXVzICYmIG9wZW5lZFwiPlxyXG4gICAgPGRpdiAjYWNjb3JkaW9uUGFuZWxCdXR0b24gW2NsYXNzLnNtZS1mb2N1cy16b25lXT1cImNhbkNsb3NlXCIgW2NsYXNzLnNtZS1wYW5lbC1oZWFkZXItYm9yZGVyLXJhZGl1c109XCJib3JkZXJSYWRpdXNcIlxyXG4gICAgICBbY2xhc3Muc21lLXBhbmVsLWhlYWRlci1ib3JkZXItcmFkaXVzLW9wZW5lZF09XCJib3JkZXJSYWRpdXMgJiYgb3BlbmVkXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhIW9wZW5lZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaGVhZGVyXCIgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uIHNtZS1idXR0b24tYWxpZ24tbGVmdCBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtcGFuZWwtZXhwYW5kZXJcIlxyXG4gICAgICAoY2xpY2spPVwib25Ub2dnbGUoKVwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImNhbkNsb3NlXCIgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1pY29uIHNtZS1wb3NpdGlvbi1zdHJldGNoLXZcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvbkRvd24nOm9wZW5lZCwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6ICFvcGVuZWR9XCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNtZS1hcnJhbmdlLWVsbGlwc2lzIHNtZS1wb3NpdGlvbi1zdHJldGNoLXZcIiBbdGl0bGVdPVwiaGVhZGVyXCI+e3sgaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtcGFuZWwtY29udHJvbFwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic21lLXBhbmVsLWJvZHlcIiAqbmdJZj1cIm9wZW5lZFwiIFtjbGFzcy5zbWUtcGFkZGluZy1pbnNldC1zbV09XCJwYWRkaW5nSW5zZXRcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FormFieldAccessibilityManagerBaseService } from '../form-field-accessibility-manager-base.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../form-field-accessibility-manager-base.service";
5
+ export class ArrayFormFieldAccessibilityManagerService {
6
+ constructor(formFieldAccessibilityManagerBaseService) {
7
+ this.formFieldAccessibilityManagerBaseService = formFieldAccessibilityManagerBaseService;
8
+ this.firstFormFieldInArrayItemSelector = 'sme-accordion sme-accordion-panel:last-of-type input';
9
+ }
10
+ /**
11
+ * It handles the focus when deleting an item from the list.
12
+ * @param value the value for the list.
13
+ * @param addButton the element reference for the add button.
14
+ * @param hostElement the element reference for the host element.
15
+ * @returns void
16
+ */
17
+ delete(value, addButton, hostElement) {
18
+ this.formFieldAccessibilityManagerBaseService.listFormFieldFocusHandlerOnKeyboardActionBySelector(value, addButton, hostElement, this.firstFormFieldInArrayItemSelector);
19
+ }
20
+ /**
21
+ * It handles the focus when adding an item to the list.
22
+ * @param value the value for the list.
23
+ * @param addButton the element reference for the add button.
24
+ * @param hostElement the element reference for the host element.
25
+ * @returns void
26
+ */
27
+ add(value, addButton, hostElement) {
28
+ this.formFieldAccessibilityManagerBaseService.listFormFieldFocusHandlerOnKeyboardActionBySelector(value, addButton, hostElement, this.firstFormFieldInArrayItemSelector);
29
+ }
30
+ /**
31
+ * It handles the focus when promoting an item in the list.
32
+ * @param hostElement The element reference for the host element.
33
+ * @param index the current index.
34
+ */
35
+ promote(value, hostElement, index) {
36
+ this.formFieldAccessibilityManagerBaseService.deferredFocusOnTargetBySelector(value, hostElement,
37
+ // nth means index - 1 + 1 = index
38
+ `sme-accordion sme-accordion-panel:nth-of-type(${index}) button:nth-of-type(2)`);
39
+ }
40
+ /**
41
+ * It handles the focus when demoting an item in the list.
42
+ * @param hostElement The element reference for the host element.
43
+ * @param index the current index.
44
+ */
45
+ demote(value, hostElement, index) {
46
+ this.formFieldAccessibilityManagerBaseService.deferredFocusOnTargetBySelector(value, hostElement,
47
+ // nth means index + 1 + 1 = index + 2
48
+ `sme-accordion sme-accordion-panel:nth-of-type(${index + 2}) button:nth-of-type(3)`);
49
+ }
50
+ }
51
+ /** @nocollapse */ ArrayFormFieldAccessibilityManagerService.ɵfac = function ArrayFormFieldAccessibilityManagerService_Factory(t) { return new (t || ArrayFormFieldAccessibilityManagerService)(i0.ɵɵinject(i1.FormFieldAccessibilityManagerBaseService)); };
52
+ /** @nocollapse */ ArrayFormFieldAccessibilityManagerService.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: ArrayFormFieldAccessibilityManagerService, factory: ArrayFormFieldAccessibilityManagerService.ɵfac, providedIn: 'root' });
53
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldAccessibilityManagerService, [{
54
+ type: Injectable,
55
+ args: [{
56
+ providedIn: 'root'
57
+ }]
58
+ }], function () { return [{ type: i1.FormFieldAccessibilityManagerBaseService }]; }, null); })();
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC1hY2Nlc3NpYmlsaXR5LW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC9hcnJheS9hcnJheS1mb3JtLWZpZWxkLWFjY2Vzc2liaWxpdHktbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sa0RBQWtELENBQUM7OztBQUs1RyxNQUFNLE9BQU8seUNBQXlDO0lBR2xELFlBQXNCLHdDQUFrRjtRQUFsRiw2Q0FBd0MsR0FBeEMsd0NBQXdDLENBQTBDO1FBRnZGLHNDQUFpQyxHQUFHLHNEQUFzRCxDQUFDO0lBRUQsQ0FBQztJQUU1Rzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBWSxFQUFFLFNBQXFCLEVBQUUsV0FBdUI7UUFDdEUsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLG1EQUFtRCxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzdLLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUMsS0FBWSxFQUFFLFNBQXFCLEVBQUUsV0FBdUI7UUFDbkUsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLG1EQUFtRCxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzdLLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLEtBQVksRUFBRSxXQUF1QixFQUFFLEtBQWE7UUFDL0QsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLCtCQUErQixDQUN6RSxLQUFLLEVBQ0wsV0FBVztRQUNYLGtDQUFrQztRQUNsQyxpREFBaUQsS0FBSyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEtBQVksRUFBRSxXQUF1QixFQUFFLEtBQWE7UUFDOUQsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLCtCQUErQixDQUN6RSxLQUFLLEVBQ0wsV0FBVztRQUNYLHNDQUFzQztRQUN0QyxpREFBaUQsS0FBSyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3RixDQUFDOztxSkFuRFEseUNBQXlDOzhIQUF6Qyx5Q0FBeUMsV0FBekMseUNBQXlDLG1CQUZ4QyxNQUFNO3VGQUVQLHlDQUF5QztjQUhyRCxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWFjY2Vzc2liaWxpdHktbWFuYWdlci1iYXNlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaXJzdEZvcm1GaWVsZEluQXJyYXlJdGVtU2VsZWN0b3IgPSAnc21lLWFjY29yZGlvbiBzbWUtYWNjb3JkaW9uLXBhbmVsOmxhc3Qtb2YtdHlwZSBpbnB1dCc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2U6IEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBmb2N1cyB3aGVuIGRlbGV0aW5nIGFuIGl0ZW0gZnJvbSB0aGUgbGlzdC5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoZSBsaXN0LlxyXG4gICAgICogQHBhcmFtIGFkZEJ1dHRvbiB0aGUgZWxlbWVudCByZWZlcmVuY2UgZm9yIHRoZSBhZGQgYnV0dG9uLlxyXG4gICAgICogQHBhcmFtIGhvc3RFbGVtZW50IHRoZSBlbGVtZW50IHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZWxlbWVudC5cclxuICAgICAqIEByZXR1cm5zIHZvaWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZSh2YWx1ZTogYW55W10sIGFkZEJ1dHRvbjogRWxlbWVudFJlZiwgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UubGlzdEZvcm1GaWVsZEZvY3VzSGFuZGxlck9uS2V5Ym9hcmRBY3Rpb25CeVNlbGVjdG9yKHZhbHVlLCBhZGRCdXR0b24sIGhvc3RFbGVtZW50LCB0aGlzLmZpcnN0Rm9ybUZpZWxkSW5BcnJheUl0ZW1TZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBmb2N1cyB3aGVuIGFkZGluZyBhbiBpdGVtIHRvIHRoZSBsaXN0LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBmb3IgdGhlIGxpc3QuXHJcbiAgICAgKiBAcGFyYW0gYWRkQnV0dG9uIHRoZSBlbGVtZW50IHJlZmVyZW5jZSBmb3IgdGhlIGFkZCBidXR0b24uXHJcbiAgICAgKiBAcGFyYW0gaG9zdEVsZW1lbnQgdGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICogQHJldHVybnMgdm9pZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkKHZhbHVlOiBhbnlbXSwgYWRkQnV0dG9uOiBFbGVtZW50UmVmLCBob3N0RWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJCYXNlU2VydmljZS5saXN0Rm9ybUZpZWxkRm9jdXNIYW5kbGVyT25LZXlib2FyZEFjdGlvbkJ5U2VsZWN0b3IodmFsdWUsIGFkZEJ1dHRvbiwgaG9zdEVsZW1lbnQsIHRoaXMuZmlyc3RGb3JtRmllbGRJbkFycmF5SXRlbVNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIGZvY3VzIHdoZW4gcHJvbW90aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QuXHJcbiAgICAgKiBAcGFyYW0gaG9zdEVsZW1lbnQgVGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBjdXJyZW50IGluZGV4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJvbW90ZSh2YWx1ZTogYW55W10sIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlckJhc2VTZXJ2aWNlLmRlZmVycmVkRm9jdXNPblRhcmdldEJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBob3N0RWxlbWVudCxcclxuICAgICAgICAgICAgLy8gbnRoIG1lYW5zIGluZGV4IC0gMSArIDEgPSBpbmRleFxyXG4gICAgICAgICAgICBgc21lLWFjY29yZGlvbiBzbWUtYWNjb3JkaW9uLXBhbmVsOm50aC1vZi10eXBlKCR7aW5kZXh9KSBidXR0b246bnRoLW9mLXR5cGUoMilgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIGZvY3VzIHdoZW4gZGVtb3RpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdC5cclxuICAgICAqIEBwYXJhbSBob3N0RWxlbWVudCBUaGUgZWxlbWVudCByZWZlcmVuY2UgZm9yIHRoZSBob3N0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGN1cnJlbnQgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZW1vdGUodmFsdWU6IGFueVtdLCBob3N0RWxlbWVudDogRWxlbWVudFJlZiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJCYXNlU2VydmljZS5kZWZlcnJlZEZvY3VzT25UYXJnZXRCeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgaG9zdEVsZW1lbnQsXHJcbiAgICAgICAgICAgIC8vIG50aCBtZWFucyBpbmRleCArIDEgKyAxID0gaW5kZXggKyAyXHJcbiAgICAgICAgICAgIGBzbWUtYWNjb3JkaW9uIHNtZS1hY2NvcmRpb24tcGFuZWw6bnRoLW9mLXR5cGUoJHtpbmRleCArIDJ9KSBidXR0b246bnRoLW9mLXR5cGUoMylgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -6,21 +6,23 @@ import { SchemaPrimitiveType } from '../../../schema/schema-models';
6
6
  import { SchemaUtilities } from '../../../schema/schema-utilities';
7
7
  import { SmeInternalFormFieldComponent } from '../form-field.component';
8
8
  import { FormFieldIsolatorComponent } from '../isolator/isolator.component';
9
+ import { ArrayFormFieldAccessibilityManagerService } from './array-form-field-accessibility-manager.service';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@angular/forms";
11
12
  import * as i2 from "../../../schema/schema-field-host.component";
12
13
  import * as i3 from "../form-field-accessor.directive";
13
14
  import * as i4 from "../form-field-validator.directive";
14
15
  import * as i5 from "../form-field-async-validator.directive";
15
- import * as i6 from "../../../accordion/accordion.component";
16
- import * as i7 from "../../../accordion/accordion-panel/accordion-panel.component";
17
- import * as i8 from "@angular/common";
18
- import * as i9 from "../../../../directives/template-outlet/template-outlet.directive";
19
- import * as i10 from "../../../../directives/disabled/disabled.directive";
20
- import * as i11 from "../../../tooltip/tooltip.directive";
21
- import * as i12 from "../../validation-alert/validation-alert.component";
22
- import * as i13 from "../../fieldset/fieldset.directive";
23
- import * as i14 from "../../form-field-layout/form-field-layout.component";
16
+ import * as i6 from "./array-form-field-accessibility-manager.service";
17
+ import * as i7 from "../../../accordion/accordion.component";
18
+ import * as i8 from "../../../accordion/accordion-panel/accordion-panel.component";
19
+ import * as i9 from "@angular/common";
20
+ import * as i10 from "../../../../directives/template-outlet/template-outlet.directive";
21
+ import * as i11 from "../../../../directives/disabled/disabled.directive";
22
+ import * as i12 from "../../../tooltip/tooltip.directive";
23
+ import * as i13 from "../../validation-alert/validation-alert.component";
24
+ import * as i14 from "../../fieldset/fieldset.directive";
25
+ import * as i15 from "../../form-field-layout/form-field-layout.component";
24
26
  const _c0 = ["field"];
25
27
  function ArrayFormFieldLoaderComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
26
28
  i0.ɵɵelement(0, "sme-schema-field-host", 2);
@@ -127,7 +129,6 @@ function ArrayFormFieldComponent_button_4_Template(rf, ctx) { if (rf & 1) {
127
129
  i0.ɵɵtextInterpolate(ctx_r1.addButtonText);
128
130
  } }
129
131
  /* eslint-disable max-len */
130
- /* eslint-enable max-len */
131
132
  export class ArrayFormFieldLoaderComponent extends ArrayPropertySchemaFieldLoaderComponent {
132
133
  askForNewItem($event) {
133
134
  const item = SchemaUtilities.generateDataBasedOnSchemaProperty(this.propertySchema.item);
@@ -196,8 +197,9 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
196
197
  /**
197
198
  * Initializes a new instance of the JsonFormFieldComponent
198
199
  */
199
- constructor(injector) {
200
+ constructor(injector, arrayFormFieldAccessibilityManagerService) {
200
201
  super(injector);
202
+ this.arrayFormFieldAccessibilityManagerService = arrayFormFieldAccessibilityManagerService;
201
203
  /**
202
204
  * When no "newItem" is provided. This output will be called anytime a new item is required.
203
205
  */
@@ -283,35 +285,19 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
283
285
  */
284
286
  add() {
285
287
  const item = this.getNewItem();
286
- const index = this.value.length;
287
288
  this.value.push(item);
288
289
  this.triggerValueChange();
289
- setTimeout(() => {
290
- const itemId = this.getItemAriaId(index, 'itemContainer');
291
- const itemContainer = document.getElementById(itemId);
292
- const firstInput = itemContainer.querySelector('input');
293
- if (firstInput) {
294
- firstInput.focus();
295
- }
296
- itemContainer.scrollIntoView({ behavior: 'smooth', block: 'center' });
297
- });
290
+ this.arrayFormFieldAccessibilityManagerService.add(this.value, this.addButton, this.hostElement);
298
291
  }
299
292
  /**
300
293
  * Deletes an item from the array
301
294
  */
302
295
  delete(item) {
303
296
  const index = this.value.indexOf(item);
304
- // return the view to the previous item in the list.
305
- const prevItemId = this.getItemAriaId(index - 1, 'itemContainer');
306
- const prevContainer = document.getElementById(prevItemId);
307
- if (prevContainer) {
308
- prevContainer.scrollIntoView({ behavior: 'smooth', block: 'center' });
309
- }
310
- // focus on the add button, otherwise focus is reset to the beginning of the page
311
- this.addButton.nativeElement.focus();
312
297
  this.value.splice(index, 1);
313
298
  this.triggerValueChange();
314
299
  this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.removeButtonEvent);
300
+ this.arrayFormFieldAccessibilityManagerService.delete(this.value, this.addButton, this.hostElement);
315
301
  }
316
302
  /**
317
303
  * Decreases the index of an item by 1
@@ -323,6 +309,7 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
323
309
  this.value[index] = { ...this.value[index - 1] };
324
310
  this.value[index - 1] = temp;
325
311
  this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonEvent);
312
+ this.arrayFormFieldAccessibilityManagerService.promote(this.value, this.hostElement, index);
326
313
  }
327
314
  else {
328
315
  this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonPreventedEvent);
@@ -338,6 +325,7 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
338
325
  this.value[index] = { ...this.value[index + 1] };
339
326
  this.value[index + 1] = temp;
340
327
  this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonEvent);
328
+ this.arrayFormFieldAccessibilityManagerService.demote(this.value, this.hostElement, index);
341
329
  }
342
330
  else {
343
331
  this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonPreventedEvent);
@@ -417,7 +405,7 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
417
405
  }
418
406
  }
419
407
  };
420
- /** @nocollapse */ ArrayFormFieldComponent.ɵfac = function ArrayFormFieldComponent_Factory(t) { return new (t || ArrayFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
408
+ /** @nocollapse */ ArrayFormFieldComponent.ɵfac = function ArrayFormFieldComponent_Factory(t) { return new (t || ArrayFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i6.ArrayFormFieldAccessibilityManagerService)); };
421
409
  /** @nocollapse */ ArrayFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ArrayFormFieldComponent, selectors: [["sme-form-field", "type", "array"]], contentQueries: function ArrayFormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
422
410
  i0.ɵɵcontentQuery(dirIndex, FormFieldIsolatorComponent, 7);
423
411
  } if (rf & 2) {
@@ -452,7 +440,7 @@ let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalF
452
440
  i0.ɵɵproperty("alert", ctx.alert);
453
441
  i0.ɵɵadvance(2);
454
442
  i0.ɵɵtextInterpolate(ctx.screenReaderEvent);
455
- } }, dependencies: [i6.AccordionComponent, i7.AccordionPanelComponent, i7.PanelControlComponent, i8.NgForOf, i8.NgIf, i9.TemplateOutletDirective, i10.DisabledDirective, i11.TooltipDirective, i12.ValidationAlertComponent, i13.FieldsetDirective, i14.FormFieldLayoutComponent], encapsulation: 2 });
443
+ } }, dependencies: [i7.AccordionComponent, i8.AccordionPanelComponent, i8.PanelControlComponent, i9.NgForOf, i9.NgIf, i10.TemplateOutletDirective, i11.DisabledDirective, i12.TooltipDirective, i13.ValidationAlertComponent, i14.FieldsetDirective, i15.FormFieldLayoutComponent], encapsulation: 2 });
456
444
  ArrayFormFieldComponent = __decorate([
457
445
  SmeSchemaProperty({
458
446
  type: SchemaPrimitiveType.Array,
@@ -461,13 +449,14 @@ ArrayFormFieldComponent = __decorate([
461
449
  description: `A form field control binding to array data.`,
462
450
  loaderComponent: ArrayFormFieldLoaderComponent
463
451
  }),
464
- __metadata("design:paramtypes", [Injector])
452
+ __metadata("design:paramtypes", [Injector,
453
+ ArrayFormFieldAccessibilityManagerService])
465
454
  ], ArrayFormFieldComponent);
466
455
  export { ArrayFormFieldComponent };
467
456
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldComponent, [{
468
457
  type: Component,
469
- args: [{ selector: 'sme-form-field[type="array"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n\r\n <div class=\"sme-array\">\r\n <sme-accordion [canCloseAny]=\"canCloseAny\" [canCloseAll]=\"canCloseAll\" [canOpenMultiple]=\"canOpenMultiple\">\r\n <sme-accordion-panel *ngFor=\"let item of value; let i = index\" [header]=\"getItemTitle(item, i)\" [isExpandable]=\"false\" [attr.data-uta-id]=\"'array-form-field-item-' + i\">\r\n <sme-panel-control>\r\n <ng-container *ngIf=\"headerTemplate\" smeTemplateOutlet [template]=\"headerTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'itemHeader')}\"></ng-container>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip\" (click)=\"moveUp(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip\" (click)=\"moveDown(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"getShowRemove(item, i)\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip\" (click)=\"delete(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-delete sme-color-red\"></span>\r\n </button>\r\n </sme-panel-control>\r\n\r\n <span class=\"sme-screen-reader\" [id]=\"getItemAriaId(i, 'item')\">{{itemTitle}}</span>\r\n <fieldset [attr.aria-labelledby]=\"getItemAriaId(i, 'item')\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-lg sme-array-item\"\r\n [class.sme-subform-indent-none]=\"orientation==='horizontal'\">\r\n\r\n <div class=\"sme-position-flex-auto sme-padding-inset-md\" [id]=\"getItemAriaId(i, 'itemContainer')\">\r\n <ng-container smeTemplateOutlet [template]=\"itemTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'item')}\"></ng-container>\r\n </div>\r\n </fieldset>\r\n\r\n </sme-accordion-panel>\r\n </sme-accordion>\r\n\r\n <button #addButton *ngIf=\"showAdd\" type=\"button\" data-uta-id=\"add-button\"\r\n [smeDisabled]=\"loadingOrDisabled || (maxItems !== -1 && value.length >= maxItems)\"\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.Array.addButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip\" (click)=\"add()\">{{addButtonText}}</button>\r\n </div>\r\n\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n <div class=\"sme-screen-reader\" aria-live=\"assertive\" aria-relevant=\"all\">{{screenReaderEvent}}</div>\r\n</sme-form-field-layout>\r\n" }]
470
- }], function () { return [{ type: i0.Injector }]; }, { subFieldIsolator: [{
458
+ args: [{ selector: 'sme-form-field[type="array"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-array\">\r\n <sme-accordion [canCloseAny]=\"canCloseAny\" [canCloseAll]=\"canCloseAll\" [canOpenMultiple]=\"canOpenMultiple\">\r\n <sme-accordion-panel *ngFor=\"let item of value; let i = index\" [header]=\"getItemTitle(item, i)\" [isExpandable]=\"false\" [attr.data-uta-id]=\"'array-form-field-item-' + i\">\r\n <sme-panel-control>\r\n <ng-container *ngIf=\"headerTemplate\" smeTemplateOutlet [template]=\"headerTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'itemHeader')}\"></ng-container>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip\" (click)=\"moveUp(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip\" (click)=\"moveDown(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"getShowRemove(item, i)\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip\" (click)=\"delete(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-delete sme-color-red\"></span>\r\n </button>\r\n </sme-panel-control>\r\n <span class=\"sme-screen-reader\" [id]=\"getItemAriaId(i, 'item')\">{{itemTitle}}</span>\r\n <fieldset [attr.aria-labelledby]=\"getItemAriaId(i, 'item')\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-lg sme-array-item\"\r\n [class.sme-subform-indent-none]=\"orientation==='horizontal'\">\r\n <div class=\"sme-position-flex-auto sme-padding-inset-md\" [id]=\"getItemAriaId(i, 'itemContainer')\">\r\n <ng-container smeTemplateOutlet [template]=\"itemTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'item')}\"></ng-container>\r\n </div>\r\n </fieldset>\r\n </sme-accordion-panel>\r\n </sme-accordion>\r\n <button #addButton *ngIf=\"showAdd\" type=\"button\" data-uta-id=\"add-button\"\r\n [smeDisabled]=\"loadingOrDisabled || (maxItems !== -1 && value.length >= maxItems)\"\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.Array.addButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip\" (click)=\"add()\">{{addButtonText}}</button>\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n <div class=\"sme-screen-reader\" aria-live=\"assertive\" aria-relevant=\"all\">{{screenReaderEvent}}</div>\r\n</sme-form-field-layout>\r\n" }]
459
+ }], function () { return [{ type: i0.Injector }, { type: i6.ArrayFormFieldAccessibilityManagerService }]; }, { subFieldIsolator: [{
471
460
  type: ContentChild,
472
461
  args: [FormFieldIsolatorComponent, { static: true }]
473
462
  }], askForNewItem: [{
@@ -507,4 +496,4 @@ export { ArrayFormFieldComponent };
507
496
  type: ViewChild,
508
497
  args: ['addButton']
509
498
  }] }); })();
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEyQjVFLDJDQUMrRDs7OztJQUR4QywyREFBc0MsMkJBQUEsa0JBQUE7Ozs7OztJQzFDL0QsNEJBQ3NGOzs7Ozs7SUFEL0IsZ0RBQTJCLGlCQUFBLHdGQUFBOzs7O0lBRWxGLGtDQUlpRTtJQURRLDRPQUFTLGVBQUEsc0JBQVksQ0FBQSxJQUFDO0lBRTdGLDJCQUEwQztJQUM1QyxpQkFBUzs7O0lB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QixNQUFNO1lBS0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBS0EscUJBQXFCO2tCQUQzQixNQUFNO1lBT0EsMkJBQTJCO2tCQURqQyxLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUssU0FBUztrQkFEbkIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCO1lBV3RCLFNBQVM7a0JBRGhCLFNBQVM7bUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vaXNvbGF0b3IvaXNvbGF0b3IuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9yTmV3SXRlbUV2ZW50QXJncyB7XHJcbiAgICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9ySXRlbUhlYWRlckFyZ3Mge1xyXG4gICAgaGVhZGVyRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzIHtcclxuICAgIHJlbW92ZUV2YWxGdW5jOiBNc2Z0U21lLkZ1bmMyPGFueSwgbnVtYmVyLCBib29sZWFuPjtcclxufVxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8c21lLWZvcm0tZmllbGQgI2ZpZWxkIHR5cGU9XCJhcnJheVwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHlTY2hlbWEucmVxdWlyZWRcIiBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgKGFza0Zvck5ld0l0ZW0pPVwiYXNrRm9yTmV3SXRlbSgkZXZlbnQpXCJcclxuICAgICAgICBbYWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uXT1cInNob3VsZEFkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbigpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW1vZGVsPlxyXG4gICAgICAgICAgICA8c21lLXNjaGVtYS1maWVsZC1ob3N0IFtwcm9wZXJ0eVNjaGVtYV09XCJwcm9wZXJ0eVNjaGVtYS5pdGVtXCJcclxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIiBbZGF0YV09XCJtb2RlbFwiPjwvc21lLXNjaGVtYS1maWVsZC1ob3N0PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cclxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgQXJyYXlQcm9wZXJ0eVNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpZWxkJylcclxuICAgIHByaXZhdGUgYXJyYXlGb3JtRmllbGRDb21wb25lbnQ6IEFycmF5Rm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIHB1YmxpYyBhc2tGb3JOZXdJdGVtKCRldmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBTY2hlbWFVdGlsaXRpZXMuZ2VuZXJhdGVEYXRhQmFzZWRPblNjaGVtYVByb3BlcnR5KHRoaXMucHJvcGVydHlTY2hlbWEuaXRlbSk7XHJcbiAgICAgICAgJGV2ZW50Lml0ZW0gPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG91bGRBZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgaXRlbVByb3BlcnR5U2NoZW1hID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PnRoaXMucHJvcGVydHlTY2hlbWEuaXRlbTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gISEodGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtLmxhYmVsIHx8IHRoaXMucHJvcGVydHlTY2hlbWEuaXRlbS5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbHVtbkNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCA9IGl0ZW1Qcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbHVtbkNvdW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQgJiYgaSA8IGl0ZW1Qcm9wZXJ0eVNjaGVtYS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXNbaV0ubGFiZWwgfHwgaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXNbaV0uZGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY2Nlc3NpYmxlIEltcGxlbWVudGF0aW9uIG9mIGEgZm9ybSBmaWVsZCBmb3IgLnNtZS1hcnJheVxyXG4gKi9cclxuQFNtZVNjaGVtYVByb3BlcnR5KHtcclxuICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXksXHJcbiAgICBmb3JtYXQ6ICdzaW1wbGUtbGlzdCcsXHJcbiAgICBpc0RlZmF1bHRGb3JtYXQ6IHRydWUsXHJcbiAgICBkZXNjcmlwdGlvbjogYEEgZm9ybSBmaWVsZCBjb250cm9sIGJpbmRpbmcgdG8gYXJyYXkgZGF0YS5gLFxyXG4gICAgbG9hZGVyQ29tcG9uZW50OiBBcnJheUZvcm1GaWVsZExvYWRlckNvbXBvbmVudFxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImFycmF5XCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcnJheS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudDxhbnlbXT4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSBfaXRlbVRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0FycmF5Rm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGl0ZW0gdGVtcGxhdGUgZnJvbSBlaXRoZXIgdGhlIHN1YkZvcm1UZW1wbGF0ZSBvciBzdWJGaWVsZElzb2xhdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy5zdWJGaWVsZElzb2xhdG9yICYmIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdWJGaWVsZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YkZpZWxkSXNvbGF0b3Iuc3ViRmllbGRUZW1wbGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViRm9ybVRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcHJvdmlkZWQsIHRoZSBzdWIgZmllbGQgaXNvbGF0b3IgcHJldmVudHMgY2hpbGQgbmdtb2RlbHMgZnJvbSByZWdpc3RlcmluZyB3aXRoIHRoZSBmb3JtLlxyXG4gICAgICogSW5zdGVhZCwgd2Ugd2lsbCB1c2UgaXQgdG8gbWFuYWdlIG91ciBvd24gdmFsaWRpdHlcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChGb3JtRmllbGRJc29sYXRvckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIHB1YmxpYyBzdWJGaWVsZElzb2xhdG9yOiBGb3JtRmllbGRJc29sYXRvckNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gbm8gXCJuZXdJdGVtXCIgaXMgcHJvdmlkZWQuIFRoaXMgb3V0cHV0IHdpbGwgYmUgY2FsbGVkIGFueXRpbWUgYSBuZXcgaXRlbSBpcyByZXF1aXJlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9yTmV3SXRlbTogRXZlbnRFbWl0dGVyPEFza0Zvck5ld0l0ZW1FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxBc2tGb3JOZXdJdGVtRXZlbnRBcmdzPigpO1xyXG5cclxuICAgIC8vIEV2ZW50IHVzZWQgdG8gcHJvdmlkZSBhIGN1c3RvbSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBpbmRpdmlkdWFsIGl0ZW0gaGVhZGVyc1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9ySXRlbUhlYWRlcjogRXZlbnRFbWl0dGVyPEFza0Zvckl0ZW1IZWFkZXJBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QXNrRm9ySXRlbUhlYWRlckFyZ3M+KCk7XHJcblxyXG4gICAgLy8gRXZlbnQgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgZXZhbHVhdGVzIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIGluZGl2aWR1YWwgcmVtb3ZlIGJ1dHRvbnNcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGFza0ZvclJlbW92ZUV2YWx1YXRvcjogRXZlbnRFbWl0dGVyPEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBhcnJheSBpdGVtIGJ1dHRvbiBsb2NhdGlvbnMgc2hvdWxkIGJlIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIG5vIGl0ZW0gbGFiZWwuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgZ2VuZXJhdGluZyBhIG5ldyBpdGVtIGZyb20gYW4gZXhpc3Rpbmcgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbmV3SXRlbTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBhZGQgYW5kIHJlbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dBZGQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJlbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93biBmb3IgYWxsIGl0ZW1zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd1JlbW92ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgbW92ZSBhY3Rpb25zIHNob3VsZCBiZSBzaG93blxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dNb3ZlOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuQ2xvc2VBbGw6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5DbG9zZUFueTogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNhbk9wZW5NdWx0aXBsZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heEl0ZW1zOiBudW1iZXI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGRCdXR0b25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBpdGVtVGl0bGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1UaXRsZSA9IGAke3ZhbHVlfSB7MH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXRlbVRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UaXRsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhcmlhIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGFyaWFMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lcmdlZERlc2NyaXB0aW9uTGFiZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gdXBkYXRlZCwgdGhlIHNjcmVlbiByZWFkZXIgd2lsbCBhbm5vdW5jZSB0aGlzIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2NyZWVuUmVhZGVyRXZlbnQ6IHN0cmluZztcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhZGRCdXR0b24nKVxyXG4gICAgcHJpdmF0ZSBhZGRCdXR0b246IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgSnNvbkZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnNob3dBZGQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1JlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXhJdGVtcyA9IC0xO1xyXG4gICAgICAgIHRoaXMuc2hvd01vdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FuQ2xvc2VBbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FuQ2xvc2VBbnkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhbk9wZW5NdWx0aXBsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRCdXR0b25UZXh0ID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uYWRkO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1UaXRsZSA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5pdGVtVGl0bGU7XHJcbiAgICAgICAgdGhpcy5zY3JlZW5SZWFkZXJFdmVudCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZ3JvdXAnKTtcclxuICAgICAgICBpZiAodGhpcy5zdWJGaWVsZElzb2xhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJGaWVsZElzb2xhdG9yLnN0YXR1c0NoYW5nZWQuc3Vic2NyaWJlKChzdGF0dXM6IEZvcm1TdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUGVuZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy50b3VjaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIGEgaGlkZGVuIGFyaWEtbGl2ZSByZWdpb24gd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2VzIHRvIHRoZSBwYWdlOyBpZiB0aGUgc2FtZSBldmVudCBpcyBiZWluZyByZXBlYXRlZCwgdGhlIGV2ZW50IHN0cmluZ1xyXG4gICAgICogaXMgc2V0IGluIGxvd2VyY2FzZSwgc28gdGhlIHNjcmVlbiByZWFkZXIgdGhpbmtzIGl0J3MgYSBuZXcgc3RyaW5nLiBDbGVhcmluZyBhbmQgcmUtc2V0dGluZyB0aGUgZmllbGQgZG9lcyBub3QgcHJvbXB0IHRoZSBzY3JlZW5cclxuICAgICAqIHJlYWRlciB0byByZWFkIHRoZSBhcmlhLWxpdmUgcmVnaW9uLlxyXG4gICAgICogQHBhcmFtIGV2ZW50IHRoZSBzdHJpbmcgdG8gYmUgYW5ub3VuY2VkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQoZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NyZWVuUmVhZGVyRXZlbnQgPSBldmVudCA9PT0gdGhpcy5zY3JlZW5SZWFkZXJFdmVudCA/IGV2ZW50LnRvTG9jYWxlTG93ZXJDYXNlKCkgOiBldmVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gaXRlbSB0byB0aGUgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXROZXdJdGVtKCk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnZhbHVlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVDaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUFyaWFJZChpbmRleCwgJ2l0ZW1Db250YWluZXInKTtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW1JZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXJzdElucHV0ID0gPEhUTUxFbGVtZW50Pml0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaXJzdElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdElucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW1Db250YWluZXIuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZXMgYW4gaXRlbSBmcm9tIHRoZSBhcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlKGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5pbmRleE9mKGl0ZW0pO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gdGhlIHZpZXcgdG8gdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIGxpc3QuXHJcbiAgICAgICAgY29uc3QgcHJldkl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUFyaWFJZChpbmRleCAtIDEsICdpdGVtQ29udGFpbmVyJyk7XHJcbiAgICAgICAgY29uc3QgcHJldkNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZXZJdGVtSWQpO1xyXG5cclxuICAgICAgICBpZiAocHJldkNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBwcmV2Q29udGFpbmVyLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmb2N1cyBvbiB0aGUgYWRkIGJ1dHRvbiwgb3RoZXJ3aXNlIGZvY3VzIGlzIHJlc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2VcclxuICAgICAgICB0aGlzLmFkZEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJWYWx1ZUNoYW5nZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucmVtb3ZlQnV0dG9uRXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjcmVhc2VzIHRoZSBpbmRleCBvZiBhbiBpdGVtIGJ5IDFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVVcChpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSB7IC4uLnRoaXMudmFsdWVbaW5kZXggLSAxXSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4IC0gMV0gPSB0ZW1wO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnByb21vdGVCdXR0b25FdmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JlZW5SZWFkZXJFdmVudCh0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uUHJldmVudGVkRXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluY3JlYXNlcyB0aGUgaW5kZXggb2YgYW4gaXRlbSBieSAxXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlRG93bihpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLnZhbHVlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IHsgLi4udGhpcy52YWx1ZVtpbmRleCArIDFdIH07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXggKyAxXSA9IHRlbXA7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuZGVtb3RlQnV0dG9uRXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuZGVtb3RlQnV0dG9uUHJldmVudGVkRXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSA8c2VsZWN0PiBlbGVtZW50J3MgdmFsdWUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyaWdnZXJWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJdGVtQXJpYUlkKGluZGV4OiBudW1iZXIsIGlkTmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBzd2l0Y2ggKGlkTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmlkQmFnWydpdGVtJ119LSR7aW5kZXh9YDtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbUhlYWRlcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pZEJhZ1snaXRlbSddfS1oZWFkZXItJHtpbmRleH1gO1xyXG4gICAgICAgICAgICBjYXNlICdpdGVtQ29udGFpbmVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmlkQmFnWydpdGVtJ119LWNvbnRhaW5lci0ke2luZGV4fWA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbVRpdGxlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQ6IEFza0Zvckl0ZW1IZWFkZXJBcmdzID0geyBoZWFkZXJFdmFsRnVuYzogbnVsbCB9O1xyXG4gICAgICAgIHRoaXMuYXNrRm9ySXRlbUhlYWRlci5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LmhlYWRlckV2YWxGdW5jID8gZXZlbnQuaGVhZGVyRXZhbEZ1bmMoaXRlbSwgaW5kZXgpIDogdGhpcy5pdGVtVGl0bGUuZm9ybWF0KGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2hvd1JlbW92ZShpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBldmVudDogQXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzID0geyByZW1vdmVFdmFsRnVuYzogbnVsbCB9O1xyXG4gICAgICAgIHRoaXMuYXNrRm9yUmVtb3ZlRXZhbHVhdG9yLmVtaXQoZXZlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZXZlbnQucmVtb3ZlRXZhbEZ1bmMgPyBldmVudC5yZW1vdmVFdmFsRnVuYyhpdGVtLCBpbmRleCkgOiB0aGlzLnNob3dSZW1vdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zdWJGaWVsZElzb2xhdG9yICYmICF0aGlzLnN1YkZpZWxkSXNvbGF0b3IuaXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaW52YWxpZFN1YkZpZWxkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi4gc3VwZXIuY3JlYXRlSWRCYWcoKSxcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnLFxyXG4gICAgICAgICAgICBpdGVtOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBuZXcgaXRlbSB0byBiZSBhZGRlZCB0byB0aGUgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXROZXdJdGVtKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3SXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTXNmdFNtZS5kZWVwQ29weSh0aGlzLm5ld0l0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzID0geyBpdGVtOiBudWxsIH07XHJcbiAgICAgICAgICAgIHRoaXMuYXNrRm9yTmV3SXRlbS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lml0ZW0gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYXlcIj5cclxuICAgIDxzbWUtYWNjb3JkaW9uIFtjYW5DbG9zZUFueV09XCJjYW5DbG9zZUFueVwiIFtjYW5DbG9zZUFsbF09XCJjYW5DbG9zZUFsbFwiIFtjYW5PcGVuTXVsdGlwbGVdPVwiY2FuT3Blbk11bHRpcGxlXCI+XHJcbiAgICAgIDxzbWUtYWNjb3JkaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4XCIgW2hlYWRlcl09XCJnZXRJdGVtVGl0bGUoaXRlbSwgaSlcIiBbaXNFeHBhbmRhYmxlXT1cImZhbHNlXCIgW2F0dHIuZGF0YS11dGEtaWRdPVwiJ2FycmF5LWZvcm0tZmllbGQtaXRlbS0nICsgaVwiPlxyXG4gICAgICAgIDxzbWUtcGFuZWwtY29udHJvbD5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiIFtkYXRhXT1cIml0ZW1cIiBob3N0RGF0YU5hbWU9XCJjb250ZXh0XCJcclxuICAgICAgICAgICAgW2hvc3REYXRhXT1cIntpbmRleDogaSwgYXJpYUxhYmVsSWQ6IGdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW1IZWFkZXInKX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5wcm9tb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJtb3ZlVXAoaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIiBkYXRhLXV0YS1pZD1cInByb21vdGUtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tdXBcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93TW92ZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5kZW1vdGVCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwibW92ZURvd24oaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIiBkYXRhLXV0YS1pZD1cImRlbW90ZS1idXR0b25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZ2V0U2hvd1JlbW92ZShpdGVtLCBpKVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWZvcm0tZmllbGQtaGVpZ2h0IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHNcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5yZW1vdmVCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiZGVsZXRlKGl0ZW0pXCJcclxuICAgICAgICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCIgZGF0YS11dGEtaWQ9XCJyZW1vdmUtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tZGVsZXRlIHNtZS1jb2xvci1yZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NtZS1wYW5lbC1jb250cm9sPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKVwiPnt7aXRlbVRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgPGZpZWxkc2V0IFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJnZXRJdGVtQXJpYUlkKGksICdpdGVtJylcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1tYXJnaW4tYm90dG9tLWxnIHNtZS1hcnJheS1pdGVtXCJcclxuICAgICAgICAgIFtjbGFzcy5zbWUtc3ViZm9ybS1pbmRlbnQtbm9uZV09XCJvcmllbnRhdGlvbj09PSdob3Jpem9udGFsJ1wiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWluc2V0LW1kXCIgW2lkXT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW1Db250YWluZXInKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJpdGVtXCIgaG9zdERhdGFOYW1lPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hvc3REYXRhXT1cIntpbmRleDogaSwgYXJpYUxhYmVsSWQ6IGdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgICA8L3NtZS1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICA8L3NtZS1hY2NvcmRpb24+XHJcblxyXG4gICAgPGJ1dHRvbiAjYWRkQnV0dG9uICpuZ0lmPVwic2hvd0FkZFwiIHR5cGU9XCJidXR0b25cIiBkYXRhLXV0YS1pZD1cImFkZC1idXR0b25cIlxyXG4gICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgfHwgKG1heEl0ZW1zICE9PSAtMSAmJiB2YWx1ZS5sZW5ndGggPj0gbWF4SXRlbXMpXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1pY29uIHNtZS1pY29uLWFkZCBzbWUtbWFyZ2luLWJvdHRvbS14c1wiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmFkZEJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuYWRkQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJhZGQoKVwiPnt7YWRkQnV0dG9uVGV4dH19PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtcmVsZXZhbnQ9XCJhbGxcIj57e3NjcmVlblJlYWRlckV2ZW50fX08L2Rpdj5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkJqRywyQ0FDK0Q7Ozs7SUFEeEMsMkRBQXNDLDJCQUFBLGtCQUFBOzs7Ozs7SUM1Qy9ELDRCQUNzRjs7Ozs7O0lBRC9CLGdEQUEyQixpQkFBQSx3RkFBQTs7OztJQUVsRixrQ0FJaUU7SUFEUSw0T0FBUyxlQUFB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S0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUssU0FBUztrQkFEbkIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCO1lBV3RCLFNBQVM7a0JBRGhCLFNBQVM7bUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vaXNvbGF0b3IvaXNvbGF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL2FycmF5LWZvcm0tZmllbGQtYWNjZXNzaWJpbGl0eS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzIHtcclxuICAgIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JJdGVtSGVhZGVyQXJncyB7XHJcbiAgICBoZWFkZXJFdmFsRnVuYzogTXNmdFNtZS5GdW5jMjxhbnksIG51bWJlciwgc3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3Mge1xyXG4gICAgcmVtb3ZlRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIGJvb2xlYW4+O1xyXG59XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImFycmF5XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZFwiIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiAoYXNrRm9yTmV3SXRlbSk9XCJhc2tGb3JOZXdJdGVtKCRldmVudClcIlxyXG4gICAgICAgIFthZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb25dPVwic2hvdWxkQWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uKClcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbW9kZWw+XHJcbiAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZpZWxkLWhvc3QgW3Byb3BlcnR5U2NoZW1hXT1cInByb3BlcnR5U2NoZW1hLml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiIFtkYXRhXT1cIm1vZGVsXCI+PC9zbWUtc2NoZW1hLWZpZWxkLWhvc3Q+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICBgXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtRmllbGRMb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG4gICAgQFZpZXdDaGlsZCgnZmllbGQnKVxyXG4gICAgcHJpdmF0ZSBhcnJheUZvcm1GaWVsZENvbXBvbmVudDogQXJyYXlGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgcHVibGljIGFza0Zvck5ld0l0ZW0oJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IFNjaGVtYVV0aWxpdGllcy5nZW5lcmF0ZURhdGFCYXNlZE9uU2NoZW1hUHJvcGVydHkodGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtKTtcclxuICAgICAgICAkZXZlbnQuaXRlbSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3VsZEFkanVzdENvbnRyb2xCdXR0b25Mb2NhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpdGVtUHJvcGVydHlTY2hlbWEgPSA8U2NoZW1hT2JqZWN0UHJvcGVydHk+dGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAhISh0aGlzLnByb3BlcnR5U2NoZW1hLml0ZW0ubGFiZWwgfHwgdGhpcy5wcm9wZXJ0eVNjaGVtYS5pdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBsZXQgY29sdW1uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sdW1uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50ID0gaXRlbVByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sdW1uQ291bnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudCAmJiBpIDwgaXRlbVByb3BlcnR5U2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtUHJvcGVydHlTY2hlbWEucHJvcGVydGllc1tpXS5sYWJlbCB8fCBpdGVtUHJvcGVydHlTY2hlbWEucHJvcGVydGllc1tpXS5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEFjY2Vzc2libGUgSW1wbGVtZW50YXRpb24gb2YgYSBmb3JtIGZpZWxkIGZvciAuc21lLWFycmF5XHJcbiAqL1xyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5BcnJheSxcclxuICAgIGZvcm1hdDogJ3NpbXBsZS1saXN0JyxcclxuICAgIGlzRGVmYXVsdEZvcm1hdDogdHJ1ZSxcclxuICAgIGRlc2NyaXB0aW9uOiBgQSBmb3JtIGZpZWxkIGNvbnRyb2wgYmluZGluZyB0byBhcnJheSBkYXRhLmAsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IEFycmF5Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50XHJcbn0pXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiYXJyYXlcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FycmF5LWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcnJheUZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PGFueVtdPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwcml2YXRlIF9pdGVtVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnQXJyYXlGb3JtRmllbGRDb21wb25lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaXRlbSB0ZW1wbGF0ZSBmcm9tIGVpdGhlciB0aGUgc3ViRm9ybVRlbXBsYXRlIG9yIHN1YkZpZWxkSXNvbGF0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXRlbVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnN1YkZpZWxkSXNvbGF0b3IgJiYgdGhpcy5zdWJGaWVsZElzb2xhdG9yLnN1YkZpZWxkVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdWJGaWVsZFRlbXBsYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdWJGb3JtVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBwcm92aWRlZCwgdGhlIHN1YiBmaWVsZCBpc29sYXRvciBwcmV2ZW50cyBjaGlsZCBuZ21vZGVscyBmcm9tIHJlZ2lzdGVyaW5nIHdpdGggdGhlIGZvcm0uXHJcbiAgICAgKiBJbnN0ZWFkLCB3ZSB3aWxsIHVzZSBpdCB0byBtYW5hZ2Ugb3VyIG93biB2YWxpZGl0eVxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIHN1YkZpZWxkSXNvbGF0b3I6IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBubyBcIm5ld0l0ZW1cIiBpcyBwcm92aWRlZC4gVGhpcyBvdXRwdXQgd2lsbCBiZSBjYWxsZWQgYW55dGltZSBhIG5ldyBpdGVtIGlzIHJlcXVpcmVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhc2tGb3JOZXdJdGVtOiBFdmVudEVtaXR0ZXI8QXNrRm9yTmV3SXRlbUV2ZW50QXJncz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFza0Zvck5ld0l0ZW1FdmVudEFyZ3M+KCk7XHJcblxyXG4gICAgLy8gRXZlbnQgdXNlZCB0byBwcm92aWRlIGEgY3VzdG9tIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIGluZGl2aWR1YWwgaXRlbSBoZWFkZXJzXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhc2tGb3JJdGVtSGVhZGVyOiBFdmVudEVtaXR0ZXI8QXNrRm9ySXRlbUhlYWRlckFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxBc2tGb3JJdGVtSGVhZGVyQXJncz4oKTtcclxuXHJcbiAgICAvLyBFdmVudCB1c2VkIHRvIHByb3ZpZGUgYSBjdXN0b20gZnVuY3Rpb24gdGhhdCBldmFsdWF0ZXMgd2hldGhlciB0byBzaG93IG9yIGhpZGUgaW5kaXZpZHVhbCByZW1vdmUgYnV0dG9uc1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYXNrRm9yUmVtb3ZlRXZhbHVhdG9yOiBFdmVudEVtaXR0ZXI8QXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QXNrRm9yUmVtb3ZlRXZhbEZ1bmNBcmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGFycmF5IGl0ZW0gYnV0dG9uIGxvY2F0aW9ucyBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3Igbm8gaXRlbSBsYWJlbC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIElucHV0IGZvciBnZW5lcmF0aW5nIGEgbmV3IGl0ZW0gZnJvbSBhbiBleGlzdGluZyBvYmplY3RcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBuZXdJdGVtOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFkZCBhbmQgcmVtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0FkZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcmVtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duIGZvciBhbGwgaXRlbXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93UmVtb3ZlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBtb3ZlIGFjdGlvbnMgc2hvdWxkIGJlIHNob3duXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd01vdmU6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5DbG9zZUFsbDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNhbkNsb3NlQW55OiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuT3Blbk11bHRpcGxlOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWF4SXRlbXM6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFkZEJ1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGl0ZW1UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbVRpdGxlID0gYCR7dmFsdWV9IHswfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpdGVtVGl0bGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbVRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcclxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB1cGRhdGVkLCB0aGUgc2NyZWVuIHJlYWRlciB3aWxsIGFubm91bmNlIHRoaXMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JlZW5SZWFkZXJFdmVudDogc3RyaW5nO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2FkZEJ1dHRvbicpXHJcbiAgICBwcml2YXRlIGFkZEJ1dHRvbjogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBKc29uRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcm90ZWN0ZWQgYXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2U6IEFycmF5Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5zaG93QWRkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dSZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4SXRlbXMgPSAtMTtcclxuICAgICAgICB0aGlzLnNob3dNb3ZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbkNsb3NlQWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbkNsb3NlQW55ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYW5PcGVuTXVsdGlwbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkQnV0dG9uVGV4dCA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmFkZDtcclxuICAgICAgICB0aGlzLl9pdGVtVGl0bGUgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuaXRlbVRpdGxlO1xyXG4gICAgICAgIHRoaXMuc2NyZWVuUmVhZGVyRXZlbnQgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3ViRmllbGRJc29sYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ViRmllbGRJc29sYXRvci5zdGF0dXNDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1BlbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudG91Y2hlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBhIGhpZGRlbiBhcmlhLWxpdmUgcmVnaW9uIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyB0byB0aGUgcGFnZTsgaWYgdGhlIHNhbWUgZXZlbnQgaXMgYmVpbmcgcmVwZWF0ZWQsIHRoZSBldmVudCBzdHJpbmdcclxuICAgICAqIGlzIHNldCBpbiBsb3dlcmNhc2UsIHNvIHRoZSBzY3JlZW4gcmVhZGVyIHRoaW5rcyBpdCdzIGEgbmV3IHN0cmluZy4gQ2xlYXJpbmcgYW5kIHJlLXNldHRpbmcgdGhlIGZpZWxkIGRvZXMgbm90IHByb21wdCB0aGUgc2NyZWVuXHJcbiAgICAgKiByZWFkZXIgdG8gcmVhZCB0aGUgYXJpYS1saXZlIHJlZ2lvbi5cclxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgc3RyaW5nIHRvIGJlIGFubm91bmNlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KGV2ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjcmVlblJlYWRlckV2ZW50ID0gZXZlbnQgPT09IHRoaXMuc2NyZWVuUmVhZGVyRXZlbnQgPyBldmVudC50b0xvY2FsZUxvd2VyQ2FzZSgpIDogZXZlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFuIGl0ZW0gdG8gdGhlIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0TmV3SXRlbSgpO1xyXG4gICAgICAgIHRoaXMudmFsdWUucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJWYWx1ZUNoYW5nZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmFycmF5Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLmFkZCh0aGlzLnZhbHVlLCB0aGlzLmFkZEJ1dHRvbiwgdGhpcy5ob3N0RWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGVzIGFuIGl0ZW0gZnJvbSB0aGUgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVDaGFuZ2UoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvbkV2ZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5hcnJheUZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZS5kZWxldGUodGhpcy52YWx1ZSwgdGhpcy5hZGRCdXR0b24sIHRoaXMuaG9zdEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjcmVhc2VzIHRoZSBpbmRleCBvZiBhbiBpdGVtIGJ5IDFcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVVcChpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSB7IC4uLnRoaXMudmFsdWVbaW5kZXggLSAxXSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4IC0gMV0gPSB0ZW1wO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnByb21vdGVCdXR0b25FdmVudCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFycmF5Rm9ybUZpZWxkQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLnByb21vdGUodGhpcy52YWx1ZSwgdGhpcy5ob3N0RWxlbWVudCwgaW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NyZWVuUmVhZGVyRXZlbnQodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucHJvbW90ZUJ1dHRvblByZXZlbnRlZEV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmNyZWFzZXMgdGhlIGluZGV4IG9mIGFuIGl0ZW0gYnkgMVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZURvd24oaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy52YWx1ZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSB7IC4uLnRoaXMudmFsdWVbaW5kZXggKyAxXSB9O1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4ICsgMV0gPSB0ZW1wO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvbkV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuZGVtb3RlKHRoaXMudmFsdWUsIHRoaXMuaG9zdEVsZW1lbnQsIGluZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlblJlYWRlckV2ZW50KHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvblByZXZlbnRlZEV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgPHNlbGVjdD4gZWxlbWVudCdzIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyVmFsdWVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUFyaWFJZChpbmRleDogbnVtYmVyLCBpZE5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgc3dpdGNoIChpZE5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pZEJhZ1snaXRlbSddfS0ke2luZGV4fWA7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW1IZWFkZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuaWRCYWdbJ2l0ZW0nXX0taGVhZGVyLSR7aW5kZXh9YDtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbUNvbnRhaW5lcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pZEJhZ1snaXRlbSddfS1jb250YWluZXItJHtpbmRleH1gO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1UaXRsZShpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50OiBBc2tGb3JJdGVtSGVhZGVyQXJncyA9IHsgaGVhZGVyRXZhbEZ1bmM6IG51bGwgfTtcclxuICAgICAgICB0aGlzLmFza0Zvckl0ZW1IZWFkZXIuZW1pdChldmVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBldmVudC5oZWFkZXJFdmFsRnVuYyA/IGV2ZW50LmhlYWRlckV2YWxGdW5jKGl0ZW0sIGluZGV4KSA6IHRoaXMuaXRlbVRpdGxlLmZvcm1hdChpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNob3dSZW1vdmUoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQ6IEFza0ZvclJlbW92ZUV2YWxGdW5jQXJncyA9IHsgcmVtb3ZlRXZhbEZ1bmM6IG51bGwgfTtcclxuICAgICAgICB0aGlzLmFza0ZvclJlbW92ZUV2YWx1YXRvci5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlbW92ZUV2YWxGdW5jID8gZXZlbnQucmVtb3ZlRXZhbEZ1bmMoaXRlbSwgaW5kZXgpIDogdGhpcy5zaG93UmVtb3ZlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zdWJGaWVsZElzb2xhdG9yICYmICF0aGlzLnN1YkZpZWxkSXNvbGF0b3IuaXNWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaW52YWxpZFN1YkZpZWxkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi4gc3VwZXIuY3JlYXRlSWRCYWcoKSxcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnLFxyXG4gICAgICAgICAgICBpdGVtOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBuZXcgaXRlbSB0byBiZSBhZGRlZCB0byB0aGUgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXROZXdJdGVtKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3SXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTXNmdFNtZS5kZWVwQ29weSh0aGlzLm5ld0l0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzID0geyBpdGVtOiBudWxsIH07XHJcbiAgICAgICAgICAgIHRoaXMuYXNrRm9yTmV3SXRlbS5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lml0ZW0gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJheVwiPlxyXG4gICAgPHNtZS1hY2NvcmRpb24gW2NhbkNsb3NlQW55XT1cImNhbkNsb3NlQW55XCIgW2NhbkNsb3NlQWxsXT1cImNhbkNsb3NlQWxsXCIgW2Nhbk9wZW5NdWx0aXBsZV09XCJjYW5PcGVuTXVsdGlwbGVcIj5cclxuICAgICAgPHNtZS1hY2NvcmRpb24tcGFuZWwgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWU7IGxldCBpID0gaW5kZXhcIiBbaGVhZGVyXT1cImdldEl0ZW1UaXRsZShpdGVtLCBpKVwiIFtpc0V4cGFuZGFibGVdPVwiZmFsc2VcIiBbYXR0ci5kYXRhLXV0YS1pZF09XCInYXJyYXktZm9ybS1maWVsZC1pdGVtLScgKyBpXCI+XHJcbiAgICAgICAgPHNtZS1wYW5lbC1jb250cm9sPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCIgc21lVGVtcGxhdGVPdXRsZXQgW3RlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCIgW2RhdGFdPVwiaXRlbVwiIGhvc3REYXRhTmFtZT1cImNvbnRleHRcIlxyXG4gICAgICAgICAgICBbaG9zdERhdGFdPVwie2luZGV4OiBpLCBhcmlhTGFiZWxJZDogZ2V0SXRlbUFyaWFJZChpLCAnaXRlbUhlYWRlcicpfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dNb3ZlXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC14c1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnByb21vdGVCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnByb21vdGVCdXR0b25Ub29sdGlwXCIgKGNsaWNrKT1cIm1vdmVVcChpdGVtKVwiXHJcbiAgICAgICAgICAgIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIGRhdGEtdXRhLWlkPVwicHJvbW90ZS1idXR0b25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi11cFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dNb3ZlXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC14c1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmRlbW90ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkuZGVtb3RlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJtb3ZlRG93bihpdGVtKVwiXHJcbiAgICAgICAgICAgIFtzbWVEaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZFwiIGRhdGEtdXRhLWlkPVwiZGVtb3RlLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJnZXRTaG93UmVtb3ZlKGl0ZW0sIGkpXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtZm9ybS1maWVsZC1oZWlnaHQgc21lLXBhZGRpbmctaG9yaXpvbnRhbC14c1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LnJlbW92ZUJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uQXJyYXkucmVtb3ZlQnV0dG9uVG9vbHRpcFwiIChjbGljayk9XCJkZWxldGUoaXRlbSlcIlxyXG4gICAgICAgICAgICBbc21lRGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWRcIiBkYXRhLXV0YS1pZD1cInJlbW92ZS1idXR0b25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kZWxldGUgc21lLWNvbG9yLXJlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvc21lLXBhbmVsLWNvbnRyb2w+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJnZXRJdGVtQXJpYUlkKGksICdpdGVtJylcIj57e2l0ZW1UaXRsZX19PC9zcGFuPlxyXG4gICAgICAgIDxmaWVsZHNldCBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0SXRlbUFyaWFJZChpLCAnaXRlbScpXCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtbWFyZ2luLWJvdHRvbS1sZyBzbWUtYXJyYXktaXRlbVwiXHJcbiAgICAgICAgICBbY2xhc3Muc21lLXN1YmZvcm0taW5kZW50LW5vbmVdPVwib3JpZW50YXRpb249PT0naG9yaXpvbnRhbCdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWluc2V0LW1kXCIgW2lkXT1cImdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW1Db250YWluZXInKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIHNtZVRlbXBsYXRlT3V0bGV0IFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiBbZGF0YV09XCJpdGVtXCIgaG9zdERhdGFOYW1lPVwiY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hvc3REYXRhXT1cIntpbmRleDogaSwgYXJpYUxhYmVsSWQ6IGdldEl0ZW1BcmlhSWQoaSwgJ2l0ZW0nKX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICAgIDwvc21lLWFjY29yZGlvbi1wYW5lbD5cclxuICAgIDwvc21lLWFjY29yZGlvbj5cclxuICAgIDxidXR0b24gI2FkZEJ1dHRvbiAqbmdJZj1cInNob3dBZGRcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS11dGEtaWQ9XCJhZGQtYnV0dG9uXCJcclxuICAgICAgW3NtZURpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkIHx8IChtYXhJdGVtcyAhPT0gLTEgJiYgdmFsdWUubGVuZ3RoID49IG1heEl0ZW1zKVwiXHJcbiAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtaWNvbiBzbWUtaWNvbi1hZGQgc21lLW1hcmdpbi1ib3R0b20teHNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5BcnJheS5hZGRCdXR0b25BcmlhTGFiZWxcIlxyXG4gICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkFycmF5LmFkZEJ1dHRvblRvb2x0aXBcIiAoY2xpY2spPVwiYWRkKClcIj57e2FkZEJ1dHRvblRleHR9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtcmVsZXZhbnQ9XCJhbGxcIj57e3NjcmVlblJlYWRlckV2ZW50fX08L2Rpdj5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==