/ components / tasks / BackgroundTask.tsx
BackgroundTask.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  import * as React from 'react';
  3  import { Text } from 'src/ink.js';
  4  import type { BackgroundTaskState } from 'src/tasks/types.js';
  5  import type { DeepImmutable } from 'src/types/utils.js';
  6  import { truncate } from 'src/utils/format.js';
  7  import { toInkColor } from 'src/utils/ink.js';
  8  import { plural } from 'src/utils/stringUtils.js';
  9  import { DIAMOND_FILLED, DIAMOND_OPEN } from '../../constants/figures.js';
 10  import { RemoteSessionProgress } from './RemoteSessionProgress.js';
 11  import { ShellProgress, TaskStatusText } from './ShellProgress.js';
 12  import { describeTeammateActivity } from './taskStatusUtils.js';
 13  type Props = {
 14    task: DeepImmutable<BackgroundTaskState>;
 15    maxActivityWidth?: number;
 16  };
 17  export function BackgroundTask(t0) {
 18    const $ = _c(92);
 19    const {
 20      task,
 21      maxActivityWidth
 22    } = t0;
 23    const activityLimit = maxActivityWidth ?? 40;
 24    switch (task.type) {
 25      case "local_bash":
 26        {
 27          const t1 = task.kind === "monitor" ? task.description : task.command;
 28          let t2;
 29          if ($[0] !== activityLimit || $[1] !== t1) {
 30            t2 = truncate(t1, activityLimit, true);
 31            $[0] = activityLimit;
 32            $[1] = t1;
 33            $[2] = t2;
 34          } else {
 35            t2 = $[2];
 36          }
 37          let t3;
 38          if ($[3] !== task) {
 39            t3 = <ShellProgress shell={task} />;
 40            $[3] = task;
 41            $[4] = t3;
 42          } else {
 43            t3 = $[4];
 44          }
 45          let t4;
 46          if ($[5] !== t2 || $[6] !== t3) {
 47            t4 = <Text>{t2}{" "}{t3}</Text>;
 48            $[5] = t2;
 49            $[6] = t3;
 50            $[7] = t4;
 51          } else {
 52            t4 = $[7];
 53          }
 54          return t4;
 55        }
 56      case "remote_agent":
 57        {
 58          if (task.isRemoteReview) {
 59            let t1;
 60            if ($[8] !== task) {
 61              t1 = <Text><RemoteSessionProgress session={task} /></Text>;
 62              $[8] = task;
 63              $[9] = t1;
 64            } else {
 65              t1 = $[9];
 66            }
 67            return t1;
 68          }
 69          const running = task.status === "running" || task.status === "pending";
 70          const t1 = running ? DIAMOND_OPEN : DIAMOND_FILLED;
 71          let t2;
 72          if ($[10] !== t1) {
 73            t2 = <Text dimColor={true}>{t1} </Text>;
 74            $[10] = t1;
 75            $[11] = t2;
 76          } else {
 77            t2 = $[11];
 78          }
 79          let t3;
 80          if ($[12] !== activityLimit || $[13] !== task.title) {
 81            t3 = truncate(task.title, activityLimit, true);
 82            $[12] = activityLimit;
 83            $[13] = task.title;
 84            $[14] = t3;
 85          } else {
 86            t3 = $[14];
 87          }
 88          let t4;
 89          if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
 90            t4 = <Text dimColor={true}> · </Text>;
 91            $[15] = t4;
 92          } else {
 93            t4 = $[15];
 94          }
 95          let t5;
 96          if ($[16] !== task) {
 97            t5 = <RemoteSessionProgress session={task} />;
 98            $[16] = task;
 99            $[17] = t5;
100          } else {
101            t5 = $[17];
102          }
103          let t6;
104          if ($[18] !== t2 || $[19] !== t3 || $[20] !== t5) {
105            t6 = <Text>{t2}{t3}{t4}{t5}</Text>;
106            $[18] = t2;
107            $[19] = t3;
108            $[20] = t5;
109            $[21] = t6;
110          } else {
111            t6 = $[21];
112          }
113          return t6;
114        }
115      case "local_agent":
116        {
117          let t1;
118          if ($[22] !== activityLimit || $[23] !== task.description) {
119            t1 = truncate(task.description, activityLimit, true);
120            $[22] = activityLimit;
121            $[23] = task.description;
122            $[24] = t1;
123          } else {
124            t1 = $[24];
125          }
126          const t2 = task.status === "completed" ? "done" : undefined;
127          const t3 = task.status === "completed" && !task.notified ? ", unread" : undefined;
128          let t4;
129          if ($[25] !== t2 || $[26] !== t3 || $[27] !== task.status) {
130            t4 = <TaskStatusText status={task.status} label={t2} suffix={t3} />;
131            $[25] = t2;
132            $[26] = t3;
133            $[27] = task.status;
134            $[28] = t4;
135          } else {
136            t4 = $[28];
137          }
138          let t5;
139          if ($[29] !== t1 || $[30] !== t4) {
140            t5 = <Text>{t1}{" "}{t4}</Text>;
141            $[29] = t1;
142            $[30] = t4;
143            $[31] = t5;
144          } else {
145            t5 = $[31];
146          }
147          return t5;
148        }
149      case "in_process_teammate":
150        {
151          let T0;
152          let T1;
153          let t1;
154          let t2;
155          let t3;
156          let t4;
157          if ($[32] !== activityLimit || $[33] !== task) {
158            const activity = describeTeammateActivity(task);
159            T1 = Text;
160            let t5;
161            if ($[40] !== task.identity.color) {
162              t5 = toInkColor(task.identity.color);
163              $[40] = task.identity.color;
164              $[41] = t5;
165            } else {
166              t5 = $[41];
167            }
168            if ($[42] !== t5 || $[43] !== task.identity.agentName) {
169              t4 = <Text color={t5}>@{task.identity.agentName}</Text>;
170              $[42] = t5;
171              $[43] = task.identity.agentName;
172              $[44] = t4;
173            } else {
174              t4 = $[44];
175            }
176            T0 = Text;
177            t1 = true;
178            t2 = ": ";
179            t3 = truncate(activity, activityLimit, true);
180            $[32] = activityLimit;
181            $[33] = task;
182            $[34] = T0;
183            $[35] = T1;
184            $[36] = t1;
185            $[37] = t2;
186            $[38] = t3;
187            $[39] = t4;
188          } else {
189            T0 = $[34];
190            T1 = $[35];
191            t1 = $[36];
192            t2 = $[37];
193            t3 = $[38];
194            t4 = $[39];
195          }
196          let t5;
197          if ($[45] !== T0 || $[46] !== t1 || $[47] !== t2 || $[48] !== t3) {
198            t5 = <T0 dimColor={t1}>{t2}{t3}</T0>;
199            $[45] = T0;
200            $[46] = t1;
201            $[47] = t2;
202            $[48] = t3;
203            $[49] = t5;
204          } else {
205            t5 = $[49];
206          }
207          let t6;
208          if ($[50] !== T1 || $[51] !== t4 || $[52] !== t5) {
209            t6 = <T1>{t4}{t5}</T1>;
210            $[50] = T1;
211            $[51] = t4;
212            $[52] = t5;
213            $[53] = t6;
214          } else {
215            t6 = $[53];
216          }
217          return t6;
218        }
219      case "local_workflow":
220        {
221          const t1 = task.workflowName ?? task.summary ?? task.description;
222          let t2;
223          if ($[54] !== activityLimit || $[55] !== t1) {
224            t2 = truncate(t1, activityLimit, true);
225            $[54] = activityLimit;
226            $[55] = t1;
227            $[56] = t2;
228          } else {
229            t2 = $[56];
230          }
231          let t3;
232          if ($[57] !== task.agentCount || $[58] !== task.status) {
233            t3 = task.status === "running" ? `${task.agentCount} ${plural(task.agentCount, "agent")}` : task.status === "completed" ? "done" : undefined;
234            $[57] = task.agentCount;
235            $[58] = task.status;
236            $[59] = t3;
237          } else {
238            t3 = $[59];
239          }
240          const t4 = task.status === "completed" && !task.notified ? ", unread" : undefined;
241          let t5;
242          if ($[60] !== t3 || $[61] !== t4 || $[62] !== task.status) {
243            t5 = <TaskStatusText status={task.status} label={t3} suffix={t4} />;
244            $[60] = t3;
245            $[61] = t4;
246            $[62] = task.status;
247            $[63] = t5;
248          } else {
249            t5 = $[63];
250          }
251          let t6;
252          if ($[64] !== t2 || $[65] !== t5) {
253            t6 = <Text>{t2}{" "}{t5}</Text>;
254            $[64] = t2;
255            $[65] = t5;
256            $[66] = t6;
257          } else {
258            t6 = $[66];
259          }
260          return t6;
261        }
262      case "monitor_mcp":
263        {
264          let t1;
265          if ($[67] !== activityLimit || $[68] !== task.description) {
266            t1 = truncate(task.description, activityLimit, true);
267            $[67] = activityLimit;
268            $[68] = task.description;
269            $[69] = t1;
270          } else {
271            t1 = $[69];
272          }
273          const t2 = task.status === "completed" ? "done" : undefined;
274          const t3 = task.status === "completed" && !task.notified ? ", unread" : undefined;
275          let t4;
276          if ($[70] !== t2 || $[71] !== t3 || $[72] !== task.status) {
277            t4 = <TaskStatusText status={task.status} label={t2} suffix={t3} />;
278            $[70] = t2;
279            $[71] = t3;
280            $[72] = task.status;
281            $[73] = t4;
282          } else {
283            t4 = $[73];
284          }
285          let t5;
286          if ($[74] !== t1 || $[75] !== t4) {
287            t5 = <Text>{t1}{" "}{t4}</Text>;
288            $[74] = t1;
289            $[75] = t4;
290            $[76] = t5;
291          } else {
292            t5 = $[76];
293          }
294          return t5;
295        }
296      case "dream":
297        {
298          const n = task.filesTouched.length;
299          let t1;
300          if ($[77] !== n || $[78] !== task.phase || $[79] !== task.sessionsReviewing) {
301            t1 = task.phase === "updating" && n > 0 ? `${n} ${plural(n, "file")}` : `${task.sessionsReviewing} ${plural(task.sessionsReviewing, "session")}`;
302            $[77] = n;
303            $[78] = task.phase;
304            $[79] = task.sessionsReviewing;
305            $[80] = t1;
306          } else {
307            t1 = $[80];
308          }
309          const detail = t1;
310          let t2;
311          if ($[81] !== detail || $[82] !== task.phase) {
312            t2 = <Text dimColor={true}>· {task.phase} · {detail}</Text>;
313            $[81] = detail;
314            $[82] = task.phase;
315            $[83] = t2;
316          } else {
317            t2 = $[83];
318          }
319          const t3 = task.status === "completed" ? "done" : undefined;
320          const t4 = task.status === "completed" && !task.notified ? ", unread" : undefined;
321          let t5;
322          if ($[84] !== t3 || $[85] !== t4 || $[86] !== task.status) {
323            t5 = <TaskStatusText status={task.status} label={t3} suffix={t4} />;
324            $[84] = t3;
325            $[85] = t4;
326            $[86] = task.status;
327            $[87] = t5;
328          } else {
329            t5 = $[87];
330          }
331          let t6;
332          if ($[88] !== t2 || $[89] !== t5 || $[90] !== task.description) {
333            t6 = <Text>{task.description}{" "}{t2}{" "}{t5}</Text>;
334            $[88] = t2;
335            $[89] = t5;
336            $[90] = task.description;
337            $[91] = t6;
338          } else {
339            t6 = $[91];
340          }
341          return t6;
342        }
343    }
344  }
345  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlRleHQiLCJCYWNrZ3JvdW5kVGFza1N0YXRlIiwiRGVlcEltbXV0YWJsZSIsInRydW5jYXRlIiwidG9JbmtDb2xvciIsInBsdXJhbCIsIkRJQU1PTkRfRklMTEVEIiwiRElBTU9ORF9PUEVOIiwiUmVtb3RlU2Vzc2lvblByb2dyZXNzIiwiU2hlbGxQcm9ncmVzcyIsIlRhc2tTdGF0dXNUZXh0IiwiZGVzY3JpYmVUZWFtbWF0ZUFjdGl2aXR5IiwiUHJvcHMiLCJ0YXNrIiwibWF4QWN0aXZpdHlXaWR0aCIsIkJhY2tncm91bmRUYXNrIiwidDAiLCIkIiwiX2MiLCJhY3Rpdml0eUxpbWl0IiwidHlwZSIsInQxIiwia2luZCIsImRlc2NyaXB0aW9uIiwiY29tbWFuZCIsInQyIiwidDMiLCJ0NCIsImlzUmVtb3RlUmV2aWV3IiwicnVubmluZyIsInN0YXR1cyIsInRpdGxlIiwiU3ltYm9sIiwiZm9yIiwidDUiLCJ0NiIsInVuZGVmaW5lZCIsIm5vdGlmaWVkIiwiVDAiLCJUMSIsImFjdGl2aXR5IiwiaWRlbnRpdHkiLCJjb2xvciIsImFnZW50TmFtZSIsIndvcmtmbG93TmFtZSIsInN1bW1hcnkiLCJhZ2VudENvdW50IiwibiIsImZpbGVzVG91Y2hlZCIsImxlbmd0aCIsInBoYXNlIiwic2Vzc2lvbnNSZXZpZXdpbmciLCJkZXRhaWwiXSwic291cmNlcyI6WyJCYWNrZ3JvdW5kVGFzay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnc3JjL2luay5qcydcbmltcG9ydCB0eXBlIHsgQmFja2dyb3VuZFRhc2tTdGF0ZSB9IGZyb20gJ3NyYy90YXNrcy90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgRGVlcEltbXV0YWJsZSB9IGZyb20gJ3NyYy90eXBlcy91dGlscy5qcydcbmltcG9ydCB7IHRydW5jYXRlIH0gZnJvbSAnc3JjL3V0aWxzL2Zvcm1hdC5qcydcbmltcG9ydCB7IHRvSW5rQ29sb3IgfSBmcm9tICdzcmMvdXRpbHMvaW5rLmpzJ1xuaW1wb3J0IHsgcGx1cmFsIH0gZnJvbSAnc3JjL3V0aWxzL3N0cmluZ1V0aWxzLmpzJ1xuaW1wb3J0IHsgRElBTU9ORF9GSUxMRUQsIERJQU1PTkRfT1BFTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9maWd1cmVzLmpzJ1xuaW1wb3J0IHsgUmVtb3RlU2Vzc2lvblByb2dyZXNzIH0gZnJvbSAnLi9SZW1vdGVTZXNzaW9uUHJvZ3Jlc3MuanMnXG5pbXBvcnQgeyBTaGVsbFByb2dyZXNzLCBUYXNrU3RhdHVzVGV4dCB9IGZyb20gJy4vU2hlbGxQcm9ncmVzcy5qcydcbmltcG9ydCB7IGRlc2NyaWJlVGVhbW1hdGVBY3Rpdml0eSB9IGZyb20gJy4vdGFza1N0YXR1c1V0aWxzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICB0YXNrOiBEZWVwSW1tdXRhYmxlPEJhY2tncm91bmRUYXNrU3RhdGU+XG4gIG1heEFjdGl2aXR5V2lkdGg/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhY2tncm91bmRUYXNrKHtcbiAgdGFzayxcbiAgbWF4QWN0aXZpdHlXaWR0aCxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgYWN0aXZpdHlMaW1pdCA9IG1heEFjdGl2aXR5V2lkdGggPz8gNDBcbiAgc3dpdGNoICh0YXNrLnR5cGUpIHtcbiAgICBjYXNlICdsb2NhbF9iYXNoJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZShcbiAgICAgICAgICAgIHRhc2sua2luZCA9PT0gJ21vbml0b3InID8gdGFzay5kZXNjcmlwdGlvbiA6IHRhc2suY29tbWFuZCxcbiAgICAgICAgICAgIGFjdGl2aXR5TGltaXQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICA8U2hlbGxQcm9ncmVzcyBzaGVsbD17dGFza30gLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIGNhc2UgJ3JlbW90ZV9hZ2VudCc6IHtcbiAgICAgIC8vIExpdGUtcmV2aWV3IHJlbmRlcnMgaXRzIG93biByYWluYm93IGxpbmUgKHRpdGxlICsgbGl2ZSBjb3VudHMpLFxuICAgICAgLy8gc28gd2UgZG9uJ3QgcHJlZml4IHRoZSB0aXRsZSDigJQgdGhlIHJhaW5ib3cgYWxyZWFkeSBpbmNsdWRlcyBpdC5cbiAgICAgIGlmICh0YXNrLmlzUmVtb3RlUmV2aWV3KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICA8UmVtb3RlU2Vzc2lvblByb2dyZXNzIHNlc3Npb249e3Rhc2t9IC8+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCBydW5uaW5nID0gdGFzay5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCB0YXNrLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57cnVubmluZyA/IERJQU1PTkRfT1BFTiA6IERJQU1PTkRfRklMTEVEfSA8L1RleHQ+XG4gICAgICAgICAge3RydW5jYXRlKHRhc2sudGl0bGUsIGFjdGl2aXR5TGltaXQsIHRydWUpfVxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPiDCtyA8L1RleHQ+XG4gICAgICAgICAgPFJlbW90ZVNlc3Npb25Qcm9ncmVzcyBzZXNzaW9uPXt0YXNrfSAvPlxuICAgICAgICA8L1RleHQ+XG4gICAgICApXG4gICAgfVxuICAgIGNhc2UgJ2xvY2FsX2FnZW50JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZSh0YXNrLmRlc2NyaXB0aW9uLCBhY3Rpdml0eUxpbWl0LCB0cnVlKX17JyAnfVxuICAgICAgICAgIDxUYXNrU3RhdHVzVGV4dFxuICAgICAgICAgICAgc3RhdHVzPXt0YXNrLnN0YXR1c31cbiAgICAgICAgICAgIGxhYmVsPXt0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyAnZG9uZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzdWZmaXg9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYgIXRhc2subm90aWZpZWRcbiAgICAgICAgICAgICAgICA/ICcsIHVucmVhZCdcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICBjYXNlICdpbl9wcm9jZXNzX3RlYW1tYXRlJzoge1xuICAgICAgY29uc3QgYWN0aXZpdHkgPSBkZXNjcmliZVRlYW1tYXRlQWN0aXZpdHkodGFzaylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXt0b0lua0NvbG9yKHRhc2suaWRlbnRpdHkuY29sb3IpfT5cbiAgICAgICAgICAgIEB7dGFzay5pZGVudGl0eS5hZ2VudE5hbWV9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPjoge3RydW5jYXRlKGFjdGl2aXR5LCBhY3Rpdml0eUxpbWl0LCB0cnVlKX08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICB9XG4gICAgY2FzZSAnbG9jYWxfd29ya2Zsb3cnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAge3RydW5jYXRlKFxuICAgICAgICAgICAgdGFzay53b3JrZmxvd05hbWUgPz8gdGFzay5zdW1tYXJ5ID8/IHRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhY3Rpdml0eUxpbWl0LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApfXsnICd9XG4gICAgICAgICAgPFRhc2tTdGF0dXNUZXh0XG4gICAgICAgICAgICBzdGF0dXM9e3Rhc2suc3RhdHVzfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgPyBgJHt0YXNrLmFnZW50Q291bnR9ICR7cGx1cmFsKHRhc2suYWdlbnRDb3VudCwgJ2FnZW50Jyl9YFxuICAgICAgICAgICAgICAgIDogdGFzay5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXG4gICAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1ZmZpeD17XG4gICAgICAgICAgICAgIHRhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiAhdGFzay5ub3RpZmllZFxuICAgICAgICAgICAgICAgID8gJywgdW5yZWFkJ1xuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIGNhc2UgJ21vbml0b3JfbWNwJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZSh0YXNrLmRlc2NyaXB0aW9uLCBhY3Rpdml0eUxpbWl0LCB0cnVlKX17JyAnfVxuICAgICAgICAgIDxUYXNrU3RhdHVzVGV4dFxuICAgICAgICAgICAgc3RhdHVzPXt0YXNrLnN0YXR1c31cbiAgICAgICAgICAgIGxhYmVsPXt0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyAnZG9uZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzdWZmaXg9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYgIXRhc2subm90aWZpZWRcbiAgICAgICAgICAgICAgICA/ICcsIHVucmVhZCdcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICBjYXNlICdkcmVhbSc6IHtcbiAgICAgIGNvbnN0IG4gPSB0YXNrLmZpbGVzVG91Y2hlZC5sZW5ndGhcbiAgICAgIGNvbnN0IGRldGFpbCA9XG4gICAgICAgIHRhc2sucGhhc2UgPT09ICd1cGRhdGluZycgJiYgbiA+IDBcbiAgICAgICAgICA/IGAke259ICR7cGx1cmFsKG4sICdmaWxlJyl9YFxuICAgICAgICAgIDogYCR7dGFzay5zZXNzaW9uc1Jldmlld2luZ30gJHtwbHVyYWwodGFzay5zZXNzaW9uc1Jldmlld2luZywgJ3Nlc3Npb24nKX1gXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dGFzay5kZXNjcmlwdGlvbn17JyAnfVxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgwrcge3Rhc2sucGhhc2V9IMK3IHtkZXRhaWx9XG4gICAgICAgICAgPC9UZXh0PnsnICd9XG4gICAgICAgICAgPFRhc2tTdGF0dXNUZXh0XG4gICAgICAgICAgICBzdGF0dXM9e3Rhc2suc3RhdHVzfVxuICAgICAgICAgICAgbGFiZWw9e3Rhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyA/ICdkb25lJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHN1ZmZpeD17XG4gICAgICAgICAgICAgIHRhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiAhdGFzay5ub3RpZmllZFxuICAgICAgICAgICAgICAgID8gJywgdW5yZWFkJ1xuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLQSxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxjQUFjQyxtQkFBbUIsUUFBUSxvQkFBb0I7QUFDN0QsY0FBY0MsYUFBYSxRQUFRLG9CQUFvQjtB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