private static void KKChaFileLoadFileHook(KoikatsuCharaFile.ChaFile file, BlockHeader header, BinaryReader reader)
            {
                var info = header.SearchInfo(Marker);

                if (info != null && info.version == Version.ToString())
                {
                    var originalPosition = reader.BaseStream.Position;
                    var basePosition     = originalPosition - header.lstInfo.Sum(x => x.size);

                    reader.BaseStream.Position = basePosition + info.pos;

                    var data = reader.ReadBytes((int)info.size);

                    reader.BaseStream.Position = originalPosition;

                    try
                    {
                        var dictionary = MessagePackDeserialize <Dictionary <string, PluginData> >(data);
                        _internalCharaImportDictionary.Set(file, dictionary);
                    }
                    catch (Exception e)
                    {
                        Logger.Log(LogLevel.Warning, $"Invalid or corrupted extended data in card \"{file.charaFileName}\" - {e.Message}");
                        reader.BaseStream.Position = originalPosition;
                    }
                }
            }
            internal static void ConvertChaFilePostHook(ChaFileControl cfc, KoikatsuCharaFile.ChaFile kkfile)
            {
                // Move data from import dictionary to normal dictionary before the imported cards are saved so the imported data is written
                var result = _internalCharaImportDictionary.Get(kkfile);

                if (result != null)
                {
                    CardImportEvent(result);
                    internalCharaDictionary.Set(cfc, result);
                }
            }
        public override void CharacterConvert_Load(string path, POINT pos, byte sex)
        {
            KoikatsuCharaFile.ChaFile kkfile = new KoikatsuCharaFile.ChaFile();
            kkfile.LoadFile(path);
            ChaFileControl container = new ChaFileControl();

            ConvertChaFile.ConvertCharaFile(container, kkfile);
            var filepath = GetTempPath();

            container.SaveCharaFile(filepath, sex, false);

            Character_Load(filepath, pos, sex);

            File.Delete(filepath);
        }
            internal static void KKChaFileLoadFilePostHook(KoikatsuCharaFile.ChaFile __instance, bool __result, BinaryReader br)
            {
                if (!__result)
                {
                    return;
                }

                //Compatibility for ver 1 and 2 ext save data
                if (br.BaseStream.Position != br.BaseStream.Length)
                {
                    long originalPosition = br.BaseStream.Position;

                    try
                    {
                        string marker  = br.ReadString();
                        int    version = br.ReadInt32();

                        if (marker == "KKEx" && version == 2)
                        {
                            int length = br.ReadInt32();

                            if (length > 0)
                            {
                                byte[] bytes      = br.ReadBytes(length);
                                var    dictionary = MessagePackDeserialize <Dictionary <string, PluginData> >(bytes);

                                _internalCharaImportDictionary.Set(__instance, dictionary);
                            }
                        }
                        else
                        {
                            br.BaseStream.Position = originalPosition;
                        }
                    }
                    catch (EndOfStreamException)
                    {
                        /* Incomplete/non-existant data */
                        br.BaseStream.Position = originalPosition;
                    }
                    catch (SystemException)
                    {
                        /* Invalid/unexpected deserialized data */
                        br.BaseStream.Position = originalPosition;
                    }
                }
            }