__vite_ssr_exportName__("default", () => { try { return __vite_ssr_export_default__ } catch {} });
const SPRITE   = 64;
const BORDER   = 2;
const GAP      = 3;
const CELL     = SPRITE + BORDER * 2 + GAP;
const MAX_IMGS = 256;

const SORT_COL_ID    = 'mosaic-sort-select';
const SORT_DIR_ID    = 'mosaic-sort-dir';
const PICK_ID        = 'mosaic-pick-mode';
const PICK_SAMPLE_ALL = 'sample_all';
const PICK_TOP_ALL   = 'top_all';
const DISPLAY_ID     = 'mosaic-display-mode';
const DISPLAY_NORM   = 'normalized';
const DISPLAY_DENORM = 'denormalized';

const __vite_ssr_export_default__ = {
  id: 'mosaic',
  required_inputs: ['thumbnail'],
  inputs: ['thumbnail_norm_min', 'thumbnail_norm_max', 'thumbnail_dtype', 'any metric column', 'name'],
  group: 'Visualization',
  scope: 'image',
  label: 'Image Thumbnails',
  shortLabel: 'Thumbnails',
  info: [
    'Displays a **thumbnail mosaic**, one thumbnail per image.',
    '',
    '- Thumbnails are generated from the central slice in all non-XY, non-RGB dimensions.',
    '- Sorting by a numeric column can reveal visual trends.',
    '- Border colors indicate the group of each image.',
    '- **Hover** over an image to see its filename.',
  ].join('\n'),

  requires(schema) {
    const hasMetric = schema.metricCols.some(c => schema.allCols.includes(c));
    return schema.blobCols.includes('thumbnail') && hasMetric;
  },

  async overviewMessage(ctx) {
    try {
      const sortableMetrics = ctx.schema.metricCols.filter(c => ctx.schema.allCols.includes(c));
      const defaultSort = sortableMetrics.includes('mean_intensity') ? 'mean_intensity' : (sortableMetrics[0] ?? null);
      const [{ n }] = await ctx.queryRows(`SELECT COUNT(*) AS n FROM pp_data ${ctx.where}`);
      if (defaultSort) return `Thumbnails sorted by <strong>${ctx.plot.niceName(defaultSort)}</strong>.`;
      const count = Math.min(Number(n ?? 0), MAX_IMGS);
      return `A mosaic of <strong>${count.toLocaleString()}</strong> thumbnail${count === 1 ? '' : 's'}.`;
    } catch { return null; }
  },

  async overviewPlot(container, ctx) {
    const { q, groupExpr: geFn } = ctx.sql;
    const sortableMetrics = ctx.schema.metricCols.filter(c => ctx.schema.allCols.includes(c));
    const metricCol = sortableMetrics.includes('mean_intensity') ? 'mean_intensity' : (sortableMetrics[0] ?? null);
    const N = 16;
    const order  = metricCol ? `ORDER BY ${q(metricCol)} DESC NULLS LAST` : '';
    const result = await ctx.query(`SELECT ${geFn()}, "thumbnail" FROM pp_data ${ctx.where} ${order} LIMIT ${N}`);
    if (!Number(result?.numRows ?? 0)) return false;

    const items = tableToItems(result, { hoverCol: null, hasSort: false, hasNorm: false });
    if (!items.length) return false;

    const perRow = Math.ceil(Math.sqrt(items.length));
    const nRows  = Math.ceil(items.length / perRow);
    const W = perRow * CELL, H = nRows * CELL;
    const canvas = makeCanvas(W, H);
    const c2d = canvas.getContext('2d');
    canvas.style.cssText = 'image-rendering:pixelated;max-width:100%;max-height:100%;display:block';
    c2d.clearRect(0, 0, W, H);
    for (let i = 0; i < items.length; i++) {
      const col = i % perRow, row = Math.floor(i / perRow);
      const x = col * CELL, y = row * CELL, tile = CELL - GAP;
      c2d.fillStyle = ctx.color.group(items[i].group);
      c2d.fillRect(x, y, tile, tile);
      c2d.clearRect(x + BORDER, y + BORDER, SPRITE, SPRITE);
      if (items[i].thumb?.kind === 'raw') ctx.data.drawThumbnailRGBA(c2d, items[i].thumb.data, x + BORDER, y + BORDER);
    };
    container.style.display = 'flex';
    container.style.alignItems = 'center';
    container.style.justifyContent = 'center';
    container.appendChild(canvas);
    return true;
  },

  async render(container, ctx) {
    const sortableMetrics = ctx.schema.metricCols.filter(c => ctx.schema.allCols.includes(c));
    const hasNormCols =
      ctx.schema.allCols.includes('thumbnail_norm_min') &&
      ctx.schema.allCols.includes('thumbnail_norm_max') &&
      ctx.schema.allCols.includes('thumbnail_dtype');

    const defaultSort = sortableMetrics.includes('mean_intensity') ? 'mean_intensity' : (sortableMetrics[0] ?? '');

    const controlRow = document.createElement('div');
    controlRow.style.cssText = 'display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap';
    controlRow.innerHTML = `
      <label for="${PICK_ID}" style="white-space:nowrap;font-weight:500;font-size:14px">Pick:</label>
      <select id="${PICK_ID}" class="form-select form-select-sm" style="max-width:220px">
        <option value="${PICK_TOP_ALL}" selected>Top ${MAX_IMGS} by metric</option>
        <option value="${PICK_SAMPLE_ALL}">Random ${MAX_IMGS}</option>
      </select>
      <label for="${SORT_COL_ID}" style="white-space:nowrap;font-weight:500;font-size:14px">Sort mosaic by:</label>
      <select id="${SORT_COL_ID}" class="form-select form-select-sm" style="max-width:260px">
        ${sortableMetrics.map(c => `<option value="${ctx.plot.escapeHtml(c)}"${c === defaultSort ? ' selected' : ''}>${ctx.plot.escapeHtml(c)}</option>`).join('')}
      </select>
      <select id="${SORT_DIR_ID}" class="form-select form-select-sm" style="max-width:160px">
        <option value="asc">Ascending</option>
        <option value="desc" selected>Descending</option>
      </select>
      ${hasNormCols ? `
        <div style="display:flex;align-items:center;gap:8px;margin-left:8px">
          <span style="white-space:nowrap;font-weight:500;font-size:14px">Display:</span>
          <label style="display:flex;align-items:center;gap:6px;margin:0">
            <input type="radio" name="${DISPLAY_ID}" value="${DISPLAY_NORM}" checked />
            <span style="font-size:14px">Normalised</span>
          </label>
          <label style="display:flex;align-items:center;gap:6px;margin:0">
            <input type="radio" name="${DISPLAY_ID}" value="${DISPLAY_DENORM}" />
            <span style="font-size:14px">Denormalised</span>
          </label>
        </div>` : ``}
    `;
    container.appendChild(controlRow);

    const plotContainer = document.createElement('div');
    container.appendChild(plotContainer);

    const getDisplayMode = () => {
      if (!hasNormCols) return DISPLAY_NORM;
      return controlRow.querySelector(`input[name="${DISPLAY_ID}"]:checked`)?.value || DISPLAY_NORM;
    };
    const getPickMode = () => document.getElementById(PICK_ID)?.value || PICK_TOP_ALL;
    const getSortDir  = () => document.getElementById(SORT_DIR_ID)?.value || 'desc';

    const _loadMosaic = (col, dm, opts) => {
      plotContainer.innerHTML = '<div class="text-center p-4"><div class="spinner-border spinner-border-sm text-secondary me-2" role="status"></div><span class="text-muted small">Loading thumbnails…</span></div>';
      return renderMosaic(plotContainer, ctx, col, dm, opts).catch(err => {
        plotContainer.innerHTML = `<div class="text-danger small p-2">${err.message}</div>`;
        console.error('[mosaic] render error:', err);
      });
    };

    const refresh = () => _loadMosaic(
      document.getElementById(SORT_COL_ID).value,
      getDisplayMode(),
      { pickMode: getPickMode(), sortDir: getSortDir() },
    );

    _loadMosaic(defaultSort, getDisplayMode(), { pickMode: getPickMode(), sortDir: getSortDir() });
    document.getElementById(SORT_COL_ID).onchange = refresh;
    document.getElementById(SORT_DIR_ID).onchange = refresh;
    document.getElementById(PICK_ID).onchange     = refresh;
    if (hasNormCols) {
      for (const el of controlRow.querySelectorAll(`input[name="${DISPLAY_ID}"]`)) el.onchange = refresh;
    }
  },
};

async function renderMosaic(container, ctx, sortCol, displayMode = DISPLAY_NORM, { pickMode = PICK_TOP_ALL, sortDir = 'desc' } = {}) {
  container.innerHTML = '';

  const sortableMetrics = ctx.schema.metricCols.filter(c => ctx.schema.allCols.includes(c));
  const metricCol = (sortCol && ctx.schema.allCols.includes(sortCol)) ? sortCol : (sortableMetrics[0] ?? null);
  const mode = String(pickMode);

  if (mode !== PICK_TOP_ALL && mode !== PICK_SAMPLE_ALL) {
    container.innerHTML = '<div class="no-data">Invalid mosaic mode.</div>'; return;
  };
  if (mode === PICK_TOP_ALL && !metricCol) {
    container.innerHTML = '<div class="no-data">No numeric metric column for ordering.</div>'; return;
  };

  const items = await pickMosaicItems(ctx, { metricCol, mode, sortDir });
  if (!items.length) { container.innerHTML = '<div class="no-data">No thumbnail data.</div>'; return; };

  // A reservoir sample comes back unordered; sort it by the metric so the grid
  // still reads as a visual trend.
  if (mode === PICK_SAMPLE_ALL && metricCol) {
    const dirMul = String(sortDir).toLowerCase() === 'desc' ? -1 : 1;
    items.sort((a, b) => dirMul * ((a.sort ?? 0) - (b.sort ?? 0)));
  };

  const { canvas, perRow } = drawMosaicCanvas(items, ctx, displayMode);
  container.style.position = 'relative';
  container.appendChild(canvas);
  attachTooltip(container, canvas, items, perRow, ctx);

  const present = new Set(items.map(it => it.group));
  const presentGroups = ctx.groups.filter(g => present.has(g));
  if (presentGroups.length > 1) ctx.plot.renderDomGroupLegend?.(container, { groups: presentGroups });

  if (items.length === MAX_IMGS && ctx.filteredCount > MAX_IMGS) {
    const note = document.createElement('p');
    note.className = 'text-muted small mt-1 mb-0';
    note.textContent = `Showing ${MAX_IMGS} of ${ctx.filteredCount.toLocaleString()} images.`;
    container.appendChild(note);
  }
}

// Up to MAX_IMGS thumbnails (+ group / hover label / sort / norm columns), either
// the top by metric or a random sample. When a row-id column exists, pick ids
// first and join the blobs in a second step (much faster than scanning blobs).
async function pickMosaicItems(ctx, { metricCol, mode, sortDir }) {
  const { q, groupExpr: geFn } = ctx.sql;
  const dir = String(sortDir).toLowerCase() === 'desc' ? 'DESC' : 'ASC';

  const hoverCol = ctx.schema.allCols.includes('name') ? 'name'
    : ctx.schema.allCols.includes('imported_path_short') ? 'imported_path_short' : null;
  const hasNorm = ctx.schema.allCols.includes('thumbnail_norm_min') &&
                  ctx.schema.allCols.includes('thumbnail_norm_max') &&
                  ctx.schema.allCols.includes('thumbnail_dtype');
  const cols = `${geFn()}, "thumbnail", "file_row_number" AS __frn__`
    + (hoverCol ? `, ${q(hoverCol)} AS __label__` : '')
    + (metricCol ? `, ${q(metricCol)} AS __sort__` : '')
    + (hasNorm ? `, "thumbnail_norm_min" AS __tn_min__, "thumbnail_norm_max" AS __tn_max__, "thumbnail_dtype" AS __tn_dtype__` : '');
  const limit = mode === PICK_TOP_ALL
    ? `ORDER BY ${q(metricCol)} ${dir} NULLS LAST LIMIT ${MAX_IMGS}`
    : `USING SAMPLE ${MAX_IMGS} ROWS (reservoir, 42)`;
  const toItems = (result) =>
    Number(result?.numRows ?? 0) ? tableToItems(result, { hoverCol, hasSort: Boolean(metricCol), hasNorm }) : [];

  const idCol = ctx.schema.rowIdColumn ?? (ctx.schema.allCols.includes('row_index') ? 'row_index' : null);
  if (!idCol) {
    return toItems(await ctx.query(`SELECT ${cols} FROM pp_data ${ctx.where} ${limit}`));
  };

  const idRows = await ctx.queryRows(`SELECT ${rowIdSql(idCol)} AS __rid__ FROM pp_data ${ctx.where} ${limit}`);
  const rids = (idRows ?? []).map(r => Number(r.__rid__)).filter(Number.isFinite);
  if (!rids.length) return [];
  return toItems(await ctx.query(`
    WITH ids AS (SELECT * FROM UNNEST([${rids.join(', ')}]) WITH ORDINALITY AS t(rid, ord))
    SELECT ids.ord AS __ord__, ${cols}
    FROM pp_data JOIN ids ON ${rowIdSql(idCol)} = ids.rid ORDER BY ids.ord
  `));
}

// Draw the thumbnails into a square-ish canvas grid; returns { canvas, perRow }.
function drawMosaicCanvas(items, ctx, displayMode) {
  const perRow = Math.ceil(Math.sqrt(items.length));
  const nRows  = Math.ceil(items.length / perRow);
  const W = perRow * CELL, H = nRows * CELL;
  const canvas = makeCanvas(W, H);
  const c2d = canvas.getContext('2d');
  canvas.style.imageRendering = 'pixelated';
  canvas.style.maxWidth = '100%';
  c2d.clearRect(0, 0, W, H);

  items.forEach((it, i) => {
    const x = (i % perRow) * CELL, y = Math.floor(i / perRow) * CELL;
    c2d.fillStyle = ctx.color.group(it.group);
    c2d.fillRect(x, y, CELL - GAP, CELL - GAP);
    c2d.clearRect(x + BORDER, y + BORDER, SPRITE, SPRITE);
    if (it.thumb?.kind === 'raw') {
      const raw = (displayMode === DISPLAY_DENORM && it.tnMin != null && it.tnMax != null && it.tnDtype)
        ? denormalizeThumbnailRGBA(it.thumb.data, it.tnMin, it.tnMax, it.tnDtype)
        : it.thumb.data;
      ctx.data.drawThumbnailRGBA(c2d, raw, x + BORDER, y + BORDER);
    }
  });
  return { canvas, perRow };
}

// Floating filename tooltip that follows the cursor over the mosaic tiles, plus
// click-to-inspect: clicking a tile opens the single-file point inspector for it.
function attachTooltip(container, canvas, items, perRow, ctx) {
  const tip = document.createElement('div');
  tip.style.cssText = ['position:absolute','display:none','pointer-events:none','z-index:10','background:rgba(0,0,0,0.85)','color:white','padding:6px 8px','border-radius:6px','font-size:12px','max-width:360px','white-space:nowrap','overflow:hidden','text-overflow:ellipsis'].join(';');
  container.appendChild(tip);

  const tileSize = CELL - GAP;
  // Index of the tile under a mouse event, or -1 if between/outside tiles.
  const tileAt = e => {
    const rect = canvas.getBoundingClientRect();
    const px = (e.clientX - rect.left) * (canvas.width / rect.width);
    const py = (e.clientY - rect.top)  * (canvas.height / rect.height);
    const col = Math.floor(px / CELL), row = Math.floor(py / CELL);
    const localX = px - col * CELL, localY = py - row * CELL;
    const idx = row * perRow + col;
    if (col < 0 || row < 0 || localX >= tileSize || localY >= tileSize || idx < 0 || idx >= items.length) return -1;
    return idx;
  };
  canvas.onmousemove = e => {
    const idx = tileAt(e);
    if (idx < 0) { tip.style.display = 'none'; return; };
    const rect = canvas.getBoundingClientRect();
    tip.textContent = items[idx].label || items[idx].group;
    tip.style.left = `${Math.min(rect.width - 10, (e.clientX - rect.left) + 12)}px`;
    tip.style.top  = `${Math.min(rect.height - 10, (e.clientY - rect.top) + 12)}px`;
    tip.style.display = 'block';
  };
  canvas.onmouseleave = () => { tip.style.display = 'none'; };

  if (ctx?.openInspector) {
    canvas.style.cursor = 'pointer';
    canvas.onclick = e => {
      const idx = tileAt(e);
      const frn = idx >= 0 ? items[idx].frn : null;
      if (frn != null) ctx.openInspector(Number(frn));
    };
  }
}

function rowIdSql(name) {
  if (!name) return '';
  return name === 'rowid' ? 'rowid' : `"${String(name).replaceAll('"', '""')}"`;
}

function makeCanvas(w, h) {
  const c = document.createElement('canvas');
  c.width = w; c.height = h;
  return c;
}

function extractBytes(val) {
  if (!val) return null;
  if (val instanceof Uint8Array) return val;
  if (Array.isArray(val)) return Uint8Array.from(val, v => Number(v) & 0xff);
  if (val.values instanceof Uint8Array) return val.values;
  return null;
}

function extractThumbnail(val) {
  const bytes = extractBytes(val);
  if (!bytes) return null;
  if (bytes.length !== SPRITE * SPRITE * 4) return null;
  return { kind: 'raw', data: bytes };
}

function colIndex(table, name) {
  const fields = table?.schema?.fields ?? [];
  for (let i = 0; i < fields.length; i++) if (fields[i]?.name === name) return i;
  return -1;
}

function getCol(table, name) {
  const idx = colIndex(table, name);
  if (idx < 0) return null;
  return typeof table.getChildAt === 'function' ? table.getChildAt(idx) : null;
}

function tableToItems(table, { hoverCol, hasSort, hasNorm }) {
  const n     = Number(table.numRows ?? 0);
  const gCol  = getCol(table, '__group__');
  const tCol  = getCol(table, 'thumbnail');
  const fCol  = getCol(table, '__frn__');
  const oCol  = getCol(table, '__ord__');
  const lCol  = hoverCol ? getCol(table, '__label__') : null;
  const sCol  = hasSort ? getCol(table, '__sort__') : null;
  const minCol = hasNorm ? getCol(table, '__tn_min__') : null;
  const maxCol = hasNorm ? getCol(table, '__tn_max__') : null;
  const dtCol  = hasNorm ? getCol(table, '__tn_dtype__') : null;
  const out = [];
  for (let i = 0; i < n; i++) {
    const group = gCol ? String(gCol.get(i)) : 'all';
    const bytes = tCol ? tCol.get(i) : null;
    const thumb = extractThumbnail(bytes);
    if (!thumb) continue;
    out.push({ ord: oCol ? Number(oCol.get(i)) : null, group, thumb, frn: fCol ? Number(fCol.get(i)) : null, label: lCol ? String(lCol.get(i) ?? '') : '', sort: sCol ? Number(sCol.get(i) ?? 0) : 0, tnMin: minCol ? minCol.get(i) : null, tnMax: maxCol ? maxCol.get(i) : null, tnDtype: dtCol ? String(dtCol.get(i) ?? '') : null });
  };
  if (out.some(it => it.ord != null && Number.isFinite(it.ord))) out.sort((a, b) => (a.ord ?? 0) - (b.ord ?? 0));
  return out;
}

function denormalizeThumbnailRGBA(rgbaBytes, normMin, normMax, dtypeName) {
  const mm = Number(normMin), mx = Number(normMax);
  if (!Number.isFinite(mm) || !Number.isFinite(mx)) return rgbaBytes;
  const info = dtypeInfo(dtypeName);
  if (!info) return rgbaBytes;
  const { lo, hi } = info;
  const scale = (mx - mm) / 255.0;
  const denom = (hi - lo) || 1;
  const out = new Uint8Array(rgbaBytes);
  for (let i = 0; i < SPRITE * SPRITE; i++) {
    const o = i * 4;
    if (out[o + 3] < 1) continue;
    for (let c = 0; c < 3; c++) { const v = out[o+c]; out[o+c] = clamp8((v * scale + mm - lo) / denom * 255.0); }
  };
  return out;
}

function clamp8(x) { if (x <= 0) return 0; if (x >= 255) return 255; return x | 0; }

function dtypeInfo(name) {
  switch (String(name || '').toLowerCase()) {
    case 'uint8':  return { lo: 0, hi: 255 };
    case 'int8':   return { lo: -128, hi: 127 };
    case 'uint16': return { lo: 0, hi: 65535 };
    case 'int16':  return { lo: -32768, hi: 32767 };
    case 'uint32': return { lo: 0, hi: 4294967295 };
    case 'int32':  return { lo: -2147483648, hi: 2147483647 };
    default:       return null;
  }
}

// The point inspector (viewer/src/point-inspector.js) now renders the image and
// its diagnostic map inline, so the mosaic no longer registers inspector
// contributors for them - it stays focused on the thumbnail-grid dashboard.
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBsdWdpbl9tb3NhaWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU1BSSVRFICAgPSA2NDtcbmNvbnN0IEJPUkRFUiAgID0gMjtcbmNvbnN0IEdBUCAgICAgID0gMztcbmNvbnN0IENFTEwgICAgID0gU1BSSVRFICsgQk9SREVSICogMiArIEdBUDtcbmNvbnN0IE1BWF9JTUdTID0gMjU2O1xuXG5jb25zdCBTT1JUX0NPTF9JRCAgICA9ICdtb3NhaWMtc29ydC1zZWxlY3QnO1xuY29uc3QgU09SVF9ESVJfSUQgICAgPSAnbW9zYWljLXNvcnQtZGlyJztcbmNvbnN0IFBJQ0tfSUQgICAgICAgID0gJ21vc2FpYy1waWNrLW1vZGUnO1xuY29uc3QgUElDS19TQU1QTEVfQUxMID0gJ3NhbXBsZV9hbGwnO1xuY29uc3QgUElDS19UT1BfQUxMICAgPSAndG9wX2FsbCc7XG5jb25zdCBESVNQTEFZX0lEICAgICA9ICdtb3NhaWMtZGlzcGxheS1tb2RlJztcbmNvbnN0IERJU1BMQVlfTk9STSAgID0gJ25vcm1hbGl6ZWQnO1xuY29uc3QgRElTUExBWV9ERU5PUk0gPSAnZGVub3JtYWxpemVkJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpZDogJ21vc2FpYycsXG4gIHJlcXVpcmVkX2lucHV0czogWyd0aHVtYm5haWwnXSxcbiAgaW5wdXRzOiBbJ3RodW1ibmFpbF9ub3JtX21pbicsICd0aHVtYm5haWxfbm9ybV9tYXgnLCAndGh1bWJuYWlsX2R0eXBlJywgJ2FueSBtZXRyaWMgY29sdW1uJywgJ25hbWUnXSxcbiAgZ3JvdXA6ICdWaXN1YWxpemF0aW9uJyxcbiAgc2NvcGU6ICdpbWFnZScsXG4gIGxhYmVsOiAnSW1hZ2UgVGh1bWJuYWlscycsXG4gIHNob3J0TGFiZWw6ICdUaHVtYm5haWxzJyxcbiAgaW5mbzogW1xuICAgICdEaXNwbGF5cyBhICoqdGh1bWJuYWlsIG1vc2FpYyoqLCBvbmUgdGh1bWJuYWlsIHBlciBpbWFnZS4nLFxuICAgICcnLFxuICAgICctIFRodW1ibmFpbHMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBjZW50cmFsIHNsaWNlIGluIGFsbCBub24tWFksIG5vbi1SR0IgZGltZW5zaW9ucy4nLFxuICAgICctIFNvcnRpbmcgYnkgYSBudW1lcmljIGNvbHVtbiBjYW4gcmV2ZWFsIHZpc3VhbCB0cmVuZHMuJyxcbiAgICAnLSBCb3JkZXIgY29sb3JzIGluZGljYXRlIHRoZSBncm91cCBvZiBlYWNoIGltYWdlLicsXG4gICAgJy0gKipIb3ZlcioqIG92ZXIgYW4gaW1hZ2UgdG8gc2VlIGl0cyBmaWxlbmFtZS4nLFxuICBdLmpvaW4oJ1xcbicpLFxuXG4gIHJlcXVpcmVzKHNjaGVtYSkge1xuICAgIGNvbnN0IGhhc01ldHJpYyA9IHNjaGVtYS5tZXRyaWNDb2xzLnNvbWUoYyA9PiBzY2hlbWEuYWxsQ29scy5pbmNsdWRlcyhjKSk7XG4gICAgcmV0dXJuIHNjaGVtYS5ibG9iQ29scy5pbmNsdWRlcygndGh1bWJuYWlsJykgJiYgaGFzTWV0cmljO1xuICB9LFxuXG4gIGFzeW5jIG92ZXJ2aWV3TWVzc2FnZShjdHgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc29ydGFibGVNZXRyaWNzID0gY3R4LnNjaGVtYS5tZXRyaWNDb2xzLmZpbHRlcihjID0+IGN0eC5zY2hlbWEuYWxsQ29scy5pbmNsdWRlcyhjKSk7XG4gICAgICBjb25zdCBkZWZhdWx0U29ydCA9IHNvcnRhYmxlTWV0cmljcy5pbmNsdWRlcygnbWVhbl9pbnRlbnNpdHknKSA/ICdtZWFuX2ludGVuc2l0eScgOiAoc29ydGFibGVNZXRyaWNzWzBdID8/IG51bGwpO1xuICAgICAgY29uc3QgW3sgbiB9XSA9IGF3YWl0IGN0eC5xdWVyeVJvd3MoYFNFTEVDVCBDT1VOVCgqKSBBUyBuIEZST00gcHBfZGF0YSAke2N0eC53aGVyZX1gKTtcbiAgICAgIGlmIChkZWZhdWx0U29ydCkgcmV0dXJuIGBUaHVtYm5haWxzIHNvcnRlZCBieSA8c3Ryb25nPiR7Y3R4LnBsb3QubmljZU5hbWUoZGVmYXVsdFNvcnQpfTwvc3Ryb25nPi5gO1xuICAgICAgY29uc3QgY291bnQgPSBNYXRoLm1pbihOdW1iZXIobiA/PyAwKSwgTUFYX0lNR1MpO1xuICAgICAgcmV0dXJuIGBBIG1vc2FpYyBvZiA8c3Ryb25nPiR7Y291bnQudG9Mb2NhbGVTdHJpbmcoKX08L3N0cm9uZz4gdGh1bWJuYWlsJHtjb3VudCA9PT0gMSA/ICcnIDogJ3MnfS5gO1xuICAgIH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfVxuICB9LFxuXG4gIGFzeW5jIG92ZXJ2aWV3UGxvdChjb250YWluZXIsIGN0eCkge1xuICAgIGNvbnN0IHsgcSwgZ3JvdXBFeHByOiBnZUZuIH0gPSBjdHguc3FsO1xuICAgIGNvbnN0IHNvcnRhYmxlTWV0cmljcyA9IGN0eC5zY2hlbWEubWV0cmljQ29scy5maWx0ZXIoYyA9PiBjdHguc2NoZW1hLmFsbENvbHMuaW5jbHVkZXMoYykpO1xuICAgIGNvbnN0IG1ldHJpY0NvbCA9IHNvcnRhYmxlTWV0cmljcy5pbmNsdWRlcygnbWVhbl9pbnRlbnNpdHknKSA/ICdtZWFuX2ludGVuc2l0eScgOiAoc29ydGFibGVNZXRyaWNzWzBdID8/IG51bGwpO1xuICAgIGNvbnN0IE4gPSAxNjtcbiAgICBjb25zdCBvcmRlciAgPSBtZXRyaWNDb2wgPyBgT1JERVIgQlkgJHtxKG1ldHJpY0NvbCl9IERFU0MgTlVMTFMgTEFTVGAgOiAnJztcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjdHgucXVlcnkoYFNFTEVDVCAke2dlRm4oKX0sIFwidGh1bWJuYWlsXCIgRlJPTSBwcF9kYXRhICR7Y3R4LndoZXJlfSAke29yZGVyfSBMSU1JVCAke059YCk7XG4gICAgaWYgKCFOdW1iZXIocmVzdWx0Py5udW1Sb3dzID8/IDApKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRhYmxlVG9JdGVtcyhyZXN1bHQsIHsgaG92ZXJDb2w6IG51bGwsIGhhc1NvcnQ6IGZhbHNlLCBoYXNOb3JtOiBmYWxzZSB9KTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGVyUm93ID0gTWF0aC5jZWlsKE1hdGguc3FydChpdGVtcy5sZW5ndGgpKTtcbiAgICBjb25zdCBuUm93cyAgPSBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gcGVyUm93KTtcbiAgICBjb25zdCBXID0gcGVyUm93ICogQ0VMTCwgSCA9IG5Sb3dzICogQ0VMTDtcbiAgICBjb25zdCBjYW52YXMgPSBtYWtlQ2FudmFzKFcsIEgpO1xuICAgIGNvbnN0IGMyZCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNhbnZhcy5zdHlsZS5jc3NUZXh0ID0gJ2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWQ7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2snO1xuICAgIGMyZC5jbGVhclJlY3QoMCwgMCwgVywgSCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gaSAlIHBlclJvdywgcm93ID0gTWF0aC5mbG9vcihpIC8gcGVyUm93KTtcbiAgICAgIGNvbnN0IHggPSBjb2wgKiBDRUxMLCB5ID0gcm93ICogQ0VMTCwgdGlsZSA9IENFTEwgLSBHQVA7XG4gICAgICBjMmQuZmlsbFN0eWxlID0gY3R4LmNvbG9yLmdyb3VwKGl0ZW1zW2ldLmdyb3VwKTtcbiAgICAgIGMyZC5maWxsUmVjdCh4LCB5LCB0aWxlLCB0aWxlKTtcbiAgICAgIGMyZC5jbGVhclJlY3QoeCArIEJPUkRFUiwgeSArIEJPUkRFUiwgU1BSSVRFLCBTUFJJVEUpO1xuICAgICAgaWYgKGl0ZW1zW2ldLnRodW1iPy5raW5kID09PSAncmF3JykgY3R4LmRhdGEuZHJhd1RodW1ibmFpbFJHQkEoYzJkLCBpdGVtc1tpXS50aHVtYi5kYXRhLCB4ICsgQk9SREVSLCB5ICsgQk9SREVSKTtcbiAgICB9XG4gICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgY29udGFpbmVyLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICBjb250YWluZXIuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBhc3luYyByZW5kZXIoY29udGFpbmVyLCBjdHgpIHtcbiAgICBjb25zdCBzb3J0YWJsZU1ldHJpY3MgPSBjdHguc2NoZW1hLm1ldHJpY0NvbHMuZmlsdGVyKGMgPT4gY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKGMpKTtcbiAgICBjb25zdCBoYXNOb3JtQ29scyA9XG4gICAgICBjdHguc2NoZW1hLmFsbENvbHMuaW5jbHVkZXMoJ3RodW1ibmFpbF9ub3JtX21pbicpICYmXG4gICAgICBjdHguc2NoZW1hLmFsbENvbHMuaW5jbHVkZXMoJ3RodW1ibmFpbF9ub3JtX21heCcpICYmXG4gICAgICBjdHguc2NoZW1hLmFsbENvbHMuaW5jbHVkZXMoJ3RodW1ibmFpbF9kdHlwZScpO1xuXG4gICAgY29uc3QgZGVmYXVsdFNvcnQgPSBzb3J0YWJsZU1ldHJpY3MuaW5jbHVkZXMoJ21lYW5faW50ZW5zaXR5JykgPyAnbWVhbl9pbnRlbnNpdHknIDogKHNvcnRhYmxlTWV0cmljc1swXSA/PyAnJyk7XG5cbiAgICBjb25zdCBjb250cm9sUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udHJvbFJvdy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwJztcbiAgICBjb250cm9sUm93LmlubmVySFRNTCA9IGBcbiAgICAgIDxsYWJlbCBmb3I9XCIke1BJQ0tfSUR9XCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNHB4XCI+UGljazo8L2xhYmVsPlxuICAgICAgPHNlbGVjdCBpZD1cIiR7UElDS19JRH1cIiBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCIgc3R5bGU9XCJtYXgtd2lkdGg6MjIwcHhcIj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7UElDS19UT1BfQUxMfVwiIHNlbGVjdGVkPlRvcCAke01BWF9JTUdTfSBieSBtZXRyaWM8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7UElDS19TQU1QTEVfQUxMfVwiPlJhbmRvbSAke01BWF9JTUdTfTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8bGFiZWwgZm9yPVwiJHtTT1JUX0NPTF9JRH1cIiBzdHlsZT1cIndoaXRlLXNwYWNlOm5vd3JhcDtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjE0cHhcIj5Tb3J0IG1vc2FpYyBieTo8L2xhYmVsPlxuICAgICAgPHNlbGVjdCBpZD1cIiR7U09SVF9DT0xfSUR9XCIgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIHN0eWxlPVwibWF4LXdpZHRoOjI2MHB4XCI+XG4gICAgICAgICR7c29ydGFibGVNZXRyaWNzLm1hcChjID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtjdHgucGxvdC5lc2NhcGVIdG1sKGMpfVwiJHtjID09PSBkZWZhdWx0U29ydCA/ICcgc2VsZWN0ZWQnIDogJyd9PiR7Y3R4LnBsb3QuZXNjYXBlSHRtbChjKX08L29wdGlvbj5gKS5qb2luKCcnKX1cbiAgICAgIDwvc2VsZWN0PlxuICAgICAgPHNlbGVjdCBpZD1cIiR7U09SVF9ESVJfSUR9XCIgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIHN0eWxlPVwibWF4LXdpZHRoOjE2MHB4XCI+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJhc2NcIj5Bc2NlbmRpbmc8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRlc2NcIiBzZWxlY3RlZD5EZXNjZW5kaW5nPC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICAgICR7aGFzTm9ybUNvbHMgPyBgXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7bWFyZ2luLWxlZnQ6OHB4XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNHB4XCI+RGlzcGxheTo8L3NwYW4+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbjowXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIiR7RElTUExBWV9JRH1cIiB2YWx1ZT1cIiR7RElTUExBWV9OT1JNfVwiIGNoZWNrZWQgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE0cHhcIj5Ob3JtYWxpc2VkPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbjowXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIiR7RElTUExBWV9JRH1cIiB2YWx1ZT1cIiR7RElTUExBWV9ERU5PUk19XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE0cHhcIj5EZW5vcm1hbGlzZWQ8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+YCA6IGBgfVxuICAgIGA7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2xSb3cpO1xuXG4gICAgY29uc3QgcGxvdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwbG90Q29udGFpbmVyKTtcblxuICAgIGNvbnN0IGdldERpc3BsYXlNb2RlID0gKCkgPT4ge1xuICAgICAgaWYgKCFoYXNOb3JtQ29scykgcmV0dXJuIERJU1BMQVlfTk9STTtcbiAgICAgIHJldHVybiBjb250cm9sUm93LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W25hbWU9XCIke0RJU1BMQVlfSUR9XCJdOmNoZWNrZWRgKT8udmFsdWUgfHwgRElTUExBWV9OT1JNO1xuICAgIH07XG4gICAgY29uc3QgZ2V0UGlja01vZGUgPSAoKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQSUNLX0lEKT8udmFsdWUgfHwgUElDS19UT1BfQUxMO1xuICAgIGNvbnN0IGdldFNvcnREaXIgID0gKCkgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU09SVF9ESVJfSUQpPy52YWx1ZSB8fCAnZGVzYyc7XG5cbiAgICBjb25zdCBfbG9hZE1vc2FpYyA9IChjb2wsIGRtLCBvcHRzKSA9PiB7XG4gICAgICBwbG90Q29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcC00XCI+PGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtc2Vjb25kYXJ5IG1lLTJcIiByb2xlPVwic3RhdHVzXCI+PC9kaXY+PHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+TG9hZGluZyB0aHVtYm5haWxz4oCmPC9zcGFuPjwvZGl2Pic7XG4gICAgICByZXR1cm4gcmVuZGVyTW9zYWljKHBsb3RDb250YWluZXIsIGN0eCwgY29sLCBkbSwgb3B0cykuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgcGxvdENvbnRhaW5lci5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIHAtMlwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+YDtcbiAgICAgICAgY29uc29sZS5lcnJvcignW21vc2FpY10gcmVuZGVyIGVycm9yOicsIGVycik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVmcmVzaCA9ICgpID0+IF9sb2FkTW9zYWljKFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU09SVF9DT0xfSUQpLnZhbHVlLFxuICAgICAgZ2V0RGlzcGxheU1vZGUoKSxcbiAgICAgIHsgcGlja01vZGU6IGdldFBpY2tNb2RlKCksIHNvcnREaXI6IGdldFNvcnREaXIoKSB9LFxuICAgICk7XG5cbiAgICBfbG9hZE1vc2FpYyhkZWZhdWx0U29ydCwgZ2V0RGlzcGxheU1vZGUoKSwgeyBwaWNrTW9kZTogZ2V0UGlja01vZGUoKSwgc29ydERpcjogZ2V0U29ydERpcigpIH0pO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNPUlRfQ09MX0lEKS5vbmNoYW5nZSA9IHJlZnJlc2g7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU09SVF9ESVJfSUQpLm9uY2hhbmdlID0gcmVmcmVzaDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChQSUNLX0lEKS5vbmNoYW5nZSAgICAgPSByZWZyZXNoO1xuICAgIGlmIChoYXNOb3JtQ29scykge1xuICAgICAgZm9yIChjb25zdCBlbCBvZiBjb250cm9sUm93LnF1ZXJ5U2VsZWN0b3JBbGwoYGlucHV0W25hbWU9XCIke0RJU1BMQVlfSUR9XCJdYCkpIGVsLm9uY2hhbmdlID0gcmVmcmVzaDtcbiAgICB9XG4gIH0sXG59O1xuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJNb3NhaWMoY29udGFpbmVyLCBjdHgsIHNvcnRDb2wsIGRpc3BsYXlNb2RlID0gRElTUExBWV9OT1JNLCB7IHBpY2tNb2RlID0gUElDS19UT1BfQUxMLCBzb3J0RGlyID0gJ2Rlc2MnIH0gPSB7fSkge1xuICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG5cbiAgY29uc3Qgc29ydGFibGVNZXRyaWNzID0gY3R4LnNjaGVtYS5tZXRyaWNDb2xzLmZpbHRlcihjID0+IGN0eC5zY2hlbWEuYWxsQ29scy5pbmNsdWRlcyhjKSk7XG4gIGNvbnN0IG1ldHJpY0NvbCA9IChzb3J0Q29sICYmIGN0eC5zY2hlbWEuYWxsQ29scy5pbmNsdWRlcyhzb3J0Q29sKSkgPyBzb3J0Q29sIDogKHNvcnRhYmxlTWV0cmljc1swXSA/PyBudWxsKTtcbiAgY29uc3QgbW9kZSA9IFN0cmluZyhwaWNrTW9kZSk7XG5cbiAgaWYgKG1vZGUgIT09IFBJQ0tfVE9QX0FMTCAmJiBtb2RlICE9PSBQSUNLX1NBTVBMRV9BTEwpIHtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJuby1kYXRhXCI+SW52YWxpZCBtb3NhaWMgbW9kZS48L2Rpdj4nOyByZXR1cm47XG4gIH1cbiAgaWYgKG1vZGUgPT09IFBJQ0tfVE9QX0FMTCAmJiAhbWV0cmljQ29sKSB7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwibm8tZGF0YVwiPk5vIG51bWVyaWMgbWV0cmljIGNvbHVtbiBmb3Igb3JkZXJpbmcuPC9kaXY+JzsgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXRlbXMgPSBhd2FpdCBwaWNrTW9zYWljSXRlbXMoY3R4LCB7IG1ldHJpY0NvbCwgbW9kZSwgc29ydERpciB9KTtcbiAgaWYgKCFpdGVtcy5sZW5ndGgpIHsgY29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwibm8tZGF0YVwiPk5vIHRodW1ibmFpbCBkYXRhLjwvZGl2Pic7IHJldHVybjsgfVxuXG4gIC8vIEEgcmVzZXJ2b2lyIHNhbXBsZSBjb21lcyBiYWNrIHVub3JkZXJlZDsgc29ydCBpdCBieSB0aGUgbWV0cmljIHNvIHRoZSBncmlkXG4gIC8vIHN0aWxsIHJlYWRzIGFzIGEgdmlzdWFsIHRyZW5kLlxuICBpZiAobW9kZSA9PT0gUElDS19TQU1QTEVfQUxMICYmIG1ldHJpY0NvbCkge1xuICAgIGNvbnN0IGRpck11bCA9IFN0cmluZyhzb3J0RGlyKS50b0xvd2VyQ2FzZSgpID09PSAnZGVzYycgPyAtMSA6IDE7XG4gICAgaXRlbXMuc29ydCgoYSwgYikgPT4gZGlyTXVsICogKChhLnNvcnQgPz8gMCkgLSAoYi5zb3J0ID8/IDApKSk7XG4gIH1cblxuICBjb25zdCB7IGNhbnZhcywgcGVyUm93IH0gPSBkcmF3TW9zYWljQ2FudmFzKGl0ZW1zLCBjdHgsIGRpc3BsYXlNb2RlKTtcbiAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gIGF0dGFjaFRvb2x0aXAoY29udGFpbmVyLCBjYW52YXMsIGl0ZW1zLCBwZXJSb3csIGN0eCk7XG5cbiAgY29uc3QgcHJlc2VudCA9IG5ldyBTZXQoaXRlbXMubWFwKGl0ID0+IGl0Lmdyb3VwKSk7XG4gIGNvbnN0IHByZXNlbnRHcm91cHMgPSBjdHguZ3JvdXBzLmZpbHRlcihnID0+IHByZXNlbnQuaGFzKGcpKTtcbiAgaWYgKHByZXNlbnRHcm91cHMubGVuZ3RoID4gMSkgY3R4LnBsb3QucmVuZGVyRG9tR3JvdXBMZWdlbmQ/Lihjb250YWluZXIsIHsgZ3JvdXBzOiBwcmVzZW50R3JvdXBzIH0pO1xuXG4gIGlmIChpdGVtcy5sZW5ndGggPT09IE1BWF9JTUdTICYmIGN0eC5maWx0ZXJlZENvdW50ID4gTUFYX0lNR1MpIHtcbiAgICBjb25zdCBub3RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgIG5vdGUuY2xhc3NOYW1lID0gJ3RleHQtbXV0ZWQgc21hbGwgbXQtMSBtYi0wJztcbiAgICBub3RlLnRleHRDb250ZW50ID0gYFNob3dpbmcgJHtNQVhfSU1HU30gb2YgJHtjdHguZmlsdGVyZWRDb3VudC50b0xvY2FsZVN0cmluZygpfSBpbWFnZXMuYDtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobm90ZSk7XG4gIH1cbn1cblxuLy8gVXAgdG8gTUFYX0lNR1MgdGh1bWJuYWlscyAoKyBncm91cCAvIGhvdmVyIGxhYmVsIC8gc29ydCAvIG5vcm0gY29sdW1ucyksIGVpdGhlclxuLy8gdGhlIHRvcCBieSBtZXRyaWMgb3IgYSByYW5kb20gc2FtcGxlLiBXaGVuIGEgcm93LWlkIGNvbHVtbiBleGlzdHMsIHBpY2sgaWRzXG4vLyBmaXJzdCBhbmQgam9pbiB0aGUgYmxvYnMgaW4gYSBzZWNvbmQgc3RlcCAobXVjaCBmYXN0ZXIgdGhhbiBzY2FubmluZyBibG9icykuXG5hc3luYyBmdW5jdGlvbiBwaWNrTW9zYWljSXRlbXMoY3R4LCB7IG1ldHJpY0NvbCwgbW9kZSwgc29ydERpciB9KSB7XG4gIGNvbnN0IHsgcSwgZ3JvdXBFeHByOiBnZUZuIH0gPSBjdHguc3FsO1xuICBjb25zdCBkaXIgPSBTdHJpbmcoc29ydERpcikudG9Mb3dlckNhc2UoKSA9PT0gJ2Rlc2MnID8gJ0RFU0MnIDogJ0FTQyc7XG5cbiAgY29uc3QgaG92ZXJDb2wgPSBjdHguc2NoZW1hLmFsbENvbHMuaW5jbHVkZXMoJ25hbWUnKSA/ICduYW1lJ1xuICAgIDogY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKCdpbXBvcnRlZF9wYXRoX3Nob3J0JykgPyAnaW1wb3J0ZWRfcGF0aF9zaG9ydCcgOiBudWxsO1xuICBjb25zdCBoYXNOb3JtID0gY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKCd0aHVtYm5haWxfbm9ybV9taW4nKSAmJlxuICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKCd0aHVtYm5haWxfbm9ybV9tYXgnKSAmJlxuICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYS5hbGxDb2xzLmluY2x1ZGVzKCd0aHVtYm5haWxfZHR5cGUnKTtcbiAgY29uc3QgY29scyA9IGAke2dlRm4oKX0sIFwidGh1bWJuYWlsXCIsIFwiZmlsZV9yb3dfbnVtYmVyXCIgQVMgX19mcm5fX2BcbiAgICArIChob3ZlckNvbCA/IGAsICR7cShob3ZlckNvbCl9IEFTIF9fbGFiZWxfX2AgOiAnJylcbiAgICArIChtZXRyaWNDb2wgPyBgLCAke3EobWV0cmljQ29sKX0gQVMgX19zb3J0X19gIDogJycpXG4gICAgKyAoaGFzTm9ybSA/IGAsIFwidGh1bWJuYWlsX25vcm1fbWluXCIgQVMgX190bl9taW5fXywgXCJ0aHVtYm5haWxfbm9ybV9tYXhcIiBBUyBfX3RuX21heF9fLCBcInRodW1ibmFpbF9kdHlwZVwiIEFTIF9fdG5fZHR5cGVfX2AgOiAnJyk7XG4gIGNvbnN0IGxpbWl0ID0gbW9kZSA9PT0gUElDS19UT1BfQUxMXG4gICAgPyBgT1JERVIgQlkgJHtxKG1ldHJpY0NvbCl9ICR7ZGlyfSBOVUxMUyBMQVNUIExJTUlUICR7TUFYX0lNR1N9YFxuICAgIDogYFVTSU5HIFNBTVBMRSAke01BWF9JTUdTfSBST1dTIChyZXNlcnZvaXIsIDQyKWA7XG4gIGNvbnN0IHRvSXRlbXMgPSAocmVzdWx0KSA9PlxuICAgIE51bWJlcihyZXN1bHQ/Lm51bVJvd3MgPz8gMCkgPyB0YWJsZVRvSXRlbXMocmVzdWx0LCB7IGhvdmVyQ29sLCBoYXNTb3J0OiBCb29sZWFuKG1ldHJpY0NvbCksIGhhc05vcm0gfSkgOiBbXTtcblxuICBjb25zdCBpZENvbCA9IGN0eC5zY2hlbWEucm93SWRDb2x1bW4gPz8gKGN0eC5zY2hlbWEuYWxsQ29scy5pbmNsdWRlcygncm93X2luZGV4JykgPyAncm93X2luZGV4JyA6IG51bGwpO1xuICBpZiAoIWlkQ29sKSB7XG4gICAgcmV0dXJuIHRvSXRlbXMoYXdhaXQgY3R4LnF1ZXJ5KGBTRUxFQ1QgJHtjb2xzfSBGUk9NIHBwX2RhdGEgJHtjdHgud2hlcmV9ICR7bGltaXR9YCkpO1xuICB9XG5cbiAgY29uc3QgaWRSb3dzID0gYXdhaXQgY3R4LnF1ZXJ5Um93cyhgU0VMRUNUICR7cm93SWRTcWwoaWRDb2wpfSBBUyBfX3JpZF9fIEZST00gcHBfZGF0YSAke2N0eC53aGVyZX0gJHtsaW1pdH1gKTtcbiAgY29uc3QgcmlkcyA9IChpZFJvd3MgPz8gW10pLm1hcChyID0+IE51bWJlcihyLl9fcmlkX18pKS5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKTtcbiAgaWYgKCFyaWRzLmxlbmd0aCkgcmV0dXJuIFtdO1xuICByZXR1cm4gdG9JdGVtcyhhd2FpdCBjdHgucXVlcnkoYFxuICAgIFdJVEggaWRzIEFTIChTRUxFQ1QgKiBGUk9NIFVOTkVTVChbJHtyaWRzLmpvaW4oJywgJyl9XSkgV0lUSCBPUkRJTkFMSVRZIEFTIHQocmlkLCBvcmQpKVxuICAgIFNFTEVDVCBpZHMub3JkIEFTIF9fb3JkX18sICR7Y29sc31cbiAgICBGUk9NIHBwX2RhdGEgSk9JTiBpZHMgT04gJHtyb3dJZFNxbChpZENvbCl9ID0gaWRzLnJpZCBPUkRFUiBCWSBpZHMub3JkXG4gIGApKTtcbn1cblxuLy8gRHJhdyB0aGUgdGh1bWJuYWlscyBpbnRvIGEgc3F1YXJlLWlzaCBjYW52YXMgZ3JpZDsgcmV0dXJucyB7IGNhbnZhcywgcGVyUm93IH0uXG5mdW5jdGlvbiBkcmF3TW9zYWljQ2FudmFzKGl0ZW1zLCBjdHgsIGRpc3BsYXlNb2RlKSB7XG4gIGNvbnN0IHBlclJvdyA9IE1hdGguY2VpbChNYXRoLnNxcnQoaXRlbXMubGVuZ3RoKSk7XG4gIGNvbnN0IG5Sb3dzICA9IE1hdGguY2VpbChpdGVtcy5sZW5ndGggLyBwZXJSb3cpO1xuICBjb25zdCBXID0gcGVyUm93ICogQ0VMTCwgSCA9IG5Sb3dzICogQ0VMTDtcbiAgY29uc3QgY2FudmFzID0gbWFrZUNhbnZhcyhXLCBIKTtcbiAgY29uc3QgYzJkID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIGNhbnZhcy5zdHlsZS5pbWFnZVJlbmRlcmluZyA9ICdwaXhlbGF0ZWQnO1xuICBjYW52YXMuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gIGMyZC5jbGVhclJlY3QoMCwgMCwgVywgSCk7XG5cbiAgaXRlbXMuZm9yRWFjaCgoaXQsIGkpID0+IHtcbiAgICBjb25zdCB4ID0gKGkgJSBwZXJSb3cpICogQ0VMTCwgeSA9IE1hdGguZmxvb3IoaSAvIHBlclJvdykgKiBDRUxMO1xuICAgIGMyZC5maWxsU3R5bGUgPSBjdHguY29sb3IuZ3JvdXAoaXQuZ3JvdXApO1xuICAgIGMyZC5maWxsUmVjdCh4LCB5LCBDRUxMIC0gR0FQLCBDRUxMIC0gR0FQKTtcbiAgICBjMmQuY2xlYXJSZWN0KHggKyBCT1JERVIsIHkgKyBCT1JERVIsIFNQUklURSwgU1BSSVRFKTtcbiAgICBpZiAoaXQudGh1bWI/LmtpbmQgPT09ICdyYXcnKSB7XG4gICAgICBjb25zdCByYXcgPSAoZGlzcGxheU1vZGUgPT09IERJU1BMQVlfREVOT1JNICYmIGl0LnRuTWluICE9IG51bGwgJiYgaXQudG5NYXggIT0gbnVsbCAmJiBpdC50bkR0eXBlKVxuICAgICAgICA/IGRlbm9ybWFsaXplVGh1bWJuYWlsUkdCQShpdC50aHVtYi5kYXRhLCBpdC50bk1pbiwgaXQudG5NYXgsIGl0LnRuRHR5cGUpXG4gICAgICAgIDogaXQudGh1bWIuZGF0YTtcbiAgICAgIGN0eC5kYXRhLmRyYXdUaHVtYm5haWxSR0JBKGMyZCwgcmF3LCB4ICsgQk9SREVSLCB5ICsgQk9SREVSKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4geyBjYW52YXMsIHBlclJvdyB9O1xufVxuXG4vLyBGbG9hdGluZyBmaWxlbmFtZSB0b29sdGlwIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yIG92ZXIgdGhlIG1vc2FpYyB0aWxlcywgcGx1c1xuLy8gY2xpY2stdG8taW5zcGVjdDogY2xpY2tpbmcgYSB0aWxlIG9wZW5zIHRoZSBzaW5nbGUtZmlsZSBwb2ludCBpbnNwZWN0b3IgZm9yIGl0LlxuZnVuY3Rpb24gYXR0YWNoVG9vbHRpcChjb250YWluZXIsIGNhbnZhcywgaXRlbXMsIHBlclJvdywgY3R4KSB7XG4gIGNvbnN0IHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0aXAuc3R5bGUuY3NzVGV4dCA9IFsncG9zaXRpb246YWJzb2x1dGUnLCdkaXNwbGF5Om5vbmUnLCdwb2ludGVyLWV2ZW50czpub25lJywnei1pbmRleDoxMCcsJ2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjg1KScsJ2NvbG9yOndoaXRlJywncGFkZGluZzo2cHggOHB4JywnYm9yZGVyLXJhZGl1czo2cHgnLCdmb250LXNpemU6MTJweCcsJ21heC13aWR0aDozNjBweCcsJ3doaXRlLXNwYWNlOm5vd3JhcCcsJ292ZXJmbG93OmhpZGRlbicsJ3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMnXS5qb2luKCc7Jyk7XG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aXApO1xuXG4gIGNvbnN0IHRpbGVTaXplID0gQ0VMTCAtIEdBUDtcbiAgLy8gSW5kZXggb2YgdGhlIHRpbGUgdW5kZXIgYSBtb3VzZSBldmVudCwgb3IgLTEgaWYgYmV0d2Vlbi9vdXRzaWRlIHRpbGVzLlxuICBjb25zdCB0aWxlQXQgPSBlID0+IHtcbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHB4ID0gKGUuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAoY2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7XG4gICAgY29uc3QgcHkgPSAoZS5jbGllbnRZIC0gcmVjdC50b3ApICAqIChjYW52YXMuaGVpZ2h0IC8gcmVjdC5oZWlnaHQpO1xuICAgIGNvbnN0IGNvbCA9IE1hdGguZmxvb3IocHggLyBDRUxMKSwgcm93ID0gTWF0aC5mbG9vcihweSAvIENFTEwpO1xuICAgIGNvbnN0IGxvY2FsWCA9IHB4IC0gY29sICogQ0VMTCwgbG9jYWxZID0gcHkgLSByb3cgKiBDRUxMO1xuICAgIGNvbnN0IGlkeCA9IHJvdyAqIHBlclJvdyArIGNvbDtcbiAgICBpZiAoY29sIDwgMCB8fCByb3cgPCAwIHx8IGxvY2FsWCA+PSB0aWxlU2l6ZSB8fCBsb2NhbFkgPj0gdGlsZVNpemUgfHwgaWR4IDwgMCB8fCBpZHggPj0gaXRlbXMubGVuZ3RoKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIGlkeDtcbiAgfTtcbiAgY2FudmFzLm9ubW91c2Vtb3ZlID0gZSA9PiB7XG4gICAgY29uc3QgaWR4ID0gdGlsZUF0KGUpO1xuICAgIGlmIChpZHggPCAwKSB7IHRpcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyByZXR1cm47IH1cbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRpcC50ZXh0Q29udGVudCA9IGl0ZW1zW2lkeF0ubGFiZWwgfHwgaXRlbXNbaWR4XS5ncm91cDtcbiAgICB0aXAuc3R5bGUubGVmdCA9IGAke01hdGgubWluKHJlY3Qud2lkdGggLSAxMCwgKGUuY2xpZW50WCAtIHJlY3QubGVmdCkgKyAxMil9cHhgO1xuICAgIHRpcC5zdHlsZS50b3AgID0gYCR7TWF0aC5taW4ocmVjdC5oZWlnaHQgLSAxMCwgKGUuY2xpZW50WSAtIHJlY3QudG9wKSArIDEyKX1weGA7XG4gICAgdGlwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICB9O1xuICBjYW52YXMub25tb3VzZWxlYXZlID0gKCkgPT4geyB0aXAuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfTtcblxuICBpZiAoY3R4Py5vcGVuSW5zcGVjdG9yKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICBjYW52YXMub25jbGljayA9IGUgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGlsZUF0KGUpO1xuICAgICAgY29uc3QgZnJuID0gaWR4ID49IDAgPyBpdGVtc1tpZHhdLmZybiA6IG51bGw7XG4gICAgICBpZiAoZnJuICE9IG51bGwpIGN0eC5vcGVuSW5zcGVjdG9yKE51bWJlcihmcm4pKTtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJvd0lkU3FsKG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBuYW1lID09PSAncm93aWQnID8gJ3Jvd2lkJyA6IGBcIiR7U3RyaW5nKG5hbWUpLnJlcGxhY2VBbGwoJ1wiJywgJ1wiXCInKX1cImA7XG59XG5cbmZ1bmN0aW9uIG1ha2VDYW52YXModywgaCkge1xuICBjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIGMud2lkdGggPSB3OyBjLmhlaWdodCA9IGg7XG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Qnl0ZXModmFsKSB7XG4gIGlmICghdmFsKSByZXR1cm4gbnVsbDtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiB2YWw7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBVaW50OEFycmF5LmZyb20odmFsLCB2ID0+IE51bWJlcih2KSAmIDB4ZmYpO1xuICBpZiAodmFsLnZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiB2YWwudmFsdWVzO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRodW1ibmFpbCh2YWwpIHtcbiAgY29uc3QgYnl0ZXMgPSBleHRyYWN0Qnl0ZXModmFsKTtcbiAgaWYgKCFieXRlcykgcmV0dXJuIG51bGw7XG4gIGlmIChieXRlcy5sZW5ndGggIT09IFNQUklURSAqIFNQUklURSAqIDQpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBraW5kOiAncmF3JywgZGF0YTogYnl0ZXMgfTtcbn1cblxuZnVuY3Rpb24gY29sSW5kZXgodGFibGUsIG5hbWUpIHtcbiAgY29uc3QgZmllbGRzID0gdGFibGU/LnNjaGVtYT8uZmllbGRzID8/IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgaWYgKGZpZWxkc1tpXT8ubmFtZSA9PT0gbmFtZSkgcmV0dXJuIGk7XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sKHRhYmxlLCBuYW1lKSB7XG4gIGNvbnN0IGlkeCA9IGNvbEluZGV4KHRhYmxlLCBuYW1lKTtcbiAgaWYgKGlkeCA8IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gdHlwZW9mIHRhYmxlLmdldENoaWxkQXQgPT09ICdmdW5jdGlvbicgPyB0YWJsZS5nZXRDaGlsZEF0KGlkeCkgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB0YWJsZVRvSXRlbXModGFibGUsIHsgaG92ZXJDb2wsIGhhc1NvcnQsIGhhc05vcm0gfSkge1xuICBjb25zdCBuICAgICA9IE51bWJlcih0YWJsZS5udW1Sb3dzID8/IDApO1xuICBjb25zdCBnQ29sICA9IGdldENvbCh0YWJsZSwgJ19fZ3JvdXBfXycpO1xuICBjb25zdCB0Q29sICA9IGdldENvbCh0YWJsZSwgJ3RodW1ibmFpbCcpO1xuICBjb25zdCBmQ29sICA9IGdldENvbCh0YWJsZSwgJ19fZnJuX18nKTtcbiAgY29uc3Qgb0NvbCAgPSBnZXRDb2wodGFibGUsICdfX29yZF9fJyk7XG4gIGNvbnN0IGxDb2wgID0gaG92ZXJDb2wgPyBnZXRDb2wodGFibGUsICdfX2xhYmVsX18nKSA6IG51bGw7XG4gIGNvbnN0IHNDb2wgID0gaGFzU29ydCA/IGdldENvbCh0YWJsZSwgJ19fc29ydF9fJykgOiBudWxsO1xuICBjb25zdCBtaW5Db2wgPSBoYXNOb3JtID8gZ2V0Q29sKHRhYmxlLCAnX190bl9taW5fXycpIDogbnVsbDtcbiAgY29uc3QgbWF4Q29sID0gaGFzTm9ybSA/IGdldENvbCh0YWJsZSwgJ19fdG5fbWF4X18nKSA6IG51bGw7XG4gIGNvbnN0IGR0Q29sICA9IGhhc05vcm0gPyBnZXRDb2wodGFibGUsICdfX3RuX2R0eXBlX18nKSA6IG51bGw7XG4gIGNvbnN0IG91dCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGNvbnN0IGdyb3VwID0gZ0NvbCA/IFN0cmluZyhnQ29sLmdldChpKSkgOiAnYWxsJztcbiAgICBjb25zdCBieXRlcyA9IHRDb2wgPyB0Q29sLmdldChpKSA6IG51bGw7XG4gICAgY29uc3QgdGh1bWIgPSBleHRyYWN0VGh1bWJuYWlsKGJ5dGVzKTtcbiAgICBpZiAoIXRodW1iKSBjb250aW51ZTtcbiAgICBvdXQucHVzaCh7IG9yZDogb0NvbCA/IE51bWJlcihvQ29sLmdldChpKSkgOiBudWxsLCBncm91cCwgdGh1bWIsIGZybjogZkNvbCA/IE51bWJlcihmQ29sLmdldChpKSkgOiBudWxsLCBsYWJlbDogbENvbCA/IFN0cmluZyhsQ29sLmdldChpKSA/PyAnJykgOiAnJywgc29ydDogc0NvbCA/IE51bWJlcihzQ29sLmdldChpKSA/PyAwKSA6IDAsIHRuTWluOiBtaW5Db2wgPyBtaW5Db2wuZ2V0KGkpIDogbnVsbCwgdG5NYXg6IG1heENvbCA/IG1heENvbC5nZXQoaSkgOiBudWxsLCB0bkR0eXBlOiBkdENvbCA/IFN0cmluZyhkdENvbC5nZXQoaSkgPz8gJycpIDogbnVsbCB9KTtcbiAgfVxuICBpZiAob3V0LnNvbWUoaXQgPT4gaXQub3JkICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGl0Lm9yZCkpKSBvdXQuc29ydCgoYSwgYikgPT4gKGEub3JkID8/IDApIC0gKGIub3JkID8/IDApKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZGVub3JtYWxpemVUaHVtYm5haWxSR0JBKHJnYmFCeXRlcywgbm9ybU1pbiwgbm9ybU1heCwgZHR5cGVOYW1lKSB7XG4gIGNvbnN0IG1tID0gTnVtYmVyKG5vcm1NaW4pLCBteCA9IE51bWJlcihub3JtTWF4KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobW0pIHx8ICFOdW1iZXIuaXNGaW5pdGUobXgpKSByZXR1cm4gcmdiYUJ5dGVzO1xuICBjb25zdCBpbmZvID0gZHR5cGVJbmZvKGR0eXBlTmFtZSk7XG4gIGlmICghaW5mbykgcmV0dXJuIHJnYmFCeXRlcztcbiAgY29uc3QgeyBsbywgaGkgfSA9IGluZm87XG4gIGNvbnN0IHNjYWxlID0gKG14IC0gbW0pIC8gMjU1LjA7XG4gIGNvbnN0IGRlbm9tID0gKGhpIC0gbG8pIHx8IDE7XG4gIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KHJnYmFCeXRlcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgU1BSSVRFICogU1BSSVRFOyBpKyspIHtcbiAgICBjb25zdCBvID0gaSAqIDQ7XG4gICAgaWYgKG91dFtvICsgM10gPCAxKSBjb250aW51ZTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IDM7IGMrKykgeyBjb25zdCB2ID0gb3V0W28rY107IG91dFtvK2NdID0gY2xhbXA4KCh2ICogc2NhbGUgKyBtbSAtIGxvKSAvIGRlbm9tICogMjU1LjApOyB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gY2xhbXA4KHgpIHsgaWYgKHggPD0gMCkgcmV0dXJuIDA7IGlmICh4ID49IDI1NSkgcmV0dXJuIDI1NTsgcmV0dXJuIHggfCAwOyB9XG5cbmZ1bmN0aW9uIGR0eXBlSW5mbyhuYW1lKSB7XG4gIHN3aXRjaCAoU3RyaW5nKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd1aW50OCc6ICByZXR1cm4geyBsbzogMCwgaGk6IDI1NSB9O1xuICAgIGNhc2UgJ2ludDgnOiAgIHJldHVybiB7IGxvOiAtMTI4LCBoaTogMTI3IH07XG4gICAgY2FzZSAndWludDE2JzogcmV0dXJuIHsgbG86IDAsIGhpOiA2NTUzNSB9O1xuICAgIGNhc2UgJ2ludDE2JzogIHJldHVybiB7IGxvOiAtMzI3NjgsIGhpOiAzMjc2NyB9O1xuICAgIGNhc2UgJ3VpbnQzMic6IHJldHVybiB7IGxvOiAwLCBoaTogNDI5NDk2NzI5NSB9O1xuICAgIGNhc2UgJ2ludDMyJzogIHJldHVybiB7IGxvOiAtMjE0NzQ4MzY0OCwgaGk6IDIxNDc0ODM2NDcgfTtcbiAgICBkZWZhdWx0OiAgICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLyBUaGUgcG9pbnQgaW5zcGVjdG9yICh2aWV3ZXIvc3JjL3BvaW50LWluc3BlY3Rvci5qcykgbm93IHJlbmRlcnMgdGhlIGltYWdlIGFuZFxuLy8gaXRzIGRpYWdub3N0aWMgbWFwIGlubGluZSwgc28gdGhlIG1vc2FpYyBubyBsb25nZXIgcmVnaXN0ZXJzIGluc3BlY3RvclxuLy8gY29udHJpYnV0b3JzIGZvciB0aGVtIC0gaXQgc3RheXMgZm9jdXNlZCBvbiB0aGUgdGh1bWJuYWlsLWdyaWQgZGFzaGJvYXJkLlxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLENBQUE7QUFBQSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRzs7QUFFcEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUNwQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzVDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUNuQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFckMsbUNBQWMsQ0FBQztBQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNkLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQzNCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVkLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDN0QsQ0FBQyxDQUFDLENBQUM7O0FBRUgsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQzs7QUFFSCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUc7QUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSzs7QUFFbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSzs7QUFFbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDbkcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztBQUM3RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxD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TyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDcEcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3hGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNsRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ2xILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUM1RixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUM1RixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTTtBQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU07QUFDeEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDeEYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUk7QUFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJO0FBQzNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQzs7QUFFckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQzs7QUFFeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO0FBQ25HLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO0FBQ3JGLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOztBQUVuRixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRUwsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSztBQUNoRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRUwsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPO0FBQzNELENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FB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QUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRXRHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO0FBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDOUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUN4QyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzs7QUFFdkUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUN2RixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPO0FBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVoSCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDekcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9HLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2pGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzFGLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0w7O0FBRUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hGLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUMzQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTztBQUN2RyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTztBQUNoRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbEUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjs7QUFFQSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNqRixRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNVIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDOztBQUU1QixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7QUFDMUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ25ILENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDZCxDQUFDLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztBQUMxRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkYsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUM7QUFDSCxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFN0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUNsRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBQ0Y7O0FBRUEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0U7O0FBRUEsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNWOztBQUVBLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDdkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7QUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUN6RCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDYjs7QUFFQSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7QUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDekIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDdkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDOztBQUVBLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNYOztBQUVBLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDOUU7O0FBRUEsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDNUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQzFELENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDN0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUM3RCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDL0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZVLENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hILENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNaOztBQUVBLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7QUFDcEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVM7QUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hILENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNaOztBQUVBLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFbkYsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtBQUM5QixDQUFDLENBQUM7QUFDRjs7QUFFQSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTOyJ9

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJpbXBvcnRzIjoiMiIsIm1hcHBpbmdzIjpmYWxzZSwiZGVwcyI6IjMiLCJkeW5hbWljRGVwcyI6IjQiLCJzdGF0aWNNb2NrcyI6bnVsbCwiaGFzQ292ZXJhZ2VEYXRhIjpmYWxzZX0sIi9ob21lL2VsbGEvd29yay9waXhlbC1wYXRyb2wvcGFja2FnZXMvcGl4ZWwtcGF0cm9sLWJhc2Uvc3JjL3BpeGVsX3BhdHJvbF9iYXNlL3ZpZXdlci9wbHVnaW5fbW9zYWljLmpzIix7InVybHMiOiI1IiwiaWRzIjoiNiJ9LFtdLFtdLFtdLHt9XQ==