@tuki-io/tuki-widgets 0.0.30 → 0.0.32

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 (248) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/widgets.component.mjs +22 -22
  3. package/esm2020/lib/widgets.module.mjs +21 -21
  4. package/esm2020/lib/widgets.service.mjs +14 -14
  5. package/esm2020/public-api.mjs +7 -7
  6. package/esm2020/tuki-io-tuki-widgets.mjs +4 -4
  7. package/esm2020/user-device-manage/public-api.mjs +9 -9
  8. package/esm2020/user-device-manage/src/app.constants.mjs +95 -95
  9. package/esm2020/user-device-manage/src/classes/device.mjs +85 -85
  10. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +2 -2
  11. package/esm2020/user-device-manage/src/classes/line-association.mjs +121 -121
  12. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +10 -10
  13. package/esm2020/user-device-manage/src/classes/line-directory.mjs +27 -27
  14. package/esm2020/user-device-manage/src/classes/line.mjs +18 -18
  15. package/esm2020/user-device-manage/src/classes/notification.mjs +32 -32
  16. package/esm2020/user-device-manage/src/classes/recording-options.mjs +7 -7
  17. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +111 -111
  18. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +21 -21
  19. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +32 -32
  20. package/esm2020/user-device-manage/src/classes/types.mjs +24 -24
  21. package/esm2020/user-device-manage/src/common-functions.mjs +19 -19
  22. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +34 -34
  23. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +31 -31
  24. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +16 -16
  25. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +64 -64
  26. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +179 -179
  27. package/esm2020/user-device-manage/src/device-list/device-list.component.mjs +24 -24
  28. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +335 -335
  29. package/esm2020/user-device-manage/src/environments/environment.mjs +11 -11
  30. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +36 -36
  31. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +74 -74
  32. package/esm2020/user-device-manage/src/material.module.mjs +192 -192
  33. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +35 -35
  34. package/esm2020/user-device-manage/src/services/api.service.mjs +79 -79
  35. package/esm2020/user-device-manage/src/services/device.service.mjs +83 -83
  36. package/esm2020/user-device-manage/src/services/dns.service.mjs +104 -104
  37. package/esm2020/user-device-manage/src/services/line.service.mjs +76 -76
  38. package/esm2020/user-device-manage/src/services/notification.service.mjs +62 -62
  39. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +25 -25
  40. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +70 -70
  41. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +197 -197
  42. package/esm2020/user-device-manage/src/services/user.service.mjs +243 -243
  43. package/esm2020/user-device-manage/src/services/utils.service.mjs +87 -87
  44. package/esm2020/user-device-manage/src/services/validation.service.mjs +760 -760
  45. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +107 -107
  46. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +14 -14
  47. package/esm2020/user-device-manage/tuki-io-tuki-widgets-user-device-manage.mjs +4 -4
  48. package/esm2020/user-manage/public-api.mjs +7 -7
  49. package/esm2020/user-manage/src/app.constants.mjs +50 -50
  50. package/esm2020/user-manage/src/classes/device.mjs +37 -37
  51. package/esm2020/user-manage/src/classes/line-association-interface.mjs +2 -2
  52. package/esm2020/user-manage/src/classes/line-association.mjs +110 -110
  53. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +10 -10
  54. package/esm2020/user-manage/src/classes/line-directory.mjs +27 -27
  55. package/esm2020/user-manage/src/classes/line.mjs +18 -18
  56. package/esm2020/user-manage/src/classes/notification.mjs +32 -32
  57. package/esm2020/user-manage/src/classes/pagination.mjs +8 -8
  58. package/esm2020/user-manage/src/classes/recording-options.mjs +7 -7
  59. package/esm2020/user-manage/src/classes/simplified-user.mjs +109 -109
  60. package/esm2020/user-manage/src/classes/table-data.mjs +2 -2
  61. package/esm2020/user-manage/src/classes/translation-pattern.mjs +32 -32
  62. package/esm2020/user-manage/src/classes/user-list.mjs +10 -10
  63. package/esm2020/user-manage/src/common-functions.mjs +19 -19
  64. package/esm2020/user-manage/src/device-list/device-list.component.mjs +24 -24
  65. package/esm2020/user-manage/src/environments/environment.mjs +11 -11
  66. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +36 -36
  67. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +74 -74
  68. package/esm2020/user-manage/src/material.module.mjs +188 -188
  69. package/esm2020/user-manage/src/notifications/notification.component.mjs +35 -35
  70. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +25 -25
  71. package/esm2020/user-manage/src/services/api.service.mjs +79 -79
  72. package/esm2020/user-manage/src/services/dns.service.mjs +110 -110
  73. package/esm2020/user-manage/src/services/line.service.mjs +34 -34
  74. package/esm2020/user-manage/src/services/notification.service.mjs +62 -62
  75. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +25 -25
  76. package/esm2020/user-manage/src/services/site-settings.service.mjs +36 -36
  77. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +197 -197
  78. package/esm2020/user-manage/src/services/user.service.mjs +207 -207
  79. package/esm2020/user-manage/src/services/users-search.service.mjs +49 -49
  80. package/esm2020/user-manage/src/services/utils.service.mjs +73 -73
  81. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +65 -65
  82. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +78 -78
  83. package/esm2020/user-manage/src/user-info/user-info.component.mjs +20 -20
  84. package/esm2020/user-manage/src/user-manage-widget.component.mjs +208 -208
  85. package/esm2020/user-manage/src/user-manage.module.mjs +99 -99
  86. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +14 -14
  87. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +43 -43
  88. package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +4 -4
  89. package/esm2020/users-list/public-api.mjs +9 -9
  90. package/esm2020/users-list/src/app.constants.mjs +50 -50
  91. package/esm2020/users-list/src/classes/device.mjs +7 -7
  92. package/esm2020/users-list/src/classes/line.mjs +18 -18
  93. package/esm2020/users-list/src/classes/notification.mjs +31 -31
  94. package/esm2020/users-list/src/classes/pagination.mjs +8 -8
  95. package/esm2020/users-list/src/classes/simlified-user.mjs +50 -50
  96. package/esm2020/users-list/src/classes/table-data.mjs +2 -2
  97. package/esm2020/users-list/src/classes/user-list.mjs +13 -13
  98. package/esm2020/users-list/src/material.module.mjs +209 -209
  99. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +95 -95
  100. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +35 -35
  101. package/esm2020/users-list/src/services/api-webex.service.mjs +17 -17
  102. package/esm2020/users-list/src/services/api.service.mjs +78 -78
  103. package/esm2020/users-list/src/services/dns.service.mjs +120 -120
  104. package/esm2020/users-list/src/services/events-communication.service.mjs +14 -14
  105. package/esm2020/users-list/src/services/notification.service.mjs +62 -62
  106. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +25 -25
  107. package/esm2020/users-list/src/services/user.service.mjs +150 -150
  108. package/esm2020/users-list/src/services/users-search.service.mjs +120 -120
  109. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +34 -34
  110. package/esm2020/users-list/src/users-list.component.mjs +259 -259
  111. package/esm2020/users-list/src/users-list.module.mjs +80 -80
  112. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +14 -14
  113. package/esm2020/users-list/src/utils/common-functions.mjs +19 -19
  114. package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +43 -43
  115. package/esm2020/users-list/src/utils/utils.service.mjs +73 -73
  116. package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +4 -4
  117. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +3277 -3277
  118. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  119. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +2004 -2004
  120. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  121. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +1424 -1424
  122. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  123. package/fesm2015/tuki-io-tuki-widgets.mjs +48 -48
  124. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  125. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +3239 -3239
  126. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  127. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +1987 -1987
  128. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  129. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +1413 -1413
  130. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  131. package/fesm2020/tuki-io-tuki-widgets.mjs +48 -48
  132. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  133. package/index.d.ts +5 -5
  134. package/lib/widgets.component.d.ts +8 -8
  135. package/lib/widgets.module.d.ts +7 -7
  136. package/lib/widgets.service.d.ts +6 -6
  137. package/package.json +1 -1
  138. package/public-api.d.ts +3 -3
  139. package/user-device-manage/index.d.ts +5 -5
  140. package/user-device-manage/public-api.d.ts +8 -8
  141. package/user-device-manage/src/app.constants.d.ts +74 -74
  142. package/user-device-manage/src/classes/device.d.ts +233 -233
  143. package/user-device-manage/src/classes/line-association-interface.d.ts +45 -45
  144. package/user-device-manage/src/classes/line-association.d.ts +62 -62
  145. package/user-device-manage/src/classes/line-call-info-display.d.ts +11 -11
  146. package/user-device-manage/src/classes/line-directory.d.ts +15 -15
  147. package/user-device-manage/src/classes/line.d.ts +140 -140
  148. package/user-device-manage/src/classes/notification.d.ts +18 -18
  149. package/user-device-manage/src/classes/recording-options.d.ts +5 -5
  150. package/user-device-manage/src/classes/simplified-user.d.ts +52 -52
  151. package/user-device-manage/src/classes/site-defaults.d.ts +146 -146
  152. package/user-device-manage/src/classes/translation-pattern.d.ts +19 -19
  153. package/user-device-manage/src/classes/types.d.ts +19 -19
  154. package/user-device-manage/src/common-functions.d.ts +1 -1
  155. package/user-device-manage/src/confirm-dialog/info-dialog.component.d.ts +20 -20
  156. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.d.ts +15 -15
  157. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.d.ts +7 -7
  158. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.d.ts +24 -24
  159. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +89 -89
  160. package/user-device-manage/src/device-list/device-list.component.d.ts +11 -11
  161. package/user-device-manage/src/device-manage-widget.component.d.ts +71 -71
  162. package/user-device-manage/src/environments/environment.d.ts +9 -9
  163. package/user-device-manage/src/interseptors/auth.interceptor.d.ts +9 -9
  164. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +35 -35
  165. package/user-device-manage/src/material.module.d.ts +29 -29
  166. package/user-device-manage/src/notifications/notification.component.d.ts +19 -19
  167. package/user-device-manage/src/services/api.service.d.ts +20 -20
  168. package/user-device-manage/src/services/device.service.d.ts +21 -21
  169. package/user-device-manage/src/services/dns.service.d.ts +14 -14
  170. package/user-device-manage/src/services/line.service.d.ts +33 -33
  171. package/user-device-manage/src/services/notification.service.d.ts +18 -18
  172. package/user-device-manage/src/services/removeKynFromIBM.service.d.ts +8 -8
  173. package/user-device-manage/src/services/site-settings.service.d.ts +25 -25
  174. package/user-device-manage/src/services/sorting-utils.service.d.ts +26 -26
  175. package/user-device-manage/src/services/user.service.d.ts +51 -51
  176. package/user-device-manage/src/services/utils.service.d.ts +10 -10
  177. package/user-device-manage/src/services/validation.service.d.ts +165 -165
  178. package/user-device-manage/src/user-device-manage.module.d.ts +22 -22
  179. package/user-device-manage/src/utils/app-loader/app-loader.d.ts +6 -6
  180. package/user-manage/index.d.ts +5 -5
  181. package/user-manage/public-api.d.ts +6 -6
  182. package/user-manage/src/app.constants.d.ts +29 -29
  183. package/user-manage/src/classes/device.d.ts +203 -203
  184. package/user-manage/src/classes/line-association-interface.d.ts +40 -40
  185. package/user-manage/src/classes/line-association.d.ts +55 -55
  186. package/user-manage/src/classes/line-call-info-display.d.ts +11 -11
  187. package/user-manage/src/classes/line-directory.d.ts +16 -16
  188. package/user-manage/src/classes/line.d.ts +140 -140
  189. package/user-manage/src/classes/notification.d.ts +18 -18
  190. package/user-manage/src/classes/pagination.d.ts +13 -13
  191. package/user-manage/src/classes/recording-options.d.ts +5 -5
  192. package/user-manage/src/classes/simplified-user.d.ts +50 -50
  193. package/user-manage/src/classes/table-data.d.ts +5 -5
  194. package/user-manage/src/classes/translation-pattern.d.ts +18 -18
  195. package/user-manage/src/classes/user-list.d.ts +34 -34
  196. package/user-manage/src/common-functions.d.ts +1 -1
  197. package/user-manage/src/device-list/device-list.component.d.ts +11 -11
  198. package/user-manage/src/environments/environment.d.ts +9 -9
  199. package/user-manage/src/interseptors/auth.interceptor.d.ts +9 -9
  200. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +35 -35
  201. package/user-manage/src/material.module.d.ts +28 -28
  202. package/user-manage/src/notifications/notification.component.d.ts +19 -19
  203. package/user-manage/src/removeKynFromIBM.service.d.ts +8 -8
  204. package/user-manage/src/services/api.service.d.ts +21 -21
  205. package/user-manage/src/services/dns.service.d.ts +14 -14
  206. package/user-manage/src/services/line.service.d.ts +17 -17
  207. package/user-manage/src/services/notification.service.d.ts +18 -18
  208. package/user-manage/src/services/removeKynFromIBM.service.d.ts +8 -8
  209. package/user-manage/src/services/site-settings.service.d.ts +9 -9
  210. package/user-manage/src/services/sorting-utils.service.d.ts +26 -26
  211. package/user-manage/src/services/user.service.d.ts +43 -43
  212. package/user-manage/src/services/users-search.service.d.ts +25 -25
  213. package/user-manage/src/services/utils.service.d.ts +9 -9
  214. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +24 -24
  215. package/user-manage/src/user-calling/user-calling.component.d.ts +30 -30
  216. package/user-manage/src/user-info/user-info.component.d.ts +9 -9
  217. package/user-manage/src/user-manage-widget.component.d.ts +45 -45
  218. package/user-manage/src/user-manage.module.d.ts +21 -21
  219. package/user-manage/src/utils/app-loader/app-loader.d.ts +6 -6
  220. package/user-manage/src/utils/pagination/pagination.component.d.ts +18 -18
  221. package/users-list/index.d.ts +5 -5
  222. package/users-list/public-api.d.ts +8 -8
  223. package/users-list/src/app.constants.d.ts +32 -32
  224. package/users-list/src/classes/device.d.ts +224 -224
  225. package/users-list/src/classes/line.d.ts +140 -140
  226. package/users-list/src/classes/notification.d.ts +18 -18
  227. package/users-list/src/classes/pagination.d.ts +13 -13
  228. package/users-list/src/classes/simlified-user.d.ts +25 -25
  229. package/users-list/src/classes/table-data.d.ts +5 -5
  230. package/users-list/src/classes/user-list.d.ts +36 -36
  231. package/users-list/src/material.module.d.ts +31 -31
  232. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +25 -25
  233. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +16 -16
  234. package/users-list/src/services/api-webex.service.d.ts +8 -8
  235. package/users-list/src/services/api.service.d.ts +21 -21
  236. package/users-list/src/services/dns.service.d.ts +18 -18
  237. package/users-list/src/services/events-communication.service.d.ts +8 -8
  238. package/users-list/src/services/notification.service.d.ts +18 -18
  239. package/users-list/src/services/removeKynFromIBM.service.d.ts +8 -8
  240. package/users-list/src/services/user.service.d.ts +34 -34
  241. package/users-list/src/services/users-search.service.d.ts +34 -34
  242. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.d.ts +20 -20
  243. package/users-list/src/users-list.component.d.ts +59 -59
  244. package/users-list/src/users-list.module.d.ts +16 -16
  245. package/users-list/src/utils/app-loader/app-loader.d.ts +6 -6
  246. package/users-list/src/utils/common-functions.d.ts +1 -1
  247. package/users-list/src/utils/pagination/pagination.component.d.ts +18 -18
  248. package/users-list/src/utils/utils.service.d.ts +9 -9
@@ -1,335 +1,335 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { DeviceViewType } from './classes/device';
3
- import { forkJoin } from 'rxjs';
4
- import { InfoDialogComponent } from './confirm-dialog/info-dialog.component';
5
- import { TOGGLE_TYPES } from './app.constants';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./services/user.service";
8
- import * as i2 from "./services/device.service";
9
- import * as i3 from "./services/api.service";
10
- import * as i4 from "./services/line.service";
11
- import * as i5 from "./services/site-settings.service";
12
- import * as i6 from "./services/validation.service";
13
- import * as i7 from "@angular/material/dialog";
14
- import * as i8 from "@angular/common";
15
- import * as i9 from "@angular/forms";
16
- import * as i10 from "@angular/material/divider";
17
- import * as i11 from "@angular/material/form-field";
18
- import * as i12 from "@angular/material/input";
19
- import * as i13 from "@angular/material/core";
20
- import * as i14 from "@angular/material/tabs";
21
- import * as i15 from "@angular/material/select";
22
- import * as i16 from "@angular/material/slide-toggle";
23
- import * as i17 from "./utils/app-loader/app-loader";
24
- import * as i18 from "./device-associated-line/device-associated-line.component";
25
- import * as i19 from "./device-associated-line/associated-line-row/associated-line-row.component";
26
- export class DeviceManageWidgetComponent {
27
- get form() {
28
- return this.device?.form;
29
- }
30
- get lineAssociations() {
31
- return this.device?.lineAssociations;
32
- }
33
- get device() {
34
- // @ts-ignore
35
- return this.deviceIndex !== undefined && this.deviceIndex > -1 ? this.userService.user.devices[this.deviceIndex] : null;
36
- }
37
- get originDevice() {
38
- // @ts-ignore
39
- return this.deviceIndex !== undefined && this.deviceIndex > -1 ? this.userService?.originUser.devices[this.deviceIndex] : null;
40
- }
41
- get userToken() {
42
- return this.userService.user?.token;
43
- }
44
- get user() {
45
- return this.userService.user;
46
- }
47
- get hasDeviceUnsavedChanges() {
48
- return this.deviceService.hasUnsavedChanges(this.device, this.originDevice);
49
- }
50
- constructor(userService, deviceService, apiService, lineService, siteSettingsService, validationService, dialog) {
51
- this.userService = userService;
52
- this.deviceService = deviceService;
53
- this.apiService = apiService;
54
- this.lineService = lineService;
55
- this.siteSettingsService = siteSettingsService;
56
- this.validationService = validationService;
57
- this.dialog = dialog;
58
- this.onSave = new EventEmitter();
59
- this.onChange = new EventEmitter();
60
- this.discardChanges = new EventEmitter();
61
- this.goBack = new EventEmitter();
62
- this.tabIndex = 0;
63
- this.tabInit = false;
64
- }
65
- ngOnInit() {
66
- this.apiService.token = this.token;
67
- this.apiService.apiUrl = this.host;
68
- console.log('this.apiService.apiUrl = ', this.apiService.apiUrl);
69
- // this.setData(true);
70
- this.getData();
71
- this.userService.onFetchUserToken$
72
- .subscribe(() => {
73
- this.setData();
74
- });
75
- }
76
- ngAfterViewInit() {
77
- console.log('TABS = ', this.tabs);
78
- if (this.tabs && !this.tabInit) {
79
- const handleTabClick = this.tabs._handleClick;
80
- this.tabInit = true;
81
- // 2. Replace the click handler with our custom function
82
- this.tabs._handleClick = (tab, header, index) => {
83
- // 3. Implement your conditional logic in canDeactivateTab()
84
- // (return the boolean here)
85
- if (this.hasDeviceUnsavedChanges) {
86
- this.openUnsavedChangesDialog(TOGGLE_TYPES.TABS, { handleTabClick, tab, header, index });
87
- // 4. If the tab *should* be changed, call the 'old' click handler
88
- // handleTabClick.apply(this.tabs, [tab, header, index]);
89
- }
90
- else {
91
- handleTabClick.apply(this.tabs, [tab, header, index]);
92
- this.tabIndex = index;
93
- }
94
- };
95
- }
96
- }
97
- ngOnDestroy() {
98
- }
99
- onGoBack() {
100
- this.goBack.emit();
101
- }
102
- toggleAssociatedLine(lineIndex, lineAssociation) {
103
- if (!this.lineService.currentActiveLinePkid) {
104
- lineAssociation.active = true;
105
- this.lineService.currentActiveLinePkid = lineAssociation.linePkid;
106
- return;
107
- }
108
- if (!lineAssociation.hasChanges && lineAssociation.active) {
109
- lineAssociation.active = false;
110
- this.lineService.currentActiveLinePkid = null;
111
- return;
112
- }
113
- if (this.device.lineAssociationsHasChanges) {
114
- this.openUnsavedChangesDialog(TOGGLE_TYPES.ASSOCIATED_LINE_ONLY);
115
- }
116
- else {
117
- this.setLineActive(lineIndex);
118
- }
119
- }
120
- openUnsavedChangesDialog(toggleType, handleTabClick) {
121
- const dialogRef = this.dialog.open(InfoDialogComponent, {
122
- data: {
123
- title: 'Discard unsaved edits?',
124
- message: 'You\'re about to leave this page and discard all unsaved app edits',
125
- confirmButtonText: 'Discard'
126
- }
127
- });
128
- dialogRef.beforeClosed().subscribe(result => {
129
- if (result) {
130
- switch (toggleType) {
131
- case TOGGLE_TYPES.TABS:
132
- this.resetByTabToggle(handleTabClick);
133
- break;
134
- case TOGGLE_TYPES.ASSOCIATED_LINE_ONLY:
135
- this.resetLine(handleTabClick);
136
- break;
137
- }
138
- this.tabIndex = handleTabClick.index;
139
- }
140
- });
141
- }
142
- resetByTabToggle(handleTabClick) {
143
- switch (this.tabIndex) {
144
- case 0:
145
- this.userService.resetDevice(this.device, this.validationService);
146
- break;
147
- case 1:
148
- this.resetLine();
149
- break;
150
- }
151
- this.discardChanges.emit();
152
- if (handleTabClick) {
153
- handleTabClick.handleTabClick.apply(this.tabs, [handleTabClick.tab, handleTabClick.header, handleTabClick.index]);
154
- }
155
- }
156
- resetLine(lineIndex, handleTabClick) {
157
- const lineIndToReset = this.lineAssociations.findIndex(line => line.active && line.hasChanges);
158
- if (lineIndToReset > -1) {
159
- this.resetAssociatedLine(lineIndToReset);
160
- }
161
- if (lineIndex !== undefined && lineIndex > -1) {
162
- this.setLineActive(lineIndex);
163
- }
164
- this.discardChanges.emit();
165
- if (handleTabClick) {
166
- handleTabClick.handleTabClick.apply(this.tabs, [handleTabClick.tab, handleTabClick.header, handleTabClick.index]);
167
- }
168
- }
169
- onRemoveLine(lineIndex) {
170
- if (!this.lineAssociations || !this.lineAssociations[lineIndex]) {
171
- return;
172
- }
173
- const dialogRef = this.dialog.open(InfoDialogComponent, {
174
- data: {
175
- title: 'Remove device associated line?',
176
- message: `You\'re sure that you want to delete ${this.lineAssociations[lineIndex].directoryNumber?.directoryNumber} associated line`,
177
- confirmButtonText: 'Delete Line'
178
- }
179
- });
180
- dialogRef.beforeClosed().subscribe(result => {
181
- if (result) {
182
- this.dataPending = true;
183
- this.deleteLine(this.lineAssociations[lineIndex]);
184
- }
185
- });
186
- }
187
- resetAssociatedLine(lineIndex) {
188
- if (this.userService.user?.devices?.length) {
189
- const deviceInd = this.userService.user?.devices.findIndex((device) => device.name === this.device.name);
190
- if (deviceInd > -1) {
191
- this.userService.resetLineAssociation(deviceInd, lineIndex, this.validationService);
192
- this.userService.user.devices[this.deviceIndex].lineAssociationsHasChanges = false;
193
- }
194
- }
195
- }
196
- setLineActive(index) {
197
- if (this.lineAssociations?.length) {
198
- this.device.lineAssociations.forEach(line => line.active = false);
199
- }
200
- if (this.lineAssociations[index]) {
201
- this.lineService.currentActiveLinePkid = this.device.lineAssociations[index].linePkid;
202
- this.device.lineAssociations[index].active = true;
203
- }
204
- }
205
- onDeviceSave() {
206
- switch (this.tabIndex) {
207
- case DeviceViewType.INFO:
208
- this.updateDevice(this.siteId, this.device?.name, this.userToken);
209
- break;
210
- case DeviceViewType.LINES:
211
- this.onUpdateLine();
212
- break;
213
- }
214
- }
215
- save() {
216
- this.onDeviceSave();
217
- }
218
- onUpdateDevice() {
219
- this.updateDevice(this.siteId, this.device?.name, this.userToken);
220
- }
221
- onUpdateLine() {
222
- this.lineService.onSaveLineAssociationEvent.next(true);
223
- }
224
- afterLineUpdate() {
225
- this.onSave.emit('associated line is updated');
226
- }
227
- updateDevice(siteId, deviceName, token) {
228
- if (this.deviceService.hasUnsavedChanges(this.device, this.originDevice) && !this.dataPending) {
229
- this.dataPending = true;
230
- const calls = [];
231
- if (this.deviceService.hasDeviceInfoUnsavedChanges(this.device, this.originDevice)) {
232
- const body = this.deviceService.getDataToUpdateDevice(this.device, this.originDevice);
233
- calls.push(this.deviceService.putDeviceFields(siteId, deviceName, token, body));
234
- }
235
- if (calls?.length) {
236
- forkJoin(calls).subscribe((results) => {
237
- this.userService.persistUserCache()
238
- .subscribe(() => {
239
- this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)
240
- .subscribe(() => {
241
- this.dataPending = false;
242
- this.onSave.emit('device updated');
243
- }, () => this.dataPending = false);
244
- });
245
- }, () => this.dataPending = false);
246
- }
247
- }
248
- }
249
- onChangeField(token) {
250
- if (!token) {
251
- return;
252
- }
253
- if (this.device) {
254
- this.userService.user.devices[this.deviceIndex][token] = this.form?.get(token)?.value;
255
- this.onChange.emit();
256
- }
257
- }
258
- getData() {
259
- this.dataPending = true;
260
- forkJoin([
261
- this.userService.fetchUserToken(this.siteId, this.userId, this.validationService),
262
- this.siteSettingsService.getDeviceSoftkeyTemplates(this.siteId),
263
- this.siteSettingsService.getSiteDefaults(this.siteId)
264
- ]).subscribe(() => {
265
- console.log('device widget user', this.user);
266
- if (this.originDevice?.callingSearchSpaceName && this.siteSettingsService?.siteDefaults?.cssFilter) {
267
- this.siteSettingsService.siteDefaults.cssFilter.push(this.originDevice.callingSearchSpaceName);
268
- }
269
- this.setData();
270
- this.ngAfterViewInit();
271
- this.dataPending = false;
272
- }, () => this.dataPending = false);
273
- }
274
- setCookie(name, value, days) {
275
- var expires = "";
276
- if (days) {
277
- var date = new Date();
278
- date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
279
- expires = "; expires=" + date.toUTCString();
280
- }
281
- document.cookie = name + "=" + (value || "") + expires + "; path=/";
282
- }
283
- setData(isInit) {
284
- /*if (isInit) {
285
- this.userService.user = new SimplifiedUser(JSON.parse(JSON.stringify(this.user.getFullData())), this.validationService);
286
- this.userService.originUser = new SimplifiedUser(JSON.parse(JSON.stringify(this.user.getFullData())), this.validationService);
287
- }*/
288
- if (this.deviceName && this.userService.user?.devices?.length) {
289
- this.deviceIndex = this.userService.user.devices.findIndex((device) => device.name === this.deviceName);
290
- }
291
- }
292
- deleteLine(line) {
293
- this.lineService.deleteLine(this.siteId, line.linePkid, this.userService.user.token)
294
- .subscribe(() => {
295
- this.userService.persistUserCache()
296
- .subscribe(() => {
297
- this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)
298
- .subscribe(() => {
299
- // this.updatedLineAssociationEvent.emit();
300
- this.dataPending = false;
301
- });
302
- });
303
- });
304
- }
305
- }
306
- DeviceManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceManageWidgetComponent, deps: [{ token: i1.UserService }, { token: i2.DeviceService }, { token: i3.APIService }, { token: i4.LineService }, { token: i5.SiteSettingsService }, { token: i6.ValidationService }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
307
- DeviceManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DeviceManageWidgetComponent, selector: "app-device-manage-widget", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", isLdap: "isLdap", deviceName: "deviceName" }, outputs: { onSave: "onSave", onChange: "onChange", discardChanges: "discardChanges", goBack: "goBack" }, viewQueries: [{ propertyName: "tabs", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "<app-loader *ngIf=\"dataPending || deviceService.dataPending\"></app-loader>\r\n<div id=\"device-manage-widget\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">User Devices</span>\r\n </div>\r\n </div>\r\n <mat-tab-group #tabs animationDuration=\"0\" mat-align-tabs=\"start\"\r\n class=\"content-box\">\r\n <mat-tab label=\"Device\">\r\n <div *ngIf=\"user\">\r\n <ng-container *ngTemplateOutlet=\"editDevice\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <mat-tab label=\"Associated Lines\">\r\n <ng-container *ngIf=\"user\">\r\n <div *ngFor=\"let lineAssociation of lineAssociations, let i = index\">\r\n <app-associated-line-row\r\n [line]=\"lineAssociation\"\r\n (removeAssociatedLine)=\"onRemoveLine(i)\"\r\n (toggleAssociatedLine)=\"toggleAssociatedLine(i, lineAssociation)\"></app-associated-line-row>\r\n <app-device-associated-line *ngIf=\"lineAssociation.active\"\r\n [deviceIndex]=\"deviceIndex\"\r\n [deviceName]=\"deviceName\"\r\n [siteId]=\"siteId\"\r\n (onChange)=\"onChange.emit()\"\r\n (updatedLineAssociationEvent)=\"afterLineUpdate()\"\r\n [lineIndex]=\"i\"></app-device-associated-line>\r\n </div>\r\n </ng-container>\r\n </mat-tab>\r\n <mat-tab ></mat-tab>\r\n <mat-tab ></mat-tab>\r\n </mat-tab-group>\r\n\r\n <ng-template #editDevice>\r\n <form *ngIf=\"device && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n <div class=\"user-info-box user-details-box__info\">\r\n <h3 class=\"user-box-title\">Details</h3>\r\n <div class=\"form-holder__blocks\">\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">{{user?.firstName}} {{user?.lastName}}</div>\r\n <div class=\"user-box-block-item__tag\">Name</div>\r\n </div>\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">Cisco dual mode for andorid</div>\r\n <div class=\"user-box-block-item__tag\">Type</div>\r\n </div>\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">David Alexander 1545545154554</div>\r\n <div class=\"user-box-block-item__tag\">Device Description</div>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">1545415455545 | 5545544485454 | 998989454</div>\r\n <div class=\"user-box-block-item__tag\">Line</div>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">PLAR Service</div>\r\n <mat-slide-toggle name=\"plarService\" formControlName=\"plarService\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- DEVICE INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">Device Info</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Registration Status</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.registrationStatus}}</span>\r\n <!--<mat-form-field appearance=\"outline\">\r\n <input formControlName=\"registrationStatus\"\r\n matInput (input)=\"onChangeField('registrationStatus')\">\r\n </mat-form-field>-->\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">IP Address</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.ipAddress}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Description</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"description\"\r\n matInput (input)=\"onChangeField('description')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Protocol</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.protocol}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Softkey Template</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"softkeyTemplate\"\r\n (selectionChange)=\"onChangeField('softkeyTemplate')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.deviceSoftkeyTemplates\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('softkeyTemplate')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Button Template</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.buttonTemplate}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Location</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.location}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Device Pool</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"devicePoolName\"\r\n (selectionChange)=\"onChangeField('devicePoolName')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.devicePools\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('devicePoolName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Device CSS</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"callingSearchSpaceName\"\r\n (selectionChange)=\"onChangeField('callingSearchSpaceName')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.callingSearchSpaceTypes\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('callingSearchSpaceName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Firmware version</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.firmwareVersion}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </form>\r\n </ng-template>\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}table{border-collapse:collapse;border-spacing:0}.line-row{background:#ececec;cursor:pointer;width:100%;padding:5px;box-sizing:border-box}.line-row.disabled-line-row{cursor:default;color:silver}.user-details-box__info{grid-template-columns:100%}.form-holder__blocks{margin-top:1rem}.user-box-block{padding:1rem 0;gap:4rem;display:flex}.user-box-block-item__title{margin-bottom:.5rem}.user-box-block-item__tag{font-size:14px;color:#6d6d6d}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-right%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;margin:0 0 30px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i11.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i14.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i14.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i15.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i17.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i18.DeviceAssociatedLineComponent, selector: "app-device-associated-line", inputs: ["lineIndex", "deviceIndex", "deviceName", "siteId"], outputs: ["updatedLineAssociationEvent", "onChange"] }, { kind: "component", type: i19.AssociatedLineRowComponent, selector: "app-associated-line-row", inputs: ["line", "toggled"], outputs: ["toggleAssociatedLine", "removeAssociatedLine"] }] });
308
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceManageWidgetComponent, decorators: [{
309
- type: Component,
310
- args: [{ selector: 'app-device-manage-widget', template: "<app-loader *ngIf=\"dataPending || deviceService.dataPending\"></app-loader>\r\n<div id=\"device-manage-widget\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">User Devices</span>\r\n </div>\r\n </div>\r\n <mat-tab-group #tabs animationDuration=\"0\" mat-align-tabs=\"start\"\r\n class=\"content-box\">\r\n <mat-tab label=\"Device\">\r\n <div *ngIf=\"user\">\r\n <ng-container *ngTemplateOutlet=\"editDevice\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n <mat-tab label=\"Associated Lines\">\r\n <ng-container *ngIf=\"user\">\r\n <div *ngFor=\"let lineAssociation of lineAssociations, let i = index\">\r\n <app-associated-line-row\r\n [line]=\"lineAssociation\"\r\n (removeAssociatedLine)=\"onRemoveLine(i)\"\r\n (toggleAssociatedLine)=\"toggleAssociatedLine(i, lineAssociation)\"></app-associated-line-row>\r\n <app-device-associated-line *ngIf=\"lineAssociation.active\"\r\n [deviceIndex]=\"deviceIndex\"\r\n [deviceName]=\"deviceName\"\r\n [siteId]=\"siteId\"\r\n (onChange)=\"onChange.emit()\"\r\n (updatedLineAssociationEvent)=\"afterLineUpdate()\"\r\n [lineIndex]=\"i\"></app-device-associated-line>\r\n </div>\r\n </ng-container>\r\n </mat-tab>\r\n <mat-tab ></mat-tab>\r\n <mat-tab ></mat-tab>\r\n </mat-tab-group>\r\n\r\n <ng-template #editDevice>\r\n <form *ngIf=\"device && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n <div class=\"user-info-box user-details-box__info\">\r\n <h3 class=\"user-box-title\">Details</h3>\r\n <div class=\"form-holder__blocks\">\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">{{user?.firstName}} {{user?.lastName}}</div>\r\n <div class=\"user-box-block-item__tag\">Name</div>\r\n </div>\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">Cisco dual mode for andorid</div>\r\n <div class=\"user-box-block-item__tag\">Type</div>\r\n </div>\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">David Alexander 1545545154554</div>\r\n <div class=\"user-box-block-item__tag\">Device Description</div>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">1545415455545 | 5545544485454 | 998989454</div>\r\n <div class=\"user-box-block-item__tag\">Line</div>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"user-box-block\">\r\n <div class=\"user-box-block-item\">\r\n <div class=\"user-box-block-item__title\">PLAR Service</div>\r\n <mat-slide-toggle name=\"plarService\" formControlName=\"plarService\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- DEVICE INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">Device Info</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Registration Status</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.registrationStatus}}</span>\r\n <!--<mat-form-field appearance=\"outline\">\r\n <input formControlName=\"registrationStatus\"\r\n matInput (input)=\"onChangeField('registrationStatus')\">\r\n </mat-form-field>-->\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">IP Address</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.ipAddress}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Description</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"description\"\r\n matInput (input)=\"onChangeField('description')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Protocol</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.protocol}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Softkey Template</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"softkeyTemplate\"\r\n (selectionChange)=\"onChangeField('softkeyTemplate')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.deviceSoftkeyTemplates\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('softkeyTemplate')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Button Template</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.buttonTemplate}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Location</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.location}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Device Pool</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"devicePoolName\"\r\n (selectionChange)=\"onChangeField('devicePoolName')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.devicePools\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('devicePoolName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Device CSS</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-select formControlName=\"callingSearchSpaceName\"\r\n (selectionChange)=\"onChangeField('callingSearchSpaceName')\">\r\n <mat-option *ngFor=\"let type of siteSettingsService.callingSearchSpaceTypes\" [value]=\"type\">\r\n {{type}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"form.get('callingSearchSpaceName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Firmware version</div>\r\n <div class=\"input-holder__input\">\r\n <span class=\"disabled-data-block\">{{device.firmwareVersion}}</span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </form>\r\n </ng-template>\r\n\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}table{border-collapse:collapse;border-spacing:0}.line-row{background:#ececec;cursor:pointer;width:100%;padding:5px;box-sizing:border-box}.line-row.disabled-line-row{cursor:default;color:silver}.user-details-box__info{grid-template-columns:100%}.form-holder__blocks{margin-top:1rem}.user-box-block{padding:1rem 0;gap:4rem;display:flex}.user-box-block-item__title{margin-bottom:.5rem}.user-box-block-item__tag{font-size:14px;color:#6d6d6d}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-right%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;margin:0 0 30px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}\n"] }]
311
- }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.DeviceService }, { type: i3.APIService }, { type: i4.LineService }, { type: i5.SiteSettingsService }, { type: i6.ValidationService }, { type: i7.MatDialog }]; }, propDecorators: { tabs: [{
312
- type: ViewChild,
313
- args: ["tabs", { static: false }]
314
- }], onSave: [{
315
- type: Output
316
- }], onChange: [{
317
- type: Output
318
- }], discardChanges: [{
319
- type: Output
320
- }], goBack: [{
321
- type: Output
322
- }], token: [{
323
- type: Input
324
- }], host: [{
325
- type: Input
326
- }], siteId: [{
327
- type: Input
328
- }], userId: [{
329
- type: Input
330
- }], isLdap: [{
331
- type: Input
332
- }], deviceName: [{
333
- type: Input
334
- }] } });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtwSCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQU83RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sMkJBQTJCO0lBa0J0QyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLGFBQWE7UUFDYixPQUFRLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENB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ZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNpbXBsaWZpZWRVc2VyIH0gZnJvbSAnLi9jbGFzc2VzL3NpbXBsaWZpZWQtdXNlcic7XHJcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbiB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uJztcclxuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRGV2aWNlLCBEZXZpY2VWaWV3VHlwZSB9IGZyb20gJy4vY2xhc3Nlcy9kZXZpY2UnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJbmZvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb25maXJtLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV2aWNlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGV2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IExpbmVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9saW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaXRlU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVE9HR0xFX1RZUEVTIH0gZnJvbSAnLi9hcHAuY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWRldmljZS1tYW5hZ2Utd2lkZ2V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldmljZS1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXZpY2VNYW5hZ2VXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcInRhYnNcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRhYnMhOk1hdFRhYkdyb3VwO1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgZGlzY2FyZENoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGdvQmFjayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSB0b2tlbiE6IHN0cmluZztcclxuICBASW5wdXQoKSBob3N0ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNpdGVJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZXZpY2VOYW1lITogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBkYXRhUGVuZGluZyE6IGJvb2xlYW47XHJcbiAgdGFiSW5kZXggPSAwO1xyXG4gIGRldmljZUluZGV4ITogbnVtYmVyO1xyXG4gIHRhYkluaXQgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmRldmljZT8uZm9ybTtcclxuICB9XHJcblxyXG4gIGdldCBsaW5lQXNzb2NpYXRpb25zKCk6IExpbmVBc3NvY2lhdGlvbltdIHwgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlPy5saW5lQXNzb2NpYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRldmljZSgpOiBEZXZpY2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuICB0aGlzLmRldmljZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kZXZpY2VJbmRleCA+IC0xID8gdGhpcy51c2VyU2VydmljZS51c2VyLmRldmljZXNbdGhpcy5kZXZpY2VJbmRleF0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG9yaWdpbkRldmljZSgpOiBEZXZpY2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRldmljZUluZGV4ID4gLTEgPyB0aGlzLnVzZXJTZXJ2aWNlPy5vcmlnaW5Vc2VyLmRldmljZXNbdGhpcy5kZXZpY2VJbmRleF0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZXJUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcj8udG9rZW47XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlcigpOiBTaW1wbGlmaWVkVXNlciB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RldmljZVVuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlU2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcyh0aGlzLmRldmljZSwgdGhpcy5vcmlnaW5EZXZpY2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHB1YmxpYyBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxpbmVTZXJ2aWNlOiBMaW5lU2VydmljZSxcclxuICAgIHB1YmxpYyBzaXRlU2V0dGluZ3NTZXJ2aWNlOiBTaXRlU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0O1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMuYXBpU2VydmljZS5hcGlVcmwgPSAnLCB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsKTtcclxuICAgIC8vIHRoaXMuc2V0RGF0YSh0cnVlKTtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2Uub25GZXRjaFVzZXJUb2tlbiRcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnVEFCUyA9ICcsIHRoaXMudGFicyk7XHJcblxyXG4gICAgaWYgKHRoaXMudGFicyAmJiAhdGhpcy50YWJJbml0KSB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZVRhYkNsaWNrID0gdGhpcy50YWJzLl9oYW5kbGVDbGljaztcclxuICAgICAgdGhpcy50YWJJbml0ID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIDIuIFJlcGxhY2UgdGhlIGNsaWNrIGhhbmRsZXIgd2l0aCBvdXIgY3VzdG9tIGZ1bmN0aW9uXHJcbiAgICAgIHRoaXMudGFicy5faGFuZGxlQ2xpY2sgPSAodGFiLCBoZWFkZXIsIGluZGV4KSA9PiB7XHJcblxyXG4gICAgICAgIC8vIDMuIEltcGxlbWVudCB5b3VyIGNvbmRpdGlvbmFsIGxvZ2ljIGluIGNhbkRlYWN0aXZhdGVUYWIoKVxyXG4gICAgICAgIC8vIChyZXR1cm4gdGhlIGJvb2xlYW4gaGVyZSlcclxuICAgICAgICBpZiAodGhpcy5oYXNEZXZpY2VVbnNhdmVkQ2hhbmdlcykge1xyXG4gICAgICAgICAgdGhpcy5vcGVuVW5zYXZlZENoYW5nZXNEaWFsb2coVE9HR0xFX1RZUEVTLlRBQlMsIHtoYW5kbGVUYWJDbGljaywgdGFiLCBoZWFkZXIsIGluZGV4fSk7XHJcblxyXG4gICAgICAgICAgLy8gNC4gSWYgdGhlIHRhYiAqc2hvdWxkKiBiZSBjaGFuZ2VkLCBjYWxsIHRoZSAnb2xkJyBjbGljayBoYW5kbGVyXHJcbiAgICAgICAgICAvLyBoYW5kbGVUYWJDbGljay5hcHBseSh0aGlzLnRhYnMsIFt0YWIsIGhlYWRlciwgaW5kZXhdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaGFuZGxlVGFiQ2xpY2suYXBwbHkodGhpcy50YWJzLCBbdGFiLCBoZWFkZXIsIGluZGV4XSk7XHJcbiAgICAgICAgICB0aGlzLnRhYkluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gIH1cclxuXHJcbiAgb25Hb0JhY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBc3NvY2lhdGVkTGluZShsaW5lSW5kZXg6IG51bWJlciwgbGluZUFzc29jaWF0aW9uOiBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfCBMaW5lQXNzb2NpYXRpb24pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5saW5lU2VydmljZS5jdXJyZW50QWN0aXZlTGluZVBraWQpIHtcclxuICAgICAgbGluZUFzc29jaWF0aW9uLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkID0gbGluZUFzc29jaWF0aW9uLmxpbmVQa2lkO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWxpbmVBc3NvY2lhdGlvbi5oYXNDaGFuZ2VzICYmIGxpbmVBc3NvY2lhdGlvbi5hY3RpdmUpIHtcclxuICAgICAgbGluZUFzc29jaWF0aW9uLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmxpbmVTZXJ2aWNlLmN1cnJlbnRBY3RpdmVMaW5lUGtpZCA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRldmljZS5saW5lQXNzb2NpYXRpb25zSGFzQ2hhbmdlcykge1xyXG4gICAgICB0aGlzLm9wZW5VbnNhdmVkQ2hhbmdlc0RpYWxvZyhUT0dHTEVfVFlQRVMuQVNTT0NJQVRFRF9MSU5FX09OTFkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRMaW5lQWN0aXZlKGxpbmVJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVW5zYXZlZENoYW5nZXNEaWFsb2codG9nZ2xlVHlwZTogc3RyaW5nLCBoYW5kbGVUYWJDbGljaz86IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogJ0Rpc2NhcmQgdW5zYXZlZCBlZGl0cz8nLFxyXG4gICAgICAgIG1lc3NhZ2U6ICdZb3VcXCdyZSBhYm91dCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgYWxsIHVuc2F2ZWQgYXBwIGVkaXRzJyxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0Rpc2NhcmQnXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgc3dpdGNoICh0b2dnbGVUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFRPR0dMRV9UWVBFUy5UQUJTOlxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0QnlUYWJUb2dnbGUoaGFuZGxlVGFiQ2xpY2spO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgVE9HR0xFX1RZUEVTLkFTU09DSUFURURfTElORV9PTkxZOlxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0TGluZShoYW5kbGVUYWJDbGljayk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYkluZGV4ID0gaGFuZGxlVGFiQ2xpY2suaW5kZXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRCeVRhYlRvZ2dsZShoYW5kbGVUYWJDbGljaz86IGFueSk6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLnRhYkluZGV4KSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnJlc2V0RGV2aWNlKHRoaXMuZGV2aWNlLCB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMucmVzZXRMaW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2NhcmRDaGFuZ2VzLmVtaXQoKTtcclxuICAgIGlmIChoYW5kbGVUYWJDbGljaykge1xyXG4gICAgICBoYW5kbGVUYWJDbGljay5oYW5kbGVUYWJDbGljay5hcHBseSh0aGlzLnRhYnMsIFtoYW5kbGVUYWJDbGljay50YWIsIGhhbmRsZVRhYkNsaWNrLmhlYWRlciwgaGFuZGxlVGFiQ2xpY2suaW5kZXhdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0TGluZShsaW5lSW5kZXg/OiBudW1iZXIgfCB1bmRlZmluZWQsIGhhbmRsZVRhYkNsaWNrPzogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBsaW5lSW5kVG9SZXNldCA9IHRoaXMubGluZUFzc29jaWF0aW9ucy5maW5kSW5kZXgobGluZSA9PiBsaW5lLmFjdGl2ZSAmJiBsaW5lLmhhc0NoYW5nZXMpO1xyXG4gICAgaWYgKGxpbmVJbmRUb1Jlc2V0ID4gLTEpIHtcclxuICAgICAgdGhpcy5yZXNldEFzc29jaWF0ZWRMaW5lKGxpbmVJbmRUb1Jlc2V0KTtcclxuICAgIH1cclxuICAgIGlmIChsaW5lSW5kZXggIT09IHVuZGVmaW5lZCAmJiBsaW5lSW5kZXggPiAtMSkge1xyXG4gICAgICB0aGlzLnNldExpbmVBY3RpdmUobGluZUluZGV4KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzY2FyZENoYW5nZXMuZW1pdCgpO1xyXG4gICAgaWYgKGhhbmRsZVRhYkNsaWNrKSB7XHJcbiAgICAgIGhhbmRsZVRhYkNsaWNrLmhhbmRsZVRhYkNsaWNrLmFwcGx5KHRoaXMudGFicywgW2hhbmRsZVRhYkNsaWNrLnRhYiwgaGFuZGxlVGFiQ2xpY2suaGVhZGVyLCBoYW5kbGVUYWJDbGljay5pbmRleF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVMaW5lKGxpbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubGluZUFzc29jaWF0aW9ucyB8fCAhdGhpcy5saW5lQXNzb2NpYXRpb25zW2xpbmVJbmRleF0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogJ1JlbW92ZSBkZXZpY2UgYXNzb2NpYXRlZCBsaW5lPycsXHJcbiAgICAgICAgbWVzc2FnZTogYFlvdVxcJ3JlIHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgJHt0aGlzLmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XS5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlcn0gYXNzb2NpYXRlZCBsaW5lYCxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0RlbGV0ZSBMaW5lJ1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTGluZSh0aGlzLmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRBc3NvY2lhdGVkTGluZShsaW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlcj8uZGV2aWNlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGRldmljZUluZCA9IHRoaXMudXNlclNlcnZpY2UudXNlcj8uZGV2aWNlcy5maW5kSW5kZXgoKGRldmljZTogRGV2aWNlKSA9PiBkZXZpY2UubmFtZSA9PT0gdGhpcy5kZXZpY2UubmFtZSk7XHJcbiAgICAgIGlmIChkZXZpY2VJbmQgPiAtMSkge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucmVzZXRMaW5lQXNzb2NpYXRpb24oZGV2aWNlSW5kLCBsaW5lSW5kZXgsIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5kZXZpY2VzW3RoaXMuZGV2aWNlSW5kZXhdLmxpbmVBc3NvY2lhdGlvbnNIYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzZXRMaW5lQWN0aXZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmxpbmVBc3NvY2lhdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRldmljZS5saW5lQXNzb2NpYXRpb25zLmZvckVhY2gobGluZSA9PiBsaW5lLmFjdGl2ZSA9IGZhbHNlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxpbmVBc3NvY2lhdGlvbnNbaW5kZXhdKSB7XHJcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkID0gdGhpcy5kZXZpY2UubGluZUFzc29jaWF0aW9uc1tpbmRleF0ubGluZVBraWQ7XHJcbiAgICAgIHRoaXMuZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnNbaW5kZXhdLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRldmljZVNhdmUoKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMudGFiSW5kZXgpIHtcclxuICAgICAgY2FzZSBEZXZpY2VWaWV3VHlwZS5JTkZPOlxyXG4gICAgICAgIHRoaXMudXBkYXRlRGV2aWNlKHRoaXMuc2l0ZUlkLCB0aGlzLmRldmljZT8ubmFtZSwgdGhpcy51c2VyVG9rZW4pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIERldmljZVZpZXdUeXBlLkxJTkVTOlxyXG4gICAgICAgIHRoaXMub25VcGRhdGVMaW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkRldmljZVNhdmUoKTtcclxuICB9XHJcblxyXG4gIG9uVXBkYXRlRGV2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVEZXZpY2UodGhpcy5zaXRlSWQsIHRoaXMuZGV2aWNlPy5uYW1lLCB0aGlzLnVzZXJUb2tlbik7XHJcbiAgfVxyXG5cclxuICBvblVwZGF0ZUxpbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVTZXJ2aWNlLm9uU2F2ZUxpbmVBc3NvY2lhdGlvbkV2ZW50Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZnRlckxpbmVVcGRhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KCdhc3NvY2lhdGVkIGxpbmUgaXMgdXBkYXRlZCcpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGV2aWNlKHNpdGVJZDogbnVtYmVyLCBkZXZpY2VOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRldmljZVNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXModGhpcy5kZXZpY2UsIHRoaXMub3JpZ2luRGV2aWNlKSAmJiAhdGhpcy5kYXRhUGVuZGluZykge1xyXG4gICAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3QgY2FsbHMgPSBbXVxyXG4gICAgICBpZiAodGhpcy5kZXZpY2VTZXJ2aWNlLmhhc0RldmljZUluZm9VbnNhdmVkQ2hhbmdlcyh0aGlzLmRldmljZSwgdGhpcy5vcmlnaW5EZXZpY2UpKSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREYXRhVG9VcGRhdGVEZXZpY2UodGhpcy5kZXZpY2UsIHRoaXMub3JpZ2luRGV2aWNlKTtcclxuICAgICAgICBjYWxscy5wdXNoKHRoaXMuZGV2aWNlU2VydmljZS5wdXREZXZpY2VGaWVsZHMoc2l0ZUlkLCBkZXZpY2VOYW1lLCB0b2tlbiwgYm9keSkpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNhbGxzPy5sZW5ndGgpIHtcclxuICAgICAgICBmb3JrSm9pbihjYWxscykuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UucGVyc2lzdFVzZXJDYWNoZSgpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZmV0Y2hVc2VyVG9rZW4odGhpcy5zaXRlSWQsIHRoaXMudXNlclNlcnZpY2UudXNlci51c2VyaWQsIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCdkZXZpY2UgdXBkYXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9LCAoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZUZpZWxkKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XHJcbiAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXIuZGV2aWNlc1t0aGlzLmRldmljZUluZGV4XSBhcyBhbnkpW3Rva2VuXSA9IHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8udmFsdWU7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgZm9ya0pvaW4oW1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoVXNlclRva2VuKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJJZCwgdGhpcy52YWxpZGF0aW9uU2VydmljZSksXHJcbiAgICAgIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5nZXREZXZpY2VTb2Z0a2V5VGVtcGxhdGVzKHRoaXMuc2l0ZUlkKSxcclxuICAgICAgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldFNpdGVEZWZhdWx0cyh0aGlzLnNpdGVJZClcclxuICAgIF0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdkZXZpY2Ugd2lkZ2V0IHVzZXInLCB0aGlzLnVzZXIpO1xyXG4gICAgICBpZiAodGhpcy5vcmlnaW5EZXZpY2U/LmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUgJiYgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlPy5zaXRlRGVmYXVsdHM/LmNzc0ZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5zaXRlRGVmYXVsdHMuY3NzRmlsdGVyLnB1c2godGhpcy5vcmlnaW5EZXZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcblxyXG4gICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICB9LCAoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xyXG4gICAgdmFyIGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHNldERhdGEoaXNJbml0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLyppZiAoaXNJbml0KSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlciA9IG5ldyBTaW1wbGlmaWVkVXNlcihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlci5nZXRGdWxsRGF0YSgpKSksIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXIgPSBuZXcgU2ltcGxpZmllZFVzZXIoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXIuZ2V0RnVsbERhdGEoKSkpLCB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlKTtcclxuICAgIH0qL1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlTmFtZSAmJiB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmRldmljZXM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRldmljZUluZGV4ID0gdGhpcy51c2VyU2VydmljZS51c2VyLmRldmljZXMuZmluZEluZGV4KChkZXZpY2U6IERldmljZSkgPT4gZGV2aWNlLm5hbWUgPT09IHRoaXMuZGV2aWNlTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUxpbmUobGluZTogTGluZUFzc29jaWF0aW9uIHwgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbmVTZXJ2aWNlLmRlbGV0ZUxpbmUodGhpcy5zaXRlSWQsIGxpbmUubGluZVBraWQsIHRoaXMudXNlclNlcnZpY2UudXNlci50b2tlbilcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5wZXJzaXN0VXNlckNhY2hlKClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoVXNlclRva2VuKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIudXNlcmlkLCB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVkTGluZUFzc29jaWF0aW9uRXZlbnQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmcgfHwgZGV2aWNlU2VydmljZS5kYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuPGRpdiBpZD1cImRldmljZS1tYW5hZ2Utd2lkZ2V0XCI+XHJcbiAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94XCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveC1jb250YWluZXJcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtaWNvbiBpY29uLXdlYmV4LWxlZnQtYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZ28tYmFjay10aXRsZVwiPlVzZXIgRGV2aWNlczwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxtYXQtdGFiLWdyb3VwICN0YWJzIGFuaW1hdGlvbkR1cmF0aW9uPVwiMFwiICBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQtYm94XCI+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkRldmljZVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidXNlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlZGl0RGV2aWNlXCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJBc3NvY2lhdGVkIExpbmVzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGluZUFzc29jaWF0aW9uIG9mIGxpbmVBc3NvY2lhdGlvbnMsIGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxhcHAtYXNzb2NpYXRlZC1saW5lLXJvd1xyXG4gICAgICAgICAgICBbbGluZV09XCJsaW5lQXNzb2NpYXRpb25cIlxyXG4gICAgICAgICAgICAocmVtb3ZlQXNzb2NpYXRlZExpbmUpPVwib25SZW1vdmVMaW5lKGkpXCJcclxuICAgICAgICAgICAgKHRvZ2dsZUFzc29jaWF0ZWRMaW5lKT1cInRvZ2dsZUFzc29jaWF0ZWRMaW5lKGksIGxpbmVBc3NvY2lhdGlvbilcIj48L2FwcC1hc3NvY2lhdGVkLWxpbmUtcm93PlxyXG4gICAgICAgICAgPGFwcC1kZXZpY2UtYXNzb2NpYXRlZC1saW5lICpuZ0lmPVwibGluZUFzc29jaWF0aW9uLmFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldmljZUluZGV4XT1cImRldmljZUluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlLmVtaXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZWRMaW5lQXNzb2NpYXRpb25FdmVudCk9XCJhZnRlckxpbmVVcGRhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmVJbmRleF09XCJpXCI+PC9hcHAtZGV2aWNlLWFzc29jaWF0ZWQtbGluZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8bWF0LXRhYiA+PC9tYXQtdGFiPlxyXG4gICAgPG1hdC10YWIgPjwvbWF0LXRhYj5cclxuICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjZWRpdERldmljZT5cclxuICAgIDxmb3JtICpuZ0lmPVwiZGV2aWNlICYmIGZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYm94ZXMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItaW5mby1ib3ggdXNlci1kZXRhaWxzLWJveF9faW5mb1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwidXNlci1ib3gtdGl0bGVcIj5EZXRhaWxzPC9oMz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvbGRlcl9fYmxvY2tzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGl0bGVcIj57e3VzZXI/LmZpcnN0TmFtZX19IHt7dXNlcj8ubGFzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RhZ1wiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RpdGxlXCI+Q2lzY28gZHVhbCBtb2RlIGZvciBhbmRvcmlkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGFnXCI+VHlwZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGl0bGVcIj5EYXZpZCBBbGV4YW5kZXIgMTU0NTU0NTE1NDU1NDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RhZ1wiPkRldmljZSBEZXNjcmlwdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGl0bGVcIj4xNTQ1NDE1NDU1NTQ1IHwgNTU0NTU0NDQ4NTQ1NCB8IDk5ODk4OTQ1NDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RhZ1wiPkxpbmU8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2tcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RpdGxlXCI+UExBUiBTZXJ2aWNlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBuYW1lPVwicGxhclNlcnZpY2VcIiBmb3JtQ29udHJvbE5hbWU9XCJwbGFyU2VydmljZVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBERVZJQ0UgSU5GTyBCT1gtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbmZvLWJveCB1c2VyLWRldGFpbHMtYm94XCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJ1c2VyLWJveC10aXRsZVwiPkRldmljZSBJbmZvPC9oMz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvbGRlcl9faW5wdXRzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVnaXN0cmF0aW9uIFN0YXR1czwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2FibGVkLWRhdGEtYmxvY2tcIj57e2RldmljZS5yZWdpc3RyYXRpb25TdGF0dXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS08bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInJlZ2lzdHJhdGlvblN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgncmVnaXN0cmF0aW9uU3RhdHVzJylcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5JUCBBZGRyZXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWQtZGF0YS1ibG9ja1wiPnt7ZGV2aWNlLmlwQWRkcmVzc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGVzY3JpcHRpb248L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGVzY3JpcHRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByb3RvY29sPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWQtZGF0YS1ibG9ja1wiPnt7ZGV2aWNlLnByb3RvY29sfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Tb2Z0a2V5IFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzb2Z0a2V5VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ3NvZnRrZXlUZW1wbGF0ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VTb2Z0a2V5VGVtcGxhdGVzXCIgW3ZhbHVlXT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dHlwZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uZ2V0KCdzb2Z0a2V5VGVtcGxhdGUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QnV0dG9uIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWQtZGF0YS1ibG9ja1wiPnt7ZGV2aWNlLmJ1dHRvblRlbXBsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Mb2NhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2FibGVkLWRhdGEtYmxvY2tcIj57e2RldmljZS5sb2NhdGlvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIFBvb2w8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRldmljZVBvb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdkZXZpY2VQb29sTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VQb29sc1wiIFt2YWx1ZV09XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3R5cGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgnZGV2aWNlUG9vbE5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIENTUzwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FsbGluZ1NlYXJjaFNwYWNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnY2FsbGluZ1NlYXJjaFNwYWNlTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2l0ZVNldHRpbmdzU2VydmljZS5jYWxsaW5nU2VhcmNoU3BhY2VUeXBlc1wiIFt2YWx1ZV09XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3R5cGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgnY2FsbGluZ1NlYXJjaFNwYWNlTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXJtd2FyZSB2ZXJzaW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWQtZGF0YS1ibG9ja1wiPnt7ZGV2aWNlLmZpcm13YXJlVmVyc2lvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcblxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { DeviceViewType } from './classes/device';
3
+ import { forkJoin } from 'rxjs';
4
+ import { InfoDialogComponent } from './confirm-dialog/info-dialog.component';
5
+ import { TOGGLE_TYPES } from './app.constants';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./services/user.service";
8
+ import * as i2 from "./services/device.service";
9
+ import * as i3 from "./services/api.service";
10
+ import * as i4 from "./services/line.service";
11
+ import * as i5 from "./services/site-settings.service";
12
+ import * as i6 from "./services/validation.service";
13
+ import * as i7 from "@angular/material/dialog";
14
+ import * as i8 from "@angular/common";
15
+ import * as i9 from "@angular/forms";
16
+ import * as i10 from "@angular/material/divider";
17
+ import * as i11 from "@angular/material/form-field";
18
+ import * as i12 from "@angular/material/input";
19
+ import * as i13 from "@angular/material/core";
20
+ import * as i14 from "@angular/material/tabs";
21
+ import * as i15 from "@angular/material/select";
22
+ import * as i16 from "@angular/material/slide-toggle";
23
+ import * as i17 from "./utils/app-loader/app-loader";
24
+ import * as i18 from "./device-associated-line/device-associated-line.component";
25
+ import * as i19 from "./device-associated-line/associated-line-row/associated-line-row.component";
26
+ export class DeviceManageWidgetComponent {
27
+ get form() {
28
+ return this.device?.form;
29
+ }
30
+ get lineAssociations() {
31
+ return this.device?.lineAssociations;
32
+ }
33
+ get device() {
34
+ // @ts-ignore
35
+ return this.deviceIndex !== undefined && this.deviceIndex > -1 ? this.userService.user.devices[this.deviceIndex] : null;
36
+ }
37
+ get originDevice() {
38
+ // @ts-ignore
39
+ return this.deviceIndex !== undefined && this.deviceIndex > -1 ? this.userService?.originUser.devices[this.deviceIndex] : null;
40
+ }
41
+ get userToken() {
42
+ return this.userService.user?.token;
43
+ }
44
+ get user() {
45
+ return this.userService.user;
46
+ }
47
+ get hasDeviceUnsavedChanges() {
48
+ return this.deviceService.hasUnsavedChanges(this.device, this.originDevice);
49
+ }
50
+ constructor(userService, deviceService, apiService, lineService, siteSettingsService, validationService, dialog) {
51
+ this.userService = userService;
52
+ this.deviceService = deviceService;
53
+ this.apiService = apiService;
54
+ this.lineService = lineService;
55
+ this.siteSettingsService = siteSettingsService;
56
+ this.validationService = validationService;
57
+ this.dialog = dialog;
58
+ this.onSave = new EventEmitter();
59
+ this.onChange = new EventEmitter();
60
+ this.discardChanges = new EventEmitter();
61
+ this.goBack = new EventEmitter();
62
+ this.tabIndex = 0;
63
+ this.tabInit = false;
64
+ }
65
+ ngOnInit() {
66
+ this.apiService.token = this.token;
67
+ this.apiService.apiUrl = this.host;
68
+ console.log('this.apiService.apiUrl = ', this.apiService.apiUrl);
69
+ // this.setData(true);
70
+ this.getData();
71
+ this.userService.onFetchUserToken$
72
+ .subscribe(() => {
73
+ this.setData();
74
+ });
75
+ }
76
+ ngAfterViewInit() {
77
+ console.log('TABS = ', this.tabs);
78
+ if (this.tabs && !this.tabInit) {
79
+ const handleTabClick = this.tabs._handleClick;
80
+ this.tabInit = true;
81
+ // 2. Replace the click handler with our custom function
82
+ this.tabs._handleClick = (tab, header, index) => {
83
+ // 3. Implement your conditional logic in canDeactivateTab()
84
+ // (return the boolean here)
85
+ if (this.hasDeviceUnsavedChanges) {
86
+ this.openUnsavedChangesDialog(TOGGLE_TYPES.TABS, { handleTabClick, tab, header, index });
87
+ // 4. If the tab *should* be changed, call the 'old' click handler
88
+ // handleTabClick.apply(this.tabs, [tab, header, index]);
89
+ }
90
+ else {
91
+ handleTabClick.apply(this.tabs, [tab, header, index]);
92
+ this.tabIndex = index;
93
+ }
94
+ };
95
+ }
96
+ }
97
+ ngOnDestroy() {
98
+ }
99
+ onGoBack() {
100
+ this.goBack.emit();
101
+ }
102
+ toggleAssociatedLine(lineIndex, lineAssociation) {
103
+ if (!this.lineService.currentActiveLinePkid) {
104
+ lineAssociation.active = true;
105
+ this.lineService.currentActiveLinePkid = lineAssociation.linePkid;
106
+ return;
107
+ }
108
+ if (!lineAssociation.hasChanges && lineAssociation.active) {
109
+ lineAssociation.active = false;
110
+ this.lineService.currentActiveLinePkid = null;
111
+ return;
112
+ }
113
+ if (this.device.lineAssociationsHasChanges) {
114
+ this.openUnsavedChangesDialog(TOGGLE_TYPES.ASSOCIATED_LINE_ONLY);
115
+ }
116
+ else {
117
+ this.setLineActive(lineIndex);
118
+ }
119
+ }
120
+ openUnsavedChangesDialog(toggleType, handleTabClick) {
121
+ const dialogRef = this.dialog.open(InfoDialogComponent, {
122
+ data: {
123
+ title: 'Discard unsaved edits?',
124
+ message: 'You\'re about to leave this page and discard all unsaved app edits',
125
+ confirmButtonText: 'Discard'
126
+ }
127
+ });
128
+ dialogRef.beforeClosed().subscribe(result => {
129
+ if (result) {
130
+ switch (toggleType) {
131
+ case TOGGLE_TYPES.TABS:
132
+ this.resetByTabToggle(handleTabClick);
133
+ break;
134
+ case TOGGLE_TYPES.ASSOCIATED_LINE_ONLY:
135
+ this.resetLine(handleTabClick);
136
+ break;
137
+ }
138
+ this.tabIndex = handleTabClick.index;
139
+ }
140
+ });
141
+ }
142
+ resetByTabToggle(handleTabClick) {
143
+ switch (this.tabIndex) {
144
+ case 0:
145
+ this.userService.resetDevice(this.device, this.validationService);
146
+ break;
147
+ case 1:
148
+ this.resetLine();
149
+ break;
150
+ }
151
+ this.discardChanges.emit();
152
+ if (handleTabClick) {
153
+ handleTabClick.handleTabClick.apply(this.tabs, [handleTabClick.tab, handleTabClick.header, handleTabClick.index]);
154
+ }
155
+ }
156
+ resetLine(lineIndex, handleTabClick) {
157
+ const lineIndToReset = this.lineAssociations.findIndex(line => line.active && line.hasChanges);
158
+ if (lineIndToReset > -1) {
159
+ this.resetAssociatedLine(lineIndToReset);
160
+ }
161
+ if (lineIndex !== undefined && lineIndex > -1) {
162
+ this.setLineActive(lineIndex);
163
+ }
164
+ this.discardChanges.emit();
165
+ if (handleTabClick) {
166
+ handleTabClick.handleTabClick.apply(this.tabs, [handleTabClick.tab, handleTabClick.header, handleTabClick.index]);
167
+ }
168
+ }
169
+ onRemoveLine(lineIndex) {
170
+ if (!this.lineAssociations || !this.lineAssociations[lineIndex]) {
171
+ return;
172
+ }
173
+ const dialogRef = this.dialog.open(InfoDialogComponent, {
174
+ data: {
175
+ title: 'Remove device associated line?',
176
+ message: `You\'re sure that you want to delete ${this.lineAssociations[lineIndex].directoryNumber?.directoryNumber} associated line`,
177
+ confirmButtonText: 'Delete Line'
178
+ }
179
+ });
180
+ dialogRef.beforeClosed().subscribe(result => {
181
+ if (result) {
182
+ this.dataPending = true;
183
+ this.deleteLine(this.lineAssociations[lineIndex]);
184
+ }
185
+ });
186
+ }
187
+ resetAssociatedLine(lineIndex) {
188
+ if (this.userService.user?.devices?.length) {
189
+ const deviceInd = this.userService.user?.devices.findIndex((device) => device.name === this.device.name);
190
+ if (deviceInd > -1) {
191
+ this.userService.resetLineAssociation(deviceInd, lineIndex, this.validationService);
192
+ this.userService.user.devices[this.deviceIndex].lineAssociationsHasChanges = false;
193
+ }
194
+ }
195
+ }
196
+ setLineActive(index) {
197
+ if (this.lineAssociations?.length) {
198
+ this.device.lineAssociations.forEach(line => line.active = false);
199
+ }
200
+ if (this.lineAssociations[index]) {
201
+ this.lineService.currentActiveLinePkid = this.device.lineAssociations[index].linePkid;
202
+ this.device.lineAssociations[index].active = true;
203
+ }
204
+ }
205
+ onDeviceSave() {
206
+ switch (this.tabIndex) {
207
+ case DeviceViewType.INFO:
208
+ this.updateDevice(this.siteId, this.device?.name, this.userToken);
209
+ break;
210
+ case DeviceViewType.LINES:
211
+ this.onUpdateLine();
212
+ break;
213
+ }
214
+ }
215
+ save() {
216
+ this.onDeviceSave();
217
+ }
218
+ onUpdateDevice() {
219
+ this.updateDevice(this.siteId, this.device?.name, this.userToken);
220
+ }
221
+ onUpdateLine() {
222
+ this.lineService.onSaveLineAssociationEvent.next(true);
223
+ }
224
+ afterLineUpdate() {
225
+ this.onSave.emit('associated line is updated');
226
+ }
227
+ updateDevice(siteId, deviceName, token) {
228
+ if (this.deviceService.hasUnsavedChanges(this.device, this.originDevice) && !this.dataPending) {
229
+ this.dataPending = true;
230
+ const calls = [];
231
+ if (this.deviceService.hasDeviceInfoUnsavedChanges(this.device, this.originDevice)) {
232
+ const body = this.deviceService.getDataToUpdateDevice(this.device, this.originDevice);
233
+ calls.push(this.deviceService.putDeviceFields(siteId, deviceName, token, body));
234
+ }
235
+ if (calls?.length) {
236
+ forkJoin(calls).subscribe((results) => {
237
+ this.userService.persistUserCache()
238
+ .subscribe(() => {
239
+ this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)
240
+ .subscribe(() => {
241
+ this.dataPending = false;
242
+ this.onSave.emit('device updated');
243
+ }, () => this.dataPending = false);
244
+ });
245
+ }, () => this.dataPending = false);
246
+ }
247
+ }
248
+ }
249
+ onChangeField(token) {
250
+ if (!token) {
251
+ return;
252
+ }
253
+ if (this.device) {
254
+ this.userService.user.devices[this.deviceIndex][token] = this.form?.get(token)?.value;
255
+ this.onChange.emit();
256
+ }
257
+ }
258
+ getData() {
259
+ this.dataPending = true;
260
+ forkJoin([
261
+ this.userService.fetchUserToken(this.siteId, this.userId, this.validationService),
262
+ this.siteSettingsService.getDeviceSoftkeyTemplates(this.siteId),
263
+ this.siteSettingsService.getSiteDefaults(this.siteId)
264
+ ]).subscribe(() => {
265
+ console.log('device widget user', this.user);
266
+ if (this.originDevice?.callingSearchSpaceName && this.siteSettingsService?.siteDefaults?.cssFilter) {
267
+ this.siteSettingsService.siteDefaults.cssFilter.push(this.originDevice.callingSearchSpaceName);
268
+ }
269
+ this.setData();
270
+ this.ngAfterViewInit();
271
+ this.dataPending = false;
272
+ }, () => this.dataPending = false);
273
+ }
274
+ setCookie(name, value, days) {
275
+ var expires = "";
276
+ if (days) {
277
+ var date = new Date();
278
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
279
+ expires = "; expires=" + date.toUTCString();
280
+ }
281
+ document.cookie = name + "=" + (value || "") + expires + "; path=/";
282
+ }
283
+ setData(isInit) {
284
+ /*if (isInit) {
285
+ this.userService.user = new SimplifiedUser(JSON.parse(JSON.stringify(this.user.getFullData())), this.validationService);
286
+ this.userService.originUser = new SimplifiedUser(JSON.parse(JSON.stringify(this.user.getFullData())), this.validationService);
287
+ }*/
288
+ if (this.deviceName && this.userService.user?.devices?.length) {
289
+ this.deviceIndex = this.userService.user.devices.findIndex((device) => device.name === this.deviceName);
290
+ }
291
+ }
292
+ deleteLine(line) {
293
+ this.lineService.deleteLine(this.siteId, line.linePkid, this.userService.user.token)
294
+ .subscribe(() => {
295
+ this.userService.persistUserCache()
296
+ .subscribe(() => {
297
+ this.userService.fetchUserToken(this.siteId, this.userService.user.userid, this.validationService)
298
+ .subscribe(() => {
299
+ // this.updatedLineAssociationEvent.emit();
300
+ this.dataPending = false;
301
+ });
302
+ });
303
+ });
304
+ }
305
+ }
306
+ DeviceManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceManageWidgetComponent, deps: [{ token: i1.UserService }, { token: i2.DeviceService }, { token: i3.APIService }, { token: i4.LineService }, { token: i5.SiteSettingsService }, { token: i6.ValidationService }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
307
+ DeviceManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DeviceManageWidgetComponent, selector: "app-device-manage-widget", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", isLdap: "isLdap", deviceName: "deviceName" }, outputs: { onSave: "onSave", onChange: "onChange", discardChanges: "discardChanges", goBack: "goBack" }, viewQueries: [{ propertyName: "tabs", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "<app-loader *ngIf=\"dataPending || deviceService.dataPending\"></app-loader>\n<div id=\"device-manage-widget\">\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">User Devices</span>\n </div>\n </div>\n <mat-tab-group #tabs animationDuration=\"0\" mat-align-tabs=\"start\"\n class=\"content-box\">\n <mat-tab label=\"Device\">\n <div *ngIf=\"user\">\n <ng-container *ngTemplateOutlet=\"editDevice\">\n </ng-container>\n </div>\n </mat-tab>\n <mat-tab label=\"Associated Lines\">\n <ng-container *ngIf=\"user\">\n <div *ngFor=\"let lineAssociation of lineAssociations, let i = index\">\n <app-associated-line-row\n [line]=\"lineAssociation\"\n (removeAssociatedLine)=\"onRemoveLine(i)\"\n (toggleAssociatedLine)=\"toggleAssociatedLine(i, lineAssociation)\"></app-associated-line-row>\n <app-device-associated-line *ngIf=\"lineAssociation.active\"\n [deviceIndex]=\"deviceIndex\"\n [deviceName]=\"deviceName\"\n [siteId]=\"siteId\"\n (onChange)=\"onChange.emit()\"\n (updatedLineAssociationEvent)=\"afterLineUpdate()\"\n [lineIndex]=\"i\"></app-device-associated-line>\n </div>\n </ng-container>\n </mat-tab>\n <mat-tab ></mat-tab>\n <mat-tab ></mat-tab>\n </mat-tab-group>\n\n <ng-template #editDevice>\n <form *ngIf=\"device && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n <div class=\"user-info-box user-details-box__info\">\n <h3 class=\"user-box-title\">Details</h3>\n <div class=\"form-holder__blocks\">\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">{{user?.firstName}} {{user?.lastName}}</div>\n <div class=\"user-box-block-item__tag\">Name</div>\n </div>\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">Cisco dual mode for andorid</div>\n <div class=\"user-box-block-item__tag\">Type</div>\n </div>\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">David Alexander 1545545154554</div>\n <div class=\"user-box-block-item__tag\">Device Description</div>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">1545415455545 | 5545544485454 | 998989454</div>\n <div class=\"user-box-block-item__tag\">Line</div>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">PLAR Service</div>\n <mat-slide-toggle name=\"plarService\" formControlName=\"plarService\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </div>\n\n <!-- DEVICE INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Device Info</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Registration Status</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.registrationStatus}}</span>\n <!--<mat-form-field appearance=\"outline\">\n <input formControlName=\"registrationStatus\"\n matInput (input)=\"onChangeField('registrationStatus')\">\n </mat-form-field>-->\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">IP Address</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.ipAddress}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Description</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"description\"\n matInput (input)=\"onChangeField('description')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Protocol</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.protocol}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Softkey Template</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"softkeyTemplate\"\n (selectionChange)=\"onChangeField('softkeyTemplate')\">\n <mat-option *ngFor=\"let type of siteSettingsService.deviceSoftkeyTemplates\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('softkeyTemplate')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Button Template</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.buttonTemplate}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Location</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.location}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Device Pool</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"devicePoolName\"\n (selectionChange)=\"onChangeField('devicePoolName')\">\n <mat-option *ngFor=\"let type of siteSettingsService.devicePools\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('devicePoolName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Device CSS</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"callingSearchSpaceName\"\n (selectionChange)=\"onChangeField('callingSearchSpaceName')\">\n <mat-option *ngFor=\"let type of siteSettingsService.callingSearchSpaceTypes\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('callingSearchSpaceName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Firmware version</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.firmwareVersion}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n\n\n </div>\n\n </div>\n\n\n </div>\n\n </form>\n </ng-template>\n\n</div>\n\n\n\n\n\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}table{border-collapse:collapse;border-spacing:0}.line-row{background:#ececec;cursor:pointer;width:100%;padding:5px;box-sizing:border-box}.line-row.disabled-line-row{cursor:default;color:silver}.user-details-box__info{grid-template-columns:100%}.form-holder__blocks{margin-top:1rem}.user-box-block{padding:1rem 0;gap:4rem;display:flex}.user-box-block-item__title{margin-bottom:.5rem}.user-box-block-item__tag{font-size:14px;color:#6d6d6d}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-right%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;margin:0 0 30px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i11.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i14.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i14.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i15.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i17.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i18.DeviceAssociatedLineComponent, selector: "app-device-associated-line", inputs: ["lineIndex", "deviceIndex", "deviceName", "siteId"], outputs: ["updatedLineAssociationEvent", "onChange"] }, { kind: "component", type: i19.AssociatedLineRowComponent, selector: "app-associated-line-row", inputs: ["line", "toggled"], outputs: ["toggleAssociatedLine", "removeAssociatedLine"] }] });
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DeviceManageWidgetComponent, decorators: [{
309
+ type: Component,
310
+ args: [{ selector: 'app-device-manage-widget', template: "<app-loader *ngIf=\"dataPending || deviceService.dataPending\"></app-loader>\n<div id=\"device-manage-widget\">\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">User Devices</span>\n </div>\n </div>\n <mat-tab-group #tabs animationDuration=\"0\" mat-align-tabs=\"start\"\n class=\"content-box\">\n <mat-tab label=\"Device\">\n <div *ngIf=\"user\">\n <ng-container *ngTemplateOutlet=\"editDevice\">\n </ng-container>\n </div>\n </mat-tab>\n <mat-tab label=\"Associated Lines\">\n <ng-container *ngIf=\"user\">\n <div *ngFor=\"let lineAssociation of lineAssociations, let i = index\">\n <app-associated-line-row\n [line]=\"lineAssociation\"\n (removeAssociatedLine)=\"onRemoveLine(i)\"\n (toggleAssociatedLine)=\"toggleAssociatedLine(i, lineAssociation)\"></app-associated-line-row>\n <app-device-associated-line *ngIf=\"lineAssociation.active\"\n [deviceIndex]=\"deviceIndex\"\n [deviceName]=\"deviceName\"\n [siteId]=\"siteId\"\n (onChange)=\"onChange.emit()\"\n (updatedLineAssociationEvent)=\"afterLineUpdate()\"\n [lineIndex]=\"i\"></app-device-associated-line>\n </div>\n </ng-container>\n </mat-tab>\n <mat-tab ></mat-tab>\n <mat-tab ></mat-tab>\n </mat-tab-group>\n\n <ng-template #editDevice>\n <form *ngIf=\"device && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n <div class=\"user-info-box user-details-box__info\">\n <h3 class=\"user-box-title\">Details</h3>\n <div class=\"form-holder__blocks\">\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">{{user?.firstName}} {{user?.lastName}}</div>\n <div class=\"user-box-block-item__tag\">Name</div>\n </div>\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">Cisco dual mode for andorid</div>\n <div class=\"user-box-block-item__tag\">Type</div>\n </div>\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">David Alexander 1545545154554</div>\n <div class=\"user-box-block-item__tag\">Device Description</div>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">1545415455545 | 5545544485454 | 998989454</div>\n <div class=\"user-box-block-item__tag\">Line</div>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"user-box-block\">\n <div class=\"user-box-block-item\">\n <div class=\"user-box-block-item__title\">PLAR Service</div>\n <mat-slide-toggle name=\"plarService\" formControlName=\"plarService\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n </div>\n\n <!-- DEVICE INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Device Info</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Registration Status</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.registrationStatus}}</span>\n <!--<mat-form-field appearance=\"outline\">\n <input formControlName=\"registrationStatus\"\n matInput (input)=\"onChangeField('registrationStatus')\">\n </mat-form-field>-->\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">IP Address</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.ipAddress}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Description</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"description\"\n matInput (input)=\"onChangeField('description')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Protocol</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.protocol}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Softkey Template</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"softkeyTemplate\"\n (selectionChange)=\"onChangeField('softkeyTemplate')\">\n <mat-option *ngFor=\"let type of siteSettingsService.deviceSoftkeyTemplates\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('softkeyTemplate')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Button Template</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.buttonTemplate}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Location</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.location}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Device Pool</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"devicePoolName\"\n (selectionChange)=\"onChangeField('devicePoolName')\">\n <mat-option *ngFor=\"let type of siteSettingsService.devicePools\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('devicePoolName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Device CSS</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <mat-select formControlName=\"callingSearchSpaceName\"\n (selectionChange)=\"onChangeField('callingSearchSpaceName')\">\n <mat-option *ngFor=\"let type of siteSettingsService.callingSearchSpaceTypes\" [value]=\"type\">\n {{type}}\n </mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"form.get('callingSearchSpaceName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Firmware version</div>\n <div class=\"input-holder__input\">\n <span class=\"disabled-data-block\">{{device.firmwareVersion}}</span>\n </div>\n </div>\n <mat-divider></mat-divider>\n\n\n </div>\n\n </div>\n\n\n </div>\n\n </form>\n </ng-template>\n\n</div>\n\n\n\n\n\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}table{border-collapse:collapse;border-spacing:0}.line-row{background:#ececec;cursor:pointer;width:100%;padding:5px;box-sizing:border-box}.line-row.disabled-line-row{cursor:default;color:silver}.user-details-box__info{grid-template-columns:100%}.form-holder__blocks{margin-top:1rem}.user-box-block{padding:1rem 0;gap:4rem;display:flex}.user-box-block-item__title{margin-bottom:.5rem}.user-box-block-item__tag{font-size:14px;color:#6d6d6d}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-right%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;margin:0 0 30px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}\n"] }]
311
+ }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.DeviceService }, { type: i3.APIService }, { type: i4.LineService }, { type: i5.SiteSettingsService }, { type: i6.ValidationService }, { type: i7.MatDialog }]; }, propDecorators: { tabs: [{
312
+ type: ViewChild,
313
+ args: ["tabs", { static: false }]
314
+ }], onSave: [{
315
+ type: Output
316
+ }], onChange: [{
317
+ type: Output
318
+ }], discardChanges: [{
319
+ type: Output
320
+ }], goBack: [{
321
+ type: Output
322
+ }], token: [{
323
+ type: Input
324
+ }], host: [{
325
+ type: Input
326
+ }], siteId: [{
327
+ type: Input
328
+ }], userId: [{
329
+ type: Input
330
+ }], isLdap: [{
331
+ type: Input
332
+ }], deviceName: [{
333
+ type: Input
334
+ }] } });
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtwSCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQU83RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sMkJBQTJCO0lBa0J0QyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLGFBQWE7UUFDYixPQUFRLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENB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ZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2ltcGxpZmllZFVzZXIgfSBmcm9tICcuL2NsYXNzZXMvc2ltcGxpZmllZC11c2VyJztcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbiB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uJztcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uLWludGVyZmFjZSc7XG5pbXBvcnQgeyBEZXZpY2UsIERldmljZVZpZXdUeXBlIH0gZnJvbSAnLi9jbGFzc2VzL2RldmljZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBJbmZvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb25maXJtLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kZXZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5lU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbGluZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNpdGVTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRPR0dMRV9UWVBFUyB9IGZyb20gJy4vYXBwLmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kZXZpY2UtbWFuYWdlLXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXZpY2UtbWFuYWdlLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RldmljZS1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERldmljZU1hbmFnZVdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChcInRhYnNcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRhYnMhOk1hdFRhYkdyb3VwO1xuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZGlzY2FyZENoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBnb0JhY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBob3N0ITogc3RyaW5nO1xuICBASW5wdXQoKSBzaXRlSWQhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcbiAgQElucHV0KCkgZGV2aWNlTmFtZSE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBkYXRhUGVuZGluZyE6IGJvb2xlYW47XG4gIHRhYkluZGV4ID0gMDtcbiAgZGV2aWNlSW5kZXghOiBudW1iZXI7XG4gIHRhYkluaXQgPSBmYWxzZTtcblxuICBnZXQgZm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmRldmljZT8uZm9ybTtcbiAgfVxuXG4gIGdldCBsaW5lQXNzb2NpYXRpb25zKCk6IExpbmVBc3NvY2lhdGlvbltdIHwgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlW10ge1xuICAgIHJldHVybiB0aGlzLmRldmljZT8ubGluZUFzc29jaWF0aW9ucztcbiAgfVxuXG4gIGdldCBkZXZpY2UoKTogRGV2aWNlIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICB0aGlzLmRldmljZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kZXZpY2VJbmRleCA+IC0xID8gdGhpcy51c2VyU2VydmljZS51c2VyLmRldmljZXNbdGhpcy5kZXZpY2VJbmRleF0gOiBudWxsO1xuICB9XG5cbiAgZ2V0IG9yaWdpbkRldmljZSgpOiBEZXZpY2Uge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZGV2aWNlSW5kZXggPiAtMSA/IHRoaXMudXNlclNlcnZpY2U/Lm9yaWdpblVzZXIuZGV2aWNlc1t0aGlzLmRldmljZUluZGV4XSA6IG51bGw7XG4gIH1cblxuICBnZXQgdXNlclRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcj8udG9rZW47XG4gIH1cblxuICBnZXQgdXNlcigpOiBTaW1wbGlmaWVkVXNlciB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UudXNlcjtcbiAgfVxuXG4gIGdldCBoYXNEZXZpY2VVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzKHRoaXMuZGV2aWNlLCB0aGlzLm9yaWdpbkRldmljZSk7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHVibGljIGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxuICAgIHB1YmxpYyBsaW5lU2VydmljZTogTGluZVNlcnZpY2UsXG4gICAgcHVibGljIHNpdGVTZXR0aW5nc1NlcnZpY2U6IFNpdGVTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy5hcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuaG9zdDtcbiAgICBjb25zb2xlLmxvZygndGhpcy5hcGlTZXJ2aWNlLmFwaVVybCA9ICcsIHRoaXMuYXBpU2VydmljZS5hcGlVcmwpO1xuICAgIC8vIHRoaXMuc2V0RGF0YSh0cnVlKTtcbiAgICB0aGlzLmdldERhdGEoKTtcblxuICAgIHRoaXMudXNlclNlcnZpY2Uub25GZXRjaFVzZXJUb2tlbiRcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldERhdGEoKTtcbiAgICAgIH0pXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1RBQlMgPSAnLCB0aGlzLnRhYnMpO1xuXG4gICAgaWYgKHRoaXMudGFicyAmJiAhdGhpcy50YWJJbml0KSB7XG4gICAgICBjb25zdCBoYW5kbGVUYWJDbGljayA9IHRoaXMudGFicy5faGFuZGxlQ2xpY2s7XG4gICAgICB0aGlzLnRhYkluaXQgPSB0cnVlO1xuXG4gICAgICAvLyAyLiBSZXBsYWNlIHRoZSBjbGljayBoYW5kbGVyIHdpdGggb3VyIGN1c3RvbSBmdW5jdGlvblxuICAgICAgdGhpcy50YWJzLl9oYW5kbGVDbGljayA9ICh0YWIsIGhlYWRlciwgaW5kZXgpID0+IHtcblxuICAgICAgICAvLyAzLiBJbXBsZW1lbnQgeW91ciBjb25kaXRpb25hbCBsb2dpYyBpbiBjYW5EZWFjdGl2YXRlVGFiKClcbiAgICAgICAgLy8gKHJldHVybiB0aGUgYm9vbGVhbiBoZXJlKVxuICAgICAgICBpZiAodGhpcy5oYXNEZXZpY2VVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgICAgIHRoaXMub3BlblVuc2F2ZWRDaGFuZ2VzRGlhbG9nKFRPR0dMRV9UWVBFUy5UQUJTLCB7aGFuZGxlVGFiQ2xpY2ssIHRhYiwgaGVhZGVyLCBpbmRleH0pO1xuXG4gICAgICAgICAgLy8gNC4gSWYgdGhlIHRhYiAqc2hvdWxkKiBiZSBjaGFuZ2VkLCBjYWxsIHRoZSAnb2xkJyBjbGljayBoYW5kbGVyXG4gICAgICAgICAgLy8gaGFuZGxlVGFiQ2xpY2suYXBwbHkodGhpcy50YWJzLCBbdGFiLCBoZWFkZXIsIGluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlVGFiQ2xpY2suYXBwbHkodGhpcy50YWJzLCBbdGFiLCBoZWFkZXIsIGluZGV4XSk7XG4gICAgICAgICAgdGhpcy50YWJJbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gIH1cblxuICBvbkdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XG4gIH1cblxuICB0b2dnbGVBc3NvY2lhdGVkTGluZShsaW5lSW5kZXg6IG51bWJlciwgbGluZUFzc29jaWF0aW9uOiBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfCBMaW5lQXNzb2NpYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkKSB7XG4gICAgICBsaW5lQXNzb2NpYXRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkID0gbGluZUFzc29jaWF0aW9uLmxpbmVQa2lkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWxpbmVBc3NvY2lhdGlvbi5oYXNDaGFuZ2VzICYmIGxpbmVBc3NvY2lhdGlvbi5hY3RpdmUpIHtcbiAgICAgIGxpbmVBc3NvY2lhdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnNIYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLm9wZW5VbnNhdmVkQ2hhbmdlc0RpYWxvZyhUT0dHTEVfVFlQRVMuQVNTT0NJQVRFRF9MSU5FX09OTFkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldExpbmVBY3RpdmUobGluZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBvcGVuVW5zYXZlZENoYW5nZXNEaWFsb2codG9nZ2xlVHlwZTogc3RyaW5nLCBoYW5kbGVUYWJDbGljaz86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oSW5mb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0Rpc2NhcmQgdW5zYXZlZCBlZGl0cz8nLFxuICAgICAgICBtZXNzYWdlOiAnWW91XFwncmUgYWJvdXQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIGFsbCB1bnNhdmVkIGFwcCBlZGl0cycsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnRGlzY2FyZCdcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHN3aXRjaCAodG9nZ2xlVHlwZSkge1xuICAgICAgICAgIGNhc2UgVE9HR0xFX1RZUEVTLlRBQlM6XG4gICAgICAgICAgICB0aGlzLnJlc2V0QnlUYWJUb2dnbGUoaGFuZGxlVGFiQ2xpY2spO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBUT0dHTEVfVFlQRVMuQVNTT0NJQVRFRF9MSU5FX09OTFk6XG4gICAgICAgICAgICB0aGlzLnJlc2V0TGluZShoYW5kbGVUYWJDbGljayk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYkluZGV4ID0gaGFuZGxlVGFiQ2xpY2suaW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNldEJ5VGFiVG9nZ2xlKGhhbmRsZVRhYkNsaWNrPzogYW55KTogdm9pZCB7XG4gICAgc3dpdGNoICh0aGlzLnRhYkluZGV4KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucmVzZXREZXZpY2UodGhpcy5kZXZpY2UsIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5yZXNldExpbmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZGlzY2FyZENoYW5nZXMuZW1pdCgpO1xuICAgIGlmIChoYW5kbGVUYWJDbGljaykge1xuICAgICAgaGFuZGxlVGFiQ2xpY2suaGFuZGxlVGFiQ2xpY2suYXBwbHkodGhpcy50YWJzLCBbaGFuZGxlVGFiQ2xpY2sudGFiLCBoYW5kbGVUYWJDbGljay5oZWFkZXIsIGhhbmRsZVRhYkNsaWNrLmluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRMaW5lKGxpbmVJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZCwgaGFuZGxlVGFiQ2xpY2s/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5lSW5kVG9SZXNldCA9IHRoaXMubGluZUFzc29jaWF0aW9ucy5maW5kSW5kZXgobGluZSA9PiBsaW5lLmFjdGl2ZSAmJiBsaW5lLmhhc0NoYW5nZXMpO1xuICAgIGlmIChsaW5lSW5kVG9SZXNldCA+IC0xKSB7XG4gICAgICB0aGlzLnJlc2V0QXNzb2NpYXRlZExpbmUobGluZUluZFRvUmVzZXQpO1xuICAgIH1cbiAgICBpZiAobGluZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgbGluZUluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2V0TGluZUFjdGl2ZShsaW5lSW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmRpc2NhcmRDaGFuZ2VzLmVtaXQoKTtcbiAgICBpZiAoaGFuZGxlVGFiQ2xpY2spIHtcbiAgICAgIGhhbmRsZVRhYkNsaWNrLmhhbmRsZVRhYkNsaWNrLmFwcGx5KHRoaXMudGFicywgW2hhbmRsZVRhYkNsaWNrLnRhYiwgaGFuZGxlVGFiQ2xpY2suaGVhZGVyLCBoYW5kbGVUYWJDbGljay5pbmRleF0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlTGluZShsaW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5saW5lQXNzb2NpYXRpb25zIHx8ICF0aGlzLmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdSZW1vdmUgZGV2aWNlIGFzc29jaWF0ZWQgbGluZT8nLFxuICAgICAgICBtZXNzYWdlOiBgWW91XFwncmUgc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSAke3RoaXMubGluZUFzc29jaWF0aW9uc1tsaW5lSW5kZXhdLmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyfSBhc3NvY2lhdGVkIGxpbmVgLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0RlbGV0ZSBMaW5lJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsZXRlTGluZSh0aGlzLmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNldEFzc29jaWF0ZWRMaW5lKGxpbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlcj8uZGV2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZXZpY2VJbmQgPSB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmRldmljZXMuZmluZEluZGV4KChkZXZpY2U6IERldmljZSkgPT4gZGV2aWNlLm5hbWUgPT09IHRoaXMuZGV2aWNlLm5hbWUpO1xuICAgICAgaWYgKGRldmljZUluZCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucmVzZXRMaW5lQXNzb2NpYXRpb24oZGV2aWNlSW5kLCBsaW5lSW5kZXgsIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpO1xuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIuZGV2aWNlc1t0aGlzLmRldmljZUluZGV4XS5saW5lQXNzb2NpYXRpb25zSGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgc2V0TGluZUFjdGl2ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGluZUFzc29jaWF0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRldmljZS5saW5lQXNzb2NpYXRpb25zLmZvckVhY2gobGluZSA9PiBsaW5lLmFjdGl2ZSA9IGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGluZUFzc29jaWF0aW9uc1tpbmRleF0pIHtcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuY3VycmVudEFjdGl2ZUxpbmVQa2lkID0gdGhpcy5kZXZpY2UubGluZUFzc29jaWF0aW9uc1tpbmRleF0ubGluZVBraWQ7XG4gICAgICB0aGlzLmRldmljZS5saW5lQXNzb2NpYXRpb25zW2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uRGV2aWNlU2F2ZSgpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHRoaXMudGFiSW5kZXgpIHtcbiAgICAgIGNhc2UgRGV2aWNlVmlld1R5cGUuSU5GTzpcbiAgICAgICAgdGhpcy51cGRhdGVEZXZpY2UodGhpcy5zaXRlSWQsIHRoaXMuZGV2aWNlPy5uYW1lLCB0aGlzLnVzZXJUb2tlbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEZXZpY2VWaWV3VHlwZS5MSU5FUzpcbiAgICAgICAgdGhpcy5vblVwZGF0ZUxpbmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGV2aWNlU2F2ZSgpO1xuICB9XG5cbiAgb25VcGRhdGVEZXZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEZXZpY2UodGhpcy5zaXRlSWQsIHRoaXMuZGV2aWNlPy5uYW1lLCB0aGlzLnVzZXJUb2tlbik7XG4gIH1cblxuICBvblVwZGF0ZUxpbmUoKTogdm9pZCB7XG4gICAgdGhpcy5saW5lU2VydmljZS5vblNhdmVMaW5lQXNzb2NpYXRpb25FdmVudC5uZXh0KHRydWUpO1xuICB9XG5cbiAgYWZ0ZXJMaW5lVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMub25TYXZlLmVtaXQoJ2Fzc29jaWF0ZWQgbGluZSBpcyB1cGRhdGVkJyk7XG4gIH1cblxuICB1cGRhdGVEZXZpY2Uoc2l0ZUlkOiBudW1iZXIsIGRldmljZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRldmljZVNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXModGhpcy5kZXZpY2UsIHRoaXMub3JpZ2luRGV2aWNlKSAmJiAhdGhpcy5kYXRhUGVuZGluZykge1xuICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgICBjb25zdCBjYWxscyA9IFtdXG4gICAgICBpZiAodGhpcy5kZXZpY2VTZXJ2aWNlLmhhc0RldmljZUluZm9VbnNhdmVkQ2hhbmdlcyh0aGlzLmRldmljZSwgdGhpcy5vcmlnaW5EZXZpY2UpKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGF0YVRvVXBkYXRlRGV2aWNlKHRoaXMuZGV2aWNlLCB0aGlzLm9yaWdpbkRldmljZSk7XG4gICAgICAgIGNhbGxzLnB1c2godGhpcy5kZXZpY2VTZXJ2aWNlLnB1dERldmljZUZpZWxkcyhzaXRlSWQsIGRldmljZU5hbWUsIHRva2VuLCBib2R5KSlcbiAgICAgIH1cbiAgICAgIGlmIChjYWxscz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvcmtKb2luKGNhbGxzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UucGVyc2lzdFVzZXJDYWNoZSgpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5mZXRjaFVzZXJUb2tlbih0aGlzLnNpdGVJZCwgdGhpcy51c2VyU2VydmljZS51c2VyLnVzZXJpZCwgdGhpcy52YWxpZGF0aW9uU2VydmljZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoJ2RldmljZSB1cGRhdGVkJyk7XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sICgpID0+IHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2VGaWVsZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXZpY2UpIHtcbiAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXIuZGV2aWNlc1t0aGlzLmRldmljZUluZGV4XSBhcyBhbnkpW3Rva2VuXSA9IHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8udmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcbiAgICBmb3JrSm9pbihbXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoVXNlclRva2VuKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJJZCwgdGhpcy52YWxpZGF0aW9uU2VydmljZSksXG4gICAgICB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0RGV2aWNlU29mdGtleVRlbXBsYXRlcyh0aGlzLnNpdGVJZCksXG4gICAgICB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZ2V0U2l0ZURlZmF1bHRzKHRoaXMuc2l0ZUlkKVxuICAgIF0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZGV2aWNlIHdpZGdldCB1c2VyJywgdGhpcy51c2VyKTtcbiAgICAgIGlmICh0aGlzLm9yaWdpbkRldmljZT8uY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSAmJiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2U/LnNpdGVEZWZhdWx0cz8uY3NzRmlsdGVyKSB7XG4gICAgICAgIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5zaXRlRGVmYXVsdHMuY3NzRmlsdGVyLnB1c2godGhpcy5vcmlnaW5EZXZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldERhdGEoKTtcbiAgICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgICB9LCAoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpXG4gIH1cblxuICBwcml2YXRlIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xuICAgIHZhciBleHBpcmVzID0gXCJcIjtcbiAgICBpZiAoZGF5cykge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvVVRDU3RyaW5nKCk7XG4gICAgfVxuICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArICh2YWx1ZSB8fCBcIlwiKSArIGV4cGlyZXMgKyBcIjsgcGF0aD0vXCI7XG4gIH1cblxuXG4gIHByaXZhdGUgc2V0RGF0YShpc0luaXQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLyppZiAoaXNJbml0KSB7XG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIgPSBuZXcgU2ltcGxpZmllZFVzZXIoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXIuZ2V0RnVsbERhdGEoKSkpLCB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlKTtcbiAgICAgIHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlciA9IG5ldyBTaW1wbGlmaWVkVXNlcihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudXNlci5nZXRGdWxsRGF0YSgpKSksIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpO1xuICAgIH0qL1xuICAgIGlmICh0aGlzLmRldmljZU5hbWUgJiYgdGhpcy51c2VyU2VydmljZS51c2VyPy5kZXZpY2VzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGV2aWNlSW5kZXggPSB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIuZGV2aWNlcy5maW5kSW5kZXgoKGRldmljZTogRGV2aWNlKSA9PiBkZXZpY2UubmFtZSA9PT0gdGhpcy5kZXZpY2VOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUxpbmUobGluZTogTGluZUFzc29jaWF0aW9uIHwgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlKTogdm9pZCB7XG4gICAgdGhpcy5saW5lU2VydmljZS5kZWxldGVMaW5lKHRoaXMuc2l0ZUlkLCBsaW5lLmxpbmVQa2lkLCB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIudG9rZW4pXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5wZXJzaXN0VXNlckNhY2hlKClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZmV0Y2hVc2VyVG9rZW4odGhpcy5zaXRlSWQsIHRoaXMudXNlclNlcnZpY2UudXNlci51c2VyaWQsIHRoaXMudmFsaWRhdGlvblNlcnZpY2UpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlZExpbmVBc3NvY2lhdGlvbkV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICB9KVxuICB9XG5cbn1cbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmcgfHwgZGV2aWNlU2VydmljZS5kYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cbjxkaXYgaWQ9XCJkZXZpY2UtbWFuYWdlLXdpZGdldFwiPlxuICA8ZGl2IGNsYXNzPVwiZ28tYmFjay1ib3hcIiAoY2xpY2spPVwib25Hb0JhY2soKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveC1jb250YWluZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWljb24gaWNvbi13ZWJleC1sZWZ0LWFycm93XCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJnby1iYWNrLXRpdGxlXCI+VXNlciBEZXZpY2VzPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG1hdC10YWItZ3JvdXAgI3RhYnMgYW5pbWF0aW9uRHVyYXRpb249XCIwXCIgIG1hdC1hbGlnbi10YWJzPVwic3RhcnRcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQtYm94XCI+XG4gICAgPG1hdC10YWIgbGFiZWw9XCJEZXZpY2VcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlZGl0RGV2aWNlXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdGFiPlxuICAgIDxtYXQtdGFiIGxhYmVsPVwiQXNzb2NpYXRlZCBMaW5lc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGluZUFzc29jaWF0aW9uIG9mIGxpbmVBc3NvY2lhdGlvbnMsIGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8YXBwLWFzc29jaWF0ZWQtbGluZS1yb3dcbiAgICAgICAgICAgIFtsaW5lXT1cImxpbmVBc3NvY2lhdGlvblwiXG4gICAgICAgICAgICAocmVtb3ZlQXNzb2NpYXRlZExpbmUpPVwib25SZW1vdmVMaW5lKGkpXCJcbiAgICAgICAgICAgICh0b2dnbGVBc3NvY2lhdGVkTGluZSk9XCJ0b2dnbGVBc3NvY2lhdGVkTGluZShpLCBsaW5lQXNzb2NpYXRpb24pXCI+PC9hcHAtYXNzb2NpYXRlZC1saW5lLXJvdz5cbiAgICAgICAgICA8YXBwLWRldmljZS1hc3NvY2lhdGVkLWxpbmUgKm5nSWY9XCJsaW5lQXNzb2NpYXRpb24uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldmljZUluZGV4XT1cImRldmljZUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cGRhdGVkTGluZUFzc29jaWF0aW9uRXZlbnQpPVwiYWZ0ZXJMaW5lVXBkYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGluZUluZGV4XT1cImlcIj48L2FwcC1kZXZpY2UtYXNzb2NpYXRlZC1saW5lPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LXRhYj5cbiAgICA8bWF0LXRhYiA+PC9tYXQtdGFiPlxuICAgIDxtYXQtdGFiID48L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cblxuICA8bmctdGVtcGxhdGUgI2VkaXREZXZpY2U+XG4gICAgPGZvcm0gKm5nSWY9XCJkZXZpY2UgJiYgZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYm94ZXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWluZm8tYm94IHVzZXItZGV0YWlscy1ib3hfX2luZm9cIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJ1c2VyLWJveC10aXRsZVwiPkRldGFpbHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvbGRlcl9fYmxvY2tzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2tcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGl0bGVcIj57e3VzZXI/LmZpcnN0TmFtZX19IHt7dXNlcj8ubGFzdE5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190YWdcIj5OYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190aXRsZVwiPkNpc2NvIGR1YWwgbW9kZSBmb3IgYW5kb3JpZDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190YWdcIj5UeXBlPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190aXRsZVwiPkRhdmlkIEFsZXhhbmRlciAxNTQ1NTQ1MTU0NTU0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1fX3RhZ1wiPkRldmljZSBEZXNjcmlwdGlvbjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2tcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItYm94LWJsb2NrLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbV9fdGl0bGVcIj4xNTQ1NDE1NDU1NTQ1IHwgNTU0NTU0NDQ4NTQ1NCB8IDk5ODk4OTQ1NDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190YWdcIj5MaW5lPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9ja1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1ib3gtYmxvY2staXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWJveC1ibG9jay1pdGVtX190aXRsZVwiPlBMQVIgU2VydmljZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG5hbWU9XCJwbGFyU2VydmljZVwiIGZvcm1Db250cm9sTmFtZT1cInBsYXJTZXJ2aWNlXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tICAgIERFVklDRSBJTkZPIEJPWC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbmZvLWJveCB1c2VyLWRldGFpbHMtYm94XCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwidXNlci1ib3gtdGl0bGVcIj5EZXZpY2UgSW5mbzwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taG9sZGVyX19pbnB1dHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJlZ2lzdHJhdGlvbiBTdGF0dXM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2FibGVkLWRhdGEtYmxvY2tcIj57e2RldmljZS5yZWdpc3RyYXRpb25TdGF0dXN9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicmVnaXN0cmF0aW9uU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgncmVnaXN0cmF0aW9uU3RhdHVzJylcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPi0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5JUCBBZGRyZXNzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXNhYmxlZC1kYXRhLWJsb2NrXCI+e3tkZXZpY2UuaXBBZGRyZXNzfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkZXNjcmlwdGlvbicpXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UHJvdG9jb2w8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2FibGVkLWRhdGEtYmxvY2tcIj57e2RldmljZS5wcm90b2NvbH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Tb2Z0a2V5IFRlbXBsYXRlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzb2Z0a2V5VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdzb2Z0a2V5VGVtcGxhdGUnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBzaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVNvZnRrZXlUZW1wbGF0ZXNcIiBbdmFsdWVdPVwidHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7dHlwZX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgnc29mdGtleVRlbXBsYXRlJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkJ1dHRvbiBUZW1wbGF0ZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzYWJsZWQtZGF0YS1ibG9ja1wiPnt7ZGV2aWNlLmJ1dHRvblRlbXBsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxvY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXNhYmxlZC1kYXRhLWJsb2NrXCI+e3tkZXZpY2UubG9jYXRpb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGV2aWNlIFBvb2w8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImRldmljZVBvb2xOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZGV2aWNlUG9vbE5hbWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBzaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzXCIgW3ZhbHVlXT1cInR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e3R5cGV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoJ2RldmljZVBvb2xOYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRldmljZSBDU1M8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhbGxpbmdTZWFyY2hTcGFjZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdjYWxsaW5nU2VhcmNoU3BhY2VOYW1lJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2l0ZVNldHRpbmdzU2VydmljZS5jYWxsaW5nU2VhcmNoU3BhY2VUeXBlc1wiIFt2YWx1ZV09XCJ0eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3t0eXBlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm0uZ2V0KCdjYWxsaW5nU2VhcmNoU3BhY2VOYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkZpcm13YXJlIHZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc2FibGVkLWRhdGEtYmxvY2tcIj57e2RldmljZS5maXJtd2FyZVZlcnNpb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICA8L2Rpdj5cblxuICAgIDwvZm9ybT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPC9kaXY+XG5cblxuXG5cblxuIl19