Filemedium importancesource

TeleportStash.tsx

components/TeleportStash.tsx

116
Lines
15582
Bytes
1
Exports
9
Imports
10
Keywords

What this is

This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.

Beginner explanation

This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.

How it is used

Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.

Expert explanation

Architecturally, this file intersects with ui-flow. It contains 116 lines, 9 detected imports, and 1 detected exports.

Important relationships

Detected exports

  • TeleportStash

Keywords

textchangesgitfilestatusstashusestatelogfordebuggingoncancelchangedfilesstashingdialog

Detected imports

  • figures
  • react
  • ../ink.js
  • ../utils/debug.js
  • ../utils/git.js
  • ../utils/git.js
  • ./CustomSelect/index.js
  • ./design-system/Dialog.js
  • ./Spinner.js

Source notes

This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.

Open parent directory

Full source

import figures from 'figures';
import React, { useEffect, useState } from 'react';
import { Box, Text } from '../ink.js';
import { logForDebugging } from '../utils/debug.js';
import type { GitFileStatus } from '../utils/git.js';
import { getFileStatus, stashToCleanState } from '../utils/git.js';
import { Select } from './CustomSelect/index.js';
import { Dialog } from './design-system/Dialog.js';
import { Spinner } from './Spinner.js';
type TeleportStashProps = {
  onStashAndContinue: () => void;
  onCancel: () => void;
};
export function TeleportStash({
  onStashAndContinue,
  onCancel
}: TeleportStashProps): React.ReactNode {
  const [gitFileStatus, setGitFileStatus] = useState<GitFileStatus | null>(null);
  const changedFiles = gitFileStatus !== null ? [...gitFileStatus.tracked, ...gitFileStatus.untracked] : [];
  const [loading, setLoading] = useState(true);
  const [stashing, setStashing] = useState(false);
  const [error, setError] = useState<string | null>(null);

  // Load changed files on mount
  useEffect(() => {
    const loadChangedFiles = async () => {
      try {
        const fileStatus = await getFileStatus();
        setGitFileStatus(fileStatus);
      } catch (err) {
        const errorMessage = err instanceof Error ? err.message : String(err);
        logForDebugging(`Error getting changed files: ${errorMessage}`, {
          level: 'error'
        });
        setError('Failed to get changed files');
      } finally {
        setLoading(false);
      }
    };
    void loadChangedFiles();
  }, []);
  const handleStash = async () => {
    setStashing(true);
    try {
      logForDebugging('Stashing changes before teleport...');
      const success = await stashToCleanState('Teleport auto-stash');
      if (success) {
        logForDebugging('Successfully stashed changes');
        onStashAndContinue();
      } else {
        setError('Failed to stash changes');
      }
    } catch (err_0) {
      const errorMessage_0 = err_0 instanceof Error ? err_0.message : String(err_0);
      logForDebugging(`Error stashing changes: ${errorMessage_0}`, {
        level: 'error'
      });
      setError('Failed to stash changes');
    } finally {
      setStashing(false);
    }
  };
  const handleSelectChange = (value: string) => {
    if (value === 'stash') {
      void handleStash();
    } else {
      onCancel();
    }
  };
  if (loading) {
    return <Box flexDirection="column" padding={1}>
        <Box marginBottom={1}>
          <Spinner />
          <Text> Checking git status{figures.ellipsis}</Text>
        </Box>
      </Box>;
  }
  if (error) {
    return <Box flexDirection="column" padding={1}>
        <Text bold color="error">
          Error: {error}
        </Text>
        <Box marginTop={1}>
          <Text dimColor>Press </Text>
          <Text bold>Escape</Text>
          <Text dimColor> to cancel</Text>
        </Box>
      </Box>;
  }
  const showFileCount = changedFiles.length > 8;
  return <Dialog title="Working Directory Has Changes" onCancel={onCancel}>
      <Text>
        Teleport will switch git branches. The following changes were found:
      </Text>

      <Box flexDirection="column" paddingLeft={2}>
        {changedFiles.length > 0 ? showFileCount ? <Text>{changedFiles.length} files changed</Text> : changedFiles.map((file: string, index: number) => <Text key={index}>{file}</Text>) : <Text dimColor>No changes detected</Text>}
      </Box>

      <Text>
        Would you like to stash these changes and continue with teleport?
      </Text>

      {stashing ? <Box>
          <Spinner />
          <Text> Stashing changes...</Text>
        </Box> : <Select options={[{
      label: 'Stash changes and continue',
      value: 'stash'
    }, {
      label: 'Exit',
      value: 'exit'
    }]} onChange={handleSelectChange} />}
    </Dialog>;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsIkJveCIsIlRleHQiLCJsb2dGb3JEZWJ1Z2dpbmciLCJHaXRGaWxlU3RhdHVzIiwiZ2V0RmlsZVN0YXR1cyIsInN0YXNoVG9DbGVhblN0YXRlIiwiU2VsZWN0IiwiRGlhbG9nIiwiU3Bpbm5lciIsIlRlbGVwb3J0U3Rhc2hQcm9wcyIsIm9uU3Rhc2hBbmRDb250aW51ZSIsIm9uQ2FuY2VsIiwiVGVsZXBvcnRTdGFzaCIsIlJlYWN0Tm9kZSIsImdpdEZpbGVTdGF0dXMiLCJzZXRHaXRGaWxlU3RhdHVzIiwiY2hhbmdlZEZpbGVzIiwidHJhY2tlZCIsInVudHJhY2tlZCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwic3Rhc2hpbmciLCJzZXRTdGFzaGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJsb2FkQ2hhbmdlZEZpbGVzIiwiZmlsZVN0YXR1cyIsImVyciIsImVycm9yTWVzc2FnZSIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsImxldmVsIiwiaGFuZGxlU3Rhc2giLCJzdWNjZXNzIiwiaGFuZGxlU2VsZWN0Q2hhbmdlIiwidmFsdWUiLCJlbGxpcHNpcyIsInNob3dGaWxlQ291bnQiLCJsZW5ndGgiLCJtYXAiLCJmaWxlIiwiaW5kZXgiLCJsYWJlbCJdLCJzb3VyY2VzIjpbIlRlbGVwb3J0U3Rhc2gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0IHsgbG9nRm9yRGVidWdnaW5nIH0gZnJvbSAnLi4vdXRpbHMvZGVidWcuanMnXG5pbXBvcnQgdHlwZSB7IEdpdEZpbGVTdGF0dXMgfSBmcm9tICcuLi91dGlscy9naXQuanMnXG5pbXBvcnQgeyBnZXRGaWxlU3RhdHVzLCBzdGFzaFRvQ2xlYW5TdGF0ZSB9IGZyb20gJy4uL3V0aWxzL2dpdC5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4vQ3VzdG9tU2VsZWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnLi9kZXNpZ24tc3lzdGVtL0RpYWxvZy5qcydcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL1NwaW5uZXIuanMnXG5cbnR5cGUgVGVsZXBvcnRTdGFzaFByb3BzID0ge1xuICBvblN0YXNoQW5kQ29udGludWU6ICgpID0+IHZvaWRcbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlbGVwb3J0U3Rhc2goe1xuICBvblN0YXNoQW5kQ29udGludWUsXG4gIG9uQ2FuY2VsLFxufTogVGVsZXBvcnRTdGFzaFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgW2dpdEZpbGVTdGF0dXMsIHNldEdpdEZpbGVTdGF0dXNdID0gdXNlU3RhdGU8R2l0RmlsZVN0YXR1cyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNoYW5nZWRGaWxlcyA9XG4gICAgZ2l0RmlsZVN0YXR1cyAhPT0gbnVsbFxuICAgICAgPyBbLi4uZ2l0RmlsZVN0YXR1cy50cmFja2VkLCAuLi5naXRGaWxlU3RhdHVzLnVudHJhY2tlZF1cbiAgICAgIDogW11cbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW3N0YXNoaW5nLCBzZXRTdGFzaGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIC8vIExvYWQgY2hhbmdlZCBmaWxlcyBvbiBtb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxvYWRDaGFuZ2VkRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWxlU3RhdHVzID0gYXdhaXQgZ2V0RmlsZVN0YXR1cygpXG4gICAgICAgIHNldEdpdEZpbGVTdGF0dXMoZmlsZVN0YXR1cylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgbG9nRm9yRGVidWdnaW5nKGBFcnJvciBnZXR0aW5nIGNoYW5nZWQgZmlsZXM6ICR7ZXJyb3JNZXNzYWdlfWAsIHtcbiAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0RXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2hhbmdlZCBmaWxlcycpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgbG9hZENoYW5nZWRGaWxlcygpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVN0YXNoID0gYXN5bmMgKCkgPT4ge1xuICAgIHNldFN0YXNoaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGxvZ0ZvckRlYnVnZ2luZygnU3Rhc2hpbmcgY2hhbmdlcyBiZWZvcmUgdGVsZXBvcnQuLi4nKVxuICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHN0YXNoVG9DbGVhblN0YXRlKCdUZWxlcG9ydCBhdXRvLXN0YXNoJylcblxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nRm9yRGVidWdnaW5nKCdTdWNjZXNzZnVsbHkgc3Rhc2hlZCBjaGFuZ2VzJylcbiAgICAgICAgb25TdGFzaEFuZENvbnRpbnVlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yKCdGYWlsZWQgdG8gc3Rhc2ggY2hhbmdlcycpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgIGxvZ0ZvckRlYnVnZ2luZyhgRXJyb3Igc3Rhc2hpbmcgY2hhbmdlczogJHtlcnJvck1lc3NhZ2V9YCwge1xuICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgIH0pXG4gICAgICBzZXRFcnJvcignRmFpbGVkIHRvIHN0YXNoIGNoYW5nZXMnKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdGFzaGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWxlY3RDaGFuZ2UgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3N0YXNoJykge1xuICAgICAgdm9pZCBoYW5kbGVTdGFzaCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICB9XG4gIH1cblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgPFRleHQ+IENoZWNraW5nIGdpdCBzdGF0dXN7ZmlndXJlcy5lbGxpcHNpc308L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmc9ezF9PlxuICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiZXJyb3JcIj5cbiAgICAgICAgICBFcnJvcjoge2Vycm9yfVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5QcmVzcyA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgYm9sZD5Fc2NhcGU8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+IHRvIGNhbmNlbDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBzaG93RmlsZUNvdW50ID0gY2hhbmdlZEZpbGVzLmxlbmd0aCA+IDhcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2cgdGl0bGU9XCJXb3JraW5nIERpcmVjdG9yeSBIYXMgQ2hhbmdlc1wiIG9uQ2FuY2VsPXtvbkNhbmNlbH0+XG4gICAgICA8VGV4dD5cbiAgICAgICAgVGVsZXBvcnQgd2lsbCBzd2l0Y2ggZ2l0IGJyYW5jaGVzLiBUaGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBmb3VuZDpcbiAgICAgIDwvVGV4dD5cblxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZ0xlZnQ9ezJ9PlxuICAgICAgICB7Y2hhbmdlZEZpbGVzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgc2hvd0ZpbGVDb3VudCA/IChcbiAgICAgICAgICAgIDxUZXh0PntjaGFuZ2VkRmlsZXMubGVuZ3RofSBmaWxlcyBjaGFuZ2VkPC9UZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXMubWFwKChmaWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgPFRleHQga2V5PXtpbmRleH0+e2ZpbGV9PC9UZXh0PlxuICAgICAgICAgICAgKSlcbiAgICAgICAgICApXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+Tm8gY2hhbmdlcyBkZXRlY3RlZDwvVGV4dD5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuXG4gICAgICA8VGV4dD5cbiAgICAgICAgV291bGQgeW91IGxpa2UgdG8gc3Rhc2ggdGhlc2UgY2hhbmdlcyBhbmQgY29udGludWUgd2l0aCB0ZWxlcG9ydD9cbiAgICAgIDwvVGV4dD5cblxuICAgICAge3N0YXNoaW5nID8gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgPFRleHQ+IFN0YXNoaW5nIGNoYW5nZXMuLi48L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPFNlbGVjdFxuICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgIHsgbGFiZWw6ICdTdGFzaCBjaGFuZ2VzIGFuZCBjb250aW51ZScsIHZhbHVlOiAnc3Rhc2gnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnRXhpdCcsIHZhbHVlOiAnZXhpdCcgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWxlY3RDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE9BQU8sTUFBTSxTQUFTO0FBQzdCLE9BQU9DLEtBQUssSUFBSUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNsRCxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxXQUFXO0FBQ3JDLFNBQVNDLGVBQWUsUUFBUSxtQkFBbUI7QUFDbkQsY0FBY0MsYUFBYSxRQUFRLGlCQUFpQjtBQUNwRCxTQUFTQyxhQUFhLEVBQUVDLGlCQUFpQixRQUFRLGlCQUFpQjtBQUNsRSxTQUFTQyxNQUFNLFFBQVEseUJBQXlCO0FBQ2hELFNBQVNDLE1BQU0sUUFBUSwyQkFBMkI7QUFDbEQsU0FBU0MsT0FBTyxRQUFRLGNBQWM7QUFFdEMsS0FBS0Msa0JBQWtCLEdBQUc7RUFDeEJDLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxJQUFJO0VBQzlCQyxRQUFRLEVBQUUsR0FBRyxHQUFHLElBQUk7QUFDdEIsQ0FBQztBQUVELE9BQU8sU0FBU0MsYUFBYUEsQ0FBQztFQUM1QkYsa0JBQWtCO0VBQ2xCQztBQUNrQixDQUFuQixFQUFFRixrQkFBa0IsQ0FBQyxFQUFFWixLQUFLLENBQUNnQixTQUFTLENBQUM7RUFDdEMsTUFBTSxDQUFDQyxhQUFhLEVBQUVDLGdCQUFnQixDQUFDLEdBQUdoQixRQUFRLENBQUNJLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7RUFDOUUsTUFBTWEsWUFBWSxHQUNoQkYsYUFBYSxLQUFLLElBQUksR0FDbEIsQ0FBQyxHQUFHQSxhQUFhLENBQUNHLE9BQU8sRUFBRSxHQUFHSCxhQUFhLENBQUNJLFNBQVMsQ0FBQyxHQUN0RCxFQUFFO0VBQ1IsTUFBTSxDQUFDQyxPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHckIsUUFBUSxDQUFDLElBQUksQ0FBQztFQUM1QyxNQUFNLENBQUNzQixRQUFRLEVBQUVDLFdBQVcsQ0FBQyxHQUFHdkIsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUMvQyxNQUFNLENBQUN3QixLQUFLLEVBQUVDLFFBQVEsQ0FBQyxHQUFHekIsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7O0VBRXZEO0VBQ0FELFNBQVMsQ0FBQyxNQUFNO0lBQ2QsTUFBTTJCLGdCQUFnQixHQUFHLE1BQUFBLENBQUEsS0FBWTtNQUNuQyxJQUFJO1FBQ0YsTUFBTUMsVUFBVSxHQUFHLE1BQU10QixhQUFhLENBQUMsQ0FBQztRQUN4Q1csZ0JBQWdCLENBQUNXLFVBQVUsQ0FBQztNQUM5QixDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFO1FBQ1osTUFBTUMsWUFBWSxHQUFHRCxHQUFHLFlBQVlFLEtBQUssR0FBR0YsR0FBRyxDQUFDRyxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0osR0FBRyxDQUFDO1FBQ3JFekIsZUFBZSxDQUFDLGdDQUFnQzBCLFlBQVksRUFBRSxFQUFFO1VBQzlESSxLQUFLLEVBQUU7UUFDVCxDQUFDLENBQUM7UUFDRlIsUUFBUSxDQUFDLDZCQUE2QixDQUFDO01BQ3pDLENBQUMsU0FBUztRQUNSSixVQUFVLENBQUMsS0FBSyxDQUFDO01BQ25CO0lBQ0YsQ0FBQztJQUVELEtBQUtLLGdCQUFnQixDQUFDLENBQUM7RUFDekIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLE1BQU1RLFdBQVcsR0FBRyxNQUFBQSxDQUFBLEtBQVk7SUFDOUJYLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakIsSUFBSTtNQUNGcEIsZUFBZSxDQUFDLHFDQUFxQyxDQUFDO01BQ3RELE1BQU1nQyxPQUFPLEdBQUcsTUFBTTdCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO01BRTlELElBQUk2QixPQUFPLEVBQUU7UUFDWGhDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQztRQUMvQ1Esa0JBQWtCLENBQUMsQ0FBQztNQUN0QixDQUFDLE1BQU07UUFDTGMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO01BQ3JDO0lBQ0YsQ0FBQyxDQUFDLE9BQU9HLEtBQUcsRUFBRTtNQUNaLE1BQU1DLGNBQVksR0FBR0QsS0FBRyxZQUFZRSxLQUFLLEdBQUdGLEtBQUcsQ0FBQ0csT0FBTyxHQUFHQyxNQUFNLENBQUNKLEtBQUcsQ0FBQztNQUNyRXpCLGVBQWUsQ0FBQywyQkFBMkIwQixjQUFZLEVBQUUsRUFBRTtRQUN6REksS0FBSyxFQUFFO01BQ1QsQ0FBQyxDQUFDO01BQ0ZSLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztJQUNyQyxDQUFDLFNBQVM7TUFDUkYsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNwQjtFQUNGLENBQUM7RUFFRCxNQUFNYSxrQkFBa0IsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFLE1BQU0sS0FBSztJQUM1QyxJQUFJQSxLQUFLLEtBQUssT0FBTyxFQUFFO01BQ3JCLEtBQUtILFdBQVcsQ0FBQyxDQUFDO0lBQ3BCLENBQUMsTUFBTTtNQUNMdEIsUUFBUSxDQUFDLENBQUM7SUFDWjtFQUNGLENBQUM7RUFFRCxJQUFJUSxPQUFPLEVBQUU7SUFDWCxPQUNFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsQ0FBQyxPQUFPO0FBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUN2QixPQUFPLENBQUN5QyxRQUFRLENBQUMsRUFBRSxJQUFJO0FBQzVELFFBQVEsRUFBRSxHQUFHO0FBQ2IsTUFBTSxFQUFFLEdBQUcsQ0FBQztFQUVWO0VBRUEsSUFBSWQsS0FBSyxFQUFFO0lBQ1QsT0FDRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNoQyxpQkFBaUIsQ0FBQ0EsS0FBSztBQUN2QixRQUFRLEVBQUUsSUFBSTtBQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJO0FBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJO0FBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJO0FBQ3pDLFFBQVEsRUFBRSxHQUFHO0FBQ2IsTUFBTSxFQUFFLEdBQUcsQ0FBQztFQUVWO0VBRUEsTUFBTWUsYUFBYSxHQUFHdEIsWUFBWSxDQUFDdUIsTUFBTSxHQUFHLENBQUM7RUFFN0MsT0FDRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsUUFBUSxDQUFDLENBQUM1QixRQUFRLENBQUM7QUFDckUsTUFBTSxDQUFDLElBQUk7QUFDWDtBQUNBLE1BQU0sRUFBRSxJQUFJO0FBQ1o7QUFDQSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsQ0FBQ0ssWUFBWSxDQUFDdUIsTUFBTSxHQUFHLENBQUMsR0FDdEJELGFBQWEsR0FDWCxDQUFDLElBQUksQ0FBQyxDQUFDdEIsWUFBWSxDQUFDdUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FFaER2QixZQUFZLENBQUN3QixHQUFHLENBQUMsQ0FBQ0MsSUFBSSxFQUFFLE1BQU0sRUFBRUMsS0FBSyxFQUFFLE1BQU0sS0FDM0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUNBLEtBQUssQ0FBQyxDQUFDLENBQUNELElBQUksQ0FBQyxFQUFFLElBQUksQ0FDL0IsQ0FDRixHQUVELENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQ3pDO0FBQ1QsTUFBTSxFQUFFLEdBQUc7QUFDWDtBQUNBLE1BQU0sQ0FBQyxJQUFJO0FBQ1g7QUFDQSxNQUFNLEVBQUUsSUFBSTtBQUNaO0FBQ0EsTUFBTSxDQUFDcEIsUUFBUSxHQUNQLENBQUMsR0FBRztBQUNaLFVBQVUsQ0FBQyxPQUFPO0FBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSTtBQUMxQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBRU4sQ0FBQyxNQUFNLENBQ0wsT0FBTyxDQUFDLENBQUMsQ0FDUDtNQUFFc0IsS0FBSyxFQUFFLDRCQUE0QjtNQUFFUCxLQUFLLEVBQUU7SUFBUSxDQUFDLEVBQ3ZEO01BQUVPLEtBQUssRUFBRSxNQUFNO01BQUVQLEtBQUssRUFBRTtJQUFPLENBQUMsQ0FDakMsQ0FBQyxDQUNGLFFBQVEsQ0FBQyxDQUFDRCxrQkFBa0IsQ0FBQyxHQUVoQztBQUNQLElBQUksRUFBRSxNQUFNLENBQUM7QUFFYiIsImlnbm9yZUxpc3QiOltdfQ==