wangzhibo
2023-10-31 86070cd00485c47a2c5c3ffa4a9bae6648dd05c6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/@fs/E:/go_projects/metacubexd/src/pages/Config.tsx");import.meta.env = {"BASE_URL":"/","MODE":"development","DEV":true,"PROD":false,"SSR":false};import.meta.env.version = "1.124.2";import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { setAttribute as _$setAttribute } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { addEventListener as _$addEventListener } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { effect as _$effect } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { use as _$use } from "/node_modules/.vite/deps/solid-js_web.js?v=97593807";
import { $$component as _$$component } from "/@solid-refresh";
import { $$refresh as _$$refresh } from "/@solid-refresh";
import { $$registry as _$$registry } from "/@solid-refresh";
const _REGISTRY = _$$registry();
const _tmpl$ = /*#__PURE__*/_$template(`<div class="flex flex-col p-4">`),
  _tmpl$2 = /*#__PURE__*/_$template(`<div class="flex flex-col"><form class="flex gap-2 sm:flex-row"><input type=search name=name class="input input-bordered min-w-0 flex-1"placeholder=google.com><div class="flex items-center gap-2"><select name=type class="select select-bordered"><option>A</option><option>AAAA</option><option>MX`),
  _tmpl$3 = /*#__PURE__*/_$template(`<div class=py-2>`),
  _tmpl$4 = /*#__PURE__*/_$template(`<div class="flex flex-col gap-4"><select class="select select-bordered"><option></option><option></option><option></option></select><form class="grid grid-cols-3 gap-2 sm:grid-cols-5"></form><div class="grid grid-cols-2 gap-2 sm:grid-cols-4"><div class=form-control><label for=enable-tun-device class="label gap-2"><span class=label-text></span></label><input id=enable-tun-device type=checkbox class=toggle></div><div class=form-control><label for=tun-ip-stack class="label gap-2"><span class=label-text></span></label><select id=tun-ip-stack class="select select-bordered flex-1"><option>gVisor</option><option>System</option><option>LWIP</option></select></div><div class=form-control><label for=device-name class="label gap-2"><span class=label-text></span></label><input id=device-name class="input input-bordered min-w-0"></div><div class=form-control><label for=interface-name class="label gap-2"><span class=label-text></span></label><input id=interface-name class="input input-bordered min-w-0"></div></div><div class="grid grid-cols-2 gap-2 sm:grid-cols-3">`),
  _tmpl$5 = /*#__PURE__*/_$template(`<div class=form-control><label class=label><span class=label-text></span></label><input type=number class="input input-bordered">`),
  _tmpl$6 = /*#__PURE__*/_$template(`<div class="flex flex-col gap-2"><div class="flex flex-col"><select class="select select-bordered"></select></div><div class="flex flex-col"><select class="select select-bordered">`),
  _tmpl$7 = /*#__PURE__*/_$template(`<div class="grid grid-cols-1 gap-4 sm:grid-cols-2"><div class="flex flex-col gap-2"><div class="flex flex-col items-center"><input type=checkbox class=toggle></div></div><div class="flex flex-col gap-2"><div class="flex flex-col items-center"><input type=checkbox class=toggle></div><div class="flex flex-col"><select class="select select-bordered">`),
  _tmpl$8 = /*#__PURE__*/_$template(`<option>`),
  _tmpl$9 = /*#__PURE__*/_$template(`<span class="absolute -right-1 -top-1 flex h-3 w-3"><span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-info opacity-75"></span><span class="inline-flex h-3 w-3 rounded-full bg-info">`),
  _tmpl$10 = /*#__PURE__*/_$template(`<div class="flex flex-col gap-2"><div class="grid grid-cols-2 gap-4"><kbd class=kbd></kbd><div class=relative><kbd class="kbd w-full"></kbd></div></div><h1 class="text-center text-lg font-bold">`),
  _tmpl$11 = /*#__PURE__*/_$template(`<div class="mx-auto flex max-w-screen-md flex-col gap-4">`);
import { createForm } from "/node_modules/.vite/deps/@felte_solid.js?v=b4c2f04e";
import { validator } from "/node_modules/.vite/deps/@felte_validator-zod.js?v=b2fefd31";
import { useNavigate } from "/@fs/E:/go_projects/metacubexd/node_modules/@solidjs/router/dist/index.jsx";
import { For, Show, createEffect, createResource, createSignal, onMount } from "/node_modules/.vite/deps/solid-js.js?v=97593807";
import { toast } from "/@fs/E:/go_projects/metacubexd/node_modules/solid-toast/dist/source/index.jsx";
import { z } from "/node_modules/.vite/deps/zod.js?v=bbbd8f95";
import { fetchBackendConfigAPI, fetchBackendVersionAPI, flushFakeIPDataAPI, flushingFakeIPData, isUpdateAvailableAPI, reloadConfigFileAPI, reloadingConfigFile, restartBackendAPI, restartingBackend, updateBackendConfigAPI, updateGEODatabasesAPI, updatingGEODatabases, upgradeBackendAPI, upgradingBackend } from "/@fs/E:/go_projects/metacubexd/src/apis/index.ts";
import { Button, ConfigTitle } from "/@fs/E:/go_projects/metacubexd/src/components/index.ts";
import { LANG, MODE_OPTIONS, ROUTES, themes } from "/@fs/E:/go_projects/metacubexd/src/constants/index.ts";
import { locale, setLocale, useI18n } from "/@fs/E:/go_projects/metacubexd/src/i18n/index.tsx";
import { autoSwitchTheme, endpoint, favDayTheme, favNightTheme, setAutoSwitchTheme, setFavDayTheme, setFavNightTheme, setSelectedEndpoint, setUseTwemoji, useRequest, useTwemoji } from "/@fs/E:/go_projects/metacubexd/src/signals/index.ts";
const dnsQueryFormSchema = z.object({
  name: z.string(),
  type: z.string()
});
const DNSQueryForm = _$$component(_REGISTRY, "DNSQueryForm", () => {
  const [t] = useI18n();
  const request = useRequest();
  const {
    form,
    isSubmitting
  } = createForm({
    extend: validator({
      schema: dnsQueryFormSchema
    }),
    onSubmit: values => request.get('dns/query', {
      searchParams: {
        name: values.name,
        type: values.type
      }
    }).json().then(({
      Answer
    }) => setDNSQueryResult(Answer?.map(({
      data
    }) => data) || [])).catch(err => toast.error(err.message))
  });
  const [DNSQueryResult, setDNSQueryResult] = createSignal([]);
  return (() => {
    const _el$ = _tmpl$2(),
      _el$2 = _el$.firstChild,
      _el$3 = _el$2.firstChild,
      _el$4 = _el$3.nextSibling,
      _el$5 = _el$4.firstChild;
    _$use(form, _el$2, () => form);
    _$insert(_el$4, _$createComponent(Button, {
      type: "submit",
      "class": "btn-primary",
      get loading() {
        return isSubmitting();
      },
      get children() {
        return t('dnsQuery');
      }
    }), null);
    _$insert(_el$, _$createComponent(Show, {
      get when() {
        return DNSQueryResult().length > 0;
      },
      get children() {
        const _el$6 = _tmpl$();
        _$insert(_el$6, _$createComponent(For, {
          get each() {
            return DNSQueryResult();
          },
          children: item => (() => {
            const _el$7 = _tmpl$3();
            _$insert(_el$7, item);
            return _el$7;
          })()
        }));
        return _el$6;
      }
    }), null);
    return _el$;
  })();
}, {
  location: "src\\pages\\Config.tsx:53:21"
});
const configFormSchema = z.object({
  port: z.number(),
  'socks-port': z.number(),
  'redir-port': z.number(),
  'tproxy-port': z.number(),
  'mixed-port': z.number()
});
const ConfigForm = _$$component(_REGISTRY, "ConfigForm", () => {
  const [t] = useI18n();
  const navigate = useNavigate();
  const portList = [{
    label: () => t('port', {
      name: 'HTTP'
    }),
    key: 'port',
    onChange: e => void updateBackendConfigAPI('port', Number(e.target.value), refetch)
  }, {
    label: () => t('port', {
      name: 'Socks'
    }),
    key: 'socks-port',
    onChange: e => void updateBackendConfigAPI('socks-port', Number(e.target.value), refetch)
  }, {
    label: () => t('port', {
      name: 'Redir'
    }),
    key: 'redir-port',
    onChange: e => void updateBackendConfigAPI('redir-port', Number(e.target.value), refetch)
  }, {
    label: () => t('port', {
      name: 'TProxy'
    }),
    key: 'tproxy-port',
    onChange: e => void updateBackendConfigAPI('tproxy-port', Number(e.target.value), refetch)
  }, {
    label: () => t('port', {
      name: 'Mixed'
    }),
    key: 'mixed-port',
    onChange: e => void updateBackendConfigAPI('mixed-port', Number(e.target.value), refetch)
  }];
  const {
    form,
    setInitialValues,
    reset
  } = createForm({
    extend: validator({
      schema: configFormSchema
    })
  });
  const [configsData, {
    refetch
  }] = createResource(fetchBackendConfigAPI);
  createEffect(() => {
    const configs = configsData();
    if (configs) {
      setInitialValues(configs);
      reset();
    }
  });
  return (() => {
    const _el$8 = _tmpl$4(),
      _el$9 = _el$8.firstChild,
      _el$10 = _el$9.firstChild,
      _el$11 = _el$10.nextSibling,
      _el$12 = _el$11.nextSibling,
      _el$13 = _el$9.nextSibling,
      _el$14 = _el$13.nextSibling,
      _el$15 = _el$14.firstChild,
      _el$16 = _el$15.firstChild,
      _el$17 = _el$16.firstChild,
      _el$18 = _el$16.nextSibling,
      _el$19 = _el$15.nextSibling,
      _el$20 = _el$19.firstChild,
      _el$21 = _el$20.firstChild,
      _el$22 = _el$20.nextSibling,
      _el$23 = _el$19.nextSibling,
      _el$24 = _el$23.firstChild,
      _el$25 = _el$24.firstChild,
      _el$26 = _el$24.nextSibling,
      _el$27 = _el$23.nextSibling,
      _el$28 = _el$27.firstChild,
      _el$29 = _el$28.firstChild,
      _el$30 = _el$28.nextSibling,
      _el$31 = _el$14.nextSibling;
    _el$9.addEventListener("change", e => void updateBackendConfigAPI('mode', e.target.value, refetch));
    _$insert(_el$10, () => t('global'));
    _$insert(_el$11, () => t('rule'));
    _$insert(_el$12, () => t('direct'));
    _$use(form, _el$13, () => form);
    _$insert(_el$13, _$createComponent(For, {
      each: portList,
      children: item => (() => {
        const _el$32 = _tmpl$5(),
          _el$33 = _el$32.firstChild,
          _el$34 = _el$33.firstChild,
          _el$35 = _el$33.nextSibling;
        _$insert(_el$34, () => item.label());
        _$addEventListener(_el$35, "change", item.onChange);
        _$effect(_p$ => {
          const _v$ = item.key,
            _v$2 = item.key,
            _v$3 = item.key,
            _v$4 = item.label();
          _v$ !== _p$._v$ && _$setAttribute(_el$33, "for", _p$._v$ = _v$);
          _v$2 !== _p$._v$2 && _$setAttribute(_el$35, "id", _p$._v$2 = _v$2);
          _v$3 !== _p$._v$3 && _$setAttribute(_el$35, "name", _p$._v$3 = _v$3);
          _v$4 !== _p$._v$4 && _$setAttribute(_el$35, "placeholder", _p$._v$4 = _v$4);
          return _p$;
        }, {
          _v$: undefined,
          _v$2: undefined,
          _v$3: undefined,
          _v$4: undefined
        });
        return _el$32;
      })()
    }));
    _$insert(_el$17, () => t('enableTunDevice'));
    _el$18.addEventListener("change", e => void updateBackendConfigAPI('tun', {
      enable: e.target.checked
    }, refetch));
    _$insert(_el$21, () => t('tunModeStack'));
    _el$22.addEventListener("change", e => void updateBackendConfigAPI('tun', {
      stack: e.target.value
    }, refetch));
    _$insert(_el$25, () => t('tunDeviceName'));
    _el$26.addEventListener("change", e => void updateBackendConfigAPI('tun', {
      device: e.target.value
    }, refetch));
    _$insert(_el$29, () => t('interfaceName'));
    _el$30.addEventListener("change", e => void updateBackendConfigAPI('interface-name', e.target.value, refetch));
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-primary",
      get loading() {
        return reloadingConfigFile();
      },
      onClick: reloadConfigFileAPI,
      get children() {
        return t('reloadConfig');
      }
    }), null);
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-secondary",
      get loading() {
        return updatingGEODatabases();
      },
      onClick: updateGEODatabasesAPI,
      get children() {
        return t('updateGEODatabases');
      }
    }), null);
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-accent",
      get loading() {
        return flushingFakeIPData();
      },
      onClick: flushFakeIPDataAPI,
      get children() {
        return t('flushFakeIP');
      }
    }), null);
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-error",
      get loading() {
        return upgradingBackend();
      },
      onClick: upgradeBackendAPI,
      get children() {
        return t('upgradeCore');
      }
    }), null);
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-warning",
      get loading() {
        return restartingBackend();
      },
      onClick: restartBackendAPI,
      get children() {
        return t('restartCore');
      }
    }), null);
    _$insert(_el$31, _$createComponent(Button, {
      "class": "btn-info",
      onClick: () => {
        setSelectedEndpoint('');
        navigate(ROUTES.Setup);
      },
      get children() {
        return t('switchEndpoint');
      }
    }), null);
    _$effect(() => _el$9.value = configsData()?.mode);
    _$effect(() => _el$10.value = MODE_OPTIONS.Global);
    _$effect(() => _el$11.value = MODE_OPTIONS.Rule);
    _$effect(() => _el$12.value = MODE_OPTIONS.Direct);
    _$effect(() => _el$18.checked = configsData()?.tun.enable);
    _$effect(() => _el$22.value = configsData()?.tun.stack);
    _$effect(() => _el$26.value = configsData()?.tun.device);
    _$effect(() => _el$30.value = configsData()?.['interface-name']);
    return _el$8;
  })();
}, {
  location: "src\\pages\\Config.tsx:117:19"
});
const ConfigForXd = _$$component(_REGISTRY, "ConfigForXd", () => {
  const [t] = useI18n();
  const languages = [{
    label: () => t('en'),
    value: LANG.EN
  }, {
    label: () => t('zh'),
    value: LANG.ZH
  }];
  return (() => {
    const _el$36 = _tmpl$7(),
      _el$37 = _el$36.firstChild,
      _el$38 = _el$37.firstChild,
      _el$39 = _el$38.firstChild,
      _el$45 = _el$37.nextSibling,
      _el$46 = _el$45.firstChild,
      _el$47 = _el$46.firstChild,
      _el$48 = _el$46.nextSibling,
      _el$49 = _el$48.firstChild;
    _$insert(_el$38, _$createComponent(ConfigTitle, {
      get children() {
        return t('autoSwitchTheme');
      }
    }), _el$39);
    _el$39.addEventListener("change", e => setAutoSwitchTheme(e.target.checked));
    _$insert(_el$37, _$createComponent(Show, {
      get when() {
        return autoSwitchTheme();
      },
      get children() {
        const _el$40 = _tmpl$6(),
          _el$41 = _el$40.firstChild,
          _el$42 = _el$41.firstChild,
          _el$43 = _el$41.nextSibling,
          _el$44 = _el$43.firstChild;
        _$insert(_el$41, _$createComponent(ConfigTitle, {
          get children() {
            return t('favDayTheme');
          }
        }), _el$42);
        _el$42.addEventListener("change", e => setFavDayTheme(e.target.value));
        _$insert(_el$42, _$createComponent(For, {
          each: themes,
          children: theme => (() => {
            const _el$50 = _tmpl$8();
            _el$50.value = theme;
            _$insert(_el$50, theme);
            return _el$50;
          })()
        }));
        _$insert(_el$43, _$createComponent(ConfigTitle, {
          get children() {
            return t('favNightTheme');
          }
        }), _el$44);
        _el$44.addEventListener("change", e => setFavNightTheme(e.target.value));
        _$insert(_el$44, _$createComponent(For, {
          each: themes,
          children: theme => (() => {
            const _el$51 = _tmpl$8();
            _el$51.value = theme;
            _$insert(_el$51, theme);
            return _el$51;
          })()
        }));
        _$effect(() => _el$42.value = favDayTheme());
        _$effect(() => _el$44.value = favNightTheme());
        return _el$40;
      }
    }), null);
    _$insert(_el$46, _$createComponent(ConfigTitle, {
      get children() {
        return t('useTwemoji');
      }
    }), _el$47);
    _el$47.addEventListener("change", e => setUseTwemoji(e.target.checked));
    _$insert(_el$48, _$createComponent(ConfigTitle, {
      get children() {
        return t('switchLanguage');
      }
    }), _el$49);
    _el$49.addEventListener("change", e => setLocale(e.target.value));
    _$insert(_el$49, _$createComponent(For, {
      each: languages,
      children: lang => (() => {
        const _el$52 = _tmpl$8();
        _$insert(_el$52, () => lang.label());
        _$effect(() => _el$52.selected = locale() === lang.value);
        _$effect(() => _el$52.value = lang.value);
        return _el$52;
      })()
    }));
    _$effect(() => _el$39.checked = autoSwitchTheme());
    _$effect(() => _el$47.checked = useTwemoji());
    return _el$36;
  })();
}, {
  location: "src\\pages\\Config.tsx:358:20"
});
const Versions = _$$component(_REGISTRY, "Versions", () => {
  const [backendVersion, setBackendVersion] = createSignal('');
  const [isUpdateAvailable, setIsUpdateAvailable] = createSignal(false);
  onMount(async () => {
    const version = await fetchBackendVersionAPI();
    setBackendVersion(version);
    setIsUpdateAvailable(await isUpdateAvailableAPI(version));
  });
  return (() => {
    const _el$53 = _tmpl$10(),
      _el$54 = _el$53.firstChild,
      _el$55 = _el$54.firstChild,
      _el$56 = _el$55.nextSibling,
      _el$58 = _el$56.firstChild,
      _el$59 = _el$54.nextSibling;
    _$insert(_el$55, () => import.meta.env.version);
    _$insert(_el$56, _$createComponent(Show, {
      get when() {
        return isUpdateAvailable();
      },
      get children() {
        return _tmpl$9();
      }
    }), _el$58);
    _$insert(_el$58, backendVersion);
    _$insert(_el$59, () => endpoint()?.url);
    return _el$53;
  })();
}, {
  location: "src\\pages\\Config.tsx:456:17"
});
export default (() => {
  const [t] = useI18n();
  return (() => {
    const _el$60 = _tmpl$11();
    _$insert(_el$60, _$createComponent(ConfigTitle, {
      withDivider: true,
      get children() {
        return t('dnsQuery');
      }
    }), null);
    _$insert(_el$60, _$createComponent(DNSQueryForm, {}), null);
    _$insert(_el$60, _$createComponent(ConfigTitle, {
      withDivider: true,
      get children() {
        return t('coreConfig');
      }
    }), null);
    _$insert(_el$60, _$createComponent(ConfigForm, {}), null);
    _$insert(_el$60, _$createComponent(ConfigTitle, {
      withDivider: true,
      get children() {
        return t('xdConfig');
      }
    }), null);
    _$insert(_el$60, _$createComponent(ConfigForXd, {}), null);
    _$insert(_el$60, _$createComponent(ConfigTitle, {
      withDivider: true,
      get children() {
        return t('version');
      }
    }), null);
    _$insert(_el$60, _$createComponent(Versions, {}), null);
    return _el$60;
  })();
});
if (import.meta.hot) {
  _$$refresh("vite", import.meta.hot, _REGISTRY);
  import.meta.hot.accept();
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVGb3JtIiwidmFsaWRhdG9yIiwidXNlTmF2aWdhdGUiLCJGb3IiLCJTaG93IiwiY3JlYXRlRWZmZWN0IiwiY3JlYXRlUmVzb3VyY2UiLCJjcmVhdGVTaWduYWwiLCJvbk1vdW50IiwidG9hc3QiLCJ6IiwiZmV0Y2hCYWNrZW5kQ29uZmlnQVBJIiwiZmV0Y2hCYWNrZW5kVmVyc2lvbkFQSSIsImZsdXNoRmFrZUlQRGF0YUFQSSIsImZsdXNoaW5nRmFrZUlQRGF0YSIsImlzVXBkYXRlQXZhaWxhYmxlQVBJIiwicmVsb2FkQ29uZmlnRmlsZUFQSSIsInJlbG9hZGluZ0NvbmZpZ0ZpbGUiLCJyZXN0YXJ0QmFja2VuZEFQSSIsInJlc3RhcnRpbmdCYWNrZW5kIiwidXBkYXRlQmFja2VuZENvbmZpZ0FQSSIsInVwZGF0ZUdFT0RhdGFiYXNlc0FQSSIsInVwZGF0aW5nR0VPRGF0YWJhc2VzIiwidXBncmFkZUJhY2tlbmRBUEkiLCJ1cGdyYWRpbmdCYWNrZW5kIiwiQnV0dG9uIiwiQ29uZmlnVGl0bGUiLCJMQU5HIiwiTU9ERV9PUFRJT05TIiwiUk9VVEVTIiwidGhlbWVzIiwibG9jYWxlIiwic2V0TG9jYWxlIiwidXNlSTE4biIsImF1dG9Td2l0Y2hUaGVtZSIsImVuZHBvaW50IiwiZmF2RGF5VGhlbWUiLCJmYXZOaWdodFRoZW1lIiwic2V0QXV0b1N3aXRjaFRoZW1lIiwic2V0RmF2RGF5VGhlbWUiLCJzZXRGYXZOaWdodFRoZW1lIiwic2V0U2VsZWN0ZWRFbmRwb2ludCIsInNldFVzZVR3ZW1vamkiLCJ1c2VSZXF1ZXN0IiwidXNlVHdlbW9qaSIsImRuc1F1ZXJ5Rm9ybVNjaGVtYSIsIm9iamVjdCIsIm5hbWUiLCJzdHJpbmciLCJ0eXBlIiwiRE5TUXVlcnlGb3JtIiwiXyQkY29tcG9uZW50IiwiX1JFR0lTVFJZIiwidCIsInJlcXVlc3QiLCJmb3JtIiwiaXNTdWJtaXR0aW5nIiwiZXh0ZW5kIiwic2NoZW1hIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJnZXQiLCJzZWFyY2hQYXJhbXMiLCJqc29uIiwidGhlbiIsIkFuc3dlciIsInNldEROU1F1ZXJ5UmVzdWx0IiwibWFwIiwiZGF0YSIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiRE5TUXVlcnlSZXN1bHQiLCJfZWwkIiwiX3RtcGwkMiIsIl9lbCQyIiwiZmlyc3RDaGlsZCIsIl9lbCQzIiwiX2VsJDQiLCJuZXh0U2libGluZyIsIl9lbCQ1IiwiXyR1c2UiLCJfJGluc2VydCIsIl8kY3JlYXRlQ29tcG9uZW50IiwibG9hZGluZyIsImNoaWxkcmVuIiwid2hlbiIsImxlbmd0aCIsIl9lbCQ2IiwiX3RtcGwkIiwiZWFjaCIsIml0ZW0iLCJfZWwkNyIsIl90bXBsJDMiLCJsb2NhdGlvbiIsImNvbmZpZ0Zvcm1TY2hlbWEiLCJwb3J0IiwibnVtYmVyIiwiQ29uZmlnRm9ybSIsIm5hdmlnYXRlIiwicG9ydExpc3QiLCJsYWJlbCIsImtleSIsIm9uQ2hhbmdlIiwiZSIsIk51bWJlciIsInRhcmdldCIsInZhbHVlIiwicmVmZXRjaCIsInNldEluaXRpYWxWYWx1ZXMiLCJyZXNldCIsImNvbmZpZ3NEYXRhIiwiY29uZmlncyIsIl9lbCQ4IiwiX3RtcGwkNCIsIl9lbCQ5IiwiX2VsJDEwIiwiX2VsJDExIiwiX2VsJDEyIiwiX2VsJDEzIiwiX2VsJDE0IiwiX2VsJDE1IiwiX2VsJDE2IiwiX2VsJDE3IiwiX2VsJDE4IiwiX2VsJDE5IiwiX2VsJDIwIiwiX2VsJDIxIiwiX2VsJDIyIiwiX2VsJDIzIiwiX2VsJDI0IiwiX2VsJDI1IiwiX2VsJDI2IiwiX2VsJDI3IiwiX2VsJDI4IiwiX2VsJDI5IiwiX2VsJDMwIiwiX2VsJDMxIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9lbCQzMiIsIl90bXBsJDUiLCJfZWwkMzMiLCJfZWwkMzQiLCJfZWwkMzUiLCJfJGFkZEV2ZW50TGlzdGVuZXIiLCJfJGVmZmVjdCIsIl9wJCIsIl92JCIsIl92JDIiLCJfdiQzIiwiX3YkNCIsIl8kc2V0QXR0cmlidXRlIiwidW5kZWZpbmVkIiwiZW5hYmxlIiwiY2hlY2tlZCIsInN0YWNrIiwiZGV2aWNlIiwib25DbGljayIsIlNldHVwIiwibW9kZSIsIkdsb2JhbCIsIlJ1bGUiLCJEaXJlY3QiLCJ0dW4iLCJDb25maWdGb3JYZCIsImxhbmd1YWdlcyIsIkVOIiwiWkgiLCJfZWwkMzYiLCJfdG1wbCQ3IiwiX2VsJDM3IiwiX2VsJDM4IiwiX2VsJDM5IiwiX2VsJDQ1IiwiX2VsJDQ2IiwiX2VsJDQ3IiwiX2VsJDQ4IiwiX2VsJDQ5IiwiX2VsJDQwIiwiX3RtcGwkNiIsIl9lbCQ0MSIsIl9lbCQ0MiIsIl9lbCQ0MyIsIl9lbCQ0NCIsInRoZW1lIiwiX2VsJDUwIiwiX3RtcGwkOCIsIl9lbCQ1MSIsImxhbmciLCJfZWwkNTIiLCJzZWxlY3RlZCIsIlZlcnNpb25zIiwiYmFja2VuZFZlcnNpb24iLCJzZXRCYWNrZW5kVmVyc2lvbiIsImlzVXBkYXRlQXZhaWxhYmxlIiwic2V0SXNVcGRhdGVBdmFpbGFibGUiLCJ2ZXJzaW9uIiwiX2VsJDUzIiwiX3RtcGwkMTAiLCJfZWwkNTQiLCJfZWwkNTUiLCJfZWwkNTYiLCJfZWwkNTgiLCJfZWwkNTkiLCJpbXBvcnQiLCJtZXRhIiwiZW52IiwiX3RtcGwkOSIsInVybCIsIl9lbCQ2MCIsIl90bXBsJDExIiwid2l0aERpdmlkZXIiLCJob3QiLCJfJCRyZWZyZXNoIiwiYWNjZXB0Il0sInNvdXJjZXMiOlsiQ29uZmlnLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGb3JtIH0gZnJvbSAnQGZlbHRlL3NvbGlkJ1xyXG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tICdAZmVsdGUvdmFsaWRhdG9yLXpvZCdcclxuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tICdAc29saWRqcy9yb3V0ZXInXHJcbmltcG9ydCB7XHJcbiAgRm9yLFxyXG4gIFNob3csXHJcbiAgY3JlYXRlRWZmZWN0LFxyXG4gIGNyZWF0ZVJlc291cmNlLFxyXG4gIGNyZWF0ZVNpZ25hbCxcclxuICBvbk1vdW50LFxyXG59IGZyb20gJ3NvbGlkLWpzJ1xyXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3NvbGlkLXRvYXN0J1xyXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJ1xyXG5pbXBvcnQge1xyXG4gIGZldGNoQmFja2VuZENvbmZpZ0FQSSxcclxuICBmZXRjaEJhY2tlbmRWZXJzaW9uQVBJLFxyXG4gIGZsdXNoRmFrZUlQRGF0YUFQSSxcclxuICBmbHVzaGluZ0Zha2VJUERhdGEsXHJcbiAgaXNVcGRhdGVBdmFpbGFibGVBUEksXHJcbiAgcmVsb2FkQ29uZmlnRmlsZUFQSSxcclxuICByZWxvYWRpbmdDb25maWdGaWxlLFxyXG4gIHJlc3RhcnRCYWNrZW5kQVBJLFxyXG4gIHJlc3RhcnRpbmdCYWNrZW5kLFxyXG4gIHVwZGF0ZUJhY2tlbmRDb25maWdBUEksXHJcbiAgdXBkYXRlR0VPRGF0YWJhc2VzQVBJLFxyXG4gIHVwZGF0aW5nR0VPRGF0YWJhc2VzLFxyXG4gIHVwZ3JhZGVCYWNrZW5kQVBJLFxyXG4gIHVwZ3JhZGluZ0JhY2tlbmQsXHJcbn0gZnJvbSAnfi9hcGlzJ1xyXG5pbXBvcnQgeyBCdXR0b24sIENvbmZpZ1RpdGxlIH0gZnJvbSAnfi9jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBMQU5HLCBNT0RFX09QVElPTlMsIFJPVVRFUywgdGhlbWVzIH0gZnJvbSAnfi9jb25zdGFudHMnXHJcbmltcG9ydCB7IGxvY2FsZSwgc2V0TG9jYWxlLCB1c2VJMThuIH0gZnJvbSAnfi9pMThuJ1xyXG5pbXBvcnQge1xyXG4gIGF1dG9Td2l0Y2hUaGVtZSxcclxuICBlbmRwb2ludCxcclxuICBmYXZEYXlUaGVtZSxcclxuICBmYXZOaWdodFRoZW1lLFxyXG4gIHNldEF1dG9Td2l0Y2hUaGVtZSxcclxuICBzZXRGYXZEYXlUaGVtZSxcclxuICBzZXRGYXZOaWdodFRoZW1lLFxyXG4gIHNldFNlbGVjdGVkRW5kcG9pbnQsXHJcbiAgc2V0VXNlVHdlbW9qaSxcclxuICB1c2VSZXF1ZXN0LFxyXG4gIHVzZVR3ZW1vamksXHJcbn0gZnJvbSAnfi9zaWduYWxzJ1xyXG5pbXBvcnQgdHlwZSB7IEROU1F1ZXJ5IH0gZnJvbSAnfi90eXBlcydcclxuXHJcbmNvbnN0IGRuc1F1ZXJ5Rm9ybVNjaGVtYSA9IHoub2JqZWN0KHtcclxuICBuYW1lOiB6LnN0cmluZygpLFxyXG4gIHR5cGU6IHouc3RyaW5nKCksXHJcbn0pXHJcblxyXG5jb25zdCBETlNRdWVyeUZvcm0gPSAoKSA9PiB7XHJcbiAgY29uc3QgW3RdID0gdXNlSTE4bigpXHJcbiAgY29uc3QgcmVxdWVzdCA9IHVzZVJlcXVlc3QoKVxyXG5cclxuICBjb25zdCB7IGZvcm0sIGlzU3VibWl0dGluZyB9ID0gY3JlYXRlRm9ybTx6LmluZmVyPHR5cGVvZiBkbnNRdWVyeUZvcm1TY2hlbWE+PihcclxuICAgIHtcclxuICAgICAgZXh0ZW5kOiB2YWxpZGF0b3IoeyBzY2hlbWE6IGRuc1F1ZXJ5Rm9ybVNjaGVtYSB9KSxcclxuICAgICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+XHJcbiAgICAgICAgcmVxdWVzdFxyXG4gICAgICAgICAgLmdldCgnZG5zL3F1ZXJ5Jywge1xyXG4gICAgICAgICAgICBzZWFyY2hQYXJhbXM6IHsgbmFtZTogdmFsdWVzLm5hbWUsIHR5cGU6IHZhbHVlcy50eXBlIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmpzb248RE5TUXVlcnk+KClcclxuICAgICAgICAgIC50aGVuKCh7IEFuc3dlciB9KSA9PlxyXG4gICAgICAgICAgICBzZXRETlNRdWVyeVJlc3VsdChBbnN3ZXI/Lm1hcCgoeyBkYXRhIH0pID0+IGRhdGEpIHx8IFtdKSxcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB0b2FzdC5lcnJvcihlcnIubWVzc2FnZSkpLFxyXG4gICAgfSxcclxuICApXHJcblxyXG4gIGNvbnN0IFtETlNRdWVyeVJlc3VsdCwgc2V0RE5TUXVlcnlSZXN1bHRdID0gY3JlYXRlU2lnbmFsPHN0cmluZ1tdPihbXSlcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgIDxmb3JtIHVzZTpmb3JtPXtmb3JtfSBjbGFzcz1cImZsZXggZ2FwLTIgc206ZmxleC1yb3dcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxyXG4gICAgICAgICAgbmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dCBpbnB1dC1ib3JkZXJlZCBtaW4tdy0wIGZsZXgtMVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImdvb2dsZS5jb21cIlxyXG4gICAgICAgIC8+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwidHlwZVwiIGNsYXNzPVwic2VsZWN0IHNlbGVjdC1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uPkE8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5BQUFBPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TVg8L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuLXByaW1hcnlcIiBsb2FkaW5nPXtpc1N1Ym1pdHRpbmcoKX0+XHJcbiAgICAgICAgICAgIHt0KCdkbnNRdWVyeScpfVxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgIDxTaG93IHdoZW49e0ROU1F1ZXJ5UmVzdWx0KCkubGVuZ3RoID4gMH0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcC00XCI+XHJcbiAgICAgICAgICA8Rm9yIGVhY2g9e0ROU1F1ZXJ5UmVzdWx0KCl9PlxyXG4gICAgICAgICAgICB7KGl0ZW0pID0+IDxkaXYgY2xhc3M9XCJweS0yXCI+e2l0ZW19PC9kaXY+fVxyXG4gICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvU2hvdz5cclxuICAgIDwvZGl2PlxyXG4gIClcclxufVxyXG5cclxuY29uc3QgY29uZmlnRm9ybVNjaGVtYSA9IHoub2JqZWN0KHtcclxuICBwb3J0OiB6Lm51bWJlcigpLFxyXG4gICdzb2Nrcy1wb3J0Jzogei5udW1iZXIoKSxcclxuICAncmVkaXItcG9ydCc6IHoubnVtYmVyKCksXHJcbiAgJ3Rwcm94eS1wb3J0Jzogei5udW1iZXIoKSxcclxuICAnbWl4ZWQtcG9ydCc6IHoubnVtYmVyKCksXHJcbn0pXHJcblxyXG5jb25zdCBDb25maWdGb3JtID0gKCkgPT4ge1xyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKVxyXG5cclxuICBjb25zdCBwb3J0TGlzdCA9IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICgpID0+IHQoJ3BvcnQnLCB7IG5hbWU6ICdIVFRQJyB9KSxcclxuICAgICAga2V5OiAncG9ydCcsXHJcbiAgICAgIG9uQ2hhbmdlOiAoZTogRXZlbnQgJiB7IHRhcmdldDogSFRNTElucHV0RWxlbWVudCB9KSA9PlxyXG4gICAgICAgIHZvaWQgdXBkYXRlQmFja2VuZENvbmZpZ0FQSSgncG9ydCcsIE51bWJlcihlLnRhcmdldC52YWx1ZSksIHJlZmV0Y2gpLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICgpID0+IHQoJ3BvcnQnLCB7IG5hbWU6ICdTb2NrcycgfSksXHJcbiAgICAgIGtleTogJ3NvY2tzLXBvcnQnLFxyXG4gICAgICBvbkNoYW5nZTogKGU6IEV2ZW50ICYgeyB0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQgfSkgPT5cclxuICAgICAgICB2b2lkIHVwZGF0ZUJhY2tlbmRDb25maWdBUEkoXHJcbiAgICAgICAgICAnc29ja3MtcG9ydCcsXHJcbiAgICAgICAgICBOdW1iZXIoZS50YXJnZXQudmFsdWUpLFxyXG4gICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICgpID0+IHQoJ3BvcnQnLCB7IG5hbWU6ICdSZWRpcicgfSksXHJcbiAgICAgIGtleTogJ3JlZGlyLXBvcnQnLFxyXG4gICAgICBvbkNoYW5nZTogKGU6IEV2ZW50ICYgeyB0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQgfSkgPT5cclxuICAgICAgICB2b2lkIHVwZGF0ZUJhY2tlbmRDb25maWdBUEkoXHJcbiAgICAgICAgICAncmVkaXItcG9ydCcsXHJcbiAgICAgICAgICBOdW1iZXIoZS50YXJnZXQudmFsdWUpLFxyXG4gICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICgpID0+IHQoJ3BvcnQnLCB7IG5hbWU6ICdUUHJveHknIH0pLFxyXG4gICAgICBrZXk6ICd0cHJveHktcG9ydCcsXHJcbiAgICAgIG9uQ2hhbmdlOiAoZTogRXZlbnQgJiB7IHRhcmdldDogSFRNTElucHV0RWxlbWVudCB9KSA9PlxyXG4gICAgICAgIHZvaWQgdXBkYXRlQmFja2VuZENvbmZpZ0FQSShcclxuICAgICAgICAgICd0cHJveHktcG9ydCcsXHJcbiAgICAgICAgICBOdW1iZXIoZS50YXJnZXQudmFsdWUpLFxyXG4gICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICgpID0+IHQoJ3BvcnQnLCB7IG5hbWU6ICdNaXhlZCcgfSksXHJcbiAgICAgIGtleTogJ21peGVkLXBvcnQnLFxyXG4gICAgICBvbkNoYW5nZTogKGU6IEV2ZW50ICYgeyB0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQgfSkgPT5cclxuICAgICAgICB2b2lkIHVwZGF0ZUJhY2tlbmRDb25maWdBUEkoXHJcbiAgICAgICAgICAnbWl4ZWQtcG9ydCcsXHJcbiAgICAgICAgICBOdW1iZXIoZS50YXJnZXQudmFsdWUpLFxyXG4gICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICApLFxyXG4gICAgfSxcclxuICBdXHJcblxyXG4gIGNvbnN0IHsgZm9ybSwgc2V0SW5pdGlhbFZhbHVlcywgcmVzZXQgfSA9IGNyZWF0ZUZvcm08XHJcbiAgICB6LmluZmVyPHR5cGVvZiBjb25maWdGb3JtU2NoZW1hPlxyXG4gID4oeyBleHRlbmQ6IHZhbGlkYXRvcih7IHNjaGVtYTogY29uZmlnRm9ybVNjaGVtYSB9KSB9KVxyXG5cclxuICBjb25zdCBbY29uZmlnc0RhdGEsIHsgcmVmZXRjaCB9XSA9IGNyZWF0ZVJlc291cmNlKGZldGNoQmFja2VuZENvbmZpZ0FQSSlcclxuXHJcbiAgY3JlYXRlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGNvbmZpZ3MgPSBjb25maWdzRGF0YSgpXHJcblxyXG4gICAgaWYgKGNvbmZpZ3MpIHtcclxuICAgICAgc2V0SW5pdGlhbFZhbHVlcyhjb25maWdzKVxyXG4gICAgICByZXNldCgpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XHJcbiAgICAgIDxzZWxlY3RcclxuICAgICAgICBjbGFzcz1cInNlbGVjdCBzZWxlY3QtYm9yZGVyZWRcIlxyXG4gICAgICAgIHZhbHVlPXtjb25maWdzRGF0YSgpPy5tb2RlfVxyXG4gICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cclxuICAgICAgICAgIHZvaWQgdXBkYXRlQmFja2VuZENvbmZpZ0FQSSgnbW9kZScsIGUudGFyZ2V0LnZhbHVlLCByZWZldGNoKVxyXG4gICAgICAgIH1cclxuICAgICAgPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9e01PREVfT1BUSU9OUy5HbG9iYWx9Pnt0KCdnbG9iYWwnKX08L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPXtNT0RFX09QVElPTlMuUnVsZX0+e3QoJ3J1bGUnKX08L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPXtNT0RFX09QVElPTlMuRGlyZWN0fT57dCgnZGlyZWN0Jyl9PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgPGZvcm0gY2xhc3M9XCJncmlkIGdyaWQtY29scy0zIGdhcC0yIHNtOmdyaWQtY29scy01XCIgdXNlOmZvcm09e2Zvcm19PlxyXG4gICAgICAgIDxGb3IgZWFjaD17cG9ydExpc3R9PlxyXG4gICAgICAgICAgeyhpdGVtKSA9PiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPXtpdGVtLmtleX0gY2xhc3M9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+e2l0ZW0ubGFiZWwoKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBpZD17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgICBuYW1lPXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dCBpbnB1dC1ib3JkZXJlZFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aXRlbS5sYWJlbCgpfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2l0ZW0ub25DaGFuZ2V9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvRm9yPlxyXG4gICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpncmlkLWNvbHMtNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbmFibGUtdHVuLWRldmljZVwiIGNsYXNzPVwibGFiZWwgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3QoJ2VuYWJsZVR1bkRldmljZScpfTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIGlkPVwiZW5hYmxlLXR1bi1kZXZpY2VcIlxyXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXHJcbiAgICAgICAgICAgIGNoZWNrZWQ9e2NvbmZpZ3NEYXRhKCk/LnR1bi5lbmFibGV9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cclxuICAgICAgICAgICAgICB2b2lkIHVwZGF0ZUJhY2tlbmRDb25maWdBUEkoXHJcbiAgICAgICAgICAgICAgICAndHVuJyxcclxuICAgICAgICAgICAgICAgIHsgZW5hYmxlOiBlLnRhcmdldC5jaGVja2VkIH0sXHJcbiAgICAgICAgICAgICAgICByZWZldGNoLFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cInR1bi1pcC1zdGFja1wiIGNsYXNzPVwibGFiZWwgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3QoJ3R1bk1vZGVTdGFjaycpfTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICBpZD1cInR1bi1pcC1zdGFja1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IHNlbGVjdC1ib3JkZXJlZCBmbGV4LTFcIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlnc0RhdGEoKT8udHVuLnN0YWNrfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XHJcbiAgICAgICAgICAgICAgdm9pZCB1cGRhdGVCYWNrZW5kQ29uZmlnQVBJKFxyXG4gICAgICAgICAgICAgICAgJ3R1bicsXHJcbiAgICAgICAgICAgICAgICB7IHN0YWNrOiBlLnRhcmdldC52YWx1ZSB9LFxyXG4gICAgICAgICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG9wdGlvbj5nVmlzb3I8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5TeXN0ZW08L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MV0lQPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRldmljZS1uYW1lXCIgY2xhc3M9XCJsYWJlbCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57dCgndHVuRGV2aWNlTmFtZScpfTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIGlkPVwiZGV2aWNlLW5hbWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIG1pbi13LTBcIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlnc0RhdGEoKT8udHVuLmRldmljZX1cclxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxyXG4gICAgICAgICAgICAgIHZvaWQgdXBkYXRlQmFja2VuZENvbmZpZ0FQSShcclxuICAgICAgICAgICAgICAgICd0dW4nLFxyXG4gICAgICAgICAgICAgICAgeyBkZXZpY2U6IGUudGFyZ2V0LnZhbHVlIH0sXHJcbiAgICAgICAgICAgICAgICByZWZldGNoLFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImludGVyZmFjZS1uYW1lXCIgY2xhc3M9XCJsYWJlbCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57dCgnaW50ZXJmYWNlTmFtZScpfTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIGlkPVwiaW50ZXJmYWNlLW5hbWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIG1pbi13LTBcIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlnc0RhdGEoKT8uWydpbnRlcmZhY2UtbmFtZSddfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XHJcbiAgICAgICAgICAgICAgdm9pZCB1cGRhdGVCYWNrZW5kQ29uZmlnQVBJKFxyXG4gICAgICAgICAgICAgICAgJ2ludGVyZmFjZS1uYW1lJyxcclxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgcmVmZXRjaCxcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z3JpZC1jb2xzLTNcIj5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgIGxvYWRpbmc9e3JlbG9hZGluZ0NvbmZpZ0ZpbGUoKX1cclxuICAgICAgICAgIG9uQ2xpY2s9e3JlbG9hZENvbmZpZ0ZpbGVBUEl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3QoJ3JlbG9hZENvbmZpZycpfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgbG9hZGluZz17dXBkYXRpbmdHRU9EYXRhYmFzZXMoKX1cclxuICAgICAgICAgIG9uQ2xpY2s9e3VwZGF0ZUdFT0RhdGFiYXNlc0FQSX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7dCgndXBkYXRlR0VPRGF0YWJhc2VzJyl9XHJcbiAgICAgICAgPC9CdXR0b24+XHJcblxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuLWFjY2VudFwiXHJcbiAgICAgICAgICBsb2FkaW5nPXtmbHVzaGluZ0Zha2VJUERhdGEoKX1cclxuICAgICAgICAgIG9uQ2xpY2s9e2ZsdXNoRmFrZUlQRGF0YUFQSX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7dCgnZmx1c2hGYWtlSVAnKX1cclxuICAgICAgICA8L0J1dHRvbj5cclxuXHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4tZXJyb3JcIlxyXG4gICAgICAgICAgbG9hZGluZz17dXBncmFkaW5nQmFja2VuZCgpfVxyXG4gICAgICAgICAgb25DbGljaz17dXBncmFkZUJhY2tlbmRBUEl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3QoJ3VwZ3JhZGVDb3JlJyl9XHJcbiAgICAgICAgPC9CdXR0b24+XHJcblxyXG4gICAgICAgIDxCdXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuLXdhcm5pbmdcIlxyXG4gICAgICAgICAgbG9hZGluZz17cmVzdGFydGluZ0JhY2tlbmQoKX1cclxuICAgICAgICAgIG9uQ2xpY2s9e3Jlc3RhcnRCYWNrZW5kQVBJfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt0KCdyZXN0YXJ0Q29yZScpfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0bi1pbmZvXCJcclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRFbmRwb2ludCgnJylcclxuICAgICAgICAgICAgbmF2aWdhdGUoUk9VVEVTLlNldHVwKVxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7dCgnc3dpdGNoRW5kcG9pbnQnKX1cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuXHJcbmNvbnN0IENvbmZpZ0ZvclhkID0gKCkgPT4ge1xyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG5cclxuICBjb25zdCBsYW5ndWFnZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAoKSA9PiB0KCdlbicpLFxyXG4gICAgICB2YWx1ZTogTEFORy5FTixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAoKSA9PiB0KCd6aCcpLFxyXG4gICAgICB2YWx1ZTogTEFORy5aSCxcclxuICAgIH0sXHJcbiAgXVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgc206Z3JpZC1jb2xzLTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxDb25maWdUaXRsZT57dCgnYXV0b1N3aXRjaFRoZW1lJyl9PC9Db25maWdUaXRsZT5cclxuXHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVcIlxyXG4gICAgICAgICAgICBjaGVja2VkPXthdXRvU3dpdGNoVGhlbWUoKX1cclxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRBdXRvU3dpdGNoVGhlbWUoZS50YXJnZXQuY2hlY2tlZCl9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8U2hvdyB3aGVuPXthdXRvU3dpdGNoVGhlbWUoKX0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgIDxDb25maWdUaXRsZT57dCgnZmF2RGF5VGhlbWUnKX08L0NvbmZpZ1RpdGxlPlxyXG5cclxuICAgICAgICAgICAgICA8c2VsZWN0XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBzZWxlY3QtYm9yZGVyZWRcIlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZhdkRheVRoZW1lKCl9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNldEZhdkRheVRoZW1lKGUudGFyZ2V0LnZhbHVlIGFzICh0eXBlb2YgdGhlbWVzKVtudW1iZXJdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxGb3IgZWFjaD17dGhlbWVzfT5cclxuICAgICAgICAgICAgICAgICAgeyh0aGVtZSkgPT4gPG9wdGlvbiB2YWx1ZT17dGhlbWV9Pnt0aGVtZX08L29wdGlvbj59XHJcbiAgICAgICAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgIDxDb25maWdUaXRsZT57dCgnZmF2TmlnaHRUaGVtZScpfTwvQ29uZmlnVGl0bGU+XHJcblxyXG4gICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IHNlbGVjdC1ib3JkZXJlZFwiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZmF2TmlnaHRUaGVtZSgpfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxyXG4gICAgICAgICAgICAgICAgICBzZXRGYXZOaWdodFRoZW1lKGUudGFyZ2V0LnZhbHVlIGFzICh0eXBlb2YgdGhlbWVzKVtudW1iZXJdKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxGb3IgZWFjaD17dGhlbWVzfT5cclxuICAgICAgICAgICAgICAgICAgeyh0aGVtZSkgPT4gPG9wdGlvbiB2YWx1ZT17dGhlbWV9Pnt0aGVtZX08L29wdGlvbj59XHJcbiAgICAgICAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L1Nob3c+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxDb25maWdUaXRsZT57dCgndXNlVHdlbW9qaScpfTwvQ29uZmlnVGl0bGU+XHJcblxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlXCJcclxuICAgICAgICAgICAgY2hlY2tlZD17dXNlVHdlbW9qaSgpfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFVzZVR3ZW1vamkoZS50YXJnZXQuY2hlY2tlZCl9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgPENvbmZpZ1RpdGxlPnt0KCdzd2l0Y2hMYW5ndWFnZScpfTwvQ29uZmlnVGl0bGU+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBzZWxlY3QtYm9yZGVyZWRcIlxyXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldExvY2FsZShlLnRhcmdldC52YWx1ZSBhcyBMQU5HKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEZvciBlYWNoPXtsYW5ndWFnZXN9PlxyXG4gICAgICAgICAgICAgIHsobGFuZykgPT4gKFxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD17bG9jYWxlKCkgPT09IGxhbmcudmFsdWV9IHZhbHVlPXtsYW5nLnZhbHVlfT5cclxuICAgICAgICAgICAgICAgICAge2xhbmcubGFiZWwoKX1cclxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvRm9yPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKVxyXG59XHJcblxyXG5jb25zdCBWZXJzaW9ucyA9ICgpID0+IHtcclxuICBjb25zdCBbYmFja2VuZFZlcnNpb24sIHNldEJhY2tlbmRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgnJylcclxuICBjb25zdCBbaXNVcGRhdGVBdmFpbGFibGUsIHNldElzVXBkYXRlQXZhaWxhYmxlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcclxuXHJcbiAgb25Nb3VudChhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZmV0Y2hCYWNrZW5kVmVyc2lvbkFQSSgpXHJcbiAgICBzZXRCYWNrZW5kVmVyc2lvbih2ZXJzaW9uKVxyXG4gICAgc2V0SXNVcGRhdGVBdmFpbGFibGUoYXdhaXQgaXNVcGRhdGVBdmFpbGFibGVBUEkodmVyc2lvbikpXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XHJcbiAgICAgICAgPGtiZCBjbGFzcz1cImtiZFwiPntpbXBvcnQubWV0YS5lbnYudmVyc2lvbn08L2tiZD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8U2hvdyB3aGVuPXtpc1VwZGF0ZUF2YWlsYWJsZSgpfT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSAtcmlnaHQtMSAtdG9wLTEgZmxleCBoLTMgdy0zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBpbmxpbmUtZmxleCBoLWZ1bGwgdy1mdWxsIGFuaW1hdGUtcGluZyByb3VuZGVkLWZ1bGwgYmctaW5mbyBvcGFjaXR5LTc1XCIgLz5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IGgtMyB3LTMgcm91bmRlZC1mdWxsIGJnLWluZm9cIiAvPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L1Nob3c+XHJcblxyXG4gICAgICAgICAgPGtiZCBjbGFzcz1cImtiZCB3LWZ1bGxcIj57YmFja2VuZFZlcnNpb24oKX08L2tiZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aDEgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWxnIGZvbnQtYm9sZFwiPntlbmRwb2ludCgpPy51cmx9PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gIClcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gZmxleCBtYXgtdy1zY3JlZW4tbWQgZmxleC1jb2wgZ2FwLTRcIj5cclxuICAgICAgPENvbmZpZ1RpdGxlIHdpdGhEaXZpZGVyPnt0KCdkbnNRdWVyeScpfTwvQ29uZmlnVGl0bGU+XHJcblxyXG4gICAgICA8RE5TUXVlcnlGb3JtIC8+XHJcblxyXG4gICAgICA8Q29uZmlnVGl0bGUgd2l0aERpdmlkZXI+e3QoJ2NvcmVDb25maWcnKX08L0NvbmZpZ1RpdGxlPlxyXG5cclxuICAgICAgPENvbmZpZ0Zvcm0gLz5cclxuXHJcbiAgICAgIDxDb25maWdUaXRsZSB3aXRoRGl2aWRlcj57dCgneGRDb25maWcnKX08L0NvbmZpZ1RpdGxlPlxyXG5cclxuICAgICAgPENvbmZpZ0ZvclhkIC8+XHJcblxyXG4gICAgICA8Q29uZmlnVGl0bGUgd2l0aERpdmlkZXI+e3QoJ3ZlcnNpb24nKX08L0NvbmZpZ1RpdGxlPlxyXG5cclxuICAgICAgPFZlcnNpb25zIC8+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FBU0MsU0FBUyxRQUFRLHNCQUFzQjtBQUNoRCxTQUFTQyxXQUFXLFFBQVEsaUJBQWlCO0FBQzdDLFNBQ0VDLEdBQUcsRUFDSEMsSUFBSSxFQUNKQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxPQUFPLFFBQ0YsVUFBVTtBQUNqQixTQUFTQyxLQUFLLFFBQVEsYUFBYTtBQUNuQyxTQUFTQyxDQUFDLFFBQVEsS0FBSztBQUN2QixTQUNFQyxxQkFB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