@bizdoc/core 1.9.14 → 1.10.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/assets/dayjs/locale/af.js +1 -0
  2. package/assets/dayjs/locale/am.js +1 -0
  3. package/assets/dayjs/locale/ar-dz.js +1 -0
  4. package/assets/dayjs/locale/ar-iq.js +1 -0
  5. package/assets/dayjs/locale/ar-kw.js +1 -0
  6. package/assets/dayjs/locale/ar-ly.js +1 -0
  7. package/assets/dayjs/locale/ar-ma.js +1 -0
  8. package/assets/dayjs/locale/ar-sa.js +1 -0
  9. package/assets/dayjs/locale/ar-tn.js +1 -0
  10. package/assets/dayjs/locale/ar.js +1 -0
  11. package/assets/dayjs/locale/az.js +1 -0
  12. package/assets/dayjs/locale/be.js +1 -0
  13. package/assets/dayjs/locale/bg.js +1 -0
  14. package/assets/dayjs/locale/bi.js +1 -0
  15. package/assets/dayjs/locale/bm.js +1 -0
  16. package/assets/dayjs/locale/bn.js +1 -0
  17. package/assets/dayjs/locale/bo.js +1 -0
  18. package/assets/dayjs/locale/br.js +1 -0
  19. package/assets/dayjs/locale/bs.js +1 -0
  20. package/assets/dayjs/locale/ca.js +1 -0
  21. package/assets/dayjs/locale/cs.js +1 -0
  22. package/assets/dayjs/locale/cv.js +1 -0
  23. package/assets/dayjs/locale/cy.js +1 -0
  24. package/assets/dayjs/locale/da.js +1 -0
  25. package/assets/dayjs/locale/de-at.js +1 -0
  26. package/assets/dayjs/locale/de-ch.js +1 -0
  27. package/assets/dayjs/locale/de.js +1 -0
  28. package/assets/dayjs/locale/dv.js +1 -0
  29. package/assets/dayjs/locale/el.js +1 -0
  30. package/assets/dayjs/locale/en-au.js +1 -0
  31. package/assets/dayjs/locale/en-ca.js +1 -0
  32. package/assets/dayjs/locale/en-gb.js +1 -0
  33. package/assets/dayjs/locale/en-ie.js +1 -0
  34. package/assets/dayjs/locale/en-il.js +1 -0
  35. package/assets/dayjs/locale/en-in.js +1 -0
  36. package/assets/dayjs/locale/en-nz.js +1 -0
  37. package/assets/dayjs/locale/en-sg.js +1 -0
  38. package/assets/dayjs/locale/en-tt.js +1 -0
  39. package/assets/dayjs/locale/en.js +1 -0
  40. package/assets/dayjs/locale/eo.js +1 -0
  41. package/assets/dayjs/locale/es-do.js +1 -0
  42. package/assets/dayjs/locale/es-mx.js +1 -0
  43. package/assets/dayjs/locale/es-pr.js +1 -0
  44. package/assets/dayjs/locale/es-us.js +1 -0
  45. package/assets/dayjs/locale/es.js +1 -0
  46. package/assets/dayjs/locale/et.js +1 -0
  47. package/assets/dayjs/locale/eu.js +1 -0
  48. package/assets/dayjs/locale/fa.js +1 -0
  49. package/assets/dayjs/locale/fi.js +1 -0
  50. package/assets/dayjs/locale/fo.js +1 -0
  51. package/assets/dayjs/locale/fr-ca.js +1 -0
  52. package/assets/dayjs/locale/fr-ch.js +1 -0
  53. package/assets/dayjs/locale/fr.js +1 -0
  54. package/assets/dayjs/locale/fy.js +1 -0
  55. package/assets/dayjs/locale/ga.js +1 -0
  56. package/assets/dayjs/locale/gd.js +1 -0
  57. package/assets/dayjs/locale/gl.js +1 -0
  58. package/assets/dayjs/locale/gom-latn.js +1 -0
  59. package/assets/dayjs/locale/gu.js +1 -0
  60. package/assets/dayjs/locale/he.js +1 -0
  61. package/assets/dayjs/locale/hi.js +1 -0
  62. package/assets/dayjs/locale/hr.js +1 -0
  63. package/assets/dayjs/locale/ht.js +1 -0
  64. package/assets/dayjs/locale/hu.js +1 -0
  65. package/assets/dayjs/locale/hy-am.js +1 -0
  66. package/assets/dayjs/locale/id.js +1 -0
  67. package/assets/dayjs/locale/index.d.ts +11 -0
  68. package/assets/dayjs/locale/is.js +1 -0
  69. package/assets/dayjs/locale/it-ch.js +1 -0
  70. package/assets/dayjs/locale/it.js +1 -0
  71. package/assets/dayjs/locale/ja.js +1 -0
  72. package/assets/dayjs/locale/jv.js +1 -0
  73. package/assets/dayjs/locale/ka.js +1 -0
  74. package/assets/dayjs/locale/kk.js +1 -0
  75. package/assets/dayjs/locale/km.js +1 -0
  76. package/assets/dayjs/locale/kn.js +1 -0
  77. package/assets/dayjs/locale/ko.js +1 -0
  78. package/assets/dayjs/locale/ku.js +1 -0
  79. package/assets/dayjs/locale/ky.js +1 -0
  80. package/assets/dayjs/locale/lb.js +1 -0
  81. package/assets/dayjs/locale/lo.js +1 -0
  82. package/assets/dayjs/locale/lt.js +1 -0
  83. package/assets/dayjs/locale/lv.js +1 -0
  84. package/assets/dayjs/locale/me.js +1 -0
  85. package/assets/dayjs/locale/mi.js +1 -0
  86. package/assets/dayjs/locale/mk.js +1 -0
  87. package/assets/dayjs/locale/ml.js +1 -0
  88. package/assets/dayjs/locale/mn.js +1 -0
  89. package/assets/dayjs/locale/mr.js +1 -0
  90. package/assets/dayjs/locale/ms-my.js +1 -0
  91. package/assets/dayjs/locale/ms.js +1 -0
  92. package/assets/dayjs/locale/mt.js +1 -0
  93. package/assets/dayjs/locale/my.js +1 -0
  94. package/assets/dayjs/locale/nb.js +1 -0
  95. package/assets/dayjs/locale/ne.js +1 -0
  96. package/assets/dayjs/locale/nl-be.js +1 -0
  97. package/assets/dayjs/locale/nl.js +1 -0
  98. package/assets/dayjs/locale/nn.js +1 -0
  99. package/assets/dayjs/locale/oc-lnc.js +1 -0
  100. package/assets/dayjs/locale/pa-in.js +1 -0
  101. package/assets/dayjs/locale/pl.js +1 -0
  102. package/assets/dayjs/locale/pt-br.js +1 -0
  103. package/assets/dayjs/locale/pt.js +1 -0
  104. package/assets/dayjs/locale/ro.js +1 -0
  105. package/assets/dayjs/locale/ru.js +1 -0
  106. package/assets/dayjs/locale/rw.js +1 -0
  107. package/assets/dayjs/locale/sd.js +1 -0
  108. package/assets/dayjs/locale/se.js +1 -0
  109. package/assets/dayjs/locale/si.js +1 -0
  110. package/assets/dayjs/locale/sk.js +1 -0
  111. package/assets/dayjs/locale/sl.js +1 -0
  112. package/assets/dayjs/locale/sq.js +1 -0
  113. package/assets/dayjs/locale/sr-cyrl.js +1 -0
  114. package/assets/dayjs/locale/sr.js +1 -0
  115. package/assets/dayjs/locale/ss.js +1 -0
  116. package/assets/dayjs/locale/sv-fi.js +1 -0
  117. package/assets/dayjs/locale/sv.js +1 -0
  118. package/assets/dayjs/locale/sw.js +1 -0
  119. package/assets/dayjs/locale/ta.js +1 -0
  120. package/assets/dayjs/locale/te.js +1 -0
  121. package/assets/dayjs/locale/tet.js +1 -0
  122. package/assets/dayjs/locale/tg.js +1 -0
  123. package/assets/dayjs/locale/th.js +1 -0
  124. package/assets/dayjs/locale/tk.js +1 -0
  125. package/assets/dayjs/locale/tl-ph.js +1 -0
  126. package/assets/dayjs/locale/tlh.js +1 -0
  127. package/assets/dayjs/locale/tr.js +1 -0
  128. package/assets/dayjs/locale/types.d.ts +33 -0
  129. package/assets/dayjs/locale/tzl.js +1 -0
  130. package/assets/dayjs/locale/tzm-latn.js +1 -0
  131. package/assets/dayjs/locale/tzm.js +1 -0
  132. package/assets/dayjs/locale/ug-cn.js +1 -0
  133. package/assets/dayjs/locale/uk.js +1 -0
  134. package/assets/dayjs/locale/ur.js +1 -0
  135. package/assets/dayjs/locale/uz-latn.js +1 -0
  136. package/assets/dayjs/locale/uz.js +1 -0
  137. package/assets/dayjs/locale/vi.js +1 -0
  138. package/assets/dayjs/locale/x-pseudo.js +1 -0
  139. package/assets/dayjs/locale/yo.js +1 -0
  140. package/assets/dayjs/locale/zh-cn.js +1 -0
  141. package/assets/dayjs/locale/zh-hk.js +1 -0
  142. package/assets/dayjs/locale/zh-tw.js +1 -0
  143. package/assets/dayjs/locale/zh.js +1 -0
  144. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +2 -2
  145. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +6 -7
  146. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +1 -1
  147. package/esm2020/lib/admin/profiler/profiler.component.mjs +8 -8
  148. package/esm2020/lib/bizdoc.module.mjs +5 -17
  149. package/esm2020/lib/browse/browse-items.component.mjs +4 -3
  150. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +10 -10
  151. package/esm2020/lib/chat/contacts.component.mjs +4 -3
  152. package/esm2020/lib/chat/conversation.component.mjs +6 -4
  153. package/esm2020/lib/compose/attachments/attachments.component.mjs +1 -1
  154. package/esm2020/lib/compose/comments/comment.component.mjs +4 -3
  155. package/esm2020/lib/compose/comments/edits.component.mjs +1 -1
  156. package/esm2020/lib/compose/comments/votes.component.mjs +4 -3
  157. package/esm2020/lib/compose/compose.pane.component.mjs +3 -1
  158. package/esm2020/lib/compose/events/events.component.mjs +1 -1
  159. package/esm2020/lib/compose/trace/flow.component.mjs +9 -10
  160. package/esm2020/lib/compose/trace/trace.base.mjs +3 -4
  161. package/esm2020/lib/compose/trace/trace.component.mjs +8 -8
  162. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +2 -2
  163. package/esm2020/lib/core/pipes/calendar.pipe.mjs +74 -0
  164. package/esm2020/lib/core/pipes/date-format.pipe.mjs +19 -0
  165. package/esm2020/lib/core/pipes/daterange.pipe.mjs +7 -8
  166. package/esm2020/lib/core/pipes/difference.pipe.mjs +15 -0
  167. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +50 -0
  168. package/esm2020/lib/core/pipes/duration.pipe.mjs +17 -42
  169. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +68 -0
  170. package/esm2020/lib/core/session.service.mjs +6 -6
  171. package/esm2020/lib/core/slots/slots.component.mjs +8 -7
  172. package/esm2020/lib/core/tagging/edit-input.component.mjs +7 -6
  173. package/esm2020/lib/core/translate.service.mjs +26 -101
  174. package/esm2020/lib/cube/cube-view.component.mjs +13 -2
  175. package/esm2020/lib/cube/cube.service.mjs +2 -2
  176. package/esm2020/lib/cube/explore/explore-items.component.mjs +1 -1
  177. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +2 -3
  178. package/esm2020/lib/cube/matrix/table.component.mjs +4 -4
  179. package/esm2020/lib/cube/pivot/pivot.component.mjs +12 -10
  180. package/esm2020/lib/cube/view-base.mjs +1 -1
  181. package/esm2020/lib/cube/view.pane.component.mjs +7 -4
  182. package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -4
  183. package/esm2020/lib/dashboard/score/compare-departments.widget.mjs +4 -5
  184. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +5 -5
  185. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +6 -5
  186. package/esm2020/lib/dashboard/score/personal-score.widget.mjs +2 -2
  187. package/esm2020/lib/desktop.module.mjs +1 -5
  188. package/esm2020/lib/home/about/about.dialog.mjs +4 -5
  189. package/esm2020/lib/home/notifications/notifications.component.mjs +5 -4
  190. package/esm2020/lib/mobile.module.mjs +1 -5
  191. package/esm2020/lib/modules/date.adapter.mjs +30 -0
  192. package/esm2020/lib/modules/datepicker.intl.mjs +39 -0
  193. package/esm2020/lib/modules/material.module.mjs +11 -5
  194. package/esm2020/lib/modules/paginator.intl.mjs +21 -0
  195. package/esm2020/lib/modules/stepper.intl.mjs +17 -0
  196. package/esm2020/lib/modules/texteditor.module.mjs +27 -0
  197. package/esm2020/lib/notifications/notifications-table.component.mjs +4 -3
  198. package/esm2020/lib/notifications/types/nudge.notification.mjs +3 -4
  199. package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +4 -5
  200. package/esm2020/lib/reports/cube/grid-documents.component.mjs +1 -1
  201. package/esm2020/lib/reports/substitution/substitution.component.mjs +1 -1
  202. package/esm2020/lib/scheduler/schedule.component.mjs +5 -6
  203. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +4 -5
  204. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +4 -5
  205. package/esm2020/lib/shared.module.mjs +20 -16
  206. package/esm2020/lib/system.module.mjs +1 -5
  207. package/esm2020/lib/views/cube/matrix.component.mjs +1 -1
  208. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -4
  209. package/esm2020/public-api.mjs +7 -2
  210. package/fesm2015/bizdoc-core.mjs +511 -305
  211. package/fesm2015/bizdoc-core.mjs.map +1 -1
  212. package/fesm2020/bizdoc-core.mjs +511 -303
  213. package/fesm2020/bizdoc-core.mjs.map +1 -1
  214. package/lib/admin/diff/configuration-diff.component.d.ts +1 -1
  215. package/lib/bizdoc.module.d.ts +6 -7
  216. package/lib/chat/conversation.component.d.ts +1 -1
  217. package/lib/compose/trace/flow.component.d.ts +1 -1
  218. package/lib/compose/trace/trace.component.d.ts +1 -1
  219. package/lib/compose/version-compare/version.pane.component.d.ts +1 -1
  220. package/lib/core/pipes/calendar.pipe.d.ts +27 -0
  221. package/lib/core/pipes/date-format.pipe.d.ts +8 -0
  222. package/lib/core/pipes/daterange.pipe.d.ts +1 -1
  223. package/lib/core/pipes/difference.pipe.d.ts +7 -0
  224. package/lib/core/pipes/duration-format.pipe.d.ts +11 -0
  225. package/lib/core/pipes/duration.pipe.d.ts +5 -8
  226. package/lib/core/pipes/time-ago.pipe.d.ts +16 -0
  227. package/lib/core/session.service.d.ts +2 -1
  228. package/lib/core/translate.service.d.ts +2 -56
  229. package/lib/cube/pivot/pivot.component.d.ts +3 -5
  230. package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
  231. package/lib/dashboard/score/personal-score.widget.d.ts +1 -1
  232. package/lib/desktop.module.d.ts +2 -3
  233. package/lib/home/about/about.dialog.d.ts +2 -1
  234. package/lib/mobile.module.d.ts +2 -3
  235. package/lib/modules/date.adapter.d.ts +13 -0
  236. package/lib/modules/datepicker.intl.d.ts +30 -0
  237. package/lib/modules/paginator.intl.d.ts +14 -0
  238. package/lib/modules/stepper.intl.d.ts +10 -0
  239. package/lib/modules/texteditor.module.d.ts +8 -0
  240. package/lib/notifications/types/nudge.notification.d.ts +2 -1
  241. package/lib/notifications/types/upcoming-event.notification.d.ts +2 -1
  242. package/lib/shared.module.d.ts +175 -171
  243. package/lib/system.module.d.ts +4 -5
  244. package/lib/views/cube/matrix.component.d.ts +2 -2
  245. package/package.json +3 -5
  246. package/public-api.d.ts +6 -1
@@ -36,7 +36,8 @@ import * as i23 from "../compose/state.component";
36
36
  import * as i24 from "@angular/flex-layout/extended";
37
37
  import * as i25 from "@angular/material/core";
38
38
  import * as i26 from "../core/pipes/translate.pipe";
39
- import * as i27 from "ngx-moment";
39
+ import * as i27 from "../core/pipes/calendar.pipe";
40
+ import * as i28 from "../core/pipes/time-ago.pipe";
40
41
  export const TAKE = 200, SIZE = 20, HEADER_COLUMN_NAMES = ['number', 'subject', 'value', 'owner', 'sender', 'received', 'receivedAgo', 'replied', 'state', 'issued', 'issuedAgo'];
41
42
  /** browse items component*/
42
43
  export class BrowseItemsComponent {
@@ -422,7 +423,7 @@ export class BrowseItemsComponent {
422
423
  }
423
424
  }
424
425
  BrowseItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: BrowseItemsComponent, deps: [{ token: i1.MailboxService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.PromptService }, { token: i5.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i6.RouterImpl }, { token: i7.HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
425
- BrowseItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [item]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], components: [{ type: i8.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i14.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i15.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: i16.ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["item"], outputs: ["sent"] }, { type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i17.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i18.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i18.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i19.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i14.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i10.MatCellDef, selector: "[matCellDef]" }, { type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i22.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i23.StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { type: i20.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i20.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i20.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i20.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i24.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i18.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i21.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i25.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i24.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i21.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { type: i21.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { type: i18.MatMenuContent, selector: "ng-template[matMenuContent]" }], pipes: { "translate": i26.TranslatePipe, "amCalendar": i27.CalendarPipe, "amTimeAgo": i27.TimeAgoPipe, "number": i20.DecimalPipe, "currency": i20.CurrencyPipe }, animations: [
426
+ BrowseItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [item]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], components: [{ type: i8.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i14.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i15.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: i16.ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["item"], outputs: ["sent"] }, { type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i17.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i18.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i18.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i19.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i20.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i21.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i14.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i10.MatCellDef, selector: "[matCellDef]" }, { type: i10.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i22.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i23.StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { type: i20.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i20.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i20.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i20.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i24.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i18.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i21.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i25.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i20.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i24.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i21.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { type: i21.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { type: i18.MatMenuContent, selector: "ng-template[matMenuContent]" }], pipes: { "translate": i26.TranslatePipe, "amCalendar": i27.CalendarPipe, "amTimeAgo": i28.TimeAgoPipe, "number": i20.DecimalPipe, "currency": i20.CurrencyPipe }, animations: [
426
427
  listAnimation,
427
428
  itemAnimation,
428
429
  expandListItemAnimation,
@@ -458,4 +459,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
458
459
  type: ViewChild,
459
460
  args: [MatPaginator, { static: true }]
460
461
  }] } });
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYnJvd3NlL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2Jyb3dzZS9icm93c2UtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBK0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBYyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUE2RCxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTckgsT0FBTyxFQUFnQixhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVC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LENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxJQUFJLElBQUksSUFBSyxJQUF1QixDQUFDLFFBQVE7Z0JBQzFDLElBQTRCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxJQUFJLElBQUksSUFBSyxJQUF1QixDQUFDLFFBQVEsRUFBRTtnQkFDN0MsTUFBTSxPQUFPLEdBQUksSUFBNEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFD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T0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O2lIQW5aVSxvQkFBb0IsMlBBb0NyQixhQUFhO3FHQXBDWixvQkFBb0IsOE5BT3BCLE9BQU8sMEZBQ1AsWUFBWSxtRkMxQ3pCLCt5VEEyS0EsdW9PRGpKYztRQUNWLGFBQWE7UUFDYixhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLHdCQUF3QjtLQUN6QjsyRkFHVSxvQkFBb0I7a0JBWmhDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CO3dCQUNWLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLHdCQUF3QjtxQkFDekI7OzBCQXVDRSxNQUFNOzJCQUFDLGFBQWE7NENBbkNFLE1BQU07c0JBQTlCLE1BQU07dUJBQUMsTUFBTTtnQkFDVyxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBQ0wsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFZ0MsSUFBSTtzQkFBekMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNPLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIElucHV0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luLCBvZiwgU3ViamVjdCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwLCBzaGFyZVJlcGxheSwgZmluYWxpemUsIG1hcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEZvbGRlciwgSGVhZGVyTW9kZWwsIFJlY2lwaWVudE1vZGVsLCBBY3Rpb24sIEZvbGRlckNvbHVtbiwgRFJBRlQgfSBmcm9tICcuLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IGlzTW9iaWxlLCBxdWVyeVBhcmFtcyB9IGZyb20gJy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgZXhwYW5kTGlzdEl0ZW1BbmltYXRpb24sIGl0ZW1BbmltYXRpb24sIGxpc3RBbmltYXRpb24sIGxpc3RJdGVtVXBkYXRlZEFuaW1hdGlvbiB9IGZyb20gJy4uL2NvcmUvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUsIEl0ZW1FeHRyYSwgTWFpbGJveFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL21haWxib3guc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YlNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2h1Yi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UgfSBmcm9tICcuLi9jdWJlL2N1YmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnJvd3NlRmlsdGVyQXJncyB9IGZyb20gJy4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3V0ZXJJbXBsIH0gZnJvbSAnLi4vY29yZS9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCaXpEb2NDb25maWcsIEJJWkRPQ19DT05GSUcsIE9wZW5Qb2xpY3kgfSBmcm9tICcuLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRBS0UgPSAyMDAsIFNJWkUgPSAyMCwgSEVBREVSX0NPTFVNTl9OQU1FUyA9IFsnbnVtYmVyJywgJ3N1YmplY3QnLCAndmFsdWUnLCAnb3duZXInLCAnc2VuZGVyJywgJ3JlY2VpdmVkJywgJ3JlY2VpdmVkQWdvJywgJ3JlcGxpZWQnLCAnc3RhdGUnLCAnaXNzdWVkJywgJ2lzc3VlZEFnbyddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1icm93c2UtaXRlbXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icm93c2UtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGxpc3RBbmltYXRpb24sXHJcbiAgICBpdGVtQW5pbWF0aW9uLFxyXG4gICAgZXhwYW5kTGlzdEl0ZW1BbmltYXRpb24sXHJcbiAgICBsaXN0SXRlbVVwZGF0ZWRBbmltYXRpb25cclxuICBdXHJcbn0pXHJcbi8qKiBicm93c2UgaXRlbXMgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEJyb3dzZUl0ZW1zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgnb3BlbicpIHJlYWRvbmx5IG9ub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjaXBpZW50TW9kZWw+KCk7XHJcbiAgQE91dHB1dCgndmlldycpIHJlYWRvbmx5IG9udmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjaXBpZW50TW9kZWw+KCk7XHJcbiAgQElucHV0KCkgZm9sZGVySWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSA9IG51bGw7XHJcbiAgQElucHV0KCkgZmlsdGVyczogQnJvd3NlRmlsdGVyQXJncztcclxuXHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8SGVhZGVyTW9kZWw+O1xyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGN1c3RvbUNvbHVtbnM/OiBGb2xkZXJDb2x1bW5bXTtcclxuICBleHBhbmRlZEVsZW1lbnQ/OiBIZWFkZXJNb2RlbDtcclxuICB1cGRhdGVkRWxlbWVudD86IEhlYWRlck1vZGVsO1xyXG4gIHNlbGVjdGVkRWxlbWVudD86IEhlYWRlck1vZGVsO1xyXG4gIHNoYXJlZEFjdGlvbnM6IEFjdGlvbltdID0gW107XHJcbiAgZHJhZ0Rpc2FibGVkID0gdHJ1ZTtcclxuICByZWFkb25seSBQQUdFX1NJWkUgPSBTSVpFO1xyXG4gIHJlYWRvbmx5IERSQUZUID0gRFJBRlQ7XHJcbiAgcmVhZG9ubHkgY3VycmVuY3lGb3JtYXQgPSB0aGlzLl9jdWJlLmRpZ2l0c0luZm87XHJcbiAgcmVhZG9ubHkgaXNNb2JpbGUgPSBpc01vYmlsZSgpO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxIZWFkZXJNb2RlbD4odHJ1ZSwgW10pO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfcGVuZGluZ0l0ZW1zOiB7IFtpZDogc3RyaW5nXTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxhbnk+PjsgfSA9IHt9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvYWRpbmckID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAvKiogYnJvd3NlIGN0b3IgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX21haWxib3g6IE1haWxib3hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY3ViZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJJbXBsLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnaW5nOiBIdWJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEJpekRvY0NvbmZpZykge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zaGFyZWRBY3Rpb25zKCkpO1xyXG4gICAgdGhpcy5fbWFpbGJveC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBleHRyYSA9IGl0ZW0gYXMgSXRlbUV4dHJhO1xyXG4gICAgICAgIGlmICghZXh0cmEud29ya2luZykge1xyXG4gICAgICAgICAgaWYgKG0uZm9sZGVySWQgJiYgbS5mb2xkZXJJZCAhPT0gdGhpcy5mb2xkZXJJZClcclxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnbihpdGVtLCBtKTtcclxuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgbS5tb2RlbCAmJlxyXG4gICAgICAgIHRoaXMuX2FkZChtKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWFpbGJveC5kZWxldGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoaWQgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICBpdGVtICYmXHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcubmV3JC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5tb2RlbC5pZCk7XHJcbiAgICAgIGlmICghaXRlbSAmJiB0aGlzLmZvbGRlcklkID09PSBtLm1vZGVsLmZvbGRlcklkKSB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YobS5tb2RlbCBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5fYWRkKG0ubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy51cGRhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLm1vZGVsLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5mb2xkZXJJZCA9PT0gbS5tb2RlbC5mb2xkZXJJZCkge1xyXG4gICAgICAgICAgdGhpcy5fYXNzaWduKGl0ZW0sIG0ubW9kZWwpO1xyXG4gICAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZWRFbGVtZW50ID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy5kZWxldGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5pZCk7XHJcbiAgICAgIGl0ZW0gJiYgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcuY29tbWVudCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShjID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoaSA9PiBpLmlkID09PSBjLmlkKTtcclxuICAgICAgaWYgKGl0ZW0gJiYgKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWwpLmNvbW1lbnRzKVxyXG4gICAgICAgIChpdGVtIGFzIFJlY2lwaWVudE1vZGVsPGFueT4pLmNvbW1lbnRzLnB1c2goYy5tb2RlbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy52b3RlJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IHYuaWQpO1xyXG4gICAgICBpZiAoaXRlbSAmJiAoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCkuY29tbWVudHMpIHtcclxuICAgICAgICBjb25zdCBjb21tZW50ID0gKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWw8YW55PikuY29tbWVudHMuZmluZChjID0+IGMuaWQgPT09IHYuY29tbWVudElkKTtcclxuICAgICAgICBjb21tZW50LnZvdGVzID0gdi52b3RlcztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZXNzaW9uLmxvYWRlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCkpLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB0aGlzLmxvYWRpbmcgPSBlKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoXzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5fY29sdW1ucygpO1xyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Fzc2lnbihtb2RlbDE6IEhlYWRlck1vZGVsLCBtb2RlbDI6IEhlYWRlck1vZGVsKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKG1vZGVsMSwgbW9kZWwyLCB7XHJcbiAgICAgIG1vZGVsOiBPYmplY3QuZGVlcEFzc2lnbihtb2RlbDEubW9kZWwsIG1vZGVsMS5tb2RlbClcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXQgZm9sZGVyKCk6IEZvbGRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2xkZXJJZCA/XHJcbiAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb2xkZXJzLlxyXG4gICAgICAgIGZpbmQoZiA9PiBmLm5hbWUgPT09IHRoaXMuZm9sZGVySWQpIDogbnVsbDtcclxuICB9XHJcbiAgLy9kcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgLy8gIChldnQucHJldmlvdXNDb250YWluZXIuaWQgPT09ICd0YWdzJykgJiZcclxuICAvLyAgICB0aGlzLnRhZyhldnQuY3VycmVudEluZGV4LCBldnQuaXRlbS5kYXRhKTtcclxuICAvL31cclxuICBkcmFnU3RhcnRlZChldmVudDogYW55KSB7XHJcbiAgfVxyXG4gIHRvZ2dsZVJlYWQoaXRlbTogUmVjaXBpZW50TW9kZWwpIHtcclxuICAgIHRoaXMuX21haWxib3gucmVhZChpdGVtLmlkLCAhaXRlbS5yZWFkKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IGl0ZW0ucmVhZCA9ICFpdGVtLnJlYWQpXHJcbiAgfVxyXG4gIHNlbGVjdChpZDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCAmJiB0aGlzLnNlbGVjdGVkRWxlbWVudC5pZCA9PT0gaWQpIHJldHVybjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGkgPT4gaS5pZCA9PT0gaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICB0YWcoY3VycmVudEluZGV4OiBudW1iZXIsIHRhZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhU291cmNlLnNvcnREYXRhKHRoaXMuZGF0YVNvdXJjZS5kYXRhLCB0aGlzLnNvcnQpLFxyXG4gICAgICBtYWlsID0gZGF0YVt0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZVNpemUgKyBjdXJyZW50SW5kZXhdO1xyXG4gICAgdGhpcy5fcmV0cmlldmUobWFpbCkuc3Vic2NyaWJlKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoaXRlbS50YWdzICYmIGl0ZW0udGFncy5pbmRleE9mKHRhZykgPiAtMSkgcmV0dXJuO1xyXG4gICAgICB0aGlzLl9tYWlsYm94LnRhZ3MobWFpbC5pZCwgaXRlbS50YWdzKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICghaXRlbS50YWdzKSBpdGVtLnRhZ3MgPSBbdGFnXTtcclxuICAgICAgICBlbHNlIGl0ZW0udGFncy5wdXNoKHRhZylcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb3BlbihpdGVtOiBSZWNpcGllbnRNb2RlbDxhbnk+LCBldnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5vbm9wZW4ubmV4dChpdGVtKSwgKCkgPT4gdGhpcy5fc2IuZXJyb3IoKSk7XHJcbiAgfVxyXG4gIHZpZXcoaXRlbTogUmVjaXBpZW50TW9kZWw8YW55PiwgZXZ0OiBFdmVudCkge1xyXG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5fcmV0cmlldmUoaXRlbSkuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMub252aWV3Lm5leHQoaXRlbSksICgpID0+IHRoaXMuX3NiLmVycm9yKCkpO1xyXG4gIH1cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5fcGVuZGluZ0l0ZW1zID0ge307XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21haWxib3guZmluZEFsbCh7IC4uLnRoaXMuZmlsdGVycywgZm9sZGVySWQ6IHRoaXMuZm9sZGVySWQsIHR5cGU6IHRoaXMuZmlsdGVyVHlwZSB9LCB7IHRha2U6IFRBS0UgfSkuXHJcbiAgICAgIHBpcGUoZmluYWxpemUoKCkgPT5cclxuICAgICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKVxyXG4gICAgICApKS5cclxuICAgICAgc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyKTtcclxuICAgICAgICB0aGlzLnNvcnQuYWN0aXZlID0gdGhpcy5zb3J0aW5nO1xyXG4gICAgICAgIHRoaXMuc29ydC5zdGFydCA9IHRoaXMuZGlyZWN0aW9uIGFzIGFueTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCAmJiB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICAgICAgfSwgKCkgPT5cclxuICAgICAgICB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2dyb3VwKGRhdGE6IEhlYWRlck1vZGVsW10pIHtcclxuICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xyXG4gICAgZGF0YS5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICBpZiAoIWdyb3Vwc1tpLmRvY3VtZW50SWRdKVxyXG4gICAgICAgIGdyb3Vwc1tpLmRvY3VtZW50SWRdID0gW2ldO1xyXG4gICAgICBlbHNlIChncm91cHNbaS5kb2N1bWVudElkXSBhcyBIZWFkZXJNb2RlbFtdKS5wdXNoKGkpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBpc0dyb3VwKF8sIGl0ZW0pIHtcclxuICB9XHJcbiAgc29ydERhdGEoKSB7XHJcbiAgICB0aGlzLnNvcnRpbmcgPSB0aGlzLnNvcnQuYWN0aXZlO1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLnNvcnQuZGlyZWN0aW9uO1xyXG4gIH1cclxuICBpc0FsbERyYWZ0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5ldmVyeShtID0+IG0uZHJhZnQpO1xyXG4gIH1cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gIH1cclxuICBtYXN0ZXJUb2dnbGUoKSB7XHJcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgOlxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gIH1cclxuICBmbGFnKGl0ZW06IEhlYWRlck1vZGVsLCBldnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBleHRyYSA9IGl0ZW0gYXMgSXRlbUV4dHJhO1xyXG4gICAgZXh0cmEud29ya2luZyA9IHRydWU7XHJcbiAgICB0aGlzLl9tYWlsYm94LmZsYWcoaXRlbS5pZCwgIWl0ZW0uZmxhZykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaXRlbS5mbGFnID0gIWl0ZW0uZmxhZztcclxuICAgICAgZXh0cmEud29ya2luZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4gZXh0cmEud29ya2luZyA9IGZhbHNlKTtcclxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgZ2V0IHNvcnRpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc29ydGluZycpO1xyXG4gIH1cclxuICBzZXQgc29ydGluZyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc29ydGluZycsIHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGRpcmVjdGlvbigpOiBTb3J0RGlyZWN0aW9uIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGlyZWN0aW9uJykgYXMgU29ydERpcmVjdGlvbiB8fCAnZGVzYyc7XHJcbiAgfVxyXG4gIHNldCBkaXJlY3Rpb24odmFsdWU6IFNvcnREaXJlY3Rpb24pIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkaXJlY3Rpb24nLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIHN1Ym1pdEFsbCgpIHtcclxuICAgIHRoaXMuX2ZvckVhY2goaSA9PiB0aGlzLl9tYWlsYm94LnN1Ym1pdChpLmlkLCBpLnZlcnNpb24sIGkuZm9ybUlkKS5waXBlKHRhcCgoKSA9PiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZW1vdmUoaSkpKSwgJ1N1Ym1pdEVycicpLlxyXG4gICAgICBzdWJzY3JpYmUoaXMgPT4gaXMubGVuZ3RoID4gMSA/IHRoaXMuX3NiLnRvYXN0KFxyXG4gICAgICAgICdTdWJtaXR0ZWRNYW55JywgaXMubGVuZ3RoKSA6XHJcbiAgICAgICAgdGhpcy5fc2IudG9hc3QoJ1N1Ym1pdHRlZCcsIGlzWzBdLm51bWJlcikpO1xyXG4gIH1cclxuICBkaXNjYXJkQWxsKCkge1xyXG4gICAgdGhpcy5fc2IuYXNrKCdEaXNjYXJkQXNrJywgJ0Rpc2NhcmQnLCB7XHJcbiAgICAgIGNvbG9yOiAnd2FybicsXHJcbiAgICAgIG9rOiAnRGlzY2FyZCdcclxuICAgIH0pLnN1YnNjcmliZShvayA9PiBvayAmJlxyXG4gICAgICB0aGlzLl9mb3JFYWNoKGkgPT4gdGhpcy5fbWFpbGJveC5kZWxldGUoaS5pZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5kYXRhU291cmNlLmRhdGEucmVtb3ZlKGkpKSksICdFcnInKS5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG4gIHRvZ2dsZUV4cGFuZGVkKGl0ZW06IEhlYWRlck1vZGVsLCBldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkRWxlbWVudCAhPSBpdGVtKSB7XHJcbiAgICAgIHRoaXMuX3JldHJpZXZlKGl0ZW0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgLy9wbGF5QXVkaW8oJ25hdmlnYXRpb25faG92ZXItdGFwJyk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSBpdGVtO1xyXG4gICAgICB9LCAoKSA9PiB0aGlzLl9zYi5lcnJvcigpKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGdldCBmdWxsIG1lc2FnZSBib2R5IGVpdGhlciBmcm9tIGNhY2hlIG9yIG5ldHdvcmtcclxuICAgKiBAcGFyYW0gaXRlbVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JldHJpZXZlKGl0ZW06IEhlYWRlck1vZGVsKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbDxhbnk+PiB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZ0l0ZW1zW2l0ZW0uaWRdKVxyXG4gICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0l0ZW1zW2l0ZW0uaWRdO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIChpdGVtIGFzIEl0ZW1FeHRyYSkubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nSXRlbXNbaXRlbS5pZF0gPVxyXG4gICAgICAgIHRoaXMuX21haWxib3guZ2V0KGl0ZW0uaWQsIGl0ZW0ucmVhZCkucGlwZShmaXJzdCgpLCBtYXAobSA9PiBPYmplY3QuYXNzaWduKGl0ZW0sIG0pKSxcclxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgKGl0ZW0gYXMgSXRlbUV4dHJhKS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSksIHNoYXJlUmVwbGF5KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9zaGFyZWRBY3Rpb25zKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIXRoaXMuaXNBbGxEcmFmdCgpKSB7XHJcbiAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IFtdO1xyXG4gICAgICBmb3JrSm9pbih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoaSA9PiB0aGlzLl9yZXRyaWV2ZShpKSkpLnN1YnNjcmliZSgobTogUmVjaXBpZW50TW9kZWw8YW55PltdKSA9PiB7XHJcbiAgICAgICAgaWYgKCFtWzBdLmFjdGlvbnMpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IG1bMF0uYWN0aW9ucy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG1baV07XHJcbiAgICAgICAgICBpZiAoIWl0ZW0uYWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhY3Rpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmFjdGlvbnMuaW5kZXhPZihhY3Rpb25zW2pdKSA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgYWN0aW9ucy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbHRlcihhID0+IGFjdGlvbnMuaW5kZXhPZihhLm5hbWUpID4gLTEgJiYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gMSB8fCBhLm11bHRpcGxlICE9PSBmYWxzZSkpO1xyXG4gICAgICB9LCB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNoYXJlZEFjdGlvbnMgPSBbXTtcclxuICB9XHJcbiAgY29weShpdGVtOiBSZWNpcGllbnRNb2RlbCkge1xyXG4gICAgdGhpcy5fbWFpbGJveC5jb3B5KGl0ZW0uaWQpLnN1YnNjcmliZShpID0+IHtcclxuICAgICAgdGhpcy5fc2IudG9hc3QoJ0NvcGllZCcsIGkubnVtYmVyIHx8IGZvcm1UaXRsZShpdGVtLmZvcm1JZCkpO1xyXG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWydtYWlsYm94L2knLCBpLmlkLmVuY29kZUlkKCldLCB7XHJcbiAgICAgICAgc3RhdGU6IHsgaXRlbTogaSB9LFxyXG4gICAgICAgIHBvbGljeTogT3BlblBvbGljeS5DbGVhclxyXG4gICAgICB9KTtcclxuICAgIH0sICgpID0+IHRoaXMuX3NiLmVycm9yKCkpO1xyXG4gICAgZnVuY3Rpb24gZm9ybVRpdGxlKG5hbWUpIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb3Jtcy5maW5kKGYgPT4gZi5uYW1lID09PSBuYW1lKTtcclxuICAgICAgcmV0dXJuIGZvcm0udGl0bGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gKiBleGVjdXRlIGZ1bmN0aW9uIHBlciBzZWxlY3RlZCBpdGVtXHJcbiAqIEBwYXJhbSBmblxyXG4gKiBAcGFyYW0gZXJyb3JcclxuICovXHJcbiAgcHJpdmF0ZSBfZm9yRWFjaChmbjogKGl0ZW06IEhlYWRlck1vZGVsKSA9PiBPYnNlcnZhYmxlPGFueT4sIGVycm9yOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEhlYWRlck1vZGVsW10+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2xpY2UoKTtcclxuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIGVycm9ycy5waXBlKCkuc3Vic2NyaWJlKG0gPT4gdGhpcy5fc2IuZXJyb3JTdHJpbmcobSkpO1xyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBpdGVtcy5tYXAobSA9PiBmbihtKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICB9LCAoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcclxuICAgICAgc3dpdGNoIChlLnN0YXR1cykge1xyXG4gICAgICAgIGNhc2UgNDA0OlxyXG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VycicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0MDY6XHJcbiAgICAgICAgICBtZXNzYWdlID0gZS5lcnJvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDA5OlxyXG4gICAgICAgICAgbWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1ZlcnNpb25FcnInLCBtLm51bWJlcik7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKG0sIGUuZXJyb3IpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICBlcnJvcnMubmV4dChtZXNzYWdlKTtcclxuICAgIH0pLCBmaW5hbGl6ZSgoKSA9PiAobSBhcyBJdGVtRXh0cmEpLndvcmtpbmcgPSBmYWxzZSkpKTtcclxuICAgIHJldHVybiBmb3JrSm9pbihwcm9taXNlcykucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICBlcnJvcnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gICAgfSksIG1hcCgoKSA9PiBpdGVtcykpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hZGQobTogUmVjaXBpZW50TW9kZWw8YW55Pikge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEuc3BsaWNlKDAsIDAsIG0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlKGl0ZW06IEhlYWRlck1vZGVsKSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWydzZWxlY3QnXTtcclxuICAgIGlmICh0aGlzLmZvbGRlciAmJiB0aGlzLmZvbGRlci5jb2x1bW5zKVxyXG4gICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKHRoaXMuZm9sZGVyLmNvbHVtbnMsIGNvbHVtbnMpO1xyXG4gICAgZWxzZSBpZiAoIXRoaXMuZm9sZGVyKSB7XHJcbiAgICAgIGNvbnN0IGZvbGRlciA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb2xkZXJzLmZpbmQoZiA9PiBmLm5hbWUgPT09ICdmYXYnKTtcclxuICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIuY29sdW1ucylcclxuICAgICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKGZvbGRlci5jb2x1bW5zLCBjb2x1bW5zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbmZpZy5mb2xkZXJzICYmIHRoaXMuX2NvbmZpZy5mb2xkZXJzLmNvbHVtbnMpXHJcbiAgICAgIHRoaXMuX2FwcGVuZGNvbHVtbnModGhpcy5fY29uZmlnLmZvbGRlcnMuY29sdW1ucywgY29sdW1ucyk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29sdW1ucy5wdXNoKCdudW1iZXInKTtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKCdzdWJqZWN0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgY29sdW1ucy5wdXNoKCd2YWx1ZScpO1xyXG4gICAgfVxyXG4gICAgY29sdW1ucy5wdXNoKCdvcHRpb25zJyk7XHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGVuZGNvbHVtbnMoc291cmNlOiBGb2xkZXJDb2x1bW5bXSwgY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuY3VzdG9tQ29sdW1ucyA9IFtdO1xyXG4gICAgc291cmNlLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChIRUFERVJfQ09MVU1OX05BTUVTLmluZGV4T2YoYy5uYW1lKSA+IC0xKVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjLm5hbWUpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2x1bW5zLnB1c2goYyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbmRBbGwoYWN0aW9uOiBzdHJpbmcsIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gcXVlcnlQYXJhbXMoYXJncyk7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT5cclxuICAgICAgdGhpcy5fbWFpbGJveC5zZW5kKGkuaWQsIGkudmVyc2lvbiwgaS5mb3JtSWQsIG51bGwsIGFjdGlvbiwgcGFyYW1zKS5cclxuICAgICAgICBwaXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaS5mb2xkZXJJZCAhPT0gdGhpcy5mb2xkZXJJZCkgdGhpcy5kYXRhU291cmNlLmRhdGEucmVtb3ZlKGkpXHJcbiAgICAgICAgfSkpLCAnU2VuZEVycicpLlxyXG4gICAgICBzdWJzY3JpYmUoaXMgPT4gaXMubGVuZ3RoID4gMSA/IHRoaXMuX3NiLnRvYXN0KCdTZW50TWFueScsIGlzLmxlbmd0aC50b1N0cmluZygpLFxyXG4gICAgICAgIHRoaXMuX2FjdGlvbkFkamVjdGl2ZShhY3Rpb24sIHRydWUpKSA6XHJcbiAgICAgICAgdGhpcy5fc2IudG9hc3QoJ1NlbnQnLCBpc1swXS5udW1iZXIsXHJcbiAgICAgICAgICB0aGlzLl9hY3Rpb25BZGplY3RpdmUoYWN0aW9uKSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uQWRqZWN0aXZlKG5hbWU6IHN0cmluZywgcGx1cmFsPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIHJldHVybiAoKHBsdXJhbCA/IChhY3Rpb24uYWRqZWN0aXZlUGx1cmFsIHx8IGFjdGlvbi5hZGplY3RpdmUpIDogYWN0aW9uLmFkamVjdGl2ZSkgfHwgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8Yml6ZG9jLW5vbmUgKm5nSWY9XCJkYXRhU291cmNlPy5kYXRhLmxlbmd0aCA9PT0gMFwiIHRpdGxlPVwiTm9NZXNzYWdlc1wiIFtzdWJ0aXRsZV09XCIhaXNNb2JpbGUgJiYgZm9sZGVySWQgPT09IERSQUZUID8gJ0FsdE4nIDogbnVsbFwiIGljb249XCJtYWlsX291dGxpbmVcIj48L2JpemRvYy1ub25lPlxyXG48bWF0LXByb2dyZXNzLWJhciBtb2RlPVwicXVlcnlcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJsb2FkaW5nID8gJ3Zpc2libGUnOidoaWRkZW4nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG48bWF0LXRhYmxlIGNka0Ryb3BMaXN0IGNsYXNzPVwiZGF0YS10YWJsZVwiXHJcbiAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiaXNNb2JpbGVcIlxyXG4gICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiZGF0YVNvdXJjZT8uZGF0YVwiXHJcbiAgICAgICAgICAgY2RrRHJvcExpc3RDb25uZWN0ZWRUbz1cImZvbGRlcnNcIlxyXG4gICAgICAgICAgIGNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXHJcbiAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG1hdFNvcnQgbXVsdGlUZW1wbGF0ZURhdGFSb3dzIChtYXRTb3J0Q2hhbmdlKT1cInNvcnREYXRhKClcIlxyXG4gICAgICAgICAgIGlkPVwiYnJvd3NlLXRhYmxlXCIgW0BsaXN0XT1cImRhdGFTb3VyY2VcIiBbc3R5bGUuZGlzcGxheV09XCJkYXRhU291cmNlPy5kYXRhLmxlbmd0aCA/Jyc6J25vbmUnXCI+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJcIj48L2Rpdj5cclxuICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiIFthcmlhLWxhYmVsXT1cIidDaGVjayd8dHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIj5cclxuICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFthcmlhLWxhYmVsXT1cIidDaGVjayd8dHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUoaXRlbSkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChpdGVtKVwiPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPCEtLSBkcmFnIC0tPlxyXG4gICAgICA8IS0tPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2RrRHJhZ0hhbmRsZVxyXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiZHJhZ0Rpc2FibGVkID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChtb3VzZXVwKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICh0b3VjaHN0YXJ0KT1cImRyYWdEaXNhYmxlZCA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAodG91Y2hlbmQpPVwiZHJhZ0Rpc2FibGVkID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBmeEhpZGUueHM+XHJcbiAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+LS0+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZChpdGVtLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0RldGFpbHMnIHwgdHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInRGV0YWlscycgfCB0cmFuc2xhdGVcIiBjbGFzcz1cInRvb2xcIj48bWF0LWljb24+e3tpdGVtID09IGV4cGFuZGVkRWxlbWVudCA/ICd1bmZvbGRfbGVzcycgOiAndW5mb2xkX21vcmUnfX08L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8IS0tIE51bWJlciBjb2x1bW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJudW1iZXJcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J051bWJlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5udW1iZXJ9fSA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFN1YmplY3QgY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3ViamVjdFwiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snU3ViamVjdCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5zdWJqZWN0fX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJvd25lclwiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snT3duZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxyXG4gICAgICA8Yml6ZG9jLWlkZW50aXR5LW5hbWUgKm5nSWY9XCJpdGVtLm93bmVySWRcIiBbaWRlbnRpdHldPVwiaXRlbS5vd25lcklkXCIgW2J5XT1cIml0ZW0ub3duZXJCeUlkXCI+PC9iaXpkb2MtaWRlbnRpdHktbmFtZT5cclxuICAgIDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZW5kZXJcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1NlbmRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+XHJcbiAgICAgIDxiaXpkb2MtaWRlbnRpdHktbmFtZSAqbmdJZj1cIml0ZW0uc2VuZGVySWRcIiBbaWRlbnRpdHldPVwiaXRlbS5zZW5kZXJJZFwiIFtieV09XCJpdGVtLmJ5SWRcIj48L2JpemRvYy1pZGVudGl0eS1uYW1lPlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWNlaXZlZFwiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snUmVjZWl2ZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ucmVjZWl2ZWQgfCBhbUNhbGVuZGFyfX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWNlaXZlZEFnb1wiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snUmVjZWl2ZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiIFtiaXpkb2NUb29sdGlwXT1cIml0ZW0ucmVjZWl2ZWQgfCBhbUNhbGVuZGFyXCI+e3tpdGVtLnJlY2VpdmVkIHwgYW1UaW1lQWdvfX08L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJlcGxpZWRcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1JlcGxpZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ucmVwbGllZCB8IGFtQ2FsZW5kYXJ9fSA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlzc3VlZFwiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snSXNzdWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj4ge3tpdGVtLmlzc3VlZCB8IGFtQ2FsZW5kYXJ9fSA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlzc3VlZEFnb1wiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snSXNzdWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIiBbYml6ZG9jVG9vbHRpcF09XCJpdGVtLmlzc3VlZCB8IGFtQ2FsZW5kYXJcIj4ge3tpdGVtLmlzc3VlZCB8IGFtVGltZUFnb319IDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdGVcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1N0YXR1cycgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxyXG4gICAgICA8Yml6ZG9jLXN0YXR1cyBbc3RhdGVJZF09XCJpdGVtLnN0YXRlSWRcIj48L2JpemRvYy1zdGF0dXM+XHJcbiAgICA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tQ29sdW1uc1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBjdXN0b21Db2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjLm5hbWVcIj5cclxuICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+IHt7Yy50aXRsZX19IDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjLnR5cGVcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInRGF0ZSdcIj5cclxuICAgICAgICAgICAge3tpdGVtLm1vZGVsW2MubmFtZV0gfCBhbUNhbGVuZGFyIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0RlY2ltYWwnXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5tb2RlbFtjLm5hbWVdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbS5tb2RlbFtjLm5hbWVdXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgIHt7aXRlbS5tb2RlbFtjLm5hbWVdfX16XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBWYWx1ZSBjb2x1bW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2YWx1ZVwiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snQW1vdW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj4ge3tpdGVtLnZhbHVlIHwgY3VycmVuY3kgOiBpdGVtLmN1cnJlbmN5Q29kZSA6ICdzeW1ib2wnIDogY3VycmVuY3lGb3JtYXR9fSA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIG9wdGlvbnMgY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwib3B0aW9uc1wiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJmbGFnKGl0ZW0sICRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInRmxhZ2dlZCd8IHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZUZsYWdnZWQnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJ0b29sXCI+PG1hdC1pY29uIFtjbGFzcy5kb2N1bWVudC1mbGFnXT1cIml0ZW0uZmxhZ1wiPnt7aXRlbS5mbGFnID8gJ3N0YXInIDogJ3N0YXJfYm9yZGVyJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInZpZXcoaXRlbSwgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidWaWV3JyB8IHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1ZpZXcnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJ0b29sXCI+PG1hdC1pY29uPmRhdGFfdXNhZ2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBmeEhpZGUueHMgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIiBbYml6ZG9jVG9vbHRpcF09XCInT3B0aW9ucycgfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgW2F0dHIuY29sc3Bhbl09XCJkaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aFwiIFtAdXBkYXRlZF09XCJpdGVtID09IHVwZGF0ZWRFbGVtZW50XCJcclxuICAgICAgICAgICAgICBbY2xhc3MucmVhZC1yb3ddPVwiaXRlbS5yZWFkXCI+XHJcbiAgICAgIDxkaXYgW0BkZXRhaWxFeHBhbmRdPVwiaXRlbSA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgPGJpemRvYy1leHBhbmRlZC1pdGVtIFtpdGVtXT1cIml0ZW1cIiAqbmdJZj1cIml0ZW0gPT0gZXhwYW5kZWRFbGVtZW50XCI+PC9iaXpkb2MtZXhwYW5kZWQtaXRlbT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC9tYXQtaGVhZGVyLXJvdz5cclxuICA8bWF0LXJvdyBAaXRlbSBbQHVwZGF0ZWRdPVwiaXRlbSA9PSB1cGRhdGVkRWxlbWVudFwiXHJcbiAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCBpdGVtOyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIGNsYXNzPVwiZWxlbWVudC1yb3dcIlxyXG4gICAgICAgICAgIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIlxyXG4gICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiZHJhZ0Rpc2FibGVkXCJcclxuICAgICAgICAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRlZC1yb3cnOiBzZWxlY3RlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICdleHBhbmRlZC1yb3cnOiBleHBhbmRlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICAgICAgJ29kZC1yb3cnOiBkYXRhSW5kZXggJSAyLFxyXG4gICAgICAncmVhZC1yb3cnOiBpdGVtLnJlYWR9XCIgbWF0UmlwcGxlXHJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9wZW4oaXRlbSwgJGV2ZW50KVwiPlxyXG4gICAgPGRpdiAqY2RrRHJhZ1ByZXZpZXc+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+PG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj48L2J1dHRvbj4gPHNwYW4+I3t7aXRlbS5udW1iZXJ9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyPlxyXG4gICAgICA8IS0tIG5vbmUgLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1yb3c+XHJcbiAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBpdGVtOyA7IGxldCBkYXRhSW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJkZXRhaWwtcm93XCIgbWF0UmlwcGxlXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWRlZC1yb3cnOiBzZWxlY3RlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICAgICAgJ29kZC1yb3cnOiBkYXRhSW5kZXggJSAyXHJcbiAgICAgICAgICAgfVwiPjwvbWF0LXJvdz5cclxuPC9tYXQtdGFibGU+XHJcbjxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCIgW3BhZ2VTaXplXT1cIlBBR0VfU0laRVwiIFtzdHlsZS5kaXNwbGF5XT1cIiFpc01vYmlsZSAmJiBkYXRhU291cmNlPy5kYXRhLmxlbmd0aD5QQUdFX1NJWkUgPyAnJzonbm9uZSdcIj48L21hdC1wYWdpbmF0b3I+XHJcbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW4oaXRlbSwgJGV2ZW50KVwiPnt7J09wZW4nfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidG9nZ2xlUmVhZChpdGVtKVwiPnt7KGl0ZW0ucmVhZCA/J01hcmtBc1VucmVhZCc6J01hcmtBc1JlYWQnKXx0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNvcHkoaXRlbSlcIj57eydDb3B5J3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L21hdC1tZW51PlxyXG4iXX0=
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYnJvd3NlL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2Jyb3dzZS9icm93c2UtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBK0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBYyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUE2RCxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTckgsT0FBTyxFQUFnQixhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVC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SSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxJQUFJLElBQUssSUFBdUIsQ0FBQyxRQUFRO2dCQUMxQyxJQUE0QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxJQUFJLElBQUssSUFBdUIsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdDLE1BQU0sT0FBTyxHQUFJLElBQTRCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FB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LEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDTyxJQUFJLENBQUMsQ0FBc0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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LE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwSCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOztpSEFuWlUsb0JBQW9CLDJQQW9DckIsYUFBYTtxR0FwQ1osb0JBQW9CLDhOQU9wQixPQUFPLDBGQUNQLFlBQVksbUZDMUN6QiwreVRBMktBLHVvT0RqSmM7UUFDVixhQUFhO1FBQ2IsYUFBYTtRQUNiLHVCQUF1QjtRQUN2Qix3QkFBd0I7S0FDekI7MkZBR1Usb0JBQW9CO2tCQVpoQyxTQUFTOytCQUNFLHFCQUFxQixjQUduQjt3QkFDVixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2Qix3QkFBd0I7cUJBQ3pCOzswQkF1Q0UsTUFBTTsyQkFBQyxhQUFhOzRDQW5DRSxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBQ1csTUFBTTtzQkFBOUIsTUFBTTt1QkFBQyxNQUFNO2dCQUNMLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRWdDLElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBJbnB1dCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgb2YsIFN1YmplY3QsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCwgc2hhcmVSZXBsYXksIGZpbmFsaXplLCBtYXAsIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGb2xkZXIsIEhlYWRlck1vZGVsLCBSZWNpcGllbnRNb2RlbCwgQWN0aW9uLCBGb2xkZXJDb2x1bW4sIERSQUZUIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc01vYmlsZSwgcXVlcnlQYXJhbXMgfSBmcm9tICcuLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IGV4cGFuZExpc3RJdGVtQW5pbWF0aW9uLCBpdGVtQW5pbWF0aW9uLCBsaXN0QW5pbWF0aW9uLCBsaXN0SXRlbVVwZGF0ZWRBbmltYXRpb24gfSBmcm9tICcuLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlLCBJdGVtRXh0cmEsIE1haWxib3hTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9tYWlsYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlIH0gZnJvbSAnLi4vY3ViZS9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyb3dzZUZpbHRlckFyZ3MgfSBmcm9tICcuL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUm91dGVySW1wbCB9IGZyb20gJy4uL2NvcmUvcm91dGVyJztcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuXHJcbmV4cG9ydCBjb25zdCBUQUtFID0gMjAwLCBTSVpFID0gMjAsIEhFQURFUl9DT0xVTU5fTkFNRVMgPSBbJ251bWJlcicsICdzdWJqZWN0JywgJ3ZhbHVlJywgJ293bmVyJywgJ3NlbmRlcicsICdyZWNlaXZlZCcsICdyZWNlaXZlZEFnbycsICdyZXBsaWVkJywgJ3N0YXRlJywgJ2lzc3VlZCcsICdpc3N1ZWRBZ28nXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtYnJvd3NlLWl0ZW1zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icm93c2UtaXRlbXMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBsaXN0QW5pbWF0aW9uLFxyXG4gICAgaXRlbUFuaW1hdGlvbixcclxuICAgIGV4cGFuZExpc3RJdGVtQW5pbWF0aW9uLFxyXG4gICAgbGlzdEl0ZW1VcGRhdGVkQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG4vKiogYnJvd3NlIGl0ZW1zIGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoJ29wZW4nKSByZWFkb25seSBvbm9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2lwaWVudE1vZGVsPigpO1xyXG4gIEBPdXRwdXQoJ3ZpZXcnKSByZWFkb25seSBvbnZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2lwaWVudE1vZGVsPigpO1xyXG4gIEBJbnB1dCgpIGZvbGRlcklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbHRlclR5cGU6IEZpbHRlclR5cGUgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEJyb3dzZUZpbHRlckFyZ3M7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgc29ydDogTWF0U29ydDtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPEhlYWRlck1vZGVsPjtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBjdXN0b21Db2x1bW5zPzogRm9sZGVyQ29sdW1uW107XHJcbiAgZXhwYW5kZWRFbGVtZW50PzogSGVhZGVyTW9kZWw7XHJcbiAgdXBkYXRlZEVsZW1lbnQ/OiBIZWFkZXJNb2RlbDtcclxuICBzZWxlY3RlZEVsZW1lbnQ/OiBIZWFkZXJNb2RlbDtcclxuICBzaGFyZWRBY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xyXG4gIGRyYWdEaXNhYmxlZCA9IHRydWU7XHJcbiAgcmVhZG9ubHkgUEFHRV9TSVpFID0gU0laRTtcclxuICByZWFkb25seSBEUkFGVCA9IERSQUZUO1xyXG4gIHJlYWRvbmx5IGN1cnJlbmN5Rm9ybWF0ID0gdGhpcy5fY3ViZS5kaWdpdHNJbmZvO1xyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gaXNNb2JpbGUoKTtcclxuICByZWFkb25seSBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8SGVhZGVyTW9kZWw+KHRydWUsIFtdKTtcclxuICBsb2FkaW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3BlbmRpbmdJdGVtczogeyBbaWQ6IHN0cmluZ106IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8YW55Pj47IH0gPSB7fTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLyoqIGJyb3dzZSBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9tYWlsYm94OiBNYWlsYm94U2VydmljZSxcclxuICAgIHByaXZhdGUgX2N1YmU6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVySW1wbCxcclxuICAgIHByaXZhdGUgX21lc3NhZ2luZzogSHViU2VydmljZSxcclxuICAgIEBJbmplY3QoQklaRE9DX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBCaXpEb2NDb25maWcpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2hhcmVkQWN0aW9ucygpKTtcclxuICAgIHRoaXMuX21haWxib3guY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5pZCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgZXh0cmEgPSBpdGVtIGFzIEl0ZW1FeHRyYTtcclxuICAgICAgICBpZiAoIWV4dHJhLndvcmtpbmcpIHtcclxuICAgICAgICAgIGlmIChtLmZvbGRlcklkICYmIG0uZm9sZGVySWQgIT09IHRoaXMuZm9sZGVySWQpXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZShpdGVtKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9hc3NpZ24oaXRlbSwgbSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIG0ubW9kZWwgJiZcclxuICAgICAgICB0aGlzLl9hZGQobSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21haWxib3guZGVsZXRlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGlkID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IGlkKTtcclxuICAgICAgaXRlbSAmJlxyXG4gICAgICAgIHRoaXMuX3JlbW92ZShpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnaW5nLm5ldyQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShtID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IG0ubW9kZWwuaWQpO1xyXG4gICAgICBpZiAoIWl0ZW0gJiYgdGhpcy5mb2xkZXJJZCA9PT0gbS5tb2RlbC5mb2xkZXJJZCkge1xyXG4gICAgICAgIHRoaXMuX3BlbmRpbmdJdGVtc1ttLm1vZGVsLmlkXSA9IG9mKG0ubW9kZWwgYXMgUmVjaXBpZW50TW9kZWwpO1xyXG4gICAgICAgIHRoaXMuX2FkZChtLm1vZGVsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcudXBkYXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5tb2RlbC5pZCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZm9sZGVySWQgPT09IG0ubW9kZWwuZm9sZGVySWQpIHtcclxuICAgICAgICAgIHRoaXMuX2Fzc2lnbihpdGVtLCBtLm1vZGVsKTtcclxuICAgICAgICAgIHRoaXMuX3BlbmRpbmdJdGVtc1ttLm1vZGVsLmlkXSA9IG9mKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWwpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVkRWxlbWVudCA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuX3JlbW92ZShpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcuZGVsZXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IG0uaWQpO1xyXG4gICAgICBpdGVtICYmIHRoaXMuX3JlbW92ZShpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnaW5nLmNvbW1lbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoYyA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGkgPT4gaS5pZCA9PT0gYy5pZCk7XHJcbiAgICAgIGlmIChpdGVtICYmIChpdGVtIGFzIFJlY2lwaWVudE1vZGVsKS5jb21tZW50cylcclxuICAgICAgICAoaXRlbSBhcyBSZWNpcGllbnRNb2RlbDxhbnk+KS5jb21tZW50cy5wdXNoKGMubW9kZWwpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcudm90ZSQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSB2LmlkKTtcclxuICAgICAgaWYgKGl0ZW0gJiYgKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWwpLmNvbW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgY29tbWVudCA9IChpdGVtIGFzIFJlY2lwaWVudE1vZGVsPGFueT4pLmNvbW1lbnRzLmZpbmQoYyA9PiBjLmlkID09PSB2LmNvbW1lbnRJZCk7XHJcbiAgICAgICAgY29tbWVudC52b3RlcyA9IHYudm90ZXM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi5sb2FkZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpO1xyXG4gICAgdGhpcy5fbG9hZGluZyQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApKS5cclxuICAgICAgc3Vic2NyaWJlKGUgPT4gdGhpcy5sb2FkaW5nID0gZSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKF86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMoKTtcclxuICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hc3NpZ24obW9kZWwxOiBIZWFkZXJNb2RlbCwgbW9kZWwyOiBIZWFkZXJNb2RlbCkge1xyXG4gICAgT2JqZWN0LmFzc2lnbihtb2RlbDEsIG1vZGVsMiwge1xyXG4gICAgICBtb2RlbDogT2JqZWN0LmRlZXBBc3NpZ24obW9kZWwxLm1vZGVsLCBtb2RlbDEubW9kZWwpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0IGZvbGRlcigpOiBGb2xkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9sZGVySWQgP1xyXG4gICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9sZGVycy5cclxuICAgICAgICBmaW5kKGYgPT4gZi5uYW1lID09PSB0aGlzLmZvbGRlcklkKSA6IG51bGw7XHJcbiAgfVxyXG4gIC8vZHJvcChldnQ6IENka0RyYWdEcm9wPHN0cmluZywgc3RyaW5nPikge1xyXG4gIC8vICAoZXZ0LnByZXZpb3VzQ29udGFpbmVyLmlkID09PSAndGFncycpICYmXHJcbiAgLy8gICAgdGhpcy50YWcoZXZ0LmN1cnJlbnRJbmRleCwgZXZ0Lml0ZW0uZGF0YSk7XHJcbiAgLy99XHJcbiAgZHJhZ1N0YXJ0ZWQoZXZlbnQ6IGFueSkge1xyXG4gIH1cclxuICB0b2dnbGVSZWFkKGl0ZW06IFJlY2lwaWVudE1vZGVsKSB7XHJcbiAgICB0aGlzLl9tYWlsYm94LnJlYWQoaXRlbS5pZCwgIWl0ZW0ucmVhZCkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiBpdGVtLnJlYWQgPSAhaXRlbS5yZWFkKVxyXG4gIH1cclxuICBzZWxlY3QoaWQ6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQgJiYgdGhpcy5zZWxlY3RlZEVsZW1lbnQuaWQgPT09IGlkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChpID0+IGkuaWQgPT09IGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgdGFnKGN1cnJlbnRJbmRleDogbnVtYmVyLCB0YWc6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSwgdGhpcy5zb3J0KSxcclxuICAgICAgbWFpbCA9IGRhdGFbdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VTaXplICsgY3VycmVudEluZGV4XTtcclxuICAgIHRoaXMuX3JldHJpZXZlKG1haWwpLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0udGFncyAmJiBpdGVtLnRhZ3MuaW5kZXhPZih0YWcpID4gLTEpIHJldHVybjtcclxuICAgICAgdGhpcy5fbWFpbGJveC50YWdzKG1haWwuaWQsIGl0ZW0udGFncykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAoIWl0ZW0udGFncykgaXRlbS50YWdzID0gW3RhZ107XHJcbiAgICAgICAgZWxzZSBpdGVtLnRhZ3MucHVzaCh0YWcpXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG9wZW4oaXRlbTogUmVjaXBpZW50TW9kZWw8YW55PiwgZXZ0OiBFdmVudCkge1xyXG4gICAgdGhpcy5fcmV0cmlldmUoaXRlbSkuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMub25vcGVuLm5leHQoaXRlbSksICgpID0+IHRoaXMuX3NiLmVycm9yKCkpO1xyXG4gIH1cclxuICB2aWV3KGl0ZW06IFJlY2lwaWVudE1vZGVsPGFueT4sIGV2dDogRXZlbnQpIHtcclxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX3JldHJpZXZlKGl0ZW0pLnN1YnNjcmliZSgoKSA9PlxyXG4gICAgICB0aGlzLm9udmlldy5uZXh0KGl0ZW0pLCAoKSA9PiB0aGlzLl9zYi5lcnJvcigpKTtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuX3BlbmRpbmdJdGVtcyA9IHt9O1xyXG4gICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLl9tYWlsYm94LmZpbmRBbGwoeyAuLi50aGlzLmZpbHRlcnMsIGZvbGRlcklkOiB0aGlzLmZvbGRlcklkLCB0eXBlOiB0aGlzLmZpbHRlclR5cGUgfSwgeyB0YWtlOiBUQUtFIH0pLlxyXG4gICAgICBwaXBlKGZpbmFsaXplKCgpID0+XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSlcclxuICAgICAgKSkuXHJcbiAgICAgIHN1YnNjcmliZShyID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2Uocik7XHJcbiAgICAgICAgdGhpcy5zb3J0LmFjdGl2ZSA9IHRoaXMuc29ydGluZztcclxuICAgICAgICB0aGlzLnNvcnQuc3RhcnQgPSB0aGlzLmRpcmVjdGlvbiBhcyBhbnk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDAgJiYgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICAgIH0sICgpID0+XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKVxyXG4gICAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9ncm91cChkYXRhOiBIZWFkZXJNb2RlbFtdKSB7XHJcbiAgICBjb25zdCBncm91cHMgPSB7fTtcclxuICAgIGRhdGEuZm9yRWFjaChpID0+IHtcclxuICAgICAgaWYgKCFncm91cHNbaS5kb2N1bWVudElkXSlcclxuICAgICAgICBncm91cHNbaS5kb2N1bWVudElkXSA9IFtpXTtcclxuICAgICAgZWxzZSAoZ3JvdXBzW2kuZG9jdW1lbnRJZF0gYXMgSGVhZGVyTW9kZWxbXSkucHVzaChpKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgaXNHcm91cChfLCBpdGVtKSB7XHJcbiAgfVxyXG4gIHNvcnREYXRhKCkge1xyXG4gICAgdGhpcy5zb3J0aW5nID0gdGhpcy5zb3J0LmFjdGl2ZTtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5zb3J0LmRpcmVjdGlvbjtcclxuICB9XHJcbiAgaXNBbGxEcmFmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZXZlcnkobSA9PiBtLmRyYWZ0KTtcclxuICB9XHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgP1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDpcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICB9XHJcbiAgZmxhZyhpdGVtOiBIZWFkZXJNb2RlbCwgZXZ0OiBFdmVudCkge1xyXG4gICAgY29uc3QgZXh0cmEgPSBpdGVtIGFzIEl0ZW1FeHRyYTtcclxuICAgIGV4dHJhLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWFpbGJveC5mbGFnKGl0ZW0uaWQsICFpdGVtLmZsYWcpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGl0ZW0uZmxhZyA9ICFpdGVtLmZsYWc7XHJcbiAgICAgIGV4dHJhLndvcmtpbmcgPSBmYWxzZTtcclxuICAgIH0sICgpID0+IGV4dHJhLndvcmtpbmcgPSBmYWxzZSk7XHJcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGdldCBzb3J0aW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NvcnRpbmcnKTtcclxuICB9XHJcbiAgc2V0IHNvcnRpbmcodmFsdWU6IHN0cmluZykge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NvcnRpbmcnLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBkaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RpcmVjdGlvbicpIGFzIFNvcnREaXJlY3Rpb24gfHwgJ2Rlc2MnO1xyXG4gIH1cclxuICBzZXQgZGlyZWN0aW9uKHZhbHVlOiBTb3J0RGlyZWN0aW9uKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlyZWN0aW9uJywgdmFsdWUpO1xyXG4gIH1cclxuICBzdWJtaXRBbGwoKSB7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT4gdGhpcy5fbWFpbGJveC5zdWJtaXQoaS5pZCwgaS52ZXJzaW9uLCBpLmZvcm1JZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5kYXRhU291cmNlLmRhdGEucmVtb3ZlKGkpKSksICdTdWJtaXRFcnInKS5cclxuICAgICAgc3Vic2NyaWJlKGlzID0+IGlzLmxlbmd0aCA+IDEgPyB0aGlzLl9zYi50b2FzdChcclxuICAgICAgICAnU3VibWl0dGVkTWFueScsIGlzLmxlbmd0aCkgOlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTdWJtaXR0ZWQnLCBpc1swXS5udW1iZXIpKTtcclxuICB9XHJcbiAgZGlzY2FyZEFsbCgpIHtcclxuICAgIHRoaXMuX3NiLmFzaygnRGlzY2FyZEFzaycsICdEaXNjYXJkJywge1xyXG4gICAgICBjb2xvcjogJ3dhcm4nLFxyXG4gICAgICBvazogJ0Rpc2NhcmQnXHJcbiAgICB9KS5zdWJzY3JpYmUob2sgPT4gb2sgJiZcclxuICAgICAgdGhpcy5fZm9yRWFjaChpID0+IHRoaXMuX21haWxib3guZGVsZXRlKGkuaWQpLnBpcGUodGFwKCgpID0+IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpKSkpLCAnRXJyJykuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuICB0b2dnbGVFeHBhbmRlZChpdGVtOiBIZWFkZXJNb2RlbCwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZEVsZW1lbnQgIT0gaXRlbSkge1xyXG4gICAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIC8vcGxheUF1ZGlvKCduYXZpZ2F0aW9uX2hvdmVyLXRhcCcpO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gaXRlbTtcclxuICAgICAgfSwgKCkgPT4gdGhpcy5fc2IuZXJyb3IoKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gbnVsbDtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBnZXQgZnVsbCBtZXNhZ2UgYm9keSBlaXRoZXIgZnJvbSBjYWNoZSBvciBuZXR3b3JrXHJcbiAgICogQHBhcmFtIGl0ZW1cclxuICAgKi9cclxuICBwcml2YXRlIF9yZXRyaWV2ZShpdGVtOiBIZWFkZXJNb2RlbCk6IE9ic2VydmFibGU8UmVjaXBpZW50TW9kZWw8YW55Pj4ge1xyXG4gICAgaWYgKHRoaXMuX3BlbmRpbmdJdGVtc1tpdGVtLmlkXSlcclxuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdJdGVtc1tpdGVtLmlkXTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAoaXRlbSBhcyBJdGVtRXh0cmEpLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0l0ZW1zW2l0ZW0uaWRdID1cclxuICAgICAgICB0aGlzLl9tYWlsYm94LmdldChpdGVtLmlkLCBpdGVtLnJlYWQpLnBpcGUoZmlyc3QoKSwgbWFwKG0gPT4gT2JqZWN0LmFzc2lnbihpdGVtLCBtKSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIChpdGVtIGFzIEl0ZW1FeHRyYSkubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH0pLCBzaGFyZVJlcGxheSgpKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfc2hhcmVkQWN0aW9ucygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmICF0aGlzLmlzQWxsRHJhZnQoKSkge1xyXG4gICAgICB0aGlzLnNoYXJlZEFjdGlvbnMgPSBbXTtcclxuICAgICAgZm9ya0pvaW4odGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubWFwKGkgPT4gdGhpcy5fcmV0cmlldmUoaSkpKS5zdWJzY3JpYmUoKG06IFJlY2lwaWVudE1vZGVsPGFueT5bXSkgPT4ge1xyXG4gICAgICAgIGlmICghbVswXS5hY3Rpb25zKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBtWzBdLmFjdGlvbnMuc2xpY2UoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBtW2ldO1xyXG4gICAgICAgICAgaWYgKCFpdGVtLmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWN0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5hY3Rpb25zLmluZGV4T2YoYWN0aW9uc1tqXSkgPT09IC0xKVxyXG4gICAgICAgICAgICAgIGFjdGlvbnMuc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNoYXJlZEFjdGlvbnMgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maWx0ZXIoYSA9PiBhY3Rpb25zLmluZGV4T2YoYS5uYW1lKSA+IC0xICYmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDEgfHwgYS5tdWx0aXBsZSAhPT0gZmFsc2UpKTtcclxuICAgICAgfSwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zaGFyZWRBY3Rpb25zID0gW107XHJcbiAgfVxyXG4gIGNvcHkoaXRlbTogUmVjaXBpZW50TW9kZWwpIHtcclxuICAgIHRoaXMuX21haWxib3guY29weShpdGVtLmlkKS5zdWJzY3JpYmUoaSA9PiB7XHJcbiAgICAgIHRoaXMuX3NiLnRvYXN0KCdDb3BpZWQnLCBpLm51bWJlciB8fCBmb3JtVGl0bGUoaXRlbS5mb3JtSWQpKTtcclxuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnbWFpbGJveC9pJywgaS5pZC5lbmNvZGVJZCgpXSwge1xyXG4gICAgICAgIHN0YXRlOiB7IGl0ZW06IGkgfSxcclxuICAgICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuQ2xlYXJcclxuICAgICAgfSk7XHJcbiAgICB9LCAoKSA9PiB0aGlzLl9zYi5lcnJvcigpKTtcclxuICAgIGZ1bmN0aW9uIGZvcm1UaXRsZShuYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgIHJldHVybiBmb3JtLnRpdGxlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICogZXhlY3V0ZSBmdW5jdGlvbiBwZXIgc2VsZWN0ZWQgaXRlbVxyXG4gKiBAcGFyYW0gZm5cclxuICogQHBhcmFtIGVycm9yXHJcbiAqL1xyXG4gIHByaXZhdGUgX2ZvckVhY2goZm46IChpdGVtOiBIZWFkZXJNb2RlbCkgPT4gT2JzZXJ2YWJsZTxhbnk+LCBlcnJvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIZWFkZXJNb2RlbFtdPiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLnNsaWNlKCk7XHJcbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBlcnJvcnMucGlwZSgpLnN1YnNjcmliZShtID0+IHRoaXMuX3NiLmVycm9yU3RyaW5nKG0pKTtcclxuICAgIGNvbnN0IHByb21pc2VzID0gaXRlbXMubWFwKG0gPT4gZm4obSkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgfSwgKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgIHN3aXRjaCAoZS5zdGF0dXMpIHtcclxuICAgICAgICBjYXNlIDQwNDpcclxuICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFcnInKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDA2OlxyXG4gICAgICAgICAgbWVzc2FnZSA9IGUuZXJyb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQwOTpcclxuICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdWZXJzaW9uRXJyJywgbS5udW1iZXIpO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihtLCBlLmVycm9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldChlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgZXJyb3JzLm5leHQobWVzc2FnZSk7XHJcbiAgICB9KSwgZmluYWxpemUoKCkgPT4gKG0gYXMgSXRlbUV4dHJhKS53b3JraW5nID0gZmFsc2UpKSk7XHJcbiAgICByZXR1cm4gZm9ya0pvaW4ocHJvbWlzZXMpLnBpcGUodGFwKCgpID0+IHtcclxuICAgICAgZXJyb3JzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgIH0pLCBtYXAoKCkgPT4gaXRlbXMpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkKG06IFJlY2lwaWVudE1vZGVsPGFueT4pIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnNwbGljZSgwLCAwLCBtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZShpdGVtOiBIZWFkZXJNb2RlbCkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3QoaXRlbSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZW1vdmUoaXRlbSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XHJcbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbnMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IFsnc2VsZWN0J107XHJcbiAgICBpZiAodGhpcy5mb2xkZXIgJiYgdGhpcy5mb2xkZXIuY29sdW1ucylcclxuICAgICAgdGhpcy5fYXBwZW5kY29sdW1ucyh0aGlzLmZvbGRlci5jb2x1bW5zLCBjb2x1bW5zKTtcclxuICAgIGVsc2UgaWYgKCF0aGlzLmZvbGRlcikge1xyXG4gICAgICBjb25zdCBmb2xkZXIgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9sZGVycy5maW5kKGYgPT4gZi5uYW1lID09PSAnZmF2Jyk7XHJcbiAgICAgIGlmIChmb2xkZXIgJiYgZm9sZGVyLmNvbHVtbnMpXHJcbiAgICAgICAgdGhpcy5fYXBwZW5kY29sdW1ucyhmb2xkZXIuY29sdW1ucywgY29sdW1ucyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9jb25maWcuZm9sZGVycyAmJiB0aGlzLl9jb25maWcuZm9sZGVycy5jb2x1bW5zKVxyXG4gICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKHRoaXMuX2NvbmZpZy5mb2xkZXJzLmNvbHVtbnMsIGNvbHVtbnMpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbHVtbnMucHVzaCgnbnVtYmVyJyk7XHJcbiAgICAgIGlmICghdGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgIGNvbHVtbnMucHVzaCgnc3ViamVjdCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbHVtbnMucHVzaCgndmFsdWUnKTtcclxuICAgIH1cclxuICAgIGNvbHVtbnMucHVzaCgnb3B0aW9ucycpO1xyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hcHBlbmRjb2x1bW5zKHNvdXJjZTogRm9sZGVyQ29sdW1uW10sIGNvbHVtbnM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmN1c3RvbUNvbHVtbnMgPSBbXTtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoSEVBREVSX0NPTFVNTl9OQU1FUy5pbmRleE9mKGMubmFtZSkgPiAtMSlcclxuICAgICAgICBjb2x1bW5zLnB1c2goYy5uYW1lKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ29sdW1ucy5wdXNoKGMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZW5kQWxsKGFjdGlvbjogc3RyaW5nLCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5UGFyYW1zKGFyZ3MpO1xyXG4gICAgdGhpcy5fZm9yRWFjaChpID0+XHJcbiAgICAgIHRoaXMuX21haWxib3guc2VuZChpLmlkLCBpLnZlcnNpb24sIGkuZm9ybUlkLCBudWxsLCBhY3Rpb24sIHBhcmFtcykuXHJcbiAgICAgICAgcGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGkuZm9sZGVySWQgIT09IHRoaXMuZm9sZGVySWQpIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpKVxyXG4gICAgICAgIH0pKSwgJ1NlbmRFcnInKS5cclxuICAgICAgc3Vic2NyaWJlKGlzID0+IGlzLmxlbmd0aCA+IDEgPyB0aGlzLl9zYi50b2FzdCgnU2VudE1hbnknLCBpcy5sZW5ndGgudG9TdHJpbmcoKSxcclxuICAgICAgICB0aGlzLl9hY3Rpb25BZGplY3RpdmUoYWN0aW9uLCB0cnVlKSkgOlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTZW50JywgaXNbMF0ubnVtYmVyLFxyXG4gICAgICAgICAgdGhpcy5fYWN0aW9uQWRqZWN0aXZlKGFjdGlvbikpXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FjdGlvbkFkamVjdGl2ZShuYW1lOiBzdHJpbmcsIHBsdXJhbD86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gbmFtZSk7XHJcbiAgICByZXR1cm4gKChwbHVyYWwgPyAoYWN0aW9uLmFkamVjdGl2ZVBsdXJhbCB8fCBhY3Rpb24uYWRqZWN0aXZlKSA6IGFjdGlvbi5hZGplY3RpdmUpIHx8IGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGJpemRvYy1ub25lICpuZ0lmPVwiZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGggPT09IDBcIiB0aXRsZT1cIk5vTWVzc2FnZXNcIiBbc3VidGl0bGVdPVwiIWlzTW9iaWxlICYmIGZvbGRlcklkID09PSBEUkFGVCA/ICdBbHROJyA6IG51bGxcIiBpY29uPVwibWFpbF9vdXRsaW5lXCI+PC9iaXpkb2Mtbm9uZT5cclxuPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cInF1ZXJ5XCIgW3N0eWxlLnZpc2liaWxpdHldPVwibG9hZGluZyA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuPG1hdC10YWJsZSBjZGtEcm9wTGlzdCBjbGFzcz1cImRhdGEtdGFibGVcIlxyXG4gICAgICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cImlzTW9iaWxlXCJcclxuICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2U/LmRhdGFcIlxyXG4gICAgICAgICAgIGNka0Ryb3BMaXN0Q29ubmVjdGVkVG89XCJmb2xkZXJzXCJcclxuICAgICAgICAgICBjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZFxyXG4gICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0IG11bHRpVGVtcGxhdGVEYXRhUm93cyAobWF0U29ydENoYW5nZSk9XCJzb3J0RGF0YSgpXCJcclxuICAgICAgICAgICBpZD1cImJyb3dzZS10YWJsZVwiIFtAbGlzdF09XCJkYXRhU291cmNlXCIgW3N0eWxlLmRpc3BsYXldPVwiZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGggPycnOidub25lJ1wiPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+PC9kaXY+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbYXJpYS1sYWJlbF09XCInQ2hlY2snfHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbYXJpYS1sYWJlbF09XCInQ2hlY2snfHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0pIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cclxuICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwhLS0gZHJhZyAtLT5cclxuICAgICAgPCEtLTxidXR0b24gbWF0LWljb24tYnV0dG9uIGNka0RyYWdIYW5kbGVcclxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImRyYWdEaXNhYmxlZCA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAobW91c2V1cCk9XCJkcmFnRGlzYWJsZWQgPSB0cnVlXCJcclxuICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJkcmFnRGlzYWJsZWQgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgKHRvdWNoZW5kKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJhZ1wiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgZnhIaWRlLnhzPlxyXG4gICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoaXRlbSwgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidEZXRhaWxzJyB8IHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0RldGFpbHMnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJ0b29sXCI+PG1hdC1pY29uPnt7aXRlbSA9PSBleHBhbmRlZEVsZW1lbnQgPyAndW5mb2xkX2xlc3MnIDogJ3VuZm9sZF9tb3JlJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPCEtLSBOdW1iZXIgY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibnVtYmVyXCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydOdW1iZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ubnVtYmVyfX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBTdWJqZWN0IGNvbHVtbiAtLT5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN1YmplY3RcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1N1YmplY3QnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0uc3ViamVjdH19IDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwib3duZXJcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J093bmVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgICAgPGJpemRvYy1pZGVudGl0eS1uYW1lICpuZ0lmPVwiaXRlbS5vd25lcklkXCIgW2lkZW50aXR5XT1cIml0ZW0ub3duZXJJZFwiIFtieV09XCJpdGVtLm93bmVyQnlJZFwiPjwvYml6ZG9jLWlkZW50aXR5LW5hbWU+XHJcbiAgICA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VuZGVyXCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydTZW5kZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxyXG4gICAgICA8Yml6ZG9jLWlkZW50aXR5LW5hbWUgKm5nSWY9XCJpdGVtLnNlbmRlcklkXCIgW2lkZW50aXR5XT1cIml0ZW0uc2VuZGVySWRcIiBbYnldPVwiaXRlbS5ieUlkXCI+PC9iaXpkb2MtaWRlbnRpdHktbmFtZT5cclxuICAgIDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicmVjZWl2ZWRcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1JlY2VpdmVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj4ge3tpdGVtLnJlY2VpdmVkIHwgYW1DYWxlbmRhcn19IDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicmVjZWl2ZWRBZ29cIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1JlY2VpdmVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIiBbYml6ZG9jVG9vbHRpcF09XCJpdGVtLnJlY2VpdmVkIHwgYW1DYWxlbmRhclwiPnt7aXRlbS5yZWNlaXZlZCB8IGFtVGltZUFnb319PC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZXBsaWVkXCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydSZXBsaWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj4ge3tpdGVtLnJlcGxpZWQgfCBhbUNhbGVuZGFyfX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpc3N1ZWRcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J0lzc3VlZCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5pc3N1ZWQgfCBhbUNhbGVuZGFyfX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpc3N1ZWRBZ29cIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J0lzc3VlZCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCIgW2JpemRvY1Rvb2x0aXBdPVwiaXRlbS5pc3N1ZWQgfCBhbUNhbGVuZGFyXCI+IHt7aXRlbS5pc3N1ZWQgfCBhbVRpbWVBZ299fSA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0YXRlXCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydTdGF0dXMnIHwgdHJhbnNsYXRlIH19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgICAgPGJpemRvYy1zdGF0dXMgW3N0YXRlSWRdPVwiaXRlbS5zdGF0ZUlkXCI+PC9iaXpkb2Mtc3RhdHVzPlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUNvbHVtbnNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY3VzdG9tQ29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiYy5uYW1lXCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPiB7e2MudGl0bGV9fSA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYy50eXBlXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0RhdGUnXCI+XHJcbiAgICAgICAgICAgIHt7aXRlbS5tb2RlbFtjLm5hbWVdIHwgYW1DYWxlbmRhciB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidEZWNpbWFsJ1wiPlxyXG4gICAgICAgICAgICB7e2l0ZW0ubW9kZWxbYy5uYW1lXSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidCb29sZWFuJ1wiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cIml0ZW0ubW9kZWxbYy5uYW1lXVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICB7e2l0ZW0ubW9kZWxbYy5uYW1lXX19elxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1jZWxsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gVmFsdWUgY29sdW1uIC0tPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmFsdWVcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J0Ftb3VudCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS52YWx1ZSB8IGN1cnJlbmN5IDogaXRlbS5jdXJyZW5jeUNvZGUgOiAnc3ltYm9sJyA6IGN1cnJlbmN5Rm9ybWF0fX0gPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBvcHRpb25zIGNvbHVtbiAtLT5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm9wdGlvbnNcIj5cclxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmxhZyhpdGVtLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0ZsYWdnZWQnfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGVGbGFnZ2VkJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbiBbY2xhc3MuZG9jdW1lbnQtZmxhZ109XCJpdGVtLmZsYWdcIj57e2l0ZW0uZmxhZyA/ICdzdGFyJyA6ICdzdGFyX2JvcmRlcid9fTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ2aWV3KGl0ZW0sICRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInVmlldycgfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidWaWV3JyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbj5kYXRhX3VzYWdlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgZnhIaWRlLnhzIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ09wdGlvbnMnIHwgdHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B0aW9ucycgfCB0cmFuc2xhdGVcIiBjbGFzcz1cInRvb2xcIj48bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvbWF0LWNlbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtLT5cclxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheWVkQ29sdW1ucy5sZW5ndGhcIiBbQHVwZGF0ZWRdPVwiaXRlbSA9PSB1cGRhdGVkRWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnJlYWQtcm93XT1cIml0ZW0ucmVhZFwiPlxyXG4gICAgICA8ZGl2IFtAZGV0YWlsRXhwYW5kXT1cIml0ZW0gPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxyXG4gICAgICAgIDxiaXpkb2MtZXhwYW5kZWQtaXRlbSBbaXRlbV09XCJpdGVtXCIgKm5nSWY9XCJpdGVtID09IGV4cGFuZGVkRWxlbWVudFwiPjwvYml6ZG9jLWV4cGFuZGVkLWl0ZW0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2VsbD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgPG1hdC1yb3cgQGl0ZW0gW0B1cGRhdGVkXT1cIml0ZW0gPT0gdXBkYXRlZEVsZW1lbnRcIlxyXG4gICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgbGV0IGRhdGFJbmRleCA9IGRhdGFJbmRleDsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjbGFzcz1cImVsZW1lbnQtcm93XCJcclxuICAgICAgICAgICBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcclxuICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImRyYWdEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJkcmFnRGlzYWJsZWQgPSB0cnVlXCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkZWQtcm93Jzogc2VsZWN0ZWRFbGVtZW50ID09PSBpdGVtLFxyXG4gICAgICAnZXhwYW5kZWQtcm93JzogZXhwYW5kZWRFbGVtZW50ID09PSBpdGVtLFxyXG4gICAgICAgICAgICdvZGQtcm93JzogZGF0YUluZGV4ICUgMixcclxuICAgICAgJ3JlYWQtcm93JzogaXRlbS5yZWFkfVwiIG1hdFJpcHBsZVxyXG4gICAgICAgICAgIChjbGljayk9XCJvcGVuKGl0ZW0sICRldmVudClcIj5cclxuICAgIDxkaXYgKmNka0RyYWdQcmV2aWV3PlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPjxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+PC9idXR0b24+IDxzcGFuPiN7e2l0ZW0ubnVtYmVyfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKmNka0RyYWdQbGFjZWhvbGRlcj5cclxuICAgICAgPCEtLSBub25lIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtcm93PlxyXG4gIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgOyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gICAgICAgICAgIGNsYXNzPVwiZGV0YWlsLXJvd1wiIG1hdFJpcHBsZVxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkZWQtcm93Jzogc2VsZWN0ZWRFbGVtZW50ID09PSBpdGVtLFxyXG4gICAgICAgICAgICdvZGQtcm93JzogZGF0YUluZGV4ICUgMlxyXG4gICAgICAgICAgIH1cIj48L21hdC1yb3c+XHJcbjwvbWF0LXRhYmxlPlxyXG48bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCJQQUdFX1NJWkVcIiBbc3R5bGUuZGlzcGxheV09XCIhaXNNb2JpbGUgJiYgZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGg+UEFHRV9TSVpFID8gJyc6J25vbmUnXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG48bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuKGl0ZW0sICRldmVudClcIj57eydPcGVuJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInRvZ2dsZVJlYWQoaXRlbSlcIj57eyhpdGVtLnJlYWQgPydNYXJrQXNVbnJlYWQnOidNYXJrQXNSZWFkJyl8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb3B5KGl0ZW0pXCI+e3snQ29weSd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9tYXQtbWVudT5cclxuIl19