public static bool PE24FWrite(int endOfBuffer, string saveText, bool writeVerify)
        {
            if (!PE_DownloadAndConnect())
            {
                PEGoodOnWrite = false;
                return(false);
            }
            PEGoodOnWrite = true;
            UpdateStatusWinText(saveText);
            if (endOfBuffer == PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem)
            {
                for (int num = PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords; num > 0; num--)
                {
                    PICkitFunctions.DeviceBuffers.ProgramMemory[endOfBuffer - num] &= (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords - num]);
                }
            }
            byte[] array = new byte[256];
            int    num2  = 64;
            int    num3  = 0;

            ResetStatusBar(endOfBuffer / num2);
            do
            {
                int num4 = 0;
                for (int i = 0; i < num2; i += 2)
                {
                    uint num5 = PICkitFunctions.DeviceBuffers.ProgramMemory[num3++];
                    array[num4 + 1] = BitReverseTable[num5 & 0xFF];
                    num5          >>= 8;
                    array[num4]     = BitReverseTable[num5 & 0xFF];
                    num5          >>= 8;
                    array[num4 + 3] = BitReverseTable[num5 & 0xFF];
                    num5            = PICkitFunctions.DeviceBuffers.ProgramMemory[num3++];
                    array[num4 + 5] = BitReverseTable[num5 & 0xFF];
                    num5          >>= 8;
                    array[num4 + 4] = BitReverseTable[num5 & 0xFF];
                    num5          >>= 8;
                    array[num4 + 2] = BitReverseTable[num5 & 0xFF];
                    num4           += 6;
                }
                for (int num6 = PICkitFunctions.DataClrAndDownload(array, 0); num6 < num4; num6 = PICkitFunctions.DataDownload(array, num6, num4))
                {
                }
                int    j      = 0;
                byte[] array2 = new byte[64];
                array2[j++] = 166;
                array2[j++] = 0;
                array2[j++] = 243;
                array2[j++] = 0;
                array2[j++] = 242;
                array2[j++] = 10;
                array2[j++] = 242;
                array2[j++] = 198;
                array2[j++] = 242;
                array2[j++] = 0;
                array2[j++] = 242;
                array2[j++] = BitReverseTable[(num3 - 64 >> 15) & 0xFF];
                array2[j++] = 242;
                array2[j++] = BitReverseTable[(num3 - 64 >> 7) & 0xFF];
                array2[j++] = 242;
                array2[j++] = BitReverseTable[(num3 - 64 << 1) & 0xFF];
                array2[j++] = 241;
                array2[j++] = 241;
                array2[j++] = 241;
                array2[j++] = 233;
                array2[j++] = 3;
                array2[j++] = 63;
                array2[j++] = 243;
                array2[j++] = 2;
                array2[j++] = 231;
                array2[j++] = 118;
                array2[j++] = 240;
                array2[j++] = 240;
                array2[j++] = 240;
                array2[j++] = 240;
                array2[j++] = 170;
                array2[1]   = (byte)(j - 3);
                for (; j < 64; j++)
                {
                    array2[j] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                if (!PICkitFunctions.readUSB())
                {
                    UpdateStatusWinText("Programming Executive Error during Write.");
                    PICkitFunctions.RunScript(1, 1);
                    restoreICSPSpeed();
                    return(false);
                }
                if (PICkitFunctions.Usb_read_array[1] != 4)
                {
                    UpdateStatusWinText("Programming Executive Error during Write.");
                    PICkitFunctions.RunScript(1, 1);
                    restoreICSPSpeed();
                    return(false);
                }
                if (BitReverseTable[PICkitFunctions.Usb_read_array[2]] != 21 || PICkitFunctions.Usb_read_array[3] != 0 || PICkitFunctions.Usb_read_array[4] != 0 || BitReverseTable[PICkitFunctions.Usb_read_array[5]] != 2)
                {
                    UpdateStatusWinText("Programming Executive Error during Write.");
                    PICkitFunctions.RunScript(1, 1);
                    restoreICSPSpeed();
                    return(false);
                }
                StepStatusBar();
            }while (num3 < endOfBuffer);
            if (!writeVerify)
            {
                PICkitFunctions.RunScript(1, 1);
                restoreICSPSpeed();
            }
            return(true);
        }