@bizdoc/core 2.3.18 → 2.3.20

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 (224) hide show
  1. package/esm2022/lib/admin/admin-menu.component.mjs +9 -10
  2. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +11 -11
  3. package/esm2022/lib/admin/architecture/designer-element.component.mjs +4 -4
  4. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +15 -16
  5. package/esm2022/lib/admin/architecture/designer.component.mjs +16 -15
  6. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +13 -14
  7. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +11 -12
  8. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +4 -5
  9. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +10 -11
  10. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +11 -12
  11. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +13 -14
  12. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +9 -10
  13. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +11 -12
  14. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +23 -24
  15. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +11 -12
  16. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +10 -11
  17. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +10 -11
  18. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +10 -11
  19. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +16 -17
  20. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +17 -18
  21. package/esm2022/lib/admin/architecture/elements/form.component.mjs +22 -23
  22. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +16 -17
  23. package/esm2022/lib/admin/architecture/elements/job.component.mjs +12 -13
  24. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +9 -10
  25. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +12 -13
  26. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +10 -11
  27. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +10 -11
  28. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +10 -11
  29. package/esm2022/lib/admin/architecture/elements/report.component.mjs +10 -11
  30. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +8 -9
  31. package/esm2022/lib/admin/architecture/elements/role.component.mjs +13 -14
  32. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +10 -11
  33. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +13 -13
  34. package/esm2022/lib/admin/architecture/elements/type.component.mjs +18 -19
  35. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +11 -12
  36. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +10 -11
  37. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +7 -8
  38. package/esm2022/lib/admin/core/color-picker.input.mjs +5 -6
  39. package/esm2022/lib/admin/core/localized-string.component.mjs +10 -11
  40. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +11 -11
  41. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +18 -18
  42. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +12 -12
  43. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +13 -12
  44. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +24 -60
  45. package/esm2022/lib/admin/form/designer/declarations.mjs +1 -1
  46. package/esm2022/lib/admin/form/designer/design-control.component.mjs +41 -0
  47. package/esm2022/lib/admin/form/designer/properties.component.mjs +11 -12
  48. package/esm2022/lib/admin/form/designer/section.component.mjs +11 -12
  49. package/esm2022/lib/admin/form/workflow/node.component.mjs +9 -10
  50. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +15 -16
  51. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
  52. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +13 -13
  53. package/esm2022/lib/admin/patterns/patterns.component.mjs +19 -19
  54. package/esm2022/lib/admin/permissions/permissions.component.mjs +14 -15
  55. package/esm2022/lib/admin/positions/positions-popup.component.mjs +11 -11
  56. package/esm2022/lib/admin/positions/positions.component.mjs +23 -24
  57. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +13 -13
  58. package/esm2022/lib/admin/profiler/profiler.component.mjs +15 -15
  59. package/esm2022/lib/browse/browse-items.component.mjs +3 -3
  60. package/esm2022/lib/browse/browse.mobile.component.mjs +15 -16
  61. package/esm2022/lib/browse/browse.pane.component.mjs +14 -15
  62. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +14 -15
  63. package/esm2022/lib/browse/filter/filter.component.mjs +13 -13
  64. package/esm2022/lib/browse/folders-menu.component.mjs +10 -11
  65. package/esm2022/lib/chat/chat.mobile.component.mjs +5 -6
  66. package/esm2022/lib/chat/contacts.component.mjs +16 -16
  67. package/esm2022/lib/chat/conversation.component.mjs +13 -14
  68. package/esm2022/lib/compose/action/action-picker.component.mjs +9 -10
  69. package/esm2022/lib/compose/action/action.dialog.mjs +8 -9
  70. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +6 -7
  71. package/esm2022/lib/compose/action/assign-action.component.mjs +12 -12
  72. package/esm2022/lib/compose/action/moveto-action.component.mjs +11 -11
  73. package/esm2022/lib/compose/action/return-action.component.mjs +9 -9
  74. package/esm2022/lib/compose/attachments/attachments.component.mjs +11 -12
  75. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +8 -9
  76. package/esm2022/lib/compose/box/box.component.mjs +7 -8
  77. package/esm2022/lib/compose/comments/comment.component.mjs +14 -15
  78. package/esm2022/lib/compose/comments/comments.component.mjs +8 -9
  79. package/esm2022/lib/compose/comments/edits.component.mjs +5 -5
  80. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +5 -6
  81. package/esm2022/lib/compose/comments/votes.component.mjs +8 -8
  82. package/esm2022/lib/compose/compose.mobile.component.mjs +16 -17
  83. package/esm2022/lib/compose/compose.pane.component.mjs +15 -16
  84. package/esm2022/lib/compose/copy/copy.dialog.mjs +11 -11
  85. package/esm2022/lib/compose/events/events.component.mjs +7 -8
  86. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +7 -8
  87. package/esm2022/lib/compose/form.component.mjs +5 -5
  88. package/esm2022/lib/compose/new-menu.component.mjs +8 -9
  89. package/esm2022/lib/compose/tag/tags.component.mjs +10 -10
  90. package/esm2022/lib/compose/trace/people.component.mjs +4 -5
  91. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +10 -11
  92. package/esm2022/lib/core/animations.mjs +7 -1
  93. package/esm2022/lib/core/checkbox.mjs +20 -17
  94. package/esm2022/lib/core/fields/address.field.mjs +35 -26
  95. package/esm2022/lib/core/fields/autocomplete.field.mjs +68 -52
  96. package/esm2022/lib/core/fields/checkbox.field.mjs +9 -10
  97. package/esm2022/lib/core/fields/checklist.designer.mjs +66 -47
  98. package/esm2022/lib/core/fields/checklist.field.mjs +8 -9
  99. package/esm2022/lib/core/fields/date-range.field.mjs +6 -6
  100. package/esm2022/lib/core/fields/date.field.mjs +10 -11
  101. package/esm2022/lib/core/fields/expression.field.mjs +31 -23
  102. package/esm2022/lib/core/fields/file.field.mjs +8 -9
  103. package/esm2022/lib/core/fields/html.field.mjs +9 -10
  104. package/esm2022/lib/core/fields/input.field.mjs +8 -9
  105. package/esm2022/lib/core/fields/numeric.field.mjs +7 -7
  106. package/esm2022/lib/core/fields/options.component.mjs +11 -12
  107. package/esm2022/lib/core/fields/radio-button.designer.mjs +10 -11
  108. package/esm2022/lib/core/fields/radio-button.field.mjs +8 -9
  109. package/esm2022/lib/core/fields/select.designer.mjs +71 -52
  110. package/esm2022/lib/core/fields/select.field.mjs +9 -10
  111. package/esm2022/lib/core/fields/signature.field.mjs +10 -11
  112. package/esm2022/lib/core/fields/switch.field.mjs +8 -9
  113. package/esm2022/lib/core/fields/tags.field.mjs +9 -10
  114. package/esm2022/lib/core/fields/textarea.field.mjs +9 -10
  115. package/esm2022/lib/core/fields/time.field.mjs +9 -10
  116. package/esm2022/lib/core/fields/timespan.field.mjs +33 -26
  117. package/esm2022/lib/core/fields/yesno.designer.mjs +70 -55
  118. package/esm2022/lib/core/fields/yesno.field.mjs +8 -9
  119. package/esm2022/lib/core/guide/guide.component.mjs +7 -8
  120. package/esm2022/lib/core/guide/help-tip.component.mjs +21 -18
  121. package/esm2022/lib/core/identity/identity.component.mjs +5 -6
  122. package/esm2022/lib/core/inputs/address.input.mjs +24 -21
  123. package/esm2022/lib/core/inputs/auto-complete.input.mjs +42 -26
  124. package/esm2022/lib/core/inputs/combination-picker-body.mjs +12 -13
  125. package/esm2022/lib/core/inputs/combination-picker.mjs +8 -5
  126. package/esm2022/lib/core/inputs/combination-pool.mjs +7 -8
  127. package/esm2022/lib/core/inputs/file.input.mjs +11 -12
  128. package/esm2022/lib/core/inputs/select.input.mjs +39 -23
  129. package/esm2022/lib/core/inputs/time-picker.mjs +6 -7
  130. package/esm2022/lib/core/mailbox.service.mjs +1 -1
  131. package/esm2022/lib/core/models.mjs +1 -1
  132. package/esm2022/lib/core/none.component.mjs +19 -22
  133. package/esm2022/lib/core/slots/slots.component.mjs +13 -14
  134. package/esm2022/lib/core/tagging/documents.component.mjs +7 -7
  135. package/esm2022/lib/core/tagging/edit-input.component.mjs +12 -13
  136. package/esm2022/lib/core/tagging/users.component.mjs +7 -7
  137. package/esm2022/lib/core/translations.mjs +2 -2
  138. package/esm2022/lib/cube/cube-menu.component.mjs +8 -9
  139. package/esm2022/lib/cube/explore/explore-items.component.mjs +8 -8
  140. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +6 -7
  141. package/esm2022/lib/cube/filter/filter.component.mjs +11 -11
  142. package/esm2022/lib/cube/grid/spreadsheet.component.mjs +1 -2
  143. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +12 -12
  144. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +12 -12
  145. package/esm2022/lib/cube/matrix/popup.component.mjs +10 -10
  146. package/esm2022/lib/cube/matrix/table.component.mjs +3 -4
  147. package/esm2022/lib/cube/parallel/parallel.component.mjs +4 -5
  148. package/esm2022/lib/cube/sum/sum.component.mjs +3 -3
  149. package/esm2022/lib/cube/view.mobile.component.mjs +16 -17
  150. package/esm2022/lib/cube/view.pane.component.mjs +12 -13
  151. package/esm2022/lib/dashboard/dashboard.component.mjs +11 -12
  152. package/esm2022/lib/dashboard/recents/recents.widget.mjs +11 -12
  153. package/esm2022/lib/dashboard/score/activity.widget.mjs +4 -5
  154. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +5 -5
  155. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +11 -12
  156. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -2
  157. package/esm2022/lib/designer.module.mjs +6 -5
  158. package/esm2022/lib/home/about/about.dialog.mjs +7 -8
  159. package/esm2022/lib/home/home.desktop.component.mjs +17 -18
  160. package/esm2022/lib/home/home.mobile.component.mjs +16 -17
  161. package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
  162. package/esm2022/lib/home/options/options.component.mjs +11 -11
  163. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +8 -9
  164. package/esm2022/lib/home/tools.component.mjs +13 -13
  165. package/esm2022/lib/impersonate/impersonate.component.mjs +10 -10
  166. package/esm2022/lib/modules/gantt.module.mjs +4 -2
  167. package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
  168. package/esm2022/lib/notifications/types/commented.notification.mjs +19 -12
  169. package/esm2022/lib/notifications/types/escalated.notification.mjs +6 -6
  170. package/esm2022/lib/notifications/types/liked.notification.mjs +19 -12
  171. package/esm2022/lib/notifications/types/tagged.notification.mjs +9 -9
  172. package/esm2022/lib/notifications/types/text.notification.mjs +6 -3
  173. package/esm2022/lib/options/options.component.mjs +52 -28
  174. package/esm2022/lib/options/options.service.mjs +26 -6
  175. package/esm2022/lib/reports/cube/table-documents.component.mjs +10 -10
  176. package/esm2022/lib/reports/report.mobile.component.mjs +12 -13
  177. package/esm2022/lib/reports/report.pane.component.mjs +10 -11
  178. package/esm2022/lib/reports/reports-menu.component.mjs +7 -8
  179. package/esm2022/lib/reports/substitution/substitution.component.mjs +10 -11
  180. package/esm2022/lib/reports/table/table-view.component.mjs +5 -6
  181. package/esm2022/lib/search/path.component.mjs +17 -18
  182. package/esm2022/lib/shared.module.mjs +4 -2
  183. package/esm2022/lib/system.module.mjs +5 -5
  184. package/esm2022/lib/views/cube/chart.component.mjs +6 -7
  185. package/esm2022/lib/views/cube/explore.component.mjs +10 -10
  186. package/esm2022/lib/views/cube/matrix.component.mjs +11 -11
  187. package/esm2022/lib/views/cube/parallel.component.mjs +4 -5
  188. package/esm2022/lib/views/cube/pivot.component.mjs +4 -5
  189. package/esm2022/lib/views/cube/sum.component.mjs +12 -10
  190. package/esm2022/lib/views/cube/view.component.mjs +11 -12
  191. package/esm2022/lib/views/timeline/timeline.component.exp.mjs +191 -192
  192. package/esm2022/lib/views/views.component.mjs +4 -5
  193. package/esm2022/public-api.mjs +3 -1
  194. package/fesm2022/bizdoc-core.mjs +3509 -3296
  195. package/fesm2022/bizdoc-core.mjs.map +1 -1
  196. package/lib/admin/architecture/elements/analysis-view.component.d.ts +2 -2
  197. package/lib/admin/architecture/elements/cube-view.component.d.ts +2 -2
  198. package/lib/admin/architecture/elements/form.component.d.ts +5 -5
  199. package/lib/admin/architecture/elements/matrix-view.component.d.ts +17 -9
  200. package/lib/admin/architecture/elements/parallel-view.component.d.ts +5 -5
  201. package/lib/admin/architecture/elements/tasks-report.component.d.ts +3 -2
  202. package/lib/admin/form/designer/box-designer.component.d.ts +26 -23
  203. package/lib/admin/form/designer/declarations.d.ts +2 -2
  204. package/lib/admin/form/designer/design-control.component.d.ts +19 -0
  205. package/lib/admin/form/designer/section.component.d.ts +3 -3
  206. package/lib/compose/attachments/attachments.component.d.ts +2 -2
  207. package/lib/core/animations.d.ts +1 -0
  208. package/lib/core/inputs/combination-picker.d.ts +1 -0
  209. package/lib/core/mailbox.service.d.ts +4 -3
  210. package/lib/core/models.d.ts +1 -1
  211. package/lib/cube/matrix/table.component.d.ts +2 -2
  212. package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
  213. package/lib/designer.module.d.ts +27 -26
  214. package/lib/notifications/types/escalated.notification.d.ts +1 -1
  215. package/lib/notifications/types/tagged.notification.d.ts +1 -1
  216. package/lib/notifications/types/text.notification.d.ts +1 -1
  217. package/lib/options/options.component.d.ts +6 -4
  218. package/lib/options/options.service.d.ts +7 -2
  219. package/lib/shared.module.d.ts +1 -1
  220. package/lib/system.module.d.ts +25 -25
  221. package/lib/views/cube/sum.component.d.ts +1 -0
  222. package/lib/views/timeline/timeline.component.exp.d.ts +2 -2
  223. package/package.json +1 -1
  224. package/public-api.d.ts +2 -0
@@ -1,7 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { Component, Inject, HostBinding } from '@angular/core';
3
3
  import dayjs from 'dayjs';
4
- import { tap, map } from 'rxjs/operators';
4
+ import { tap } from 'rxjs/operators';
5
5
  import { forkJoin, catchError } from 'rxjs';
6
6
  import { DayMarkersService, Gantt, SelectionService } from '@syncfusion/ej2-angular-gantt';
7
7
  import { BIZDOC_CONFIG } from '../../core/configuration';
@@ -54,6 +54,7 @@ let TimelineViewComponent = class TimelineViewComponent {
54
54
  this.splitterSettings = {
55
55
  columnIndex: 3,
56
56
  view: 'Chart',
57
+ position: '0',
57
58
  separatorSize: 0
58
59
  };
59
60
  this.dayWorkingTime = [{ from: 0, to: 24 }];
@@ -74,19 +75,21 @@ let TimelineViewComponent = class TimelineViewComponent {
74
75
  });
75
76
  }
76
77
  onBind(model) {
77
- this.item = model;
78
- this._prepare(model).subscribe(tasks => {
79
- this._draw(tasks);
78
+ this.model = model;
79
+ this._prepare().subscribe(() => {
80
+ this._draw();
80
81
  //this.gantt.scrollToDate(new Date().toString());
81
82
  });
82
83
  }
83
- _draw(tasks) {
84
+ _draw() {
84
85
  this.gantt && this.gantt.destroy();
85
86
  this.gantt = new Gantt({
86
- dataSource: tasks,
87
+ dataSource: this.tasks,
87
88
  queryTaskbarInfo: this.queryTaskbarInfo.bind(this),
88
89
  taskFields: this.taskFields,
89
90
  columns: this.columns,
91
+ //viewType: 'ProjectView',
92
+ //allowExcelExport: true,
90
93
  enableRtl: this._session.inverse,
91
94
  // timelineSettings: this.timelineSettings,
92
95
  labelSettings: this.labelSettings,
@@ -104,7 +107,7 @@ let TimelineViewComponent = class TimelineViewComponent {
104
107
  // durationUnit: 'Hour',
105
108
  taskbarHeight: 30,
106
109
  rowHeight: 40,
107
- width: this.width
110
+ width: '100%', //this.width
108
111
  // dayWorkingTime: this.dayWorkingTime
109
112
  }, this._element.nativeElement);
110
113
  this.columns.forEach(c => this.gantt.hideColumn(c.field));
@@ -112,212 +115,208 @@ let TimelineViewComponent = class TimelineViewComponent {
112
115
  queryTaskbarInfo(evt) {
113
116
  evt.taskbarBgColor = this._session.getAccent();
114
117
  }
115
- _prepare(model) {
118
+ _prepare() {
116
119
  const promisses = [];
117
120
  let i = 0;
118
- const tasks = [];
119
121
  //const observable = this._mailbox.timeline(model.documentId).pipe(tap(t => {
120
122
  //}))
121
- const process = (model) => {
122
- model.log.forEach(l => {
123
- let task;
124
- switch (l.type) {
125
- case 'Submit':
126
- this.eventMarkers.push({
127
- day: new Date(l.time),
128
- label: this._translate.get('Submition')
129
- });
130
- return;
131
- case 'StateChange':
132
- {
133
- const state = this._session.profile.states.find(s => s.name === l.state);
134
- task = {
135
- id: i++,
136
- type: l.type,
137
- nodeId: l.nodeId,
138
- time: new Date(l.time),
139
- title: state ? state.past || state.title : l.state
140
- };
141
- if (l.duration) {
142
- task.ending = new Date(task.time.valueOf() + l.duration * 1000);
143
- task.duration = l.duration * 1000;
144
- }
145
- else
146
- task.ending = model.completed ? new Date(l.time) : new Date();
147
- tasks.push(task);
148
- break;
123
+ this.model.log.forEach(l => {
124
+ let task;
125
+ switch (l.type) {
126
+ case 'Submit':
127
+ this.eventMarkers.push({
128
+ day: new Date(l.time),
129
+ label: this._translate.get('Submition')
130
+ });
131
+ return;
132
+ case 'StateChange':
133
+ {
134
+ const state = this._session.profile.states.find(s => s.name === l.state);
135
+ task = {
136
+ id: i++,
137
+ type: l.type,
138
+ nodeId: l.nodeId,
139
+ time: new Date(l.time),
140
+ title: state ? state.past || state.title : l.state
141
+ };
142
+ if (l.duration) {
143
+ task.ending = new Date(task.time.valueOf() + l.duration * 1000);
144
+ task.duration = l.duration * 1000;
149
145
  }
150
- case 'ModelChange':
151
- {
152
- task = {
153
- id: i++,
154
- type: l.type,
155
- nodeId: l.nodeId,
156
- time: new Date(l.time),
157
- title: this._translate.get('Edited')
158
- };
159
- if (l.duration) {
160
- task.ending = new Date(task.time.valueOf() + l.duration * 1000);
161
- task.duration = l.duration * 1000;
162
- }
163
- else
164
- task.ending = new Date();
165
- const state = tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.ending));
166
- if (state) {
167
- if (!state.subtasks)
168
- state.subtasks = [];
169
- state.subtasks.push(task);
170
- }
171
- else
172
- tasks.push(task);
173
- break;
146
+ else
147
+ task.ending = this.model.completed ? new Date(l.time) : new Date();
148
+ this.tasks.push(task);
149
+ break;
150
+ }
151
+ case 'ModelChange':
152
+ {
153
+ task = {
154
+ id: i++,
155
+ type: l.type,
156
+ nodeId: l.nodeId,
157
+ time: new Date(l.time),
158
+ title: this._translate.get('Edited')
159
+ };
160
+ if (l.duration) {
161
+ task.ending = new Date(task.time.valueOf() + l.duration * 1000);
162
+ task.duration = l.duration * 1000;
174
163
  }
175
- case 'ActionTaken':
176
- {
177
- const action = this._session.profile.actions.find(a => a.name === l.action);
178
- if (l.action === 'delete')
179
- return;
180
- const time = dayjs(l.time);
181
- task = {
182
- id: i++,
183
- type: l.type,
184
- nodeId: l.nodeId,
185
- ending: time.toDate(),
186
- time: time.add(-l.duration, 's').toDate(),
187
- duration: l.duration * 1000,
188
- title: action ? action.past || action.title : l.action
189
- };
190
- if (l.nodeId) {
191
- model.workflow.connectors.filter(c => c.targetId === l.nodeId).forEach(c => {
192
- const dependencies = tasks.filter(l => l.nodeId === c.sourceId).map(l => `FS${l.id}`);
193
- if (dependencies.length)
194
- task.dependencies = dependencies.join(',');
195
- });
196
- }
197
- const state = tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.ending));
198
- if (state) {
199
- if (!state.subtasks)
200
- state.subtasks = [];
201
- state.subtasks.push(task);
202
- }
203
- else
204
- tasks.push(task);
205
- break;
164
+ else
165
+ task.ending = new Date();
166
+ const state = this.tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.ending));
167
+ if (state) {
168
+ if (!state.subtasks)
169
+ state.subtasks = [];
170
+ state.subtasks.push(task);
206
171
  }
207
- default:
208
- return;
209
- }
210
- if (l.byId) {
211
- const who = this._users.get(l.userId), by = this._users.get(l.byId);
212
- const promise = forkJoin([who, by]).pipe(tap(ns => {
213
- const [who, by] = ns;
214
- task.name = this._translate.get('By', who.name, by.name);
215
- // if (l.role) {
216
- // const role = this.session.profile.roles.find(o => o.name === l.role);
217
- // if (role) task.name += `, ${role.name}`;
218
- // }
219
- }), catchError(() => {
220
- this._ps.error();
221
- throw new Error();
222
- }));
223
- promisses.push(promise);
224
- }
225
- else if (l.userId) {
226
- const promise = this._users.get(l.userId).pipe(tap(u => {
227
- task.name = u.name;
228
- // if (l.role) {
229
- // const role = this.session.profile.roles.find(o => o.name === l.role);
230
- // if (role) task.name += `, ${role.name}`;
231
- // }
232
- }), catchError(() => {
233
- this._ps.error();
234
- throw new Error();
235
- }));
236
- promisses.push(promise);
237
- }
238
- });
239
- model.events.forEach(e => {
240
- this.eventMarkers.push({
241
- day: new Date(e.starting),
242
- label: e.title
243
- });
244
- });
245
- model.recipients.forEach(r => {
246
- if (!r.pending)
247
- return;
248
- const task = {
249
- id: i++,
250
- type: 'pending',
251
- time: new Date(r.received),
252
- title: this._translate.get('IsPending')
253
- };
254
- if (r.substituteId) {
255
- const by = this._users.get(r.substituteId);
256
- const who = this._users.get(r.userId);
257
- const promise = forkJoin([who, by]).pipe(tap(u => {
258
- task.name = this._translate.get('WhoSubstituting', u[0].name, u[1].name);
259
- if (u[0].role)
260
- task.name += `, ${u[0].role}`;
261
- if (r.role) {
262
- const role = this._session.profile.roles.find(o => o.name === r.role);
263
- if (role)
264
- task.name += `, ${role.name}`;
172
+ else
173
+ this.tasks.push(task);
174
+ break;
175
+ }
176
+ case 'ActionTaken':
177
+ {
178
+ const action = this._session.profile.actions.find(a => a.name === l.action);
179
+ if (l.action === 'delete')
180
+ return;
181
+ const time = dayjs(l.time);
182
+ task = {
183
+ id: i++,
184
+ type: l.type,
185
+ nodeId: l.nodeId,
186
+ ending: time.toDate(),
187
+ time: time.add(-l.duration, 's').toDate(),
188
+ duration: l.duration * 1000,
189
+ title: action ? action.past || action.title : l.action
190
+ };
191
+ if (l.nodeId) {
192
+ this.model.workflow.connectors.filter(c => c.targetId === l.nodeId).forEach(c => {
193
+ const dependencies = this.tasks.filter(l => l.nodeId === c.sourceId).map(l => `FS${l.id}`);
194
+ if (dependencies.length)
195
+ task.dependencies = dependencies.join(',');
196
+ });
265
197
  }
266
- }), catchError(() => {
267
- this._ps.error();
268
- throw new Error();
269
- }));
270
- promisses.push(promise);
271
- }
272
- else {
273
- const promise = this._users.get(r.userId).pipe(tap(u => {
274
- task.name = u.name;
275
- if (u.role)
276
- task.name += `, ${u.role}`;
277
- else if (r.role) {
278
- const role = this._session.profile.roles.find(o => o.name === r.role);
279
- if (role)
280
- task.name += `, ${role.name}`;
198
+ const state = this.tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.ending));
199
+ if (state) {
200
+ if (!state.subtasks)
201
+ state.subtasks = [];
202
+ state.subtasks.push(task);
281
203
  }
282
- }), catchError(() => {
283
- this._ps.error();
284
- throw new Error();
285
- }));
286
- promisses.push(promise);
287
- }
288
- if (r.nodeId) {
289
- model.workflow.connectors.filter(c => c.targetId === r.nodeId).forEach(c => {
290
- const predecessors = tasks.filter(l => l.nodeId === c.sourceId).map(l => l.id);
291
- if (predecessors.length)
292
- task.dependencies = predecessors.join(',');
293
- });
294
- }
295
- const state = tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.time));
296
- if (state) {
297
- if (!state.subtasks)
298
- state.subtasks = [];
299
- state.subtasks.push(task);
300
- }
301
- else
302
- tasks.push(task);
204
+ else
205
+ this.tasks.push(task);
206
+ break;
207
+ }
208
+ default:
209
+ return;
210
+ }
211
+ if (l.byId) {
212
+ const who = this._users.get(l.userId), by = this._users.get(l.byId);
213
+ const promise = forkJoin([who, by]).pipe(tap(ns => {
214
+ const [who, by] = ns;
215
+ task.name = this._translate.get('By', who.name, by.name);
216
+ // if (l.role) {
217
+ // const role = this.session.profile.roles.find(o => o.name === l.role);
218
+ // if (role) task.name += `, ${role.name}`;
219
+ // }
220
+ }), catchError(() => {
221
+ this._ps.error();
222
+ throw new Error();
223
+ }));
224
+ promisses.push(promise);
225
+ }
226
+ else if (l.userId) {
227
+ const promise = this._users.get(l.userId).pipe(tap(u => {
228
+ task.name = u.name;
229
+ // if (l.role) {
230
+ // const role = this.session.profile.roles.find(o => o.name === l.role);
231
+ // if (role) task.name += `, ${role.name}`;
232
+ // }
233
+ }), catchError(() => {
234
+ this._ps.error();
235
+ throw new Error();
236
+ }));
237
+ promisses.push(promise);
238
+ }
239
+ });
240
+ this.model.events.forEach(e => {
241
+ this.eventMarkers.push({
242
+ day: new Date(e.starting),
243
+ label: e.title
303
244
  });
304
- };
305
- process(model);
245
+ });
246
+ this.model.recipients.forEach(r => {
247
+ if (!r.pending)
248
+ return;
249
+ const task = {
250
+ id: i++,
251
+ type: 'pending',
252
+ time: new Date(r.received),
253
+ title: this._translate.get('IsPending')
254
+ };
255
+ if (r.substituteId) {
256
+ const by = this._users.get(r.substituteId);
257
+ const who = this._users.get(r.userId);
258
+ const promise = forkJoin([who, by]).pipe(tap(u => {
259
+ task.name = this._translate.get('WhoSubstituting', u[0].name, u[1].name);
260
+ if (u[0].role)
261
+ task.name += `, ${u[0].role}`;
262
+ if (r.role) {
263
+ const role = this._session.profile.roles.find(o => o.name === r.role);
264
+ if (role)
265
+ task.name += `, ${role.name}`;
266
+ }
267
+ }), catchError(() => {
268
+ this._ps.error();
269
+ throw new Error();
270
+ }));
271
+ promisses.push(promise);
272
+ }
273
+ else {
274
+ const promise = this._users.get(r.userId).pipe(tap(u => {
275
+ task.name = u.name;
276
+ if (u.role)
277
+ task.name += `, ${u.role}`;
278
+ else if (r.role) {
279
+ const role = this._session.profile.roles.find(o => o.name === r.role);
280
+ if (role)
281
+ task.name += `, ${role.name}`;
282
+ }
283
+ }), catchError(() => {
284
+ this._ps.error();
285
+ throw new Error();
286
+ }));
287
+ promisses.push(promise);
288
+ }
289
+ if (r.nodeId) {
290
+ this.model.workflow.connectors.filter(c => c.targetId === r.nodeId).forEach(c => {
291
+ const predecessors = this.tasks.filter(l => l.nodeId === c.sourceId).map(l => l.id);
292
+ if (predecessors.length)
293
+ task.dependencies = predecessors.join(',');
294
+ });
295
+ }
296
+ const state = this.tasks.find(t => t.type === 'StateChange' && t.time <= task.time && (!t.ending || t.ending >= task.time));
297
+ if (state) {
298
+ if (!state.subtasks)
299
+ state.subtasks = [];
300
+ state.subtasks.push(task);
301
+ }
302
+ else
303
+ this.tasks.push(task);
304
+ });
306
305
  return forkJoin(promisses).
307
- pipe(map(() => tasks.sort((t0, t1) => t0.time > t1.time ? 1 : -1)));
306
+ pipe(tap(() => this.tasks = this.tasks.sort((t0, t1) => t0.time > t1.time ? 1 : -1)));
308
307
  }
309
308
  rowSelecting(r) {
310
309
  if (r.data.taskData.type === 'ModelChange')
311
310
  this._compare(r.data);
312
311
  }
313
312
  _compare(task) {
314
- this._router.navigate(['mailbox/d', this.item.documentId.encodeId(), 'version', task.time.valueOf().encodeId()], { state: { item: this.item } });
313
+ this._router.navigate(['mailbox/d', this.model.documentId.encodeId(), 'version', task.time.valueOf().encodeId()], { state: { item: this.model } });
315
314
  }
316
315
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: TimelineViewComponent, deps: [{ token: i1.PromptService }, { token: i2.DocumentViewRef }, { token: BIZDOC_CONFIG }, { token: i3.AccountService }, { token: i4.SessionService }, { token: i5.TranslateService }, { token: i6.RouterImpl }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
317
316
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: TimelineViewComponent, selector: "bizdoc-timeline", host: { properties: { "dir": "this.dir" }, classAttribute: "view" }, providers: [SelectionService, DayMarkersService], ngImport: i0, template: '', isInline: true, styles: [":host{padding:8px}:host ::ng-deep .e-split-bar{display:none!important}\n"] }); }
318
317
  };
319
318
  TimelineViewComponent = __decorate([
320
- BizDoc({ selector: 'bizdoc-timeline' })
319
+ BizDoc({ selector: 'bizdoc-timeline-view' })
321
320
  /** timeline-view component*/
322
321
  ], TimelineViewComponent);
323
322
  export { TimelineViewComponent };
@@ -330,4 +329,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
330
329
  }] }, { type: i3.AccountService }, { type: i4.SessionService }, { type: i5.TranslateService }, { type: i6.RouterImpl }, { type: i0.ElementRef }], propDecorators: { dir: [{
331
330
  type: HostBinding
332
331
  }] } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmV4cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvdmlld3MvdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50LmV4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBYyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBZSxpQkFBaUIsRUFBeUMsS0FBSyxFQUFnRSxnQkFBZ0IsRUFBeUYsTUFBTSwrQkFBK0IsQ0FBQztBQU9wUyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFheEMsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFXaEMseUJBQXlCO0lBQ3pCLFlBQ1UsR0FBa0IsRUFDMUIsT0FBaUMsRUFDVixNQUFvQixFQUNuQyxNQUFzQixFQUN0QixRQUF3QixFQUN4QixVQUE0QixFQUM1QixPQUFtQixFQUNuQixRQUFvQjtRQVBwQixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBR2xCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQWpCckIsUUFBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FB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SnJCLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsMEJBSHRDLEVBQUU7O0FBT0QscUJBQXFCO0lBRmpDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQ3hDLDZCQUE2QjtHQUNoQixxQkFBcUIsQ0FxVGpDOzsyRkFyVFkscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLGlCQUFpQixZQUNqQixFQUFFLFFBRU4sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQ1osQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQzs7MEJBbUI3QyxNQUFNOzJCQUFDLGFBQWE7b0xBWmQsR0FBRztzQkFEWCxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIEhvc3RCaW5kaW5nLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IHRhcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCwgRGF5TWFya2Vyc1NlcnZpY2UsIERheVdvcmtpbmdUaW1lTW9kZWwsIEV2ZW50TWFya2VyTW9kZWwsIEdhbnR0LCBIb2xpZGF5TW9kZWwsIElRdWVyeVRhc2tiYXJJbmZvRXZlbnRBcmdzLCBMYWJlbFNldHRpbmdzTW9kZWwsIFNlbGVjdGlvblNlcnZpY2UsIFNlbGVjdGlvblNldHRpbmdzTW9kZWwsIFNwbGl0dGVyU2V0dGluZ3NNb2RlbCwgVGFza0ZpZWxkc01vZGVsLCBUaW1lbGluZVNldHRpbmdzTW9kZWwgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1nYW50dCc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERvY3VtZW50Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZSc7XHJcbmltcG9ydCB7IENoYWluLCBEb2N1bWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCaXpEb2NDb25maWcsIEJJWkRPQ19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXJJbXBsIH0gZnJvbSAnLi4vLi4vY29yZS9yb3V0ZXInO1xyXG5pbXBvcnQgeyBEb2N1bWVudFZpZXdSZWYgfSBmcm9tICcuLi9kb2N1bWVudC12aWV3LXJlZic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy10aW1lbGluZScsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHN0eWxlVXJsczogWyd0aW1lbGluZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICd2aWV3JyB9LFxyXG4gIHByb3ZpZGVyczogW1NlbGVjdGlvblNlcnZpY2UsIERheU1hcmtlcnNTZXJ2aWNlXVxyXG59KVxyXG5AQml6RG9jKHsgc2VsZWN0b3I6ICdiaXpkb2MtdGltZWxpbmUnIH0pXHJcbi8qKiB0aW1lbGluZS12aWV3IGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBUaW1lbGluZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBEb2N1bWVudFZpZXdDb21wb25lbnQge1xyXG4gIGRhdGE6IFRhc2tbXTtcclxuICBASG9zdEJpbmRpbmcoKVxyXG4gIHJlYWRvbmx5IGRpciA9IHRoaXMuX3Nlc3Npb24uZGlyZWN0aW9uO1xyXG4gIHJlYWRvbmx5IGxvY2FsZSA9IHRoaXMuX3Nlc3Npb24ubGFuZ3VhZ2U7XHJcbiAgaXRlbTogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIGdhbnR0OiBHYW50dDtcclxuICBkYXRlRm9ybWF0OiBzdHJpbmc7XHJcbiAgaG9saWRheXM6IEhvbGlkYXlNb2RlbFtdO1xyXG4gIHdpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvblNldHRpbmdzID0ge30gYXMgU2VsZWN0aW9uU2V0dGluZ3NNb2RlbDtcclxuICAvKiogdGltZWxpbmUtdmlldyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHZpZXdSZWY6IERvY3VtZW50Vmlld1JlZjxPcHRpb25zPixcclxuICAgIEBJbmplY3QoQklaRE9DX0NPTkZJRykgY29uZmlnOiBCaXpEb2NDb25maWcsXHJcbiAgICBwcml2YXRlIF91c2VyczogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVySW1wbCxcclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAgeyBmaWVsZDogJ3RpdGxlJywgaGVhZGVyVGV4dDogX3RyYW5zbGF0ZS5nZXQoJ1Rhc2snKSB9LFxyXG4gICAgICB7IGZpZWxkOiAnbmFtZScsIGhlYWRlclRleHQ6IF90cmFuc2xhdGUuZ2V0KCdXaG8nKSB9LFxyXG4gICAgICB7IGZpZWxkOiAndGltZScsIGhlYWRlclRleHQ6IF90cmFuc2xhdGUuZ2V0KCdXaGVuJykgfVxyXG4gICAgXTtcclxuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGNvbmZpZyAmJiBjb25maWcuZm9ybWF0cyAmJiBjb25maWcuZm9ybWF0cy5kYXRlVGltZSB8fCAnTU1NTSBkLCB5eXl5IGhoOm1tJztcclxuICAgIHRoaXMuaG9saWRheXMgPSBfc2Vzc2lvbi5wcm9maWxlLmhvbGlkYXlzICYmXHJcbiAgICAgIF9zZXNzaW9uLnByb2ZpbGUuaG9saWRheXMubWFwKGggPT4gKHsgZnJvbTogaC5zdGFydERhdGUsIHRvOiBoLmZyb21EYXRlLCBsYWJlbDogaC50aXRsZSB9KSlcclxuICAgIHZpZXdSZWYucmVzaXplLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgdGhpcy53aWR0aCA9IGQud2lkdGggLSAxNjtcclxuICAgICAgaWYgKHRoaXMuZ2FudHQpIHtcclxuICAgICAgICB0aGlzLmdhbnR0LndpZHRoID0gZC53aWR0aCAtIDE2O1xyXG4gICAgICAgIHRoaXMuZ2FudHQud2luZG93UmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBvbkJpbmQobW9kZWw6IERvY3VtZW50TW9kZWw8YW55Pikge1xyXG4gICAgdGhpcy5pdGVtID0gbW9kZWw7XHJcbiAgICB0aGlzLl9wcmVwYXJlKG1vZGVsKS5zdWJzY3JpYmUodGFza3MgPT4ge1xyXG4gICAgICB0aGlzLl9kcmF3KHRhc2tzKTtcclxuICAgICAgLy90aGlzLmdhbnR0LnNjcm9sbFRvRGF0ZShuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RyYXcodGFza3M6IFRhc2tbXSkge1xyXG4gICAgdGhpcy5nYW50dCAmJiB0aGlzLmdhbnR0LmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZ2FudHQgPSBuZXcgR2FudHQoe1xyXG4gICAgICBkYXRhU291cmNlOiB0YXNrcyxcclxuICAgICAgcXVlcnlUYXNrYmFySW5mbzogdGhpcy5xdWVyeVRhc2tiYXJJbmZvLmJpbmQodGhpcyksXHJcbiAgICAgIHRhc2tGaWVsZHM6IHRoaXMudGFza0ZpZWxkcyxcclxuICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICBlbmFibGVSdGw6IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSxcclxuICAgICAgLy8gIHRpbWVsaW5lU2V0dGluZ3M6IHRoaXMudGltZWxpbmVTZXR0aW5ncyxcclxuICAgICAgbGFiZWxTZXR0aW5nczogdGhpcy5sYWJlbFNldHRpbmdzLFxyXG4gICAgICBldmVudE1hcmtlcnM6IHRoaXMuZXZlbnRNYXJrZXJzLFxyXG4gICAgICByZWFkT25seTogdHJ1ZSxcclxuICAgICAgc2VsZWN0aW9uU2V0dGluZ3M6IHRoaXMuc2VsZWN0aW9uU2V0dGluZ3MsXHJcbiAgICAgIGFsbG93U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBkYXRlRm9ybWF0OiB0aGlzLmRhdGVGb3JtYXQsXHJcbiAgICAgIHRvb2x0aXBTZXR0aW5nczogdGhpcy50b29sdGlwU2V0dGluZ3MsXHJcbiAgICAgIC8vdGltZWxpbmVTZXR0aW5nczoge30sXHJcbiAgICAgIHJvd1NlbGVjdGluZzogdGhpcy5yb3dTZWxlY3RpbmcuYmluZCh0aGlzKSxcclxuICAgICAgaG9saWRheXM6IHRoaXMuaG9saWRheXMsXHJcbiAgICAgIC8vICBpbmNsdWRlV2Vla2VuZDogdHJ1ZSxcclxuICAgICAgc3BsaXR0ZXJTZXR0aW5nczogdGhpcy5zcGxpdHRlclNldHRpbmdzLFxyXG4gICAgICAvLyAgZHVyYXRpb25Vbml0OiAnSG91cicsXHJcbiAgICAgIHRhc2tiYXJIZWlnaHQ6IDMwLFxyXG4gICAgICByb3dIZWlnaHQ6IDQwLFxyXG4gICAgICB3aWR0aDogdGhpcy53aWR0aFxyXG4gICAgICAvLyAgZGF5V29ya2luZ1RpbWU6IHRoaXMuZGF5V29ya2luZ1RpbWVcclxuICAgIH0sIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudClcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT5cclxuICAgICAgdGhpcy5nYW50dC5oaWRlQ29sdW1uKGMuZmllbGQpXHJcbiAgICApXHJcbiAgfVxyXG4gIHF1ZXJ5VGFza2JhckluZm8oZXZ0OiBJUXVlcnlUYXNrYmFySW5mb0V2ZW50QXJncykge1xyXG4gICAgZXZ0LnRhc2tiYXJCZ0NvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcHJlcGFyZShtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+KTogT2JzZXJ2YWJsZTxUYXNrW10+IHtcclxuICAgIGNvbnN0IHByb21pc3NlczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcclxuXHJcbiAgICAvL2NvbnN0IG9ic2VydmFibGUgPSB0aGlzLl9tYWlsYm94LnRpbWVsaW5lKG1vZGVsLmRvY3VtZW50SWQpLnBpcGUodGFwKHQgPT4ge1xyXG4gICAgLy99KSlcclxuXHJcbiAgICBjb25zdCBwcm9jZXNzID0gKG1vZGVsOiBEb2N1bWVudE1vZGVsKSA9PiB7XHJcbiAgICAgIG1vZGVsLmxvZy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgICAgIHN3aXRjaCAobC50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlICdTdWJtaXQnOlxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFya2Vycy5wdXNoKHtcclxuICAgICAgICAgICAgICBkYXk6IG5ldyBEYXRlKGwudGltZSksXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdGlvbicpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBjYXNlICdTdGF0ZUNoYW5nZSc6XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5zdGF0ZXMuZmluZChzID0+IHMubmFtZSA9PT0gbC5zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgdGFzayA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBpKyssXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBub2RlSWQ6IGwubm9kZUlkLFxyXG4gICAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUobC50aW1lKSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBzdGF0ZSA/IHN0YXRlLnBhc3QgfHwgc3RhdGUudGl0bGUgOiBsLnN0YXRlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAobC5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGFzay5lbmRpbmcgPSBuZXcgRGF0ZSh0YXNrLnRpbWUudmFsdWVPZigpICsgbC5kdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgdGFzay5kdXJhdGlvbiA9IGwuZHVyYXRpb24gKiAxMDAwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0YXNrLmVuZGluZyA9IG1vZGVsLmNvbXBsZXRlZCA/IG5ldyBEYXRlKGwudGltZSkgOiBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgIHRhc2tzLnB1c2godGFzayk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgJ01vZGVsQ2hhbmdlJzpcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHRhc2sgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogaSsrLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogbC50eXBlLFxyXG4gICAgICAgICAgICAgICAgbm9kZUlkOiBsLm5vZGVJZCxcclxuICAgICAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKGwudGltZSksXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnRWRpdGVkJylcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmIChsLmR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0YXNrLmVuZGluZyA9IG5ldyBEYXRlKHRhc2sudGltZS52YWx1ZU9mKCkgKyBsLmR1cmF0aW9uICogMTAwMCk7XHJcbiAgICAgICAgICAgICAgICB0YXNrLmR1cmF0aW9uID0gbC5kdXJhdGlvbiAqIDEwMDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgdGFzay5lbmRpbmcgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRhc2tzLmZpbmQodCA9PiB0LnR5cGUgPT09ICdTdGF0ZUNoYW5nZScgJiYgdC50aW1lIDw9IHRhc2sudGltZSAmJiAoIXQuZW5kaW5nIHx8IHQuZW5kaW5nID49IHRhc2suZW5kaW5nKSk7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnN1YnRhc2tzKSBzdGF0ZS5zdWJ0YXNrcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuc3VidGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSAnQWN0aW9uVGFrZW4nOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gbC5hY3Rpb24pO1xyXG4gICAgICAgICAgICAgIGlmIChsLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHJldHVybjtcclxuICAgICAgICAgICAgICBjb25zdCB0aW1lID0gZGF5anMobC50aW1lKTtcclxuICAgICAgICAgICAgICB0YXNrID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGkrKyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IGwudHlwZSxcclxuICAgICAgICAgICAgICAgIG5vZGVJZDogbC5ub2RlSWQsXHJcbiAgICAgICAgICAgICAgICBlbmRpbmc6IHRpbWUudG9EYXRlKCksXHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLmFkZCgtIGwuZHVyYXRpb24sICdzJykudG9EYXRlKCksXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogbC5kdXJhdGlvbiAqIDEwMDAsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogYWN0aW9uID8gYWN0aW9uLnBhc3QgfHwgYWN0aW9uLnRpdGxlIDogbC5hY3Rpb25cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmIChsLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgbW9kZWwud29ya2Zsb3cuY29ubmVjdG9ycy5maWx0ZXIoYyA9PiBjLnRhcmdldElkID09PSBsLm5vZGVJZCkuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGFza3MuZmlsdGVyKGwgPT4gbC5ub2RlSWQgPT09IGMuc291cmNlSWQpLm1hcChsID0+IGBGUyR7bC5pZH1gKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGgpIHRhc2suZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRhc2tzLmZpbmQodCA9PiB0LnR5cGUgPT09ICdTdGF0ZUNoYW5nZScgJiYgdC50aW1lIDw9IHRhc2sudGltZSAmJiAoIXQuZW5kaW5nIHx8IHQuZW5kaW5nID49IHRhc2suZW5kaW5nKSk7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnN1YnRhc2tzKSBzdGF0ZS5zdWJ0YXNrcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuc3VidGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobC5ieUlkKSB7XHJcbiAgICAgICAgICBjb25zdCB3aG8gPSB0aGlzLl91c2Vycy5nZXQobC51c2VySWQpLFxyXG4gICAgICAgICAgICBieSA9IHRoaXMuX3VzZXJzLmdldChsLmJ5SWQpO1xyXG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZvcmtKb2luKFt3aG8sIGJ5XSkucGlwZSh0YXAobnMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBbd2hvLCBieV0gPSBucztcclxuICAgICAgICAgICAgdGFzay5uYW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQnknLCB3aG8ubmFtZSwgYnkubmFtZSk7XHJcbiAgICAgICAgICAgIC8vICAgIGlmIChsLnJvbGUpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLnNlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSBsLnJvbGUpO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgaWYgKHJvbGUpIHRhc2submFtZSArPSBgLCAke3JvbGUubmFtZX1gO1xyXG4gICAgICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgICB9KSwgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIHByb21pc3Nlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsLnVzZXJJZCkge1xyXG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuX3VzZXJzLmdldChsLnVzZXJJZCkucGlwZSh0YXAodSA9PiB7XHJcbiAgICAgICAgICAgIHRhc2submFtZSA9IHUubmFtZTtcclxuICAgICAgICAgICAgLy8gICAgaWYgKGwucm9sZSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgY29uc3Qgcm9sZSA9IHRoaXMuc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IGwucm9sZSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICBpZiAocm9sZSkgdGFzay5uYW1lICs9IGAsICR7cm9sZS5uYW1lfWA7XHJcbiAgICAgICAgICAgIC8vICAgIH1cclxuICAgICAgICAgIH0pLCBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBwcm9taXNzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RlbC5ldmVudHMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICB0aGlzLmV2ZW50TWFya2Vycy5wdXNoKHtcclxuICAgICAgICAgIGRheTogbmV3IERhdGUoZS5zdGFydGluZyksXHJcbiAgICAgICAgICBsYWJlbDogZS50aXRsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgbW9kZWwucmVjaXBpZW50cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIGlmICghci5wZW5kaW5nKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHRhc2s6IFRhc2sgPSB7XHJcbiAgICAgICAgICBpZDogaSsrLFxyXG4gICAgICAgICAgdHlwZTogJ3BlbmRpbmcnLFxyXG4gICAgICAgICAgdGltZTogbmV3IERhdGUoci5yZWNlaXZlZCksXHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnSXNQZW5kaW5nJylcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyLnN1YnN0aXR1dGVJZCkge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSB0aGlzLl91c2Vycy5nZXQoci5zdWJzdGl0dXRlSWQpO1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gdGhpcy5fdXNlcnMuZ2V0KHIudXNlcklkKTtcclxuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBmb3JrSm9pbihbd2hvLCBieV0pLnBpcGUodGFwKHUgPT4ge1xyXG4gICAgICAgICAgICB0YXNrLm5hbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdXaG9TdWJzdGl0dXRpbmcnLCB1WzBdLm5hbWUsIHVbMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh1WzBdLnJvbGUpXHJcbiAgICAgICAgICAgICAgdGFzay5uYW1lICs9IGAsICR7dVswXS5yb2xlfWA7XHJcbiAgICAgICAgICAgIGlmIChyLnJvbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IHIucm9sZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHJvbGUpIHRhc2submFtZSArPSBgLCAke3JvbGUubmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSwgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIHByb21pc3Nlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl91c2Vycy5nZXQoci51c2VySWQpLnBpcGUodGFwKHUgPT4ge1xyXG4gICAgICAgICAgICB0YXNrLm5hbWUgPSB1Lm5hbWU7XHJcbiAgICAgICAgICAgIGlmICh1LnJvbGUpXHJcbiAgICAgICAgICAgICAgdGFzay5uYW1lICs9IGAsICR7dS5yb2xlfWA7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHIucm9sZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gci5yb2xlKTtcclxuICAgICAgICAgICAgICBpZiAocm9sZSkgdGFzay5uYW1lICs9IGAsICR7cm9sZS5uYW1lfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLCBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBwcm9taXNzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHIubm9kZUlkKSB7XHJcbiAgICAgICAgICBtb2RlbC53b3JrZmxvdy5jb25uZWN0b3JzLmZpbHRlcihjID0+IGMudGFyZ2V0SWQgPT09IHIubm9kZUlkKS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVkZWNlc3NvcnMgPSB0YXNrcy5maWx0ZXIobCA9PiBsLm5vZGVJZCA9PT0gYy5zb3VyY2VJZCkubWFwKGwgPT4gbC5pZCk7XHJcbiAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoKSB0YXNrLmRlcGVuZGVuY2llcyA9IHByZWRlY2Vzc29ycy5qb2luKCcsJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0YXNrcy5maW5kKHQgPT4gdC50eXBlID09PSAnU3RhdGVDaGFuZ2UnICYmIHQudGltZSA8PSB0YXNrLnRpbWUgJiYgKCF0LmVuZGluZyB8fCB0LmVuZGluZyA+PSB0YXNrLnRpbWUpKTtcclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgIGlmICghc3RhdGUuc3VidGFza3MpIHN0YXRlLnN1YnRhc2tzID0gW107XHJcbiAgICAgICAgICBzdGF0ZS5zdWJ0YXNrcy5wdXNoKHRhc2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0YXNrcy5wdXNoKHRhc2spO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb2Nlc3MobW9kZWwpO1xyXG4gICAgcmV0dXJuIGZvcmtKb2luKHByb21pc3NlcykuXHJcbiAgICAgIHBpcGUobWFwKCgpID0+IHRhc2tzLnNvcnQoKHQwLCB0MSkgPT4gdDAudGltZSA+IHQxLnRpbWUgPyAxIDogLTEpKSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGluZyhyKSB7XHJcbiAgICBpZiAoci5kYXRhLnRhc2tEYXRhLnR5cGUgPT09ICdNb2RlbENoYW5nZScpXHJcbiAgICAgIHRoaXMuX2NvbXBhcmUoci5kYXRhKTtcclxuICB9XHJcbiAgcHVibGljIF9jb21wYXJlKHRhc2s6IFRhc2spIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ21haWxib3gvZCcsIHRoaXMuaXRlbS5kb2N1bWVudElkLmVuY29kZUlkKCksICd2ZXJzaW9uJywgdGFzay50aW1lLnZhbHVlT2YoKS5lbmNvZGVJZCgpXSwgeyBzdGF0ZTogeyBpdGVtOiB0aGlzLml0ZW0gfSB9KVxyXG4gIH1cclxuICByZWFkb25seSB0YXNrRmllbGRzOiBUYXNrRmllbGRzTW9kZWwgPSB7XHJcbiAgICBpZDogJ2lkJyxcclxuICAgIG5hbWU6ICd0aXRsZScsXHJcbiAgICBzdGFydERhdGU6ICd0aW1lJyxcclxuICAgIGVuZERhdGU6ICdlbmRpbmcnLFxyXG4gICAgZHVyYXRpb246ICdkdXJhdGlvbicsXHJcbiAgICBkZXBlbmRlbmN5OiAnZGVwZW5kZW5jaWVzJyxcclxuICAgIGNoaWxkOiAnc3VidGFza3MnXHJcbiAgfTtcclxuICBjb2x1bW5zOiBDb2x1bW5Nb2RlbFtdO1xyXG4gIHJlYWRvbmx5IHRvb2x0aXBTZXR0aW5ncyA9IHsgc2hvd1Rvb2x0aXA6IGZhbHNlIH07XHJcbiAgcmVhZG9ubHkgdGltZWxpbmVTZXR0aW5nczogVGltZWxpbmVTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgdGltZWxpbmVVbml0U2l6ZTogNjAsXHJcbiAgICB0b3BUaWVyOiB7XHJcbiAgICAgIGZvcm1hdDogJ01NTSBkZCwgeXl5eScsXHJcbiAgICAgIHVuaXQ6ICdEYXknLFxyXG4gICAgfSxcclxuICAgIGJvdHRvbVRpZXI6IHtcclxuICAgICAgdW5pdDogJ0hvdXInLFxyXG4gICAgICBmb3JtYXQ6ICdoLm1tIGEnXHJcbiAgICB9XHJcbiAgfTtcclxuICByZWFkb25seSBldmVudE1hcmtlcnM6IEV2ZW50TWFya2VyTW9kZWxbXSA9IFtcclxuICBdO1xyXG4gIHB1YmxpYyBsYWJlbFNldHRpbmdzOiBMYWJlbFNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICByaWdodExhYmVsOiAnbmFtZScsIGxlZnRMYWJlbDogJ3RpdGxlJ1xyXG4gIH07XHJcbiAgcHVibGljIHNwbGl0dGVyU2V0dGluZ3M6IFNwbGl0dGVyU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIGNvbHVtbkluZGV4OiAzLFxyXG4gICAgdmlldzogJ0NoYXJ0JyxcclxuICAgIHNlcGFyYXRvclNpemU6IDBcclxuICB9O1xyXG4gIHB1YmxpYyBkYXlXb3JraW5nVGltZTogRGF5V29ya2luZ1RpbWVNb2RlbFtdID0gW3sgZnJvbTogMCwgdG86IDI0IH1dO1xyXG59XHJcbmludGVyZmFjZSBUYXNrIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBub2RlSWQ/OiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICB0aW1lOiBEYXRlO1xyXG4gIGVuZGluZz86IERhdGU7XHJcbiAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgc3VidGFza3M/OiBUYXNrW107XHJcbiAgZGVwZW5kZW5jaWVzPzogc3RyaW5nO1xyXG4gIGluZGljYXRvcnM/OiBhbnlbXSxcclxufVxyXG5pbnRlcmZhY2UgT3B0aW9ucyB7XHJcblxyXG59XHJcbiJdfQ==
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmV4cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvdmlld3MvdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50LmV4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFjLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFlLGlCQUFpQixFQUF5QyxLQUFLLEVBQWdFLGdCQUFnQixFQUF5RixNQUFNLCtCQUErQixDQUFDO0FBT3BTLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQWF4QyxJQUFNLHFCQUFxQixHQUEzQixNQUFNLHFCQUFxQjtJQVdoQyx5QkFBeUI7SUFDekIsWUFDVSxHQUFrQixFQUMxQixPQUFpQyxFQUNWLE1BQW9CLEVBQ25DLE1BQXNCLEVBQ3RCLFFBQXdCLEVBQ3hCLFVBQTRCLEVBQzVCLE9BQW1CLEVBQ25CLFFBQW9CO1FBUHBCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFHbEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBbEJyQixRQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDOUIsV0FBTSxH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QWpSVSxxQkFBcUIsOEVBZXRCLGFBQWE7a0dBZloscUJBQXFCLCtHQUpyQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLDBCQUh0QyxFQUFFOztBQU9ELHFCQUFxQjtJQUZqQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUM3Qyw2QkFBNkI7R0FDaEIscUJBQXFCLENBb1RqQzs7MkZBcFRZLHFCQUFxQjtrQkFUakMsU0FBUzsrQkFDRSxpQkFBaUIsWUFDakIsRUFBRSxRQUVOLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUNaLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7OzBCQW1CN0MsTUFBTTsyQkFBQyxhQUFhO29MQWJkLEdBQUc7c0JBRFgsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBIb3N0QmluZGluZywgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyB0YXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29sdW1uTW9kZWwsIERheU1hcmtlcnNTZXJ2aWNlLCBEYXlXb3JraW5nVGltZU1vZGVsLCBFdmVudE1hcmtlck1vZGVsLCBHYW50dCwgSG9saWRheU1vZGVsLCBJUXVlcnlUYXNrYmFySW5mb0V2ZW50QXJncywgTGFiZWxTZXR0aW5nc01vZGVsLCBTZWxlY3Rpb25TZXJ2aWNlLCBTZWxlY3Rpb25TZXR0aW5nc01vZGVsLCBTcGxpdHRlclNldHRpbmdzTW9kZWwsIFRhc2tGaWVsZHNNb2RlbCwgVGltZWxpbmVTZXR0aW5nc01vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZ2FudHQnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UnO1xyXG5pbXBvcnQgeyBDaGFpbiwgRG9jdW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgUm91dGVySW1wbCB9IGZyb20gJy4uLy4uL2NvcmUvcm91dGVyJztcclxuaW1wb3J0IHsgRG9jdW1lbnRWaWV3UmVmIH0gZnJvbSAnLi4vZG9jdW1lbnQtdmlldy1yZWYnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtdGltZWxpbmUnLFxyXG4gIHRlbXBsYXRlOiAnJyxcclxuICBzdHlsZVVybHM6IFsndGltZWxpbmUuY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0OiB7IGNsYXNzOiAndmlldycgfSxcclxuICBwcm92aWRlcnM6IFtTZWxlY3Rpb25TZXJ2aWNlLCBEYXlNYXJrZXJzU2VydmljZV1cclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLXRpbWVsaW5lLXZpZXcnIH0pXHJcbi8qKiB0aW1lbGluZS12aWV3IGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBUaW1lbGluZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBEb2N1bWVudFZpZXdDb21wb25lbnQge1xyXG4gIEBIb3N0QmluZGluZygpXHJcbiAgcmVhZG9ubHkgZGlyID0gdGhpcy5fc2Vzc2lvbi5kaXJlY3Rpb247XHJcbiAgcmVhZG9ubHkgbG9jYWxlID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZTtcclxuICBtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIGdhbnR0OiBHYW50dDtcclxuICBkYXRlRm9ybWF0OiBzdHJpbmc7XHJcbiAgaG9saWRheXM6IEhvbGlkYXlNb2RlbFtdO1xyXG4gIHdpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvblNldHRpbmdzID0ge30gYXMgU2VsZWN0aW9uU2V0dGluZ3NNb2RlbDtcclxuICB0YXNrczogVGFza1tdO1xyXG4gIC8qKiB0aW1lbGluZS12aWV3IGN0b3IgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3BzOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgdmlld1JlZjogRG9jdW1lbnRWaWV3UmVmPE9wdGlvbnM+LFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBjb25maWc6IEJpekRvY0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3VzZXJzOiBBY2NvdW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJJbXBsLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7IGZpZWxkOiAndGl0bGUnLCBoZWFkZXJUZXh0OiBfdHJhbnNsYXRlLmdldCgnVGFzaycpIH0sXHJcbiAgICAgIHsgZmllbGQ6ICduYW1lJywgaGVhZGVyVGV4dDogX3RyYW5zbGF0ZS5nZXQoJ1dobycpIH0sXHJcbiAgICAgIHsgZmllbGQ6ICd0aW1lJywgaGVhZGVyVGV4dDogX3RyYW5zbGF0ZS5nZXQoJ1doZW4nKSB9XHJcbiAgICBdO1xyXG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gY29uZmlnICYmIGNvbmZpZy5mb3JtYXRzICYmIGNvbmZpZy5mb3JtYXRzLmRhdGVUaW1lIHx8ICdNTU1NIGQsIHl5eXkgaGg6bW0nO1xyXG4gICAgdGhpcy5ob2xpZGF5cyA9IF9zZXNzaW9uLnByb2ZpbGUuaG9saWRheXMgJiZcclxuICAgICAgX3Nlc3Npb24ucHJvZmlsZS5ob2xpZGF5cy5tYXAoaCA9PiAoeyBmcm9tOiBoLnN0YXJ0RGF0ZSwgdG86IGguZnJvbURhdGUsIGxhYmVsOiBoLnRpdGxlIH0pKVxyXG4gICAgdmlld1JlZi5yZXNpemUuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICB0aGlzLndpZHRoID0gZC53aWR0aCAtIDE2O1xyXG4gICAgICBpZiAodGhpcy5nYW50dCkge1xyXG4gICAgICAgIHRoaXMuZ2FudHQud2lkdGggPSBkLndpZHRoIC0gMTY7XHJcbiAgICAgICAgdGhpcy5nYW50dC53aW5kb3dSZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG9uQmluZChtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICB0aGlzLl9wcmVwYXJlKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICAvL3RoaXMuZ2FudHQuc2Nyb2xsVG9EYXRlKG5ldyBEYXRlKCkudG9TdHJpbmcoKSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZHJhdygpIHtcclxuICAgIHRoaXMuZ2FudHQgJiYgdGhpcy5nYW50dC5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmdhbnR0ID0gbmV3IEdhbnR0KHtcclxuICAgICAgZGF0YVNvdXJjZTogdGhpcy50YXNrcyxcclxuICAgICAgcXVlcnlUYXNrYmFySW5mbzogdGhpcy5xdWVyeVRhc2tiYXJJbmZvLmJpbmQodGhpcyksXHJcbiAgICAgIHRhc2tGaWVsZHM6IHRoaXMudGFza0ZpZWxkcyxcclxuICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgICAvL3ZpZXdUeXBlOiAnUHJvamVjdFZpZXcnLFxyXG4gICAgICAvL2FsbG93RXhjZWxFeHBvcnQ6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAvLyAgdGltZWxpbmVTZXR0aW5nczogdGhpcy50aW1lbGluZVNldHRpbmdzLFxyXG4gICAgICBsYWJlbFNldHRpbmdzOiB0aGlzLmxhYmVsU2V0dGluZ3MsXHJcbiAgICAgIGV2ZW50TWFya2VyczogdGhpcy5ldmVudE1hcmtlcnMsXHJcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxyXG4gICAgICBzZWxlY3Rpb25TZXR0aW5nczogdGhpcy5zZWxlY3Rpb25TZXR0aW5ncyxcclxuICAgICAgYWxsb3dTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIGRhdGVGb3JtYXQ6IHRoaXMuZGF0ZUZvcm1hdCxcclxuICAgICAgdG9vbHRpcFNldHRpbmdzOiB0aGlzLnRvb2x0aXBTZXR0aW5ncyxcclxuICAgICAgLy90aW1lbGluZVNldHRpbmdzOiB7fSxcclxuICAgICAgcm93U2VsZWN0aW5nOiB0aGlzLnJvd1NlbGVjdGluZy5iaW5kKHRoaXMpLFxyXG4gICAgICBob2xpZGF5czogdGhpcy5ob2xpZGF5cyxcclxuICAgICAgLy8gIGluY2x1ZGVXZWVrZW5kOiB0cnVlLFxyXG4gICAgICBzcGxpdHRlclNldHRpbmdzOiB0aGlzLnNwbGl0dGVyU2V0dGluZ3MsXHJcbiAgICAgIC8vICBkdXJhdGlvblVuaXQ6ICdIb3VyJyxcclxuICAgICAgdGFza2JhckhlaWdodDogMzAsXHJcbiAgICAgIHJvd0hlaWdodDogNDAsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsIC8vdGhpcy53aWR0aFxyXG4gICAgICAvLyAgZGF5V29ya2luZ1RpbWU6IHRoaXMuZGF5V29ya2luZ1RpbWVcclxuICAgIH0sIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudClcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT5cclxuICAgICAgdGhpcy5nYW50dC5oaWRlQ29sdW1uKGMuZmllbGQpXHJcbiAgICApXHJcbiAgfVxyXG4gIHF1ZXJ5VGFza2JhckluZm8oZXZ0OiBJUXVlcnlUYXNrYmFySW5mb0V2ZW50QXJncykge1xyXG4gICAgZXZ0LnRhc2tiYXJCZ0NvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcHJlcGFyZSgpOiBPYnNlcnZhYmxlPFRhc2tbXT4ge1xyXG4gICAgY29uc3QgcHJvbWlzc2VzOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG5cclxuICAgIC8vY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuX21haWxib3gudGltZWxpbmUobW9kZWwuZG9jdW1lbnRJZCkucGlwZSh0YXAodCA9PiB7XHJcbiAgICAvL30pKVxyXG5cclxuICAgIHRoaXMubW9kZWwubG9nLmZvckVhY2gobCA9PiB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgICBzd2l0Y2ggKGwudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ1N1Ym1pdCc6XHJcbiAgICAgICAgICB0aGlzLmV2ZW50TWFya2Vycy5wdXNoKHtcclxuICAgICAgICAgICAgZGF5OiBuZXcgRGF0ZShsLnRpbWUpLFxyXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlLmdldCgnU3VibWl0aW9uJylcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNhc2UgJ1N0YXRlQ2hhbmdlJzpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuc3RhdGVzLmZpbmQocyA9PiBzLm5hbWUgPT09IGwuc3RhdGUpO1xyXG4gICAgICAgICAgICB0YXNrID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBpKyssXHJcbiAgICAgICAgICAgICAgdHlwZTogbC50eXBlLFxyXG4gICAgICAgICAgICAgIG5vZGVJZDogbC5ub2RlSWQsXHJcbiAgICAgICAgICAgICAgdGltZTogbmV3IERhdGUobC50aW1lKSxcclxuICAgICAgICAgICAgICB0aXRsZTogc3RhdGUgPyBzdGF0ZS5wYXN0IHx8IHN0YXRlLnRpdGxlIDogbC5zdGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAobC5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgIHRhc2suZW5kaW5nID0gbmV3IERhdGUodGFzay50aW1lLnZhbHVlT2YoKSArIGwuZHVyYXRpb24gKiAxMDAwKTtcclxuICAgICAgICAgICAgICB0YXNrLmR1cmF0aW9uID0gbC5kdXJhdGlvbiAqIDEwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRhc2suZW5kaW5nID0gdGhpcy5tb2RlbC5jb21wbGV0ZWQgPyBuZXcgRGF0ZShsLnRpbWUpIDogbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy50YXNrcy5wdXNoKHRhc2spO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICBjYXNlICdNb2RlbENoYW5nZSc6XHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhc2sgPSB7XHJcbiAgICAgICAgICAgICAgaWQ6IGkrKyxcclxuICAgICAgICAgICAgICB0eXBlOiBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgbm9kZUlkOiBsLm5vZGVJZCxcclxuICAgICAgICAgICAgICB0aW1lOiBuZXcgRGF0ZShsLnRpbWUpLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFZGl0ZWQnKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAobC5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgIHRhc2suZW5kaW5nID0gbmV3IERhdGUodGFzay50aW1lLnZhbHVlT2YoKSArIGwuZHVyYXRpb24gKiAxMDAwKTtcclxuICAgICAgICAgICAgICB0YXNrLmR1cmF0aW9uID0gbC5kdXJhdGlvbiAqIDEwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB0YXNrLmVuZGluZyA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMudGFza3MuZmluZCh0ID0+IHQudHlwZSA9PT0gJ1N0YXRlQ2hhbmdlJyAmJiB0LnRpbWUgPD0gdGFzay50aW1lICYmICghdC5lbmRpbmcgfHwgdC5lbmRpbmcgPj0gdGFzay5lbmRpbmcpKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5zdWJ0YXNrcykgc3RhdGUuc3VidGFza3MgPSBbXTtcclxuICAgICAgICAgICAgICBzdGF0ZS5zdWJ0YXNrcy5wdXNoKHRhc2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tzLnB1c2godGFzayk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ0FjdGlvblRha2VuJzpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gbC5hY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAobC5hY3Rpb24gPT09ICdkZWxldGUnKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBkYXlqcyhsLnRpbWUpO1xyXG4gICAgICAgICAgICB0YXNrID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBpKyssXHJcbiAgICAgICAgICAgICAgdHlwZTogbC50eXBlLFxyXG4gICAgICAgICAgICAgIG5vZGVJZDogbC5ub2RlSWQsXHJcbiAgICAgICAgICAgICAgZW5kaW5nOiB0aW1lLnRvRGF0ZSgpLFxyXG4gICAgICAgICAgICAgIHRpbWU6IHRpbWUuYWRkKC0gbC5kdXJhdGlvbiwgJ3MnKS50b0RhdGUoKSxcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogbC5kdXJhdGlvbiAqIDEwMDAsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IGFjdGlvbiA/IGFjdGlvbi5wYXN0IHx8IGFjdGlvbi50aXRsZSA6IGwuYWN0aW9uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChsLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZWwud29ya2Zsb3cuY29ubmVjdG9ycy5maWx0ZXIoYyA9PiBjLnRhcmdldElkID09PSBsLm5vZGVJZCkuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMudGFza3MuZmlsdGVyKGwgPT4gbC5ub2RlSWQgPT09IGMuc291cmNlSWQpLm1hcChsID0+IGBGUyR7bC5pZH1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoKSB0YXNrLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcy5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnRhc2tzLmZpbmQodCA9PiB0LnR5cGUgPT09ICdTdGF0ZUNoYW5nZScgJiYgdC50aW1lIDw9IHRhc2sudGltZSAmJiAoIXQuZW5kaW5nIHx8IHQuZW5kaW5nID49IHRhc2suZW5kaW5nKSk7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgIGlmICghc3RhdGUuc3VidGFza3MpIHN0YXRlLnN1YnRhc2tzID0gW107XHJcbiAgICAgICAgICAgICAgc3RhdGUuc3VidGFza3MucHVzaCh0YXNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrcy5wdXNoKHRhc2spO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsLmJ5SWQpIHtcclxuICAgICAgICBjb25zdCB3aG8gPSB0aGlzLl91c2Vycy5nZXQobC51c2VySWQpLFxyXG4gICAgICAgICAgYnkgPSB0aGlzLl91c2Vycy5nZXQobC5ieUlkKTtcclxuICAgICAgICBjb25zdCBwcm9taXNlID0gZm9ya0pvaW4oW3dobywgYnldKS5waXBlKHRhcChucyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBbd2hvLCBieV0gPSBucztcclxuICAgICAgICAgIHRhc2submFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0J5Jywgd2hvLm5hbWUsIGJ5Lm5hbWUpO1xyXG4gICAgICAgICAgLy8gICAgaWYgKGwucm9sZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLnNlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSBsLnJvbGUpO1xyXG4gICAgICAgICAgLy8gICAgICAgIGlmIChyb2xlKSB0YXNrLm5hbWUgKz0gYCwgJHtyb2xlLm5hbWV9YDtcclxuICAgICAgICAgIC8vICAgIH1cclxuICAgICAgICB9KSwgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBwcm9taXNzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChsLnVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl91c2Vycy5nZXQobC51c2VySWQpLnBpcGUodGFwKHUgPT4ge1xyXG4gICAgICAgICAgdGFzay5uYW1lID0gdS5uYW1lO1xyXG4gICAgICAgICAgLy8gICAgaWYgKGwucm9sZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLnNlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSBsLnJvbGUpO1xyXG4gICAgICAgICAgLy8gICAgICAgIGlmIChyb2xlKSB0YXNrLm5hbWUgKz0gYCwgJHtyb2xlLm5hbWV9YDtcclxuICAgICAgICAgIC8vICAgIH1cclxuICAgICAgICB9KSwgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHByb21pc3Nlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubW9kZWwuZXZlbnRzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgIHRoaXMuZXZlbnRNYXJrZXJzLnB1c2goe1xyXG4gICAgICAgIGRheTogbmV3IERhdGUoZS5zdGFydGluZyksXHJcbiAgICAgICAgbGFiZWw6IGUudGl0bGVcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubW9kZWwucmVjaXBpZW50cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIXIucGVuZGluZylcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IHRhc2s6IFRhc2sgPSB7XHJcbiAgICAgICAgaWQ6IGkrKyxcclxuICAgICAgICB0eXBlOiAncGVuZGluZycsXHJcbiAgICAgICAgdGltZTogbmV3IERhdGUoci5yZWNlaXZlZCksXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0lzUGVuZGluZycpXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyLnN1YnN0aXR1dGVJZCkge1xyXG4gICAgICAgIGNvbnN0IGJ5ID0gdGhpcy5fdXNlcnMuZ2V0KHIuc3Vic3RpdHV0ZUlkKTtcclxuICAgICAgICBjb25zdCB3aG8gPSB0aGlzLl91c2Vycy5nZXQoci51c2VySWQpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBmb3JrSm9pbihbd2hvLCBieV0pLnBpcGUodGFwKHUgPT4ge1xyXG4gICAgICAgICAgdGFzay5uYW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnV2hvU3Vic3RpdHV0aW5nJywgdVswXS5uYW1lLCB1WzFdLm5hbWUpO1xyXG4gICAgICAgICAgaWYgKHVbMF0ucm9sZSlcclxuICAgICAgICAgICAgdGFzay5uYW1lICs9IGAsICR7dVswXS5yb2xlfWA7XHJcbiAgICAgICAgICBpZiAoci5yb2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gci5yb2xlKTtcclxuICAgICAgICAgICAgaWYgKHJvbGUpIHRhc2submFtZSArPSBgLCAke3JvbGUubmFtZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLCBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHByb21pc3Nlcy5wdXNoKHByb21pc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl91c2Vycy5nZXQoci51c2VySWQpLnBpcGUodGFwKHUgPT4ge1xyXG4gICAgICAgICAgdGFzay5uYW1lID0gdS5uYW1lO1xyXG4gICAgICAgICAgaWYgKHUucm9sZSlcclxuICAgICAgICAgICAgdGFzay5uYW1lICs9IGAsICR7dS5yb2xlfWA7XHJcbiAgICAgICAgICBlbHNlIGlmIChyLnJvbGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByLnJvbGUpO1xyXG4gICAgICAgICAgICBpZiAocm9sZSkgdGFzay5uYW1lICs9IGAsICR7cm9sZS5uYW1lfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBwcm9taXNzZXMucHVzaChwcm9taXNlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoci5ub2RlSWQpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLndvcmtmbG93LmNvbm5lY3RvcnMuZmlsdGVyKGMgPT4gYy50YXJnZXRJZCA9PT0gci5ub2RlSWQpLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwcmVkZWNlc3NvcnMgPSB0aGlzLnRhc2tzLmZpbHRlcihsID0+IGwubm9kZUlkID09PSBjLnNvdXJjZUlkKS5tYXAobCA9PiBsLmlkKTtcclxuICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoKSB0YXNrLmRlcGVuZGVuY2llcyA9IHByZWRlY2Vzc29ycy5qb2luKCcsJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnRhc2tzLmZpbmQodCA9PiB0LnR5cGUgPT09ICdTdGF0ZUNoYW5nZScgJiYgdC50aW1lIDw9IHRhc2sudGltZSAmJiAoIXQuZW5kaW5nIHx8IHQuZW5kaW5nID49IHRhc2sudGltZSkpO1xyXG4gICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICBpZiAoIXN0YXRlLnN1YnRhc2tzKSBzdGF0ZS5zdWJ0YXNrcyA9IFtdO1xyXG4gICAgICAgIHN0YXRlLnN1YnRhc2tzLnB1c2godGFzayk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMudGFza3MucHVzaCh0YXNrKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcmtKb2luKHByb21pc3NlcykuXHJcbiAgICAgIHBpcGUodGFwKCgpID0+IHRoaXMudGFza3MgPSB0aGlzLnRhc2tzLnNvcnQoKHQwLCB0MSkgPT4gdDAudGltZSA+IHQxLnRpbWUgPyAxIDogLTEpKSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGluZyhyKSB7XHJcbiAgICBpZiAoci5kYXRhLnRhc2tEYXRhLnR5cGUgPT09ICdNb2RlbENoYW5nZScpXHJcbiAgICAgIHRoaXMuX2NvbXBhcmUoci5kYXRhKTtcclxuICB9XHJcbiAgcHVibGljIF9jb21wYXJlKHRhc2s6IFRhc2spIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ21haWxib3gvZCcsIHRoaXMubW9kZWwuZG9jdW1lbnRJZC5lbmNvZGVJZCgpLCAndmVyc2lvbicsIHRhc2sudGltZS52YWx1ZU9mKCkuZW5jb2RlSWQoKV0sIHsgc3RhdGU6IHsgaXRlbTogdGhpcy5tb2RlbCB9IH0pXHJcbiAgfVxyXG4gIHJlYWRvbmx5IHRhc2tGaWVsZHM6IFRhc2tGaWVsZHNNb2RlbCA9IHtcclxuICAgIGlkOiAnaWQnLFxyXG4gICAgbmFtZTogJ3RpdGxlJyxcclxuICAgIHN0YXJ0RGF0ZTogJ3RpbWUnLFxyXG4gICAgZW5kRGF0ZTogJ2VuZGluZycsXHJcbiAgICBkdXJhdGlvbjogJ2R1cmF0aW9uJyxcclxuICAgIGRlcGVuZGVuY3k6ICdkZXBlbmRlbmNpZXMnLFxyXG4gICAgY2hpbGQ6ICdzdWJ0YXNrcydcclxuICB9O1xyXG4gIGNvbHVtbnM6IENvbHVtbk1vZGVsW107XHJcbiAgcmVhZG9ubHkgdG9vbHRpcFNldHRpbmdzID0geyBzaG93VG9vbHRpcDogZmFsc2UgfTtcclxuICByZWFkb25seSB0aW1lbGluZVNldHRpbmdzOiBUaW1lbGluZVNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICB0aW1lbGluZVVuaXRTaXplOiA2MCxcclxuICAgIHRvcFRpZXI6IHtcclxuICAgICAgZm9ybWF0OiAnTU1NIGRkLCB5eXl5JyxcclxuICAgICAgdW5pdDogJ0RheScsXHJcbiAgICB9LFxyXG4gICAgYm90dG9tVGllcjoge1xyXG4gICAgICB1bml0OiAnSG91cicsXHJcbiAgICAgIGZvcm1hdDogJ2gubW0gYSdcclxuICAgIH1cclxuICB9O1xyXG4gIHJlYWRvbmx5IGV2ZW50TWFya2VyczogRXZlbnRNYXJrZXJNb2RlbFtdID0gW1xyXG4gIF07XHJcbiAgcHVibGljIGxhYmVsU2V0dGluZ3M6IExhYmVsU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIHJpZ2h0TGFiZWw6ICduYW1lJywgbGVmdExhYmVsOiAndGl0bGUnXHJcbiAgfTtcclxuICBwdWJsaWMgc3BsaXR0ZXJTZXR0aW5nczogU3BsaXR0ZXJTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgY29sdW1uSW5kZXg6IDMsXHJcbiAgICB2aWV3OiAnQ2hhcnQnLFxyXG4gICAgcG9zaXRpb246ICcwJyxcclxuICAgIHNlcGFyYXRvclNpemU6IDBcclxuICB9O1xyXG4gIHB1YmxpYyBkYXlXb3JraW5nVGltZTogRGF5V29ya2luZ1RpbWVNb2RlbFtdID0gW3sgZnJvbTogMCwgdG86IDI0IH1dO1xyXG59XHJcbmludGVyZmFjZSBUYXNrIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBub2RlSWQ/OiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICB0aW1lOiBEYXRlO1xyXG4gIGVuZGluZz86IERhdGU7XHJcbiAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgc3VidGFza3M/OiBUYXNrW107XHJcbiAgZGVwZW5kZW5jaWVzPzogc3RyaW5nO1xyXG4gIGluZGljYXRvcnM/OiBhbnlbXSxcclxufVxyXG5pbnRlcmZhY2UgT3B0aW9ucyB7XHJcblxyXG59XHJcbiJdfQ==