diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj
index bdceed75..c99bd4be 100644
--- a/FModel/FModel.csproj
+++ b/FModel/FModel.csproj
@@ -5,7 +5,7 @@
Debug
AnyCPU
{8FABCD3A-9D55-4B54-B237-B259D815DEB8}
- WinExe
+ Exe
FModel
FModel
v4.7.1
@@ -119,6 +119,12 @@
+
+ Form
+
+
+ AESManager.cs
+
@@ -193,6 +199,9 @@
About.cs
+
+ AESManager.cs
+
SearchFiles.cs
diff --git a/FModel/Forms/AESManager.Designer.cs b/FModel/Forms/AESManager.Designer.cs
new file mode 100644
index 00000000..c1aec1f0
--- /dev/null
+++ b/FModel/Forms/AESManager.Designer.cs
@@ -0,0 +1,149 @@
+namespace FModel.Forms
+{
+ partial class AESManager
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AESManager));
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.OKButton = new System.Windows.Forms.Button();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.groupBox3.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // groupBox3
+ //
+ this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox3.Controls.Add(this.label1);
+ this.groupBox3.Controls.Add(this.textBox2);
+ this.groupBox3.Controls.Add(this.label3);
+ this.groupBox3.Location = new System.Drawing.Point(12, 12);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(565, 49);
+ this.groupBox3.TabIndex = 14;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "Static Key:";
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(74, 19);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(485, 20);
+ this.textBox2.TabIndex = 2;
+ this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(6, 22);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(62, 13);
+ this.label3.TabIndex = 3;
+ this.label3.Text = "Main PAKs:";
+ //
+ // OKButton
+ //
+ this.OKButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.OKButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.OKButton.Location = new System.Drawing.Point(480, 249);
+ this.OKButton.Name = "OKButton";
+ this.OKButton.Size = new System.Drawing.Size(97, 21);
+ this.OKButton.TabIndex = 16;
+ this.OKButton.Text = "OK";
+ this.OKButton.UseVisualStyleBackColor = true;
+ this.OKButton.Click += new System.EventHandler(this.OKButton_Click);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.panel1);
+ this.groupBox1.Location = new System.Drawing.Point(12, 67);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(565, 176);
+ this.groupBox1.TabIndex = 17;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Dynamic Keys:";
+ //
+ // panel1
+ //
+ this.panel1.AutoScroll = true;
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(3, 16);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(559, 157);
+ this.panel1.TabIndex = 0;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.ForeColor = System.Drawing.Color.Red;
+ this.label1.Location = new System.Drawing.Point(42, -2);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(523, 13);
+ this.label1.TabIndex = 18;
+ this.label1.Text = "GitHub clone: Main PAKs txtbox is the only working txtbox for now, use it to load" +
+ " the pak you want, like before";
+ //
+ // AESManager
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(589, 282);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.OKButton);
+ this.Controls.Add(this.groupBox3);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "AESManager";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "AES Manager";
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Button OKButton;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Label label1;
+ }
+}
\ No newline at end of file
diff --git a/FModel/Forms/AESManager.cs b/FModel/Forms/AESManager.cs
new file mode 100644
index 00000000..7f1414bd
--- /dev/null
+++ b/FModel/Forms/AESManager.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace FModel.Forms
+{
+ public partial class AESManager : Form
+ {
+ public AESManager()
+ {
+ InitializeComponent();
+
+ textBox2.Text = @"0x" + Properties.Settings.Default.AESKey;
+
+ for (int i = 0; i < ThePak.dynamicPaksList.Count; i++)
+ {
+ string dCurrentUsedPak = ThePak.dynamicPaksList[i].thePak; //SET CURRENT DYNAMIC PAK
+ int pFrom = dCurrentUsedPak.IndexOf("pakchunk") + "pakchunk".Length;
+ int pTo = dCurrentUsedPak.LastIndexOf("WindowsClient.pak");
+
+ TextBox txtBox = new TextBox();
+ txtBox.Location = new Point(164, 3 + (26 * i));
+ txtBox.Size = new Size(372, 20);
+ txtBox.Name = "txtBox_" + dCurrentUsedPak.Substring(pFrom, pTo - pFrom - 1);
+ txtBox.Parent = panel1;
+
+ Label lbl = new Label();
+ lbl.AutoSize = true;
+ lbl.Location = new Point(3, 6 + (26 * i));
+ lbl.Size = new Size(155, 13);
+ lbl.Text = dCurrentUsedPak.Substring(0, dCurrentUsedPak.LastIndexOf("."));
+ lbl.Parent = panel1;
+ }
+ }
+
+ private void OKButton_Click(object sender, EventArgs e)
+ {
+ Properties.Settings.Default.AESKey = textBox2.Text.Substring(2).ToUpper();
+
+ Properties.Settings.Default.Save();
+ Close();
+ }
+ }
+}
diff --git a/FModel/Forms/AESManager.resx b/FModel/Forms/AESManager.resx
new file mode 100644
index 00000000..668416be
--- /dev/null
+++ b/FModel/Forms/AESManager.resx
@@ -0,0 +1,878 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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
+ Jv81Jif/NCcn/zMoKP8yKCj/MSgo/jAoKFwwKCgAMikpADEoKF0zKCj+NCgo/zQnJ/81Jib/NiYm/zYl
+ Jv89LC3/yMTE////////////4N3d/009Pv82JCX/NyYm/zclJv82JSb/NSYm/zQnJ/80KCj/Migo/jEo
+ KFwyKCgAMigoADEnJ10yKCj+NCgo/zUmJ/81JSb/NiUm/zcmJv8+LS3/yMPD////////////5ePj/08/
+ QP82JCT/NyUm/zgmJ/83Jif/NiUm/zUmJ/8zJyj/Migo/jIoKFwyKCgAMigoADInJ10zKCj+NSgo/zYm
+ J/83Jib/NyYm/zglJv8/LS3/yMPD////////////5OLi/1A+P/84JCX/OSYm/zgmJv84Jif/NyYm/zYm
+ J/80Jyj/Mygo/jMoKFwzKCgAMicnADInKF0zKCj+NScn/zYmJv83JSb/NyUm/zglJv8/LC3/yMPD////
+ ////////5OHi/1E+Pv85JCX/OSUm/zkmJ/83JSb/NiUm/zYmJv81Jyf/Mygo/jIoKFwyKCgAMygoADMo
+ KF00KCj+NSYn/zYlJv83JSb/OCUm/zsnJ/9ALC3/yMPD////////////4+Hh/1A9Pv85JCT/OiUm/zwn
+ KP84Jif/NiUm/zYmJv81Jif/Mycn/jInJ1wyJycAMycnADInJ100Jyj+NSYn/zcmJv83Jib/OCUm/zom
+ J/9ALC3/ycPD////////////4+Hh/1NAQP89Jyj/Oycn/zsmJ/84Jib/NyUm/zYmJv81Jif/Mycn/jMo
+ KFwzKCgAMicnADInJ100KCj+NSYn/zYmJv83Jib/OCUm/zklJv9ALC3/ycPE////////////9vX1/8bA
+ wP++t7f/bF1e/zcjJP84Jib/OCYn/zYlJv82Jif/NCcn/jMoKFwzKCgAMicnADInJ10zJyf+NSYm/zYl
+ Jv83Jif/NyUm/zglJv8/LC3/yMPD////////////////////////////hXl6/zUiIv84JSb/NyYm/zYl
+ Jv81Jif/Mycn/jInJ1wyJycAMygoADIoKF00KCj+NScn/zYlJv83Jif/NyUm/zglJv8/LC3/yMPE////
+ ////////////////////////iX9//zUiI/84Jib/NyYm/zYlJv81Jyf/Mygo/jInJ1wyJycAMykpADMo
+ KF00KCj+NSgo/zUmJv82Jib/NyYm/zclJv8+LC3/yMPD////////////+vr6/9fT0//Qzc3/e3Bw/zUj
+ JP83JSb/NiUm/zUmJv81KCj/NCgo/jIoKFwzKCgAMigoADIoKF0yKCj+NCgo/zUmJ/81JSb/NiUm/zcl
+ Jv8+LS3/yMPD////////////6ejo/1tLTP8/LS7/PCor/zcmJv83Jif/NiUm/zUmJ/80KCj/Migo/jIo
+ KFwyKCgAMSgoADAnJ10yKCj+Mygo/zQoKP81Jif/NiYn/zclJv8+LS3/yMPD////////////5+Xl/04+
+ P/8zICH/NSMk/zcmJv83Jif/NSYn/zQnKP8zKCj/Migo/jEoKFwyKCgAMCcnADAnJ10wKCj+Migo/zMo
+ KP80Jyf/NSYm/zUlJv88LC3/x8PD////////////7evr/3xxcf9nWlv/XE9P/zkpKf81Jib/NCcn/zMn
+ KP8yKCj/MSgo/jAoKFwwKCgALygoAC8oKF0wKCj+MCcn/zInJ/8zJyf/NCcn/zYnKP88LC3/x8PD////
+ /////////v7+//j4+P/4+Pj/1tPU/0g6O/8zJib/Mycn/zIoKP8xKCj/Lycn/i8nJ1wvJycALycoAC8o
+ KF0vKCj+MCcn/zEoKP8yKCj/Mycn/zUoKP86Li7/x8TE////////////////////////////6+rq/1RK
+ Sv8xJib/Micn/zEnKP8wJyj/Lycn/i8oKFwvKCgALicnAC4nJ14vKCj+Lygo/zAoKP8wKCj/MScn/zEn
+ J/85Li7/x8XF////////////////////////////9fX1/2JbW/8vJSX/MSgo/y8nJ/8wKCj/Lygo/i8o
+ KFwvKCgALigoAC4oKFkuJyj9Licn/y8nJ/8wKCj/MCcn/zAnJ/80Kyv/gHp6/6Cbm/+empr/npqa/56a
+ mv+fmpr/m5eX/1BJSf8uJib/MCgo/y8nJ/8uJyf/Licn/S4oKFcuKCgAMCoqADErKyouKCnXLicn/y4n
+ J/8wKCj/Lycn/y8nJ/8wKCj/LyYm/y4lJf8uJSX/LiUl/y4lJf8vJib/LSUl/y8nJ/8vKCj/Lygo/y4n
+ J/8uKCj/Ligo1jArKykvKioA/wD/APwAPwDgAAcAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA
+ AQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAKAAAACAA
+ AABAAAAAAQAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABQSUkAMSgoADgwMAo1LCxEMyoqpjEoKPUwKCj0MikppTQsLEM5MDEKMSgoAFNO
+ TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABMQEAAc2RjADowMBc0KipaMikpsTIoKO0xJyf/LyUl/y8lJf8wJib/Migo7TIp
+ KbA0KipZOS8vFnVnZwBNQUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP///wA4Li8AOjIyBDYsLCw2Kyt9NSoqzzInJ/ovJSX/MSYm/0E3N/5kXFz9XlZW/T0z
+ M/4xJib/MCUl/zEnJ/o0KirPNiwsfDYsLCw8NDQEOTAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAFBKSgAWDQ0AODAwDjQrK0gzKSmgMigo5jIoKP4zKCj/PDIy/mBXV/2YkpL8z83N/fHx
+ 8f7u7u7+ycfH/ZOOjvxeVVX9PDEx/jMoKP8yKCj+Migo5TMpKZ80KytHNi8vDh4VFQBMRkYAAAAAAAAA
+ AAAAAAAAAAAAADs0NABDPj4BNCwsHjIqKmoyKSnAMigo9DIoKP8yJyf/Mycn/zUpKf5KQED7bWRk/Hty
+ c/18c3T9e3Jy/Xtxcv19c3T9e3Jy/WtiY/xKQED7NSkp/jMnJ/8zKCj/Mygo/zIoKPQxKCi/MioqaTQt
+ LR1FP0ABOzQ0AAAAAAA/OjoAKR8fADMrK1AwKCjWMCcn/TEnJ/8xJyf/Mycn/zMnJ/80Jyf/NCYn/zQl
+ Jv8xISL/MSAh/zIhIv8yIiP/MiIj/zIiI/8yIiP/MyMk/zQlJv80Jif/Mycn/zMnJ/8zJyf/Micn/zEn
+ J/8wKCj8MCgo1TIqK04qICAAQDo7ADIrKwAzLCwHMCgotTAnJ/8xJyf/MScn/zMoKP81KCn/NCcn/zUm
+ Jv81JSb/Nyco/1FDRP9NPj//PCwt/zUkJf8zIiP/NSQl/zcmJ/83Jyf/NiYm/zUlJv81Jib/NSco/zQo
+ KP8yJyf/Micn/zEnJ/8wJyf/MCgoszMsLAYyKysALycnAC8nJwoxKCi/Migo/zIoKP8zJyj/Mycn/zQn
+ J/81Jib/NSUm/zYlJv85KCn/sqys/+Ti4v/Ev7//oZma/3xxcv9IOTr/NiQl/zcmJv83JSb/NiUm/zUl
+ Jv81Jib/NCcn/zMnJ/8zKCj/Mygo/zEoKP8wKCi+LycnCS8nJwAvJycALycnCjIoKL8zKCj/Mygo/zQo
+ KP8zJyf/NiYn/zYmJ/82JSb/NiUm/zkoKf+7trb/////////////////+vr6/3pub/80IiP/OCYm/zgm
+ J/83JSb/NiUm/zUlJv81Jib/NCcn/zQoKP8zKCj/Mygo/zEoKL0uJycJLycnADAnJwAwJycKMigovzIo
+ KP80KCj/NCco/zUmJv81JSb/NiUm/zclJv83Jib/Oikp/7u2tv/////////////////9/f3/fHFx/zQh
+ Iv83JSb/NyUm/zclJv83Jif/NyYm/zUlJv81Jib/NCgo/zMoKP8yKCj/MigovS8nJwkwJycAMScnADEn
+ JwoxJye/Micn/zMnJ/81Jyf/NSUm/zYlJv83Jib/NyYm/zknJ/88KSr/u7a2//////////////////z8
+ /P98cHD/NiIj/zkmJv84Jib/OCUm/zknJ/84Jif/NiYm/zYmJv80Jyf/Mycn/zInJ/8yKCi9MigoCTIo
+ KAAxJycAMCYmCjIoKL80KCj/NSgo/zYnJ/82Jib/NyYm/zcmJ/83JSb/OCYm/zwpKf+8trb/////////
+ /////////Pz8/3xvcP83IiP/OiYm/zomJ/84JSb/OCYn/zgmJ/83Jib/NiYm/zYmJ/80KCj/NCgo/zMo
+ Kb0zKCgJMygoADInJwAxJycKMicnvzMnJ/80Jyf/NiYm/zYlJv83JSb/NyUm/zglJv85JSb/PCgp/7y2
+ tv/////////////////8/Pz/fG5v/zgiI/86JSb/OSUm/zklJv84Jib/NyUm/zYlJv82JSb/NSUm/zQn
+ J/8zKCj/MigovTEoKAkyKCgAMygoADIoKAozKCi/NCgo/zQmJ/81JSb/NiYm/zclJv83JSb/OSYn/zsm
+ J/88KCn/vLa2//////////////////z8/P97bW7/OSIj/zolJv85JSb/OyYn/zomJ/84Jib/NiUm/zcm
+ Jv82Jib/NScn/zMnJ/8yJye9MSgoCTIoKAAzKCgAMigoCjMoKL80KCj/NSYn/zYlJv83Jib/NyUm/zcl
+ Jv87Jyj/PSco/zwoKf+8trb/////////////////+/v7/3psbf85IiP/OyUm/zolJv88Jyj/PCgo/zgm
+ Jv82JSb/NiYm/zYmJv81Jif/Mycn/zMnJ70xKCgJMicnADInJwAxJycKMycnvzQnKP81Jib/NiYm/zcm
+ Jv83Jib/NyUm/zomJ/86Jib/PSgp/7y2tv/////////////////7+/v/emtr/zgiIv87JSb/OiUm/zsm
+ J/85Jif/OCYm/zclJv83Jib/NiUm/zUmJ/8zJyf/MygovTEoKAkyKCgAMScnADAnJwoyJye/NSgo/zUm
+ J/82Jib/NyYm/zcmJv84JSb/OSYm/zklJv89KSn/vba2//////////////////7+/v/Jw8P/raWl/6+n
+ p/9xZGT/OCQl/zglJv84Jif/OCYn/zcmJv81JSb/Nicn/zQnJ/8zKCi9MSgoCTIoKAAxJycAMCcnCjIn
+ J780Jyf/NSYm/zUlJv82JSb/NyUm/zclJv84JSb/OSUm/zwoKf+8trb/////////////////////////
+ /////////////5mQkP83IyP/OCUm/zclJv83Jib/NyYm/zUlJv81Jif/Mycn/zInJ70wJycJMScnADEn
+ JwAwJycKMicnvzMnJ/81Jif/NSUm/zcmJv84Jif/OCYm/zclJv85JSb/PSkp/7y2tv//////////////
+ ////////////////////////m5KS/zYjI/84JSb/OCYn/zcmJv82JSb/NiUm/zUmJ/8zJyf/MicnvTAn
+ JwkxJycAMScnADAnJwozKCi/NCgo/zQnJ/81JSb/NiUm/zcmJ/83JSb/NyUm/zglJv88KCn/vLa2////
+ //////////////////////////////////+hmJn/NiMk/zglJv83JSb/NyYm/zYlJv82Jib/NScn/zMo
+ KP8yJye9MCcnCTEnJwAxJycAMScnCjMoKL80KCj/NSgo/zYmJ/81JSb/NyYn/zcmJ/83JSb/OCUm/zso
+ Kf+8trb///////////////////////b19f/v7e7/8fHx/6CYmf83JSX/NyUm/zYlJv82JSb/NSUm/zYm
+ J/81KCj/NCgo/zMoKL0xJycJMScnADEnJwAxJycKMigovzMoKP80KCj/NScn/zUlJv82JSb/NiUm/zcm
+ Jv84Jib/Oigp/7u2tv/////////////////+////m5KS/1lKS/9cTU7/TT4+/zgmJv83Jif/NyYm/zYl
+ Jv81JSb/NScn/zQoKP8zKCj/MigovTEnJwkxJycAMCcnAC8nJwoxJye/Micn/zMnJ/80Jyf/NSYm/zUl
+ Jv82JSb/NyUm/zgmJ/87KSr/u7a2//////////////////7+/v+AdXb/Mh8g/zUjJP82JCX/NyUm/zgn
+ J/83Jif/NiUm/zUmJ/80Jyf/Mycn/zInJ/8yKCi9MCgoCTEoKAAvJycALSYmCjEoKL8yKCj/Mygo/zUo
+ KP80Jyf/NiYn/zYmJ/82JSb/NyYn/zopKf+7trb//////////////////f39/4B0df8zISH/NyUl/zcl
+ Jv82JSb/NyYn/zYmJ/82Jif/NSco/zQoKP8zKCj/Migo/zIoKL0wKCgJMSgoAC8nJwAvJycKLycnvzEn
+ J/8yKCj/Mygo/zQnJ/80Jyf/NSUm/zUlJv82JSb/OSgp/7u2tv/////////////////9/f3/i4GC/0Y2
+ N/9IODn/RTY3/zkpKv81JSb/NSYm/zQnJ/8zJyf/Micn/zInJ/8xKCj/MSgovTAoKAkwKCgAMCgoADEo
+ KAowKCi/MCgo/zEnJ/8xJyf/Mycn/zMnJ/80Jyf/Nicn/zYmJ/84KCn/u7a2////////////////////
+ ///q6en/3dvb/93a2v/T0ND/XlJS/zQkJf80Jyf/Mycn/zMoKP8yKCj/Migo/zAnJ/8vJye9MCgoCTAo
+ KAAvKCgALygoCi8oKL8wKCj/MCcn/zEnJ/8yKCj/Micn/zMnJ/82KSn/Nygp/zgpKf+6trb/////////
+ //////////////////////////////z8/P95cHD/MyYm/zQoKP8yJyf/Mico/zEoKP8wKCj/Lycn/y8n
+ J70vJycJLycnAC8oKAAvKCgKLycovy8nJ/8vJyf/MCgo/zIoKP8yKCj/Micn/zQoKP81KCj/Nioq/7q2
+ tv///////////////////////////////////////////4yFhf8xJSX/Migo/zEnJ/8xJyf/MCcn/zAn
+ J/8vJyf/LygovS8oKAkvJygALicnAC0nJwouJye/MCgo/y8oKP8wKCj/MCgo/zEoKP8xJyf/Micn/zIn
+ J/82Kyv/ure3////////////////////////////////////////////oZyd/zAmJv8yKCj/Migo/zAo
+ KP8vJyf/MCgo/y8oKP8vKCi9LigoCS4oKAAtJycALScnCi0nJ78uKCj/Licn/y8nJ/8vJyf/MCcn/zAn
+ J/8xJyf/MScn/zQqKv+sqKj/7e3t/+rq6v/q6ur/6urq/+rq6v/q6en/6urp/+3t7f+no6P/Mikp/zAn
+ J/8wKCj/MCgo/y8nJ/8vKCj/Licn/y4nJ74uKCgJLigoADMtLQA1LzAFLykprS4nJ/8uJyf/Licn/y8o
+ KP8wKCj/MCcn/y8nJ/8wJyf/MSgo/0Y+Pv9RSUn/UUhI/1FISf9RSEn/UEhI/1FJSf9RSUn/UElJ/0U+
+ Pv8wKCj/MCgo/y8oKP8vJyf/Licn/y4nJ/8tJyf/LigoqzQvLwQyLC0AQTw9ACslJQAxKytRLygp5S4n
+ J/8uJyf/Lygo/zAoKP8vKCj/Lycn/zAnJ/8wKCj/LyYm/y0lJf8uJSX/LiUl/y4lJf8tJSX/LiUl/y8m
+ Jv8tJSX/LiYm/y8nJ/8vKCj/Lygo/y4nJ/8uKCj/Ligo/y4oKOQwKytPKyQkAEM/PwD/8A///8AD//4A
+ AH/4AAAfwAAAA8AAAAOAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
+ AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAygA
+ AAAwAAAAYAAAAAEAIAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFP0AAAAAAADsz
+ MxQ1LS1bMioqwDAoKPwwKCj8MSkpvzMsLFk4MTIUAAAAAEQ/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPzc3AEQ8
+ PAM4Li4kNCsrcDQqKsQyKSn1Migo/zIoKP8xKCj/MCcn/zEoKPUzKirDNCsrbjcuLyNDPDwCPjY2AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd29vAC4j
+ IwBDODgKNy0tPzQqKpMyKCjeMScn/TIoKP8yJyf/MScn/zEnJ/8xJyf/MScn/zEnJ/8xJyf/Migo/TIo
+ KN00KiqRNy0tPUE3NwoqICEAioODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEU9
+ PgBUT08BOjExGTkuL144LS21Mykp8DInJ/8xJyf/MScn/zEnJ/8wJSX/Mygo/kE3N/08MzP9MCYm/zAl
+ Jf8xJyf/Migo/zEnJ/8xJyf/Mykp7zcsLLM6Ly9cOjExGF1XWAFHP0AAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMPf
+ 3wA4Ly8AQDo6BTcuLi80KiqANCkp0TMpKfozKSn/Mygo/zEnJ/8wJSX/Micn/kI3N/1oYGD8oJub/NHP
+ z/3Ixsb8lI6O/GFYWPw/NDT9Micn/zAlJf8xJib/Migo/zMoKf80KSn6NCoq0DQrK343Li8uPDY2BTcw
+ MAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABMRkYAAAAAADozMw81LS1LMyoqojIoKOcxJyf+MScn/zIoKP8yJyf/NCkp/kE2Nv1kXFz8mpaW+9DP
+ z/zz8/P+/////////////////v7+/+/v7/7KyMj8lpGR+2JaWvxANTX9NCkp/jMoKP8yJyf/MScn/zIo
+ KP4yKCjmNCoqoDQsLEk5MjIPEAUFAE1ISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAPzg4AEY/PwI2Ly8iNCwsbDIqKsEyKCj1Migo/zInJ/8yJyf/Mygo/zMoKP8zJyf/PTMz+mJb
+ W/mGgID7lpCQ+5eRkfyWj5D8lo+P/JaPj/yWj4/8lo+P/JeQkPyYkZL8lY+P+4R/f/thWlr5PzU1+jQo
+ KP4zJyf/Micn/zMpKf8zKCj/Mygo/zEoKPQxKSnANCwsazkwMSFHQkECQDk5AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAD03OABPTE4BNS0uLTIqKo0wKCjbMCcn/DEnJ/8yJyf/Micn/zInJ/8yJyf/Mycn/zMn
+ J/80KCj/NCcn/zUnJ/80JSb/NCQl/zMjJP8zIyT/MyMk/zMjJP8zIyT/MyMk/zMjJP8zIyT/MyQk/zQl
+ Jf80Jyf/NCgo/zMnJ/80KCj/Mycn/zMoKP8zKCj/Migo/zInJ/8wJyf/MCgo/DEpKdoyKiqMNS4uLFZV
+ VAE+ODgAAAAAAAAAAAAAAAAAQj09ADEpKQA1LS09MSkp2zAnJ/8wJyf/MCcn/zEnJ/8xJyf/Micn/zMo
+ KP8zJyf/Mycn/zQnJ/80Jif/NSUm/zUlJv81JSb/NSUm/zYlJv82JSb/NiUm/zYlJv82JSb/NSUm/zUl
+ Jv81JSb/NSUm/zYmJv81JSb/NSYm/zQmJ/8zJyf/Mycn/zMnJ/8zJyf/Micn/zIoKP8xJyf/MScn/y8n
+ J/8wJyf/MSkp2TQtLTowKSkARUBAAAAAAAAAAAAAODExAJ2oqAAxKSmXMCcn/zAnJ/8xJyf/Micn/zEn
+ J/8yJyj/NSkp/zUpKf80KCj/NCYn/zUlJv81JSb/NiUm/zcmJ/85Kir/Nycn/zQiI/80IiP/NSQl/zYl
+ Jv82JSb/NiUm/zYlJv82Jib/OCcn/zcnJ/82Jif/NSUm/zUlJv81Jib/NCcn/zUoKP80KCj/Mygo/zIn
+ J/8xJyf/Micn/zEnJ/8wJyf/MCcn/zEpKZMAAAAAODExAAAAAAAAAAAALycnAC4mJgMwKCirMCgo/zAn
+ J/8xJyf/MScn/zInJ/8zJyf/NSgo/zQoKP81Jyf/NSUm/zUlJv82Jib/NiUm/zYlJv+BeHj/raen/4d+
+ f/9nWlv/Tj9A/z0tLv81JCX/NCIj/zYlJv83Jib/OCYn/zcmJ/83Jib/NSUm/zUlJv82Jib/NSUm/zUn
+ J/80KCj/Mycn/zMnJ/8yJyf/Migo/zEnJ/8wJyf/Lycn/y8nJ6kvJycDLycnAAAAAAAAAAAALycnACwl
+ JQMxKCirMikp/zIoKP8zKCj/Mygo/zMoKP8zJyf/Mycn/zUmJ/81Jib/NSUm/zUlJv82Jib/NiUm/zUk
+ Jf+hm5v///////39/f/z8vL/397e/8O/v/+hmpv/dmxs/z4tLv82JCX/NiUm/zcmJv83JSb/NiUm/zYl
+ Jv82Jib/NSUm/zUlJv81Jyf/NCcn/zMnJ/80KCj/NCkp/zMoKP8yKCj/MSgo/zAoKKgsJSUDLycnAAAA
+ AAAAAAAALycnACwlJQMxKCirMigp/zMoKP8zKCj/NCgo/zQoKP8zJyf/NCYn/zcnJ/82Jif/NiYm/zYl
+ Jv83Jib/NiUm/zUkJf+gmpr/////////////////////////////////4N7e/09AQP81IyT/NyUm/zgn
+ J/84Jif/NyYm/zYlJv83Jib/NSUm/zUlJv81JSb/NCYn/zMnJ/80KCj/NCgp/zMoKP8zKCj/Migo/zAo
+ KKgqJCQDLycnAAAAAAAAAAAALycnAColJQMyKCirMygp/zMoKP8zKCj/NSgo/zQoKP80Jif/NSUm/zUl
+ Jv82Jib/NiYm/zcmJv83Jib/NyUm/zYkJf+hmpr/////////////////////////////////4uDh/09A
+ Qf81IyT/NyUm/zclJv84Jib/NyYm/zcmJv83Jib/NiUm/zYlJv82Jib/NSUm/zQmJ/80KCj/NSgo/zMo
+ KP8zKCj/Mygo/zEoKKgpJCQDLycnAAAAAAAAAAAAMCcnAC0mJgMyKCirMigo/zIoKP80KCj/NCgo/zQn
+ J/81JSb/NSUm/zUlJv82JSb/NiUm/zclJv84Jif/OSYn/zckJf+gmZr/////////////////////////
+ ////////4uDg/08/QP82IyT/NyUm/zclJv83JSb/NyUm/zclJv83Jif/OCYn/zcmJv81JSb/NiUm/zUl
+ Jv80Jyf/NCgo/zMoKP8yKCj/Migo/zEoKKgtJiYDMCcnAAAAAAAAAAAAMScnADEnJwMxJyerMScn/zIn
+ J/8zJyf/NCcn/zUmJ/82JSb/NSUm/zYlJv83Jib/NiUm/zcmJv85Jyf/Oicn/zglJf+hmZr/////////
+ ////////////////////////4d/f/1A/QP84JCX/OCUm/zglJv84Jib/NyUm/zgmJv85Jyf/OCcn/zgm
+ J/82JSb/NSUm/zUlJv80Jib/Mycn/zMnJ/8yJyf/Micn/zIoKKgyKCgDMigoAAAAAAAAAAAAMScnADAm
+ JgMxJyerMykp/zMoKP80Jyj/NSgo/zYmJ/82Jib/NSUm/zgmJ/85Jyf/NyUm/zgmJv86Jyf/Oicn/zgl
+ Jf+hmZr/////////////////////////////////4d/f/1A/P/84JCX/OSUm/zsmJ/87Jyf/NyUm/zgm
+ Jv85Jyf/OCcn/zgmJ/83Jif/NyYn/zcnJ/81Jib/NSgo/zQoKP8zKCj/Mygo/zMoKKgyJycDMigoAAAA
+ AAAAAAAAMScnADAmJgMxJyerMygo/zQoKP80KCj/Nigo/zcmJ/82Jib/NiUm/zcmJv83Jib/NyUm/zgl
+ Jv84Jib/OSYm/zklJf+hmZr/////////////////////////////////4N7e/1A/P/85JCX/OSUm/zom
+ Jv86Jib/OCUm/zglJv84Jib/OCYm/zcmJ/82JSb/NiUm/zUlJv81JSb/Nigo/zQoKP80KCj/NCkp/zMo
+ KKgzKSkDMykpAAAAAAAAAAAAMScnADEnJwMxJyerMicn/zMnJ/80Jyf/Nicn/zYmJv82JSb/NyUm/zYl
+ Jv82JSb/NyUm/zclJv84JSb/OSUm/zgkJf+impr/////////////////////////////////4N3d/1A+
+ Pv85JCX/OiUm/zklJv85JSb/OSUm/zglJv84JSb/NyUm/zclJv83JSb/NiUm/zYlJv81JSb/NSYm/zMn
+ J/80Jyj/Mygo/zIoKKgxJycDMigoAAAAAAAAAAAAMygoADQpKQMzKCirMygo/zQoKP80Jyf/NSUm/zUl
+ Jv82JSb/NyYm/zcmJv83JSb/OCUm/zkmJ/86Jif/OiYn/zgkJf+impr/////////////////////////
+ ////////393d/1A9Pf86JCX/OyYm/zomJv85JSb/OiUm/zomJ/85Jif/OCYn/zclJv82JSb/NiUm/zcm
+ J/82Jif/NiYn/zUoKP80Jyf/Micn/zEnJ6gzKCgDMigoAAAAAAAAAAAAMigoADMpKQMyJyerMycn/zQo
+ KP80Jyf/NSUm/zUlJv83Jib/NyYm/zYlJv83JSb/OCYm/zomJ/87Jif/OyYn/zgkJf+imZr/////////
+ ////////////////////////3tzc/088Pf87JCX/PCYm/zolJv85JSb/OiYm/zsmJ/85Jif/OSYn/zgl
+ Jv82JSb/NiUm/zcmJ/82Jib/NSUm/zUnJ/8zJyf/Mycn/zInJ6g0KSkDMygoAAAAAAAAAAAAMygoADIp
+ KQMyKCirNCgo/zQoKP80Jif/NSUm/zUlJv82JSb/NyYm/zYlJv83JSb/OCYm/z0oKP8/KSn/OyYn/zgk
+ Jf+imZr/////////////////////////////////3tvc/088PP86JCX/PCYm/zslJv85JSb/OiYm/z4o
+ KP8+KSn/OSYn/zglJv83JSb/NiUm/zcmJv82Jib/NiYm/zUnJ/8zJyf/Mycn/zInJ6gvJycDMScnAAAA
+ AAAAAAAAMygoADIoKQMzKCirNCgo/zQoKP81Jif/NSUm/zYmJ/84Jif/OCYn/zclJv83JSb/OCYn/zsn
+ J/89Jyj/OyYn/zkkJf+impr/////////////////////////////////3tvb/088PP87JSX/PCYn/zsl
+ Jv86JSb/OiYm/zwnJ/88Jyj/OSYn/zglJv83JSb/NiUm/zcmJv82Jib/NiYn/zUmJ/8zJyf/Myco/zMo
+ KKgvKCcDMigoAAAAAAAAAAAAMScnAC8nJwMyJyerMycn/zQnJ/81Jib/NSUm/zYmJv82JSb/NyYm/zcl
+ Jv83JSb/OCUm/zomJ/86Jib/OiYm/zkkJf+impr/////////////////////////////////3dra/0w4
+ OP83ISL/OSMj/zkiI/84IyT/OiUm/zomJ/85Jib/OCYm/zglJv83JSb/NyYm/zcmJv81JSb/NSUm/zUm
+ J/8zJyf/Mygo/zMoKKgsJSUDMScnAAAAAAAAAAAAMScnAC8nJwMyJyerNCgo/zYpKf81Jif/NSUm/zYm
+ J/83Jib/NyYn/zclJv84JSb/OCYm/zkmJv85JSb/OSUm/zslJf+jmpr/////////////////////////
+ ////////7Ovr/5mOj/+MgIH/jYGC/46Cg/9yZWX/PCgp/zolJv84JSb/NyUm/zkmJ/84Jif/OCYn/zYl
+ Jv81JSb/NiYn/zcoKP80KCj/Mygo/zMoKKguJiYDMicnAAAAAAAAAAAAMScnAC8nJwMyJyerNCgo/zQo
+ KP81Jif/NSUm/zYmJ/83Jib/NyYn/zclJv83JSb/OCUm/zklJv86Jib/OSUm/zolJf+jmpr/////////
+ ///////////////////////////////////+//7//v////////+/urr/Pisr/zklJv85Jib/NyUm/zkm
+ J/84Jif/OCYn/zYlJv81JSb/NiYm/zUnJ/8zJyf/Mycn/zMoKKguJycDMicoAAAAAAAAAAAAMScnADAn
+ JwMyJyerMycn/zMnJ/80Jif/NSUm/zUlJv82JSb/NiUm/zclJv83JSb/OCUm/zglJv85JSb/OSUm/zgk
+ Jf+imZr////////////////////////////////////////////////////////////Au7v/Piss/zkl
+ Jv84JSb/NyUm/zclJv83JSb/NiUm/zclJv81JSb/NSUm/zQmJ/8zJyf/Mycn/zEnJ6gvJycDMScnAAAA
+ AAAAAAAAMScnADAnJwMyJyerMycn/zQoJ/80Jyf/NiUm/zUlJv82JSb/OCYn/zgmJ/84Jib/NyUm/zcl
+ Jv85JSb/OSUm/zklJf+impr/////////////////////////////////////////////////////////
+ ///Cvb7/Piss/zglJv83JSb/OCUm/zgmJ/83Jib/NiUm/zYlJv81JSb/NiYm/zQnJ/80KCj/Mycn/zEn
+ J6gwJycDMScnAAAAAAAAAAAAMScnAC8mJgMyJyerMygo/zMnJ/80Jyf/NSUm/zUlJv82Jib/OCcn/zgn
+ J/84Jif/NyUm/zclJv85Jib/OiUm/zolJf+impr/////////////////////////////////////////
+ ///////////////////GwsL/QC0u/zglJv84Jib/OCUm/zkmJ/83Jif/NyYm/zYlJv81JSb/NiYm/zQn
+ J/8zJyf/Micn/zEnJ6gxJycDMScnAAAAAAAAAAAAMScnAC4lJQMyKCirNCkp/zQoKP80KCj/NSYn/zUl
+ Jv81JSb/NiUm/zYlJv83JSb/NyUm/zclJv84Jib/OSUm/zgkJf+impr/////////////////////////
+ ///////////////////////////////////MyMj/Qi8w/zclJf84Jib/NyUm/zclJv83JSb/NiUm/zYl
+ Jv82Jib/Nicn/zQoKP80KCj/Mygo/zIoKKgvJiYDMScnAAAAAAAAAAAAMScnAC4lJQMzKCirNCkp/zUo
+ KP81KCj/Nico/zYmJv81JSb/NiUm/zgmJ/83Jif/OCYm/zclJv84Jib/OCUm/zgkJf+impr/////////
+ ///////////////////////////////////////////////////V0tL/RjU1/zckJf84Jib/NyUm/zYl
+ Jv83JSb/NiUm/zUlJv82Jib/Nigo/zUoKP80KCj/Mygo/zIoKKguJSUDMScnAAAAAAAAAAAAMScnAC4l
+ JQMzKCirMygo/zQoKP80KCj/NSgo/zYmJ/81JSb/NSUm/zcmJv83Jif/NyYm/zglJv84Jib/NyUm/zck
+ Jf+hmpr/////////////////////////////////+Pf3/8G8vP+yrK3/s62t/7Surv+dlpb/QzMz/zcl
+ Jf84Jib/NyUm/zclJv82JSb/NSUm/zUlJv82Jif/NSgo/zUoKP80KCj/Mygo/zIoKKgtJCQDMScnAAAA
+ AAAAAAAAMScnAC8mJQMyKCirMigo/zMoKP80KCj/NCgo/zUmJ/81JSb/NSUm/zYlJv82JSb/NiUm/zcm
+ Jv84Jib/OCYn/zYkJf+hmZr/////////////////////////////////6ejo/1lJSv84JSb/OSco/zkn
+ KP85Jyj/OCYm/zglJv84Jif/NyYn/zcmJv82JSb/NSUm/zUlJv81Jyf/NCgo/zQoKP8zKCj/Migo/zIo
+ KKgvJSUDMScnAAAAAAAAAAAAMCcnAC8nJwMxJyerMScn/zEnJ/8zJyf/Mycn/zQnJ/81Jib/NSUm/zUl
+ Jv82JSb/NiUm/zcmJv84Jyf/OScn/zclJf+gmZr/////////////////////////////////5+bm/1VG
+ R/82IyT/NyUm/zclJv83JSb/NyUm/zcmJv84Jif/OCcn/zcmJ/81JSb/NSUm/zUmJv8zJyf/Mycn/zMn
+ J/8xJyf/MScn/zEoKKgvKCcDMSgoAAAAAAAAAAAALycnAC0nJgMwJyerMigo/zInJ/8yJyf/NCgo/zQo
+ KP80Jyf/NSUm/zYmJ/83Jyf/NiUm/zcmJv84Jyf/OScn/zclJf+gmZr/////////////////////////
+ ////////5uXl/1RFRv82IyT/NyUm/zkmJ/85Jyf/NyUm/zcmJv84Jyf/OCcn/zcmJ/82Jif/NiYn/zUo
+ KP8zJyf/NCgo/zInJ/8xJyf/Migo/zEoKKguKCgDMCgoAAAAAAAAAAAALycnAC0mJgMvJyerMykp/zIo
+ KP8yKCj/NCkp/zUoKP80KCj/NCYn/zYmJ/83Jyf/NSUm/zYmJv83Jif/NyYm/zYlJf+gmZr/////////
+ ////////////////////////5eTk/1RERf82JCX/NyUm/zgmJ/84Jyf/NiUm/zcmJv83Jif/NiYm/zYm
+ J/81Jib/NScn/zQoKP80Jyf/NSkp/zIoKP8yKCj/Mykp/zEoKKgwKCgDMSgoAAAAAAAAAAAALycnAC8n
+ JwMvJyerMCcn/zEnJ/8yKCj/Mygp/zQoKP80KCj/Mycn/zQmJ/81JSb/NSUm/zUlJv82JSb/NyUm/zUk
+ Jf+gmZr/////////////////////////////////5OLi/09AQf8yISH/NCIj/zMiI/8zIiP/NCMk/zYl
+ Jv81JSb/NSUm/zUmJv80Jif/Mycn/zMnJ/8zJyf/Micn/zEnJ/8yKCj/MSgo/zEoKKgwKCgDMSgoAAAA
+ AAAAAAAAMCgoADEoKAMwKCirMCgo/zEoKP8xJyf/MScn/zInJ/8zJyf/NCgo/zQnJ/80Jif/NSUm/zYm
+ J/82Jif/NiUm/zUkJf+gmpr/////////////////////////////////8O/v/5uTlP+If3//h35//4V8
+ ff+Ee3z/aV5f/zgoKf82Jif/NSUm/zQmJ/80Jyf/Mycn/zQoKP8yKCj/Migo/zIoKP8wJyf/Lycn/y8n
+ J6gvJycDLycnAAAAAAAAAAAAMCgpADIpKgMwKCirMCgo/zEoKP8xKCj/MScn/zInJ/8yKCj/Mycn/zMn
+ J/8zJyf/NScn/zYnJ/82Jif/NiYn/zQkJf+gmZr/////////////////////////////////////////
+ ///+/v7//v7+//3+/v//////yMXF/z8wMf81Jib/NSgo/zQnJ/8zJyf/Mycn/zMoKP8yKCj/Migo/zIo
+ KP8wJyf/Lycn/y8nJ6gzKioDMSgpAAAAAAAAAAAALygoAC8oKAMvJyerLycn/zAnJ/8vJyf/MCcn/zEn
+ J/8xJyf/Micn/zInJ/8zJyf/NCgo/zcpKf84KSn/NiYn/zQkJf+gmZr/////////////////////////
+ ////////////////////////////////////////2tjY/0k8Pf82KSn/NCgo/zQnJ/8zJyf/Micn/zIo
+ KP8yJyf/MCcn/zAoKP8vJyf/Lycn/y4nJ6guJycDLicnAAAAAAAAAAAAMCgpADEpKgMwKCirMCgo/zAo
+ KP8vJyf/MCcn/zEoKP8yKCj/Mygo/zInJ/8yJyf/NCgo/zYpKv83Kir/NSgo/zMlJf+gmpr/////////
+ ////////////////////////////////////////////////////////6Ofn/1VLS/81KCj/NCgo/zMn
+ J/8xJyf/MScn/zInKP8yKCj/MSgo/zAoKP8vJyf/Lycn/y8oKKguJycDLygoAAAAAAAAAAAALicnAC4n
+ JwMuJyerLicn/y8nJ/8vJyf/MCcn/zAoKP8xKCj/Migo/zInJ/8xJyf/Mygo/zQoKP80KCj/NCgo/zIm
+ Jv+fmpr/////////////////////////////////////////////////////////////////8vLy/2Na
+ Wv8xJSX/Mygo/zEnJ/8yJyf/Micn/zEoKP8vJyf/Lycn/y8nJ/8uJyf/Lygo/y8oKKgtJiYDLycnAAAA
+ AAAAAAAALicnAC0nJwMuJyerLygo/zApKf8vKCj/MCcn/zAoKP8wJyf/MSgo/zEnJ/8xJyf/Micn/zIo
+ KP8yJyf/Mycn/zMnJ/+fmpr/////////////////////////////////////////////////////////
+ ////////+vr6/3Rubv8uJCT/MScn/zIoKP8yKCj/MSgo/zAnJ/8vJyf/MCgo/zApKf8vKCj/Lygo/y8o
+ KKgsJiYDLicnAAAAAAAAAAAALScnAC0nJwMtJyerLygo/zApKf8vKCj/Lycn/zAoKP8wKCj/MCgo/zAn
+ J/8xJyf/Micn/zInJ/8yJyf/MScn/zInJ/+gm5v/////////////////////////////////////////
+ /////////////////////////////4mEhP8vJCT/MScn/zIoKf8yKSn/MSgo/zAnJ/8vJyf/Lygo/zAp
+ Kf8vKCj/Lico/y8oKKgsJycDLigoAAAAAAAAAAAALScnAC0nJwQtJyerLScn/y4nJ/8uJyf/Licn/y4n
+ J/8vJyf/Lycn/zAnJ/8vJyf/MCcn/zEnJ/8xJyf/MScn/zAmJv+UkJD/7e3t/+zr6//r6+v/6+vr/+vr
+ 6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7e3t/5KOjv8wJib/Lycn/y8nJ/8wKCj/MCgo/y8o
+ KP8uJyf/Licn/y4nJ/8uJyf/LScn/y0nJ6ktJycDLScnAAAAAAAAAAAANC8vAEM/PwEvKSmgLigo/y4n
+ J/8uJyf/Lycn/y4nJ/8uJyf/Lygo/zAoKP8wJyf/Lycn/y8nJ/8vJyf/MCcn/zEnJ/9EPDz/Vk5O/1ZN
+ Tf9VTU3/Vk1N/1VNTf9WTU3/Vk1N/1VNTf9VTU3/Vk5O/1ZOTv9VTU3/VE1N/0Q9Pf8vJyf/Lycn/zAn
+ J/8vJyf/Lycn/y8oKP8uJyf/Lygo/y4nJ/8uJyf/LScn/y4oKJ1PTU0BMy4uAAAAAAAAAAAAWlhZACsk
+ JAAyLCxfLigo+C0nJ/8uJyf/Licn/y4nJ/8vKCj/MCkp/zApKf8wKCj/Lycn/y8nJ/8wJyf/MCgo/zEo
+ KP8wJyf/LiUl/y4lJf8uJSX/LyUl/y8lJf8vJSX/LiUl/y4lJf8vJSX/MCYn/zAmJv8uJib/LSUl/y4m
+ Jv8wJyf/MCgo/zAoKP8vKCj/Lygo/y4nJ/8uJyf/Lico/y0nJ/8tJyf/Ligo9zErLFwrJSUAWVdYAAAA
+ AAAAAAAAAAAAADYxMQA5NDQOMSssiy8pKe0uKCj/LScn/y4nJ/8uJyf/Lygo/y8oKP8vKCj/Licn/y8n
+ J/8wKCj/Lycn/zAoKP8wKCj/Lycn/zAnJ/8wJyf/MCgo/zAoKP8wJyf/MCcn/y8nJ/8wJyf/MCgo/zAo
+ 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
+ AElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/FModel/Forms/Settings.Designer.cs b/FModel/Forms/Settings.Designer.cs
index e0458cca..571e3d2d 100644
--- a/FModel/Forms/Settings.Designer.cs
+++ b/FModel/Forms/Settings.Designer.cs
@@ -218,8 +218,10 @@
//
// filenameLabel
//
+ this.filenameLabel.AutoEllipsis = true;
this.filenameLabel.AutoSize = true;
this.filenameLabel.Location = new System.Drawing.Point(115, 76);
+ this.filenameLabel.MaximumSize = new System.Drawing.Size(260, 13);
this.filenameLabel.Name = "filenameLabel";
this.filenameLabel.Size = new System.Drawing.Size(60, 13);
this.filenameLabel.TabIndex = 24;
diff --git a/FModel/MainWindow.Designer.cs b/FModel/MainWindow.Designer.cs
index 6225f401..70442654 100644
--- a/FModel/MainWindow.Designer.cs
+++ b/FModel/MainWindow.Designer.cs
@@ -54,12 +54,11 @@
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutFModelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.panel1 = new System.Windows.Forms.Panel();
- this.AESKeyComboBox = new System.Windows.Forms.ComboBox();
+ this.button1 = new System.Windows.Forms.Button();
this.StopButton = new System.Windows.Forms.Button();
this.OpenImageButton = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.FilterTextBox = new System.Windows.Forms.TextBox();
- this.label1 = new System.Windows.Forms.Label();
this.ExtractButton = new System.Windows.Forms.Button();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.treeView1 = new System.Windows.Forms.TreeView();
@@ -271,12 +270,11 @@
// panel1
//
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
- this.panel1.Controls.Add(this.AESKeyComboBox);
+ this.panel1.Controls.Add(this.button1);
this.panel1.Controls.Add(this.StopButton);
this.panel1.Controls.Add(this.OpenImageButton);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.FilterTextBox);
- this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.ExtractButton);
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel1.Location = new System.Drawing.Point(0, 657);
@@ -284,14 +282,17 @@
this.panel1.Size = new System.Drawing.Size(1191, 26);
this.panel1.TabIndex = 2;
//
- // AESKeyComboBox
+ // button1
//
- this.AESKeyComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.AESKeyComboBox.FormattingEnabled = true;
- this.AESKeyComboBox.Location = new System.Drawing.Point(482, 4);
- this.AESKeyComboBox.Name = "AESKeyComboBox";
- this.AESKeyComboBox.Size = new System.Drawing.Size(454, 21);
- this.AESKeyComboBox.TabIndex = 7;
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.button1.Location = new System.Drawing.Point(709, 3);
+ this.button1.Margin = new System.Windows.Forms.Padding(0);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(191, 21);
+ this.button1.TabIndex = 8;
+ this.button1.Text = "AES Manager";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.Button1_Click);
//
// StopButton
//
@@ -338,16 +339,6 @@
this.FilterTextBox.TabIndex = 3;
this.FilterTextBox.TextChanged += new System.EventHandler(this.FilterTextBox_TextChanged);
//
- // label1
- //
- this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(424, 7);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(52, 13);
- this.label1.TabIndex = 2;
- this.label1.Text = "AES Key:";
- //
// ExtractButton
//
this.ExtractButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
@@ -521,7 +512,6 @@
private System.Windows.Forms.ToolStripMenuItem aboutFModelToolStripMenuItem;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button ExtractButton;
- private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox FilterTextBox;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
@@ -542,7 +532,7 @@
private System.ComponentModel.BackgroundWorker backgroundWorker2;
private System.Windows.Forms.ToolStripMenuItem filesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
- private System.Windows.Forms.ComboBox AESKeyComboBox;
+ private System.Windows.Forms.Button button1;
}
}
diff --git a/FModel/MainWindow.cs b/FModel/MainWindow.cs
index fbcd93b4..907ae6ff 100644
--- a/FModel/MainWindow.cs
+++ b/FModel/MainWindow.cs
@@ -30,7 +30,6 @@ namespace FModel
{
#region to refactor
private static Stopwatch StopWatch { get; set; }
- private static string[] _paksArray { get; set; }
public static string[] PakAsTxt { get; set; }
private static Dictionary _diffToExtract { get; set; }
private static string _backupFileName { get; set; }
@@ -87,7 +86,11 @@ namespace FModel
#endregion
#region LOAD & LEAVE
- //METHODS
+ ///
+ /// add all paks found to the toolstripmenu as an item
+ ///
+ ///
+ ///
private void AddPaKs(IEnumerable thePaks, int index)
{
Invoke(new Action(() =>
@@ -95,6 +98,11 @@ namespace FModel
loadOneToolStripMenuItem.DropDownItems.Add(Path.GetFileName(thePaks.ElementAt(index)));
}));
}
+
+ ///
+ /// check if path exists
+ /// get all files with extension .pak, add them to the toolstripmenu, read the guid and add them to the right list
+ ///
private void FillWithPaKs()
{
if (!Directory.Exists(Settings.Default.PAKsPath))
@@ -108,34 +116,23 @@ namespace FModel
else
{
IEnumerable yourPaKs = Directory.GetFiles(Settings.Default.PAKsPath).Where(x => x.EndsWith(".pak"));
- int count = 0;
- var thePaks = yourPaKs as string[] ?? yourPaKs.ToArray();
- foreach (var dummy in thePaks) count++;
- _paksArray = new string[count];
- for (int i = 0; i < thePaks.Count(); i++)
+ for (int i = 0; i < yourPaKs.Count(); i++)
{
- AddPaKs(thePaks, i);
- _paksArray[i] = Path.GetFileName(thePaks.ElementAt(i));
- }
- }
- }
- private void KeyCheck()
- {
- Invoke(new Action(() =>
- {
- try
- {
- foreach (string s in AESManager.deserialize())
+ AddPaKs(yourPaKs, i); //add to toolstrip
+
+ string arCurrentUsedPak = yourPaKs.ElementAt(i); //SET CURRENT PAK
+ string arCurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + Path.GetFileName(arCurrentUsedPak)); //SET CURRENT PAK GUID
+
+ if (arCurrentUsedPakGuid == "0-0-0-0")
{
- if (!AESKeyComboBox.Items.Contains(@"0x" + s)) { AESKeyComboBox.Items.Add(@"0x" + s); }
- AESKeyComboBox.SelectedIndex = AESKeyComboBox.FindStringExact(@"0x" + Settings.Default.AESKey);
+ ThePak.mainPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
+ }
+ if (arCurrentUsedPakGuid != "0-0-0-0")
+ {
+ ThePak.dynamicPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
}
}
- catch (FileNotFoundException)
- {
- AESKeyComboBox.Text = @"0x" + Settings.Default.AESKey;
- }
- }));
+ }
}
//EVENTS
@@ -146,7 +143,8 @@ namespace FModel
DLLImport.SetTreeViewTheme(treeView1.Handle);
_backupFileName = "\\FortniteGame_" + DateTime.Now.ToString("MMddyyyy") + ".txt";
- AESManager.AESEntries = new List();
+ ThePak.dynamicPaksList = new List();
+ ThePak.mainPaksList = new List();
// Copy user settings from previous application version if necessary
if (Settings.Default.UpdateSettings)
@@ -158,7 +156,6 @@ namespace FModel
await Task.Run(() => {
FillWithPaKs();
- KeyCheck();
Utilities.SetOutputFolder();
Utilities.SetFolderPermission(App.DefaultOutputPath);
Utilities.JohnWickCheck();
@@ -255,65 +252,71 @@ namespace FModel
OpenMe();
};
}
+ private void Button1_Click(object sender, EventArgs e)
+ {
+ var aesForms = new Forms.AESManager();
+ if (Application.OpenForms[aesForms.Name] == null)
+ {
+ aesForms.Show();
+ }
+ else
+ {
+ Application.OpenForms[aesForms.Name].Focus();
+ }
+ }
#endregion
#region PAKLIST & FILL TREE
//METHODS
- private void RegisterPaKsinDict(string[] allYourPaKs, ToolStripItemClickedEventArgs theSinglePak = null, bool loadAllPaKs = false)
+ private void RegisterPaKsinDict(ToolStripItemClickedEventArgs theSinglePak = null, bool loadAllPaKs = false)
{
StringBuilder sb = new StringBuilder();
- for (int i = 0; i < allYourPaKs.Length; i++)
+ for (int i = 0; i < ThePak.mainPaksList.Count; i++)
{
- string arCurrentUsedPak = allYourPaKs[i]; //SET CURRENT PAK
- string arCurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + arCurrentUsedPak); //SET CURRENT PAK GUID
-
- if (arCurrentUsedPakGuid == "0-0-0-0") //NO DYNAMIC PAK IN DICTIONARY
+ try
{
- try
- {
- JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + arCurrentUsedPak, Settings.Default.AESKey);
- }
- catch (Exception)
- {
- break;
- }
+ JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + ThePak.mainPaksList[i].thePak, Settings.Default.AESKey);
+ }
+ catch (Exception)
+ {
+ break;
+ }
- string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
- if (CurrentUsedPakLines != null)
- {
- string mountPoint = JohnWick.MyExtractor.GetMountPoint();
- ThePak.PaksMountPoint.Add(arCurrentUsedPak, mountPoint.Substring(9));
+ string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (CurrentUsedPakLines != null)
+ {
+ string mountPoint = JohnWick.MyExtractor.GetMountPoint();
+ ThePak.PaksMountPoint.Add(ThePak.mainPaksList[i].thePak, mountPoint.Substring(9));
- for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
+ for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
+ {
+ CurrentUsedPakLines[ii] = mountPoint.Substring(6) + CurrentUsedPakLines[ii];
+
+ string CurrentUsedPakFileName = CurrentUsedPakLines[ii].Substring(CurrentUsedPakLines[ii].LastIndexOf("/", StringComparison.Ordinal) + 1);
+ if (CurrentUsedPakFileName.Contains(".uasset") || CurrentUsedPakFileName.Contains(".uexp") || CurrentUsedPakFileName.Contains(".ubulk"))
{
- CurrentUsedPakLines[ii] = mountPoint.Substring(6) + CurrentUsedPakLines[ii];
-
- string CurrentUsedPakFileName = CurrentUsedPakLines[ii].Substring(CurrentUsedPakLines[ii].LastIndexOf("/", StringComparison.Ordinal) + 1);
- if (CurrentUsedPakFileName.Contains(".uasset") || CurrentUsedPakFileName.Contains(".uexp") || CurrentUsedPakFileName.Contains(".ubulk"))
+ if (!ThePak.AllpaksDictionary.ContainsKey(CurrentUsedPakFileName.Substring(0, CurrentUsedPakFileName.LastIndexOf(".", StringComparison.Ordinal))))
{
- if (!ThePak.AllpaksDictionary.ContainsKey(CurrentUsedPakFileName.Substring(0, CurrentUsedPakFileName.LastIndexOf(".", StringComparison.Ordinal))))
- {
- ThePak.AllpaksDictionary.Add(CurrentUsedPakFileName.Substring(0, CurrentUsedPakFileName.LastIndexOf(".", StringComparison.Ordinal)), arCurrentUsedPak);
- }
+ ThePak.AllpaksDictionary.Add(CurrentUsedPakFileName.Substring(0, CurrentUsedPakFileName.LastIndexOf(".", StringComparison.Ordinal)), ThePak.mainPaksList[i].thePak);
}
- else
+ }
+ else
+ {
+ if (!ThePak.AllpaksDictionary.ContainsKey(CurrentUsedPakFileName))
{
- if (!ThePak.AllpaksDictionary.ContainsKey(CurrentUsedPakFileName))
- {
- ThePak.AllpaksDictionary.Add(CurrentUsedPakFileName, arCurrentUsedPak);
- }
- }
-
- if (loadAllPaKs)
- {
- sb.Append(CurrentUsedPakLines[ii] + "\n");
+ ThePak.AllpaksDictionary.Add(CurrentUsedPakFileName, ThePak.mainPaksList[i].thePak);
}
}
- if (loadAllPaKs) { UpdateConsole(".PAK mount point: " + mountPoint.Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting"); }
- if (theSinglePak != null && arCurrentUsedPak == theSinglePak.ClickedItem.Text) { PakAsTxt = CurrentUsedPakLines; }
+ if (loadAllPaKs)
+ {
+ sb.Append(CurrentUsedPakLines[ii] + "\n");
+ }
}
+
+ if (loadAllPaKs) { UpdateConsole(".PAK mount point: " + mountPoint.Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting"); }
+ if (theSinglePak != null && ThePak.mainPaksList[i].thePak == theSinglePak.ClickedItem.Text) { PakAsTxt = CurrentUsedPakLines; }
}
}
if (theSinglePak != null)
@@ -451,20 +454,12 @@ namespace FModel
ThePak.PaksMountPoint = new Dictionary();
PakAsTxt = null;
- Invoke(new Action(() =>
- {
- Settings.Default.AESKey = AESKeyComboBox.Text.Substring(2).ToUpper();
- Settings.Default.Save();
- AESManager.serialize(Settings.Default.AESKey);
- KeyCheck();
- }));
-
if (selectedPak != null)
{
UpdateConsole(Settings.Default.PAKsPath + "\\" + selectedPak.ClickedItem.Text, Color.FromArgb(255, 244, 132, 66), "Loading");
//ADD TO DICTIONNARY
- RegisterPaKsinDict(_paksArray, selectedPak);
+ RegisterPaKsinDict(selectedPak);
if (PakAsTxt != null)
{
@@ -485,7 +480,7 @@ namespace FModel
if (loadAllPaKs)
{
//ADD TO DICTIONNARY
- RegisterPaKsinDict(_paksArray, null, true);
+ RegisterPaKsinDict(null, true);
if (new System.IO.FileInfo(App.DefaultOutputPath + "\\FortnitePAKs.txt").Length <= 0) //File will always exist so we check the file size instead
{
@@ -512,7 +507,7 @@ namespace FModel
if (getDiff)
{
//ADD TO DICTIONNARY
- RegisterPaKsinDict(_paksArray, null, true);
+ RegisterPaKsinDict(null, true);
if (!File.Exists(App.DefaultOutputPath + "\\FortnitePAKs.txt"))
{
@@ -541,7 +536,7 @@ namespace FModel
}
}
}
- private void CreateBackupList(string[] allYourPaKs)
+ private void CreateBackupList()
{
_backupDynamicKeys = null;
StringBuilder sb = new StringBuilder();
@@ -561,43 +556,34 @@ namespace FModel
}
}
- Invoke(new Action(() =>
+ for (int i = 0; i < ThePak.mainPaksList.Count; i++)
{
- Settings.Default.AESKey = AESKeyComboBox.Text.Substring(2).ToUpper();
- Settings.Default.Save();
- AESManager.serialize(Settings.Default.AESKey);
- KeyCheck();
- }));
-
- for (int i = 0; i < allYourPaKs.Length; i++)
- {
- string arCurrentUsedPak = allYourPaKs[i]; //SET CURRENT PAK
- string arCurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + arCurrentUsedPak); //SET CURRENT PAK GUID
-
- if (arCurrentUsedPakGuid == "0-0-0-0") //NO DYNAMIC PAK
+ try
{
- try
- {
- JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + arCurrentUsedPak, Settings.Default.AESKey);
- }
- catch (Exception)
- {
- break;
- }
-
- string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
- if (CurrentUsedPakLines != null)
- {
- for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
- {
- CurrentUsedPakLines[ii] = JohnWick.MyExtractor.GetMountPoint().Substring(6) + CurrentUsedPakLines[ii];
-
- sb.Append(CurrentUsedPakLines[ii] + "\n");
- }
- UpdateConsole(".PAK mount point: " + JohnWick.MyExtractor.GetMountPoint().Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting");
- }
+ JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + ThePak.mainPaksList[i].thePak, Settings.Default.AESKey);
}
- else if (_backupDynamicKeys != null)
+ catch (Exception)
+ {
+ AppendText("0x" + Settings.Default.AESKey + " doesn't work with the main paks.", Color.Red, true);
+ break;
+ }
+
+ string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (CurrentUsedPakLines != null)
+ {
+ for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
+ {
+ CurrentUsedPakLines[ii] = JohnWick.MyExtractor.GetMountPoint().Substring(6) + CurrentUsedPakLines[ii];
+
+ sb.Append(CurrentUsedPakLines[ii] + "\n");
+ }
+ UpdateConsole(".PAK mount point: " + JohnWick.MyExtractor.GetMountPoint().Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting");
+ }
+ }
+
+ for (int i = 0; i < ThePak.dynamicPaksList.Count; i++)
+ {
+ if (_backupDynamicKeys != null)
{
string oldGuid = string.Empty;
foreach (string myString in _backupDynamicKeys)
@@ -610,7 +596,7 @@ namespace FModel
* it works fine that way because of the loop through all the paks
* even if in keychain we do "found 1004" -> "found 1001" -> "found 1004" through the paks we do 1000 -> 1001 -> 1002...
***/
- if (newGuid == arCurrentUsedPakGuid && oldGuid != newGuid)
+ if (newGuid == ThePak.dynamicPaksList[i].thePakGuid && oldGuid != newGuid)
{
byte[] bytes = Convert.FromBase64String(parts[1]);
string aeskey = BitConverter.ToString(bytes).Replace("-", "");
@@ -618,10 +604,11 @@ namespace FModel
try
{
- JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + arCurrentUsedPak, aeskey);
+ JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + ThePak.dynamicPaksList[i].thePak, aeskey);
}
catch (Exception)
{
+ AppendText("0x" + aeskey + " doesn't work with " + ThePak.dynamicPaksList[i].thePak, Color.Red, true); //this should never be triggered
continue;
}
@@ -635,7 +622,7 @@ namespace FModel
sb.Append(CurrentUsedPakLines[ii] + "\n");
}
AppendText("Backing up ", Color.Black);
- AppendText(arCurrentUsedPak, Color.DarkRed, true);
+ AppendText(ThePak.dynamicPaksList[i].thePak, Color.DarkRed, true);
}
}
}
@@ -742,6 +729,7 @@ namespace FModel
private async void loadOneToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
await Task.Run(() => {
+ JohnWick.myArray = null;
Invoke(new Action(() =>
{
scintilla1.Text = "";
@@ -756,6 +744,7 @@ namespace FModel
}
private async void loadAllToolStripMenuItem_Click(object sender, EventArgs e)
{
+ JohnWick.myArray = null;
Invoke(new Action(() =>
{
scintilla1.Text = "";
@@ -787,7 +776,7 @@ namespace FModel
private async void backupPAKsToolStripMenuItem_Click(object sender, EventArgs e)
{
await Task.Run(() => {
- CreateBackupList(_paksArray);
+ CreateBackupList();
});
}
//UPDATE MODE
@@ -1398,7 +1387,12 @@ namespace FModel
if (File.Exists(imgPath))
{
- pictureBox1.Image = Image.FromFile(imgPath);
+ Image img;
+ using (var bmpTemp = new Bitmap(imgPath))
+ {
+ img = new Bitmap(bmpTemp);
+ }
+ pictureBox1.Image = img;
}
if (autoSaveImagesToolStripMenuItem.Checked || updateModeToolStripMenuItem.Checked)
diff --git a/FModel/MainWindow.resx b/FModel/MainWindow.resx
index 00d7fd36..0b178330 100644
--- a/FModel/MainWindow.resx
+++ b/FModel/MainWindow.resx
@@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa
- CAAAAk1TRnQBSQFMAgEBAgEAARABAQEQAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ CAAAAk1TRnQBSQFMAgEBAgEAASgBAQEoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
diff --git a/FModel/Methods/AESManager/AESManager.cs b/FModel/Methods/AESManager/AESManager.cs
index a34a3f41..d6d2c87c 100644
--- a/FModel/Methods/AESManager/AESManager.cs
+++ b/FModel/Methods/AESManager/AESManager.cs
@@ -8,7 +8,7 @@ namespace FModel
{
static class AESManager
{
- public static List AESEntries { get; set; }
+ /*public static List AESEntries { get; set; }
private static XmlSerializer serializer = new XmlSerializer(typeof(List));
public static void serialize(string data)
@@ -51,6 +51,6 @@ namespace FModel
toReturn[i] = outputList[i].theKey;
}
return toReturn;
- }
+ }*/
}
}
diff --git a/FModel/Methods/IconGenerator/ItemIcon.cs b/FModel/Methods/IconGenerator/ItemIcon.cs
index 747de9fe..41b23be5 100644
--- a/FModel/Methods/IconGenerator/ItemIcon.cs
+++ b/FModel/Methods/IconGenerator/ItemIcon.cs
@@ -4,6 +4,7 @@ using FModel.Parser.Items;
using FModel.Properties;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
@@ -262,6 +263,7 @@ namespace FModel
//do not crash when JsonSerialization does weird stuff
}
}
+ else { GetItemIcon(theItem); } //Trails_ID_059_Sony2 smh :thinking:
}
}
catch (KeyNotFoundException)
diff --git a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
index 5d26f8fa..566f735c 100644
--- a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
+++ b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
@@ -82,8 +82,8 @@ namespace FModel
{
reader.ReadBytes(24);
- int fileLength = reader.ReadInt32();
- Console.WriteLine(fileLength);
+ int AssetLength = reader.ReadInt32();
+ Console.WriteLine(AssetLength);
reader.ReadBytes(13);
int NamespaceCount = reader.ReadInt32();
@@ -99,9 +99,7 @@ namespace FModel
for (int i = 0; i < LocalizedStringArray.Length; i++)
{
string tag = AssetReader.readCleanString(reader);
- if (tag != "None") { LocalizedStringArray[i] = tag; }
-
- Console.WriteLine(LocalizedStringArray[i]);
+ if (tag != "None") { LocalizedStringArray[i] = tag; Console.WriteLine(LocalizedStringArray[i]); }
}
}
}
diff --git a/FModel/Methods/JohnWick/JohnWick.cs b/FModel/Methods/JohnWick/JohnWick.cs
index e08aefed..53103ff0 100644
--- a/FModel/Methods/JohnWick/JohnWick.cs
+++ b/FModel/Methods/JohnWick/JohnWick.cs
@@ -13,7 +13,7 @@ namespace FModel
{
public static PakAsset MyAsset;
public static PakExtractor MyExtractor;
- private static string[] myArray { get; set; }
+ public static string[] myArray { get; set; }
private static string currentPakToCheck { get; set; }
///
@@ -70,7 +70,7 @@ namespace FModel
/// the path of the last created file (usually the uexp file but we don't care about the extension, so it's fine)
public static string ExtractAsset(string currentPak, string currentItem)
{
- if (currentPak != currentPakToCheck)
+ if (currentPak != currentPakToCheck || myArray == null)
{
MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + currentPak, Settings.Default.AESKey);
myArray = MyExtractor.GetFileList().ToArray();
diff --git a/FModel/Methods/Serializer/AssetReader.cs b/FModel/Methods/Serializer/AssetReader.cs
index 3ecb9ede..5a59cf5c 100644
--- a/FModel/Methods/Serializer/AssetReader.cs
+++ b/FModel/Methods/Serializer/AssetReader.cs
@@ -4,7 +4,7 @@ using System.Text;
namespace FModel
{
- class AssetReader
+ static class AssetReader
{
public static string readCleanString(BinaryReader reader)
{
diff --git a/FModel/Methods/VarApp.cs b/FModel/Methods/VarApp.cs
index 78fc96bc..a2026f8e 100644
--- a/FModel/Methods/VarApp.cs
+++ b/FModel/Methods/VarApp.cs
@@ -6,6 +6,8 @@ namespace FModel
{
static class ThePak
{
+ public static List mainPaksList { get; set; }
+ public static List dynamicPaksList { get; set; }
public static string CurrentUsedPak { get; set; }
public static string CurrentUsedPakGuid { get; set; }
public static string CurrentUsedItem { get; set; }
@@ -85,15 +87,17 @@ namespace FModel
}
}
- public struct AESEntry : IEquatable
+ public struct PaksEntry : IEquatable
{
- internal AESEntry(string myKey)
+ internal PaksEntry(string myPak, string myPakGuid)
{
- theKey = myKey;
+ thePak = myPak;
+ thePakGuid = myPakGuid;
}
- public string theKey { get; set; }
+ public string thePak { get; set; }
+ public string thePakGuid { get; set; }
- bool IEquatable.Equals(AESEntry other)
+ bool IEquatable.Equals(PaksEntry other)
{
throw new NotImplementedException();
}