文件或目錄更新示例:
會根據配置文件中的MD5值,和本地文件進行對比,若有變動則更新。
1、更新指定文件:
SciTools.UpdateTool.updateFiles("https://scimence.gitee.io/easyicon/MD5.txt", "easyIcon.exe", true);
2、更新指定目錄:
SciTools.UpdateTool.updateFiles("https://scimence.gitee.io/easyicon/MD5.txt", "png/", false, true);
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SciTools
{
/// 文件或目錄更新示例:
/// 1、更新指定文件:SciTools.UpdateTool.updateFiles("https://scimence.gitee.io/easyicon/MD5.txt", "easyIcon.exe", true);
/// 2、更新指定目錄:SciTools.UpdateTool.updateFiles("https://scimence.gitee.io/easyicon/MD5.txt", "png/", false, true);
/// MD5.txt文件生成工具: https://scimence.gitee.io/update/tools/getMD5.exe
/// <summary>
/// SciTools.UpdateTool.AutoUpdate(); // 應用自動檢測更新;
///
/// 更新原理:
/// 根據ToolUrl_MD5獲取當前應用線上的md5信息,
/// 通過Update.exe判斷當前應用的MD5值與線上的md5信息是否相同,
/// 若不同,則結束當前進程,從ToolUrl_MD5中解析當前應用網絡路徑,下載並啓動。Update.exe自刪除。
///
/// 依賴工具類:
/// SciTools.WebTool.cs; https://gitee.com/scimence/sciTools/raw/master/CS/WebTool.cs
/// SciTools.EncoderTool_Alphabet.cs; https://gitee.com/scimence/sciTools/raw/master/CS/EncoderTool_Alphabet.cs
/// </summary>
public class UpdateTool
{
// 當前命名空間名稱
private static string NAMESPACE = GetNamespace(Assembly.GetEntryAssembly());
//private static string NAMESPACE = "ChannelDemoTool";
/// <summary>
/// 獲取Assembly所在的命名空間名稱
/// </summary>
private static string GetNamespace(Assembly asssembly)
{
string Namespace = "";
Type[] types = asssembly.GetTypes();
if (types != null && types.Length > 0)
{
Namespace = types[0].Namespace;
}
return Namespace;
}
/// <summary>
/// 獲取當前運行路徑
/// </summary>
public static string curDir()
{
return AppDomain.CurrentDomain.BaseDirectory;
}
/// <summary>
/// 檢測目錄是否存在,若不存在則創建
/// </summary>
public static void checkDir(string path)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
/// <summary>
/// 保存Byte數組爲文件
/// </summary>
public static void SaveFile(Byte[] array, string path, bool repalce = false)
{
if (repalce && System.IO.File.Exists(path)) System.IO.File.Delete(path); // 若目標文件存在,則替換
if (!System.IO.File.Exists(path))
{
// 創建輸出流
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
//將byte數組寫入文件中
fs.Write(array, 0, array.Length);
fs.Close();
}
}
/// <summary>
/// 爲arg添加引號
/// </summary>
private static string AddQuotation(string arg)
{
if (arg.EndsWith("\\") && !arg.EndsWith("\\\\")) arg += "\\";
arg = "\"" + arg + "\"";
return arg;
}
/// <summary>
/// 獲取Resource資源
/// </summary>
private static byte[] getResource(string name)
{
string Namespace = Assembly.GetEntryAssembly().GetTypes()[0].Namespace;
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
byte[] bytes = (byte[])rm.GetObject(name);
return bytes;
}
/// <summary>
/// 獲取Updata.exe文件內容
/// </summary>
private static byte[] getUpdataData()
{
//string file = @"C:\Users\wangzhongyuan\Documents\visual studio 2012\Projects\GifTool\GifTool\Resources\Update.data";
//string data = Encoder.getFileData(file);
byte[] bytes = EncoderTool_Alphabet.ToBytes(data);
return bytes;
}
// "%~dp0Update.exe" "[CONFIG]https://git.oschina.net/joymeng/channelDemo/raw/master/MD5.txt" "E:\tmp2\Update_Files\\" "渠道計費包\0000001\\"
/// <summary>
/// 調用Update.exe,更新以perfix爲前綴的配置文件
///
/// RESTART標識更新後,是否打開文件
/// 若本地perfix目錄下的其他文件需要保留,則KEEPOTHER=true
/// </summary>
public static void updateFiles(string url, string perfix, bool RESTART = false, bool KEEPOTHER = false)
{
string update_EXE = curDir() + "Update.exe";
//byte[] bytes = getResource("Update");
byte[] bytes = getUpdataData();
if (!File.Exists(update_EXE)) SaveFile(bytes, update_EXE, false);
else if (!updateIsRunning()) SaveFile(bytes, update_EXE, true); // 更新Update.exe
string path = curDir();
url = AddQuotation("[CONFIG]" + url);
path = AddQuotation(path);
perfix = AddQuotation(perfix);
update_EXE = AddQuotation(update_EXE);
// 調用更新插件執行軟件更新邏輯
String arg = url + " " + path + " " + perfix;
if (RESTART) arg += " " + "RESTART";
if (KEEPOTHER) arg += " " + "false";
System.Diagnostics.Process.Start(update_EXE, arg);
autoDeletUpdateExe(); // 更新後刪除update.exe
}
private static Timer timer = null;
private static void autoDeletUpdateExe(object sender = null, EventArgs e = null)
{
string update_EXE = curDir() + "Update.exe";
if (!File.Exists(update_EXE)) return;
if (!updateIsRunning())
{
File.Delete(update_EXE);
if (timer != null)
{
timer.Stop();
timer = null;
}
}
else
{
if (timer == null)
{
timer = new Timer();
timer.Interval = 700;
timer.Tick += new System.EventHandler(autoDeletUpdateExe);
timer.Start();
}
}
}
/// <summary>
/// 應用自更新,也可更新MD5.txt中配置的任意文件
/// </summary>
/// <param name="ToolUrl_MD5">工具MD5信息文件的url地址</param>
/// <param name="perfix_EXE">當前待更新的應用名稱</param>
public static void AutoUpdate(string ToolUrl_MD5 = "", string perfix_EXE = "")
{
if (ToolUrl_MD5.Equals("")) ToolUrl_MD5 = "https://git.oschina.net/scimence/" + NAMESPACE + "/raw/master/MD5.txt";
if (perfix_EXE.Equals("")) perfix_EXE = NAMESPACE /*+ ".exe"*/;
updateFiles(ToolUrl_MD5, perfix_EXE, true);
}
/// <summary>
/// 獲取指定網址中的配置信息
/// </summary>
/// <param name="configUrl">配置信息對應網址</param>
/// <param name="key">配置節點名</param>
public static String GetWebConfig(string key = "", string configUrl = "")
{
if (configUrl.Equals("")) configUrl = "https://git.oschina.net/scimence/" + NAMESPACE + "/raw/master/config.txt";
if (key.Equals("")) return "";
return WebTool.getWebData(configUrl, key);
}
/// <summary>
/// 打開本地路徑
/// </summary>
public static void openChannelDir(string channelDir)
{
string localDir = curDir() + channelDir.Replace("/", "\\");
checkDir(localDir);
if (Directory.Exists(localDir))
{
System.Diagnostics.Process.Start("explorer.exe", "/e, " + localDir);
}
}
// 判斷當前是有更新任務正在執行
public static bool updateIsRunning()
{
// 獲取Update.exe後臺進程
System.Diagnostics.Process[] processes1 = System.Diagnostics.Process.GetProcessesByName("Update");
// 無更新進程Update.exe,表示更新完成
return (processes1 != null && processes1.Length != 0);
}
// Update.exe文件
private static string data = "enfkjaaaadaaaaaaaeaaaaaappppaaaaliaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaobplkaoaaleajmncbliabemmncbfegigjhdcahahcgpghhcgbgncagdgbgogogphecagcgfcahchfgocagjgocaeeepfdcagngpgegfcoananakceaaaaaaaaaaaaaafaefaaaaemabadaajojfjofjaaaaaaaaaaaaaaaaoaaaacabalabalaaaaemaaaaaaaiaaaaaaaaaaaaaogkaaaaaacaaaaaaaiaaaaaaaaaeaaaaacaaaaaaaacaaaaaeaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaamaaaaaaaacaaaaaaaaaaaaacaaeaifaaaabaaaaabaaaaaaaaabaaaaabaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaamagjaaaaelaaaaaaaaiaaaaakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaamaaaaaaiigiaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaicaaaaaeiaaaaaaaaaaaaaaaaaaaaaacohegfhiheaaaaaabeekaaaaaacaaaaaaaemaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaagacohchdhcgdaaaaaakaafaaaaaaiaaaaaaaagaaaaaaeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeacohcgfgmgpgdaaaaamaaaaaaaakaaaaaaaacaaaaaafeaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapagjaaaaaaaaaaaaeiaaaaaaacaaafaajidnaaaapackaaaaabaaaaaaceaaaaagoadmaaaaliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabddaaeaaebaaaaaaabaaaabbaahoafaaaaaebepoabbgpoabamaicnbmhoaeaaaaaebhinbgaaaaabanajbgbpcejnajgpbbaaaaakiaafaaaaaehoafaaaaaeacjkakagcibhaaaaagakagalclaaahckaaaaaabddaacaacnaaaaaaacaaaabbaabgciabaaaaagakaccibcaaaaakbgpoabanajcnbcaaacciadaaaaagalahbpcacibeaaaaagakaaagamclaaaickaaaaaabddaacaadoaaaaaaadaaaabbaabgciabaaaaagakaccibcaaaaakbgpoabanajcncdaaaccibdaaaaakhdbeaaaaakalahgpbfaaaaakakahgpbgaaaaakaaahgpbhaaaaakaaaaagamclaaaickaaaabddaafaamiaaaaaaaeaaaabbaabggkakadbggkpoabbgpoabamaicnakaaacakagaldikmaaaaaaaaadbpbpgkpoabbgpoabamaicncfaaacbhgkfpcibiaaaaakbgpoabamaicnalaacaaaaaaaiagoakaaclafaabggkakaaagalclhjaaadbggkdcaladbpbpgkpoacbgpoabclabbgaaamaicnacaaaaaaaaachoahaaaaaebpbpgkadfjnejgfpcibiaaaaakbgpoabamaicncgaaachoagaaaaaebpbpgkadbhgkfifjnejgfphoahaaaaaeadnejgfkcaaaaaaaiagogaakaaclbkaaachoagaaaaaebpbpgkadfjnejgfphoahaaaaaeadnejgfkakaaagalclaaahckbddaafaaklaaaaaaaeaaaabbaabggkakadbggkpoabbgpoabamaicnakaaacakagaldiipaaaaaaaaadbpbpgkpoabbgpoabamaicncfaaaccaaaaaaaiagofpcibiaaaaakbgpoabamaicnahaabhgkakaaclafaabggkakaaagalclfmaaadbggkdcaladbpbpgkpoacbgpoabclabbgaaamaicnacaaaaaaaaaccapopppphpgkfphoahaaaaaeadnejgflakaccaaaaaaaiagofpcibiaaaaakbgpoabamaicnbhaaagcaaaaaaaeagkhoahaaaaaeadbhgkfjnejgflgaakaaagalclaaahckaabddaaeaaboaaaaaaafaaaabbaabggkakacadciaeaaaaagacbpcagkadfjciafaaaaaggaakagalclaaahckaaaabddaadaankaaaaaaagaaaabbaabggkakbggkalbggkambggkanbggkbdaebggkbdafaccaaaaaaaiagofpanadcaaaaaaaiagofpbdaeaccaaaaaaaeagkfpaladcaaaaaaaeagkfpamaccappppppdpgkfpadcappppppdpgkfpfibdafahaifpcibiaaaaakbgpoabbdahbbahcnbeaabbafcaaaaaaaiagogbajgbbbaegbbdafaaclfnahaigacibiaaaaakbgpoabbdahbbahcnebaabbafcaaaaaaaeagkfpcibiaaaaakbgpoabbdahbbahcnbeaabbafcaaaaaaamagogbajgbbbaegbbdafaaclbcaabbafcaaaaaaaeagkgbajgbbbaegbbdafaaaaclalaabbafajgbbbaegbbdafaabbafakagbdagclaabbagckaaaabddaadaabdaaaaaaafaaaabbaabggkakacadfpacggaefpgaakagalclaaahckaabddaadaabdaaaaaaafaaaabbaabggkakacaefpadaeggfpgaakagalclaaahckaabddaacaabaaaaaaaafaaaabbaabggkakacadgbaegbakagalclaaahckbddaadaabbaaaaaaafaaaabbaabggkakadacaegggagbakagalclaaahcknkaaacacemadaeafciaiaaaaagaoaeciahaaaaagaoagciahaaaaagciahaaaaagffacacemaoafciagaaaaagffacacemadciahaaaaagffcknkaaacacemadaeafciajaaaaagaoaeciahaaaaagaoagciahaaaaagciahaaaaagffacacemaoafciagaaaaagffacacemadciahaaaaagffcknkaaacacemadaeafciakaaaaagaoaeciahaaaaagaoagciahaaaaagciahaaaaagffacacemaoafciagaaaaagffacacemadciahaaaaagffcknkaaacacemadaeafcialaaaaagaoaeciahaaaaagaoagciahaaaaagciahaaaaagffacacemaoafciagaaaaagffacacemadciahaaaaagffckaaaaaabddaafaamdaaaaaaahaaaabbaabeakbgalbgambeanbgbdaebgbdafbgbdagcibdaaaaakacgpbjaaaaakbdahbbahiogjalahbofibpeaflbhfibpbafkamaiinbnaaaaabanbgbdaebgbdafclcnaabbafbkflbdagbbafbkfnbofkbdaeajbbagajbbagjgbbahbbafjbgobbaegkciaeaaaaaggajpbbafbhfibdafaabbafahpoaebdajbbajcnmibbafbkflbdagbbafbkfnbofkbdaeajbbagajbbagjgcaiaaaaaaagkbbaegkciaeaaaaaggajpajaibifjahgkbjgkciaeaaaaagjpajaibhfjahgkbpbngkciafaaaaagjpajakagbdaiclaabbaickaabddaaeaaiaaaaaaaajaaaabbaabgciabaaaaagakbggkalbgambganbgamclfiaaacaibofkgkciafaaaaaghoagaaaaaebnjgfpalblciabaaaaagahcibcaaaaagcibkaaaaakgpblaaaaakbifjanagblciabaaaaagahcibcaaaaagcibkaaaaakajbgdcadajclabbgaagpbmaaaaakcibkaaaaakakaaaibhfiamaibjpoacbgpoabbdafbbafcnjlagbdaeclaabbaeckbddaacaaddaaaaaaakaaaabbaabgciabaaaaagakclbkaaacbpbagkfncibdaaaaagagcibkaaaaakakacbpbagkflbaaaaaacbggkpoacamaicnnnagalclaaahckaabddaacaaidaaaaaaalaaaabbaabgciabaaaaagakacamaibpapgkdacjaibpakgkdcfnaibpakgkfjgjefagaaaaaaacaaaaaaalaaaaaabeaaaaaabnaaaaaacgaaaaaadaaaaaaacldibhciabaaaaagakcldjbmciabaaaaagakcldabnciabaaaaagakclchbociabaaaaagakclbobpajciabaaaaagakclbebpakciabaaaaagakclakapaacibnaaaaakakclaaagalclaaahckaabddaahaagiaiaaaaamaaaabbaabgciabaaaaagakbgalclekaahoagaaaaaeahcdaaaaaaaaaaaaaaeaahbhfigmciboaaaaakcdaaaaaaaaaaaapadpfjcibpaaaaakjphoahaaaaaeahcdaaaaaaaaaaaaaaeaahgmciboaaaaakcibpaaaaakjpaaahbhfialahbpbopoacbgpoabbdanbbancnkibeambganbggkbdaebggkbdafbggkbdagbggkbdahbggkbdaibggkbdajbggkbdakbggkbdalaccibaaaaaagamcaabcdefghgkbdaicaijklmnopgobdajcaponmlkjigobdakcahgfedcbagkbdalbgandiehahaaaaaabbaibdaebbajbdafbbakbdagbbalbdahbcaibbajbbakbbalaiajjgbngkcahikegknhgociamaaaaagaabcalbbaibbajbbakaiajbhfijgbpamgkcafglhmhoigociamaaaaagaabcakbbalbbaibbajaiajbifijgbpbbgkcanlhacacegkciamaaaaagaabcajbbakbbalbbaiaiajbjfijgbpbggkcaoomolnmbgociamaaaaagaabcaibbajbbakbbalaiajbkfijgbngkcakpaphmpfgociamaaaaagaabcalbbaibbajbbakaiajblfijgbpamgkcackmgihehgkciamaaaaagaabcakbbalbbaibbajaiajbmfijgbpbbgkcabdegdakigociamaaaaagaabcajbbakbbalbbaiaiajbnfijgbpbggkcaabjfegpngociamaaaaagaabcaibbajbbakbbalaiajbofijgbngkcanijiiagjgkciamaaaaagaabcalbbaibbajbbakaiajbpajfijgbpamgkcakppheeilgociamaaaaagaabcakbbalbbaibbajaiajbpakfijgbpbbgkcalbflppppgociamaaaaagaabcajbbakbbalbbaiaiajbpalfijgbpbggkcalonhfmijgociamaaaaagaabcaibbajbbakbbalaiajbpamfijgbngkcaccbbjaglgkciamaaaaagaabcalbbaibbajbbakaiajbpanfijgbpamgkcajdhbjipngociamaaaaagaabcakbbalbbaibbajaiajbpaofijgbpbbgkcaioedhjkggociamaaaaagaabcajbbakbbalbbaiaiajbpapfijgbpbggkcacbaileejgkciamaaaaagaabcaibbajbbakbbalaiajbhfijgblgkcagccfbopggocianaaaaagaabcalbbaibbajbbakaiajbmfijgbpajgkcaealdeamagocianaaaaagaabcakbbalbbaibbajaiajbpalfijgbpaogkcafbfkfocggkcianaaaaagaabcajbbakbbalbbaiaiajjgbpbegkcakkmhlgojgocianaaaaagaabcaibbajbbakbbalaiajblfijgblgkcafnbacpnggocianaaaaagaabcalbbaibbajbbakaiajbpakfijgbpajgkcafdbeeeacgkcianaaaaagaabcakbbalbbaibbajaiajbpapfijgbpaogkcaibogkbnigocianaaaaagaabcajbbakbbalbbaiaiajbkfijgbpbegkcamiplndohgocianaaaaagaabcaibbajbbakbbalaiajbpajfijgblgkcaogmnobcbgkcianaaaaagaabcalbbaibbajbbakaiajbpaofijgbpajgkcangahdhmdgocianaaaaagaabcakbbalbbaibbajaiajbjfijgbpaogkcaihannfpegocianaaaaagaabcajbbakbbalbbaiaiajbofijgbpbegkcaonbefkefgkcianaaaaagaabcaibbajbbakbbalaiajbpanfijgblgkcaafojodkjgocianaaaaagaabcalbbaibbajbbakaiajbifijgbpajgkcapikdoppmgocianaaaaagaabcakbbalbbaibbajaiajbnfijgbpaogkcanjacgpghgkcianaaaaagaabcajbbakbbalbbaiaiajbpamfijgbpbegkcaikemckingocianaaaaagaabcaibbajbbakbbalaiajblfijgbkgkcaecdjpkppgociaoaaaaagaabcalbbaibbajbbakaiajbofijgbpalgkcaibpghbihgociaoaaaaagaabcakbbalbbaibbajaiajbpalfijgbpbagkcaccgbjngngkciaoaaaaagaabcajbbakbbalbbaiaiajbpaofijgbpbhgkcaamdiofpngociaoaaaaagaabcaibbajbbakbbalaiajbhfijgbkgkcaeeoklokegociaoaaaaagaabcalbbaibbajbbakaiajbkfijgbpalgkcakjmpnoelgkciaoaaaaagaabcakbbalbbaibbajaiajbnfijgbpbagkcagaelllpggociaoaaaaagaabcajbbakbbalbbaiaiajbpakfijgbpbhgkcahalmlplogociaoaaaaagaabcaibbajbbakbbalaiajbpanfijgbkgkcamghojlcigkciaoaaaaagaabcalbbaibbajbbakaiajjgbpalgkcapkchkbokgociaoaaaaagaabcakbbalbbaibbajaiajbjfijgbpbagkcaifdaopnegociaoaaaaagaabcajbbakbbalbbaiaiajbmfijgbpbhgkcaafbniiaegkciaoaaaaagaabcaibbajbbakbbalaiajbpajfijgbkgkcadjnanenjgociaoaaaaagaabcalbbaibbajbbakaiajbpamfijgbpalgkcaofjjnloggociaoaaaaagaabcakbbalbbaibbajaiajbpapfijgbpbagkcapihmkcbpgkciaoaaaaagaabcajbbakbbalbbaiaiajbifijgbpbhgkcagffgkmmegociaoaaaaagaabcaibbajbbakbbalaiajjgbmgkcaeecccjpegociapaaaaagaabcalbbaibbajbbakaiajbnfijgbpakgkcajhppckedgkciapaaaaagaabcakbbalbbaibbajaiajbpaofijgbpapgkcakhcdjeklgociapaaaaagaabcajbbakbbalbbaiaiajblfijgbpbfgkcadjkajdpmgociapaaaaagaabcaibbajbbakbbalaiajbpamfijgbmgkcamdfjflgfgkciapaaaaagaabcalbbaibbajbbakaiajbjfijgbpakgkcajcmmamipgociapaaaaagaabcakbbalbbaibbajaiajbpakfijgbpapgkcahnpeopppgociapaaaaagaabcajbbakbbalbbaiaiajbhfijgbpbfgkcanbfnieifgociapaaaaagaabcaibbajbbakbbalaiajbofijgbmgkcaephokigpgkciapaaaaagaabcalbbaibbajbbakaiajbpapfijgbpakgkcaoaogcmpogociapaaaaagaabcakbbalbbaibbajaiajbmfijgbpapgkcabeedabkdgociapaaaaagaabcajbbakbbalbbaiaiajbpanfijgbpbfgkcakbbbaieogkciapaaaaagaabcaibbajbbakbbalaiajbkfijgbmgkcaichofdphgociapaaaaagaabcalbbaibbajbbakaiajbpalfijgbpakgkcadfpcdklngociapaaaaagaabcakbbalbbaibbajaiajbifijgbpapgkcallncnhckgkciapaaaaagaabcajbbakbbalbbaiaiajbpajfijgbpbfgkcajbndigolgociapaaaaagaabbaibbaeciahaaaaagbdaibbajbbafciahaaaaagbdajbbakbbagciahaaaaagbdakbbalbbahciahaaaaagbdalaaajbpbafianajaiiogjpoaebdanbbandkkkpippppadbpcapoabbgpoabbdanbbancnclaabbaicibbaaaaagbbajcibbaaaaagbbakcibbaaaaagbbalcibbaaaaagcicaaaaaakgpcbaaaaakakaaclblaabbajcibbaaaaagbbakcibbaaaaagcibkaaaaakgpcbaaaaakakaaagbdamclaabbamckkghcabaaaahaiaaeaaaaaebeiaafaaaaaebpbpinbnaaaaabiaagaaaaaebpbpinbnaaaaabiaahaaaaaeckboacciccaaaaakckaaaabddaaeaafcaaaaaaanaaaabbaaacgpblaaaaakbiflinbpaaaaabakacgpcdaaaaakalbgamclbkaaahaijdahaibhfijdcibiaaaaaganagaibiflajjmaaaibifiamaiahiogjpoaebdafbbafcnnkciceaaaaakaggpcfaaaaakbdaeclaabbaeckaaaabddaadaabdaaaaaaaoaaaabbaaacbpgbfjbpbafkadbpgbfjfincakclaaagckboacciccaaaaakckaabddaaeaaebaaaaaaabaaaabbaahoajaaaaaebepoabbgpoabamaicnbmhoaiaaaaaebhinbgaaaaabanajbgbpcejnajgpbbaaaaakiaajaaaaaehoajaaaaaeacjkakagcibhaaaaagakagalclaaahckaaaaaabddaabaabaaaaaaaapaaaabbaabgcibkaaaaagakagcibnaaaaagaackbddaacaadgaaaaaabaaaaabbaaaccibcaaaaakcmbgacgpcbaaaaakbhcibkaaaaaggpcgaaaaakbgpoabclabbhaaalahcnbaaaaccichaaaaakakagcibnaaaaagaaaackaaaabldaacaadmaaaaaabbaaaabbaaacciciaaaaakakaaaganbgbdaeclboajbbaejkalaaaaahgpcjaaaaakaaaanoafamaaaanoaaaaaabbaebhfibdaebbaeajiogjpoaebdafbbafcnnfckabbaaaaaaaaabgaaalcbaaafccaaaaabbddaacaacpaaaaaabcaaaabbaacickaaaaakalbcabacciclaaaaakalbcabcicmaaaaakakclaacickaaaaakalbcabcicmaaaaakagpoaeamaicnomckaabddaacaacpaaaaaabdaaaabbaaaccibcaaaaakbgpoabamaicnaiaccichaaaaakbaaaacciciaaaaakakagcmaiagiogjbgpoacclabbgaaalclaaahckeghcoaaaaahaiaaiaaaaaebeiaajaaaaaeckboacciccaaaaakckaaaaaabddaaeaaebaaaaaaabaaaabbaahoalaaaaaebepoabbgpoabamaicnbmhoakaaaaaebhinbgaaaaabanajbgbpcejnajgpbbaaaaakiaalaaaaaehoalaaaaaeacjkakagcibhaaaaagakagalclaaahckaaaaaabddaacaagpaaaaaabeaaaabbaahdcnaaaaakakaccmalaciogjbgpoacbgpoabclabbhaaanajcnejaaaaacbdaebgbdafcldcbbaebbafjkalaaahbpamciccaaaaaggpcoaaaaakbgpoabanajcnaibhiaamaaaaaeclaiagahgpcpaaaaakaaaabbafbhfibdafbbafbbaeiogjpoaeanajcnmcaaaggpdaaaaaakamclaaaickaabddaafaaclabaaaabfaaaabbaaaccicdaaaaagbaaabpapciccaaaaagakbpapciccaaaaagalbpapciccaaaaagambpapciccaaaaaganaciogjbgpoacbgpoabbdaebbaecnboacbgjkgpdcaaaaakbhinbgaaaaabbdafbbafbgbpccjnbbafgpddaaaaakakaciogjbhpoacbgpoabbdaebbaecnboacbhjkgpdcaaaaakbhinbgaaaaabbdafbbafbgbpccjnbbafgpddaaaaakalaciogjbipoacbgpoabbdaebbaecnboacbijkgpdcaaaaakbhinbgaaaaabbdafbbafbgbpccjnbbafgpddaaaaakamaciogjbjpoacbgpoabbdaebbaecnboacbjjkgpdcaaaaakbhinbgaaaaabbdafbbafbgbpccjnbbafgpddaaaaakanagbmciccaaaaaggpdeaaaaakbgpoabbdaebbaecncpaaagbmciccaaaaaggpblaaaaakgpbmaaaaakakagahaiajbpbiciccaaaaaggpcoaaaaakbgpoabciciaaaaagaaaaclajagahaicicfaaaaagaackaabldaadaahoabaaaabgaaaabbaaadhcdaabaahagpcoaaaaakbgpoabanajcnajbpapciccaaaaagbaabaehcdaabaahagpcoaaaaakbgpoabanajcnajbpapciccaaaaagbaacaaacbpapciccaaaaaggpcoaaaaakanajdkchabaaaaaaadbpapciccaaaaaggpcoaaaaakbgpoabanajcnbocidfaaaaakgpdgaaaaakbpbjciccaaaaagaccidhaaaaakcidiaaaaakbaabadcibcaaaaakbgpoabanajcnelaaadciacaaaaagakagaegpcoaaaaakanajcndaaaadcibpaaaaagbgpoabanajcnbiaaadcibmaaaaagaacdaaaaaaaaaahakheaciboaaaaagaaaaadcidjaaaaakaaaaclafnnkiaaaaaaaaclahadcicgaaaaagaahddkaaaaakaladbpbkciccaaaaaggpcgaaaaakbgpoabanajcnenaaahacgpdlaaaaakamaibpblciccaaaaaggpdmaaaaakcmapaibpbmciccaaaaaggpdmaaaaakclabbhaaanajcnbfaibpblciccaaaaagbpbmciccaaaaaggpdnaaaaakamaiadcichaaaaagcgaaclajahacadgpdoaaaaakaahoamaaaaaebgpoabanajcnbiaacdaaaaaaaaaaeajpeaciboaaaaagaaadcidpaaaaakcgaaaaaanoafcgaaaanoaaaaaackaaaaebbmaaaaaaaaaaaadhaaaaaadpabaaaahgabaaaaafaaaaaaabaaaaabbddaabaabkaaaaaabaaaaabbaaaccieaaaaaakakagciebaaaaakalahcnahagciecaaaaakcgckaaaabddaadaackaaaaaabhaaaabbaaadbgciceaaaaakhdedaaaaakakagacgpeeaaaaakaaaggpefaaaaakaaaggpegaaaaakaaadalclaaahckaaaabldaaeaakmadaaaabiaaaabbaaadhcdaabaahagpcoaaaaakbgpoabbdapbbapcnajbpapciccaaaaagbaabaehcdaabaahagpcoaaaaakbgpoabbdapbbapcnajbpapciccaaaaagbaacacbpapciccaaaaaggpcoaaaaakbgpoabbdapbbapcnafdiffadaaaaadbpapciccaaaaaggpcoaaaaakbgpoabbdapbbapcnbicidfaaaaakgpdgaaaaakbpbjciccaaaaagcibkaaaaakbaabbpapciccaaaaagakaebpbnciccaaaaaggpdmaaaaakbgpoabbdapbbapcncpaaaebpbnciccaaaaaggpehaaaaakalaeahbpbnciccaaaaaggpblaaaaakfigpbmaaaaakakaebgahgpeiaaaaakbaacaaaccicmaaaaagamaibpapciccaaaaaggpcoaaaaakbgpoabbdapbbapcnafdiliacaaaaaibpbociccaaaaagbhcicnaaaaaggpdcaaaaakanaibpbpciccaaaaagbgcicnaaaaaggpdcaaaaakbdaebbaebpbmciccaaaaagbpblciccaaaaaggpdnaaaaakbhinbgaaaaabbdbabbbabgbpakjnbbbagpbbaaaaakbdafhdcnaaaaakbdagaabbafbdbbbgbdbcdigjabaaaabbbbbbbcjkbdahaabbahgpdcaaaaakbhinbgaaaaabbdbabbbabgbpcjjnbbbagpejaaaaakbdaibbaibpapciccaaaaaggpcoaaaaakbgpoabbdapbbapcnafdicbabaaaaaebpajciccaaaaaggpdmaaaaakbgpoabbdapbbapcnbgaebpajciccaaaaagbpcaciccaaaaaggpdnaaaaakbaacaebpapciccaaaaaggpcoaaaaakcnakbbaiaegpdeaaaaakclabbhaabdapbbapcnafdimpaaaaaabpapciccaaaaagbdajbbaibpcbciccaaaaaggpdmaaaaakbgpoabbdapbbapcnciaabbaibpcbciccaaaaaggpekaaaaakalbbaiahbhfigpbmaaaaakbdajbbaibgahgpeiaaaaakbdaiaaadbbaibpcaciccaaaaagbpajciccaaaaaggpdnaaaaakcibkaaaaakbdakagbpapciccaaaaaggpcoaaaaakbdapbbapcnceadbbaiaeaggpdnaaaaakbpcaciccaaaaagbpajciccaaaaaggpdnaaaaakcibkaaaaakbdakajbbaicibkaaaaakbbakbbajcicfaaaaagaaafcmalbbagbbakgpelaaaaakclabbhaabdapbbapcnakbbagbbakgpcpaaaaakaaaabbbcbhfibdbcbbbcbbbbiogjpoaebdapbbapdkigpoppppafbgpoabbdapbbapdkmbaaaaaaaaadaebpcaciccaaaaagbpajciccaaaaaggpdnaaaaakcibkaaaaakbdalagbpapciccaaaaaggpcoaaaaakbdapbbapcnbmadagbpcaciccaaaaagbpajciccaaaaaggpdnaaaaakcibkaaaaakbdalbbalcicjaaaaagbdambbambhinbgaaaaabbdbabbbabgbpdljnbbbagpbbaaaaakbdanaabbanbdbbbgbdbccldkbbbbbbbcjkbdaoaaaabbagbbaogpelaaaaakbdapbbapcnbcaabbaocibmaaaaagaabbaocidjaaaaakaaaaaanoafcgaaaanoaaaaaabbbcbhfibdbcbbbcbbbbiogjpoaebdapbbapcnliaabgciemaaaaakaackabbaaaaaaaaagdadcfiiadafabaaaaabbddaadaapaaaaaaabjaaaabbaabpapciccaaaaaghdenaaaaakakacciebaaaaakbgpoabbdahbbahdkmdaaaaaaaaaccieoaaaaakalaaahbdaibgbdajcldcbbaibbajjkamagaggpepaaaaakcmajbpccciccaaaaagclahbpapciccaaaaagaaaicibkaaaaakgpfaaaaaakcgbbajbhfibdajbbajbbaiiogjpoaebdahbbahcnmaaccifbaaaaakanaaajbdaibgbdajclfdbbaibbajjkbdaeaabbaecicjaaaaagbdafbbafbpapciccaaaaaggpcoaaaaakbdahbbahcnchagaggpepaaaaakcmajbpccciccaaaaagclahbpapciccaaaaagaabbafcibkaaaaakgpfaaaaaakcgaabbajbhfibdajbbajbbaiiogjpoaebdahbbahcnjpaaaggpfcaaaaakbdagclaabbagckfohcdcabaahaiaakaaaaaebeiaalaaaaaebgiaamaaaaaeckbddaaeaaebaaaaaaabaaaabbaahoaoaaaaaebepoabbgpoabamaicnbmhoanaaaaaebhinbgaaaaabanajbgbpcejnajgpbbaaaaakiaaoaaaaaehoaoaaaaaeacjkakagcibhaaaaagakagalclaaahckaaaaaabldaacaacoaaaaaabkaaaabbaaaahddkaaaaakakagciceaaaaakgpfdaaaaakaaagacgpdlaaaaakalahamnoalcgaabjciclaaaaagamnoaaaaaickaaaaabbaaaaaaaaaabaabpcaaaalccaaaaabbldaaeaafjaaaaaablaaaabbaaaaadbkciclaaaaagcibkaaaaakakblciclaaaaagaecnadadclagbjciclaaaaagaacibkaaaaakalacaggpehaaaaakaggpblaaaaakfiamacahaigpfeaaaaakanacaiajaifjgpeiaaaaakbdaenoahcgaaacbdaenoaaaabbaeckaaaaaaabbaaaaaaaaaabaaeneoaaahccaaaaabeghcabaoaahaiaanaaaaaebeiaaoaaaaaeckboacciccaaaaakckckacciccaaaaakaaaaaackaaaaaabddaacaadpaaaaaabmaaaabbaahoapaaaaaebecifiaaaaakbgpoabamaicnccaahcdkapaahanaahaaaaaccifjaaaaakgpfkaaaaakhdflaaaaakakagiaapaaaaaeaahoapaaaaaealclaaahckaabddaabaaalaaaaaabnaaaabbaahobaaaaaaeakclaaagckccaaaciabaaaaaaeckbddaabaaalaaaaaaboaaaabbaahobbaaaaaeakclaaagckfghddfaaaaagcifnaaaaakheaiaaaaaciabbaaaaaeckboaccifoaaaaakckaaaaaaleaaaaaamomkoploabaaaaaajbaaaaaagmfdhjhdhegfgncofcgfhdgphfhcgdgfhdcofcgfhdgphfhcgdgffcgfgbgegfhccmcagnhdgdgphcgmgjgccmcafggfhchdgjgpgodndecodacodacodacmcaedhfgmhehfhcgfdngogfhfhehcgbgmcmcafahfgcgmgjgdelgfhjfegpglgfgodngcdhdhgbdfgddfdgdbdjdddegfdadidjcdfdhjhdhegfgncofcgfhdgphfhcgdgfhdcofchfgohegjgngffcgfhdgphfhcgdgffdgfheacaaaaaaaaaaaaaaaaaaaaaafaebeefaebeefaleaaaaaaecfdekecabaaabaaaaaaaaaaamaaaaaahgdecodacodddadddbdjaaaaaaaaafaagmaaaaaabialaaaacdhoaaaaiealaaaabialaaaacdfdhehcgjgoghhdaaaaaaaajmbgaaaaheapaaaacdfffdaabacgaaaabaaaaaaacdehffejeeaaaaaacacgaaaanaaeaaaacdecgmgpgcaaaaaaaaaaaaaaacaaaaabfhbnkcajajabaaaaaapkcfddaabgaaaaabaaaaaadgaaaaaaaiaaaaaabbaaaaaadgaaaaaaffaaaaaafoaaaaaaaiaaaaaabgaaaaaaboaaaaaaacaaaaaaadaaaaaaaeaaaaaaabaaaaaaabaaaaaaacaaaaaaabaaaaaaaaaaakaaabaaaaaaaaaaagaaiaaahjaaakaajmaaihaaagaabbadaaadagaaecadcnadagaalmaekcaeagaaohaenfaeagaapoaenfaeagaablafnfaeagaadkafnfaeagaafdafnfaeagaagmafnfaeagaaihafnfaeagaakcafnfaeagaankafllafagaaooafllafagaapmafnfaeagaabfagnfaeagaaefagdcagelaafjagaaaaagaaiiaggiagagaakiaggiagagaamgaghjaaagaamlaghjaaagaaocagniagagaapkagooagagaaadahniagagaabaahniagagaaddahhjaaagaaeoahhjaaagaahjahhjaaagaajjahhjaaagaamgahniagakaaohahdcagagaaahaihjaaagaabbaihjaaagaafhaidmaiagaahbaihjaaagaajeaihjaaakaaoaainfaiagaacoajniagagaadiajniagagaafgajniagagaagdajniagagaajaajhjaaagaakbajooagakaapdajnlajagaaakakdcagagaachakgiagagaafcakhjaaagaafhakhjaaagaahlaknfaeakaakhakjbakakaamaakjbakakaanfakihaaaaaaaaaaabaaaaaaaaaaabaaabaaabaabaaabfaabjaaafaaabaaabaaabaabaaacaaabjaaafaaaiaabhaaabaabaaaclaabjaaafaaaiaabkaaiaabbaaadhaabjaaafaaakaaccaaaaaabaaadpaabjaaafaaanaaclaaaaaabaaaelaaffaaafaaapaadaaaaaabbaaaghaaffaaajaabbaadeaafbialeaaakaafbiamdaaakaafbiandaaakaabbaaocaabmaabbaapbaabpaabbaacbabcnaabbaaclabcnaabbaanlabbmaabbaaokabbpaabbaadmacbmaabbaaelacbpaabbaaggachiaabbaalpacbmaabbaamoacbpaabbaacbadkeaabbaaeoadkiaabbaajcadmgaafacaaaaaaaaajbaaababcdaaabaakacaaaaaaaaajgaaamabciaaacaanmcaaaaaaaaajgaabeabciaaadaacicbaaaaaaaajbaadfabdbaaaeaapmcbaaaaaaaajbaadmabdbaaagaaleccaaaaaaaajbaaedabdbaaaiaaoaccaaaaaaaajbaaeoabdbaaakaamicdaaaaaaaajbaafkabdhaaamaaoicdaaaaaaaajbaagaabdhaaapaaaiceaaaaaaaajbaaggabdhaabcaaceceaaaaaaaajbaagmabdhaabfaaebceaaaaaaaajbaahcabdoaabiaahiceaaaaaaaajbaahjabdoaabpaakpceaaaaaaaajbaaiaabdoaacgaaogceaaaaaaaajbaaihabdoaacnaacacfaaaaaaaajbaaioabekaadeaapacfaaaaaaaajbaakbabfaaadfaahmcgaaaaaaaajbaaklabfaaadgaalmcgaaaaaaaajbaalbabfaaadhaaemchaaaaaaaajgaalhabffaadiaaokcpaaaaaaaaigbilpabflaadkaamacpaaaaaaaajbbijcahgfaadkaapecpaaaaaaaajgaamfabciaadkaafedaaaaaaaaajbaaneabfpaadlaahddaaaaaaaaaigbilpabflaadnaahmdaaaaaaaaajbaapkabcdaadnaammdaaaaaaaaajgaaafacgfaadoaaoidaaaaaaaaajgaaakacgjaadoaacmdbaaaaaaaajgaabjacgjaadpaaiedbaaaaaaaajgaacfacgoaaeaaamadbaaaaaaaajgaaclachdaaebaaandcaaaaaaaaigbilpabflaaecaapldbaaaaaaaajbbijcahgfaaecaabidcaaaaaaaajbaaflaccdaaecaagidcaaaaaaaajbaagoachlaaedaaoedcaaaaaaaajbaahkacicaaeeaabmdeaaaaaaaajgaahpaciiaaefaamedfaaaaaaaajbaaikacgjaaeiaaomdfaaaaaaaajgaajjacipaaejaacedgaaaaaaaajgaakcacjfaaelaaomdjaaaaaaaajgaaldacciaaepaaoidkaaaaaaaajbbijcahgfaafaaaaadlaaaaaaaajbaanoaccdaafaaafadlaaaaaaaajgaaojacciaafbaajmdlaaaaaaaajgaapeacjnaafcaacgdmaaaaaaaaigbilpabflaaffaabedmaaaaaaaajbbijcahgfaaffaacodmaaaaaaaaidbilpabflaaffaadmdmaaaaaaaajdaifoadkmaaffaaiidmaaaaaaaajdaihcadlbaaffaajpdmaaaaaaaajdaihoadlgaaffaakidmaaaaaaaajgaikcadmkaafgaanfdmaaaaaaaaigbilpabflaafgaalpdmaaaaaaaajbbijcahgfaafgaaaaaaabaalgadaaaaabaalpadaaaaabaalpadaaaaabaamiadaaaaacaampadaaaaabaamiadaaaaacaampadaaaaabaamiadaaaaacaampadaaaaabaankadaaaaacaannadaaaaabaaoaadaaaaacaaocadaaaaadaaoeadaaaaabaaoaadaaaaacaaocadaaaaadaaoeadaaaaabaaoaadaaaaacaaocadaaaaadaaoeadaaaaabaaoaadaaaaacaaocadaaaaadaaoeadaaaaabaaogadaaaaacaaoiadaaaaadaaokadaaaaaeaaomadaaaaafaaoaadaaaaagaaooadaaaaahaapaadaaaaabaaogadaaaaacaaoiadaaaaadaaokadaaaaaeaaomadaaaaafaaoaadaaaaagaaooadaaaaahaapaadaaaaabaaogadaaaaacaaoiadaaaaadaaokadaaaaaeaaomadaaaaafaaoaadaaaaagaaooadaaaaahaapaadaaaaabaaogadaaaaacaaoiadaaaaadaaokadaaaaaeaaomadaaaaafaaoaadaaaaagaaooadaaaaahaapaadaaaaabaapdadaaaaabaamiadaaaaabaapmadaaaaabaaaaaeaaaaabaapdadaaaaacaaaeaeaaaaabaaakaeaaaaabaaapaeaaaaacaabcaeaaaaabaabfaeaaaaabaaboaeaaaaabaacgaeaaaaabaadcaeaaaaabaacgaeaaaaabaadpaeaaaaabaaeiaeaaaaabaaeiaeaaaaabaaenaebabaacaalpadbabaadaafbaeaaaaabaalpadaaaaabaaakaeaaaaacaalpadaaaaabaaffaebabaacaafpaebabaadaaghaebabaaeaagoaeaaaaabaahlaeaaaaabaaiaaeaaaaabaaenaeaaaaabaaakaeaaaaacaaijaeaaaaadaajcaeaaaaabaajmaecjaalpabngaadbaalpabngaadjaalpabngaaebaalpabngaaejaalpabngaafbaalpabngaafjaalpabngaagbaalpabngaagjaalpabngaahbaalpabnlaahjaalpabngaaibaalpabngaaijaalpabngaajbaalpaboaaakbaalpabogaakjaalpabflaaljaancagolaambaaohaghdaamjaakcadababnbaalpabagabnjaablahanabnjaacfahflaanjaaclahflaaobaadlahbjabmjaaefahdeabljaafeahipaaljaaflahelabljaaggahepabojaahaahanabpbaahoahgjabobaaicahgpabljaafeahheabljaaikahanabajaalpabflaaljaajoahioabmjaakkahababmjaaldahjdabljaalnahkmabababmlahciaaajabopahlgabajabacaiflaabjabbkainbabbjabccainhabbjabdcainoabamaalpabflaaljaafoaikmabamaagfaipkabamaagjaiaaaccjablpabflaaljaaieaianabljaaieaiblacljaaijaikmabdbabjoaiclacdbablaaianabababmcaiciaaljaafeahdbacmbaamoaigjaadjablpabflaadjabokaidiacljaapjaikmabljaaacajdnacdjabakajedacajabbhajejacababbnajciaaebabohaghdaaebabegajfjacfbablpabgaacfjabgoajngaafjabcfahflaafjabclahflaaljaaheajgpacljaaggahheacljaahmajblacljaaieajgpacamaapjaihkacgbabjmajiaacgjablpabngaaebabkpajkeacgjabflahelabgjabliajkkacebablpajkeacajaahaahanabdjabmoajmdacljaaheajnbachbablpabedachjablpabflaaibablpabflaaajaaecakcaadijabgjakcgadijabieakcpadbjaalpabdfadkbablpabekadlbabocakljadbbaalpabflaaaiaaaeaaanaaaiaaaiaabcaaaiaaamaabhaaaoaabjabaaaaaoaabnabaaaaaoaadbabaaaaaoaadfabaaaaacaadjabneaacjaaodacfbadcoaablaabgaecoaacdaadeaecoaaclaadkaecoaaidaalbaecoaaedaadeaecoaahlaakiaecoaabdaaakaecoaaddaaakaecoaadlaaeiaecoaaalaamcadcoaafdaadeaecoaaflaagiaecoaaglaajcaecoaahdaajpaeejaaodacfbadodaaklacnpacodaaldacbgacodaallacbgacadabklacfkadadabllacbgaciaaeilabbgacpcaapkaabbabboabceabcjabdkabakaafeabfnabgdabhmabjjabkeabkiablbabloabocabokabagaccbacfaacgiacifaclbacmjacnhacdnadefadleadahaaabaaaiaaadaaaaaabbadlmaaaaaaikadmbaaaaaakoadmpaaacaadbaaadaaacaadcaaafaaabaaddaaafaaacaadeaaahaapdabaeiaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaabjaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaabaahaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaabaahjaaaaaaaaaaaaaaaaaaabaaaaaaopakaaaaaaaaaaaaaadmengpgehfgmgfdoaaffhagegbhegfcogfhigfaaahpnooaaffhagegbhegfaapocibncjbobpcmbcbcbcaaakcmcjbnbpcncnaocjcjcgaaakcmcjcbcmblchaabbbpbmanbpcococdcicbcnaaambpcncjcpcmbnbpcnaaffhagegbhegfcofahcgphagfhchegjgfhdaafdgfhehegjgoghhdaagnhdgdgphcgmgjgcaafdhjhdhegfgnaaepgcgkgfgdheaafdhjhdhegfgncoedgpgogggjghhfhcgbhegjgpgoaaebhahagmgjgdgbhegjgpgofdgfhehegjgoghhdecgbhdgfaapladaoanbjaoajbjpkbjplbdaopoaaplbdaopoanbjaoajbjpkbjbbajampnaapladaoanbjaoajbjpkbjbbajampnaaancocmcdcicbpnblcoblcnokojolaaancocmcdcicbpnblcoblcnokojolpkaapnbpbncjbobpdcokojojaappcdcgbpahpnooaacacdcgbpaocjancocmcdcicbaachbjcgajciplcdcocnaachbjcgolakcjdbbpcmaaagancccdcacoaaamancccdcacoaaamcjcoblcobpagbpcacoaapkboboapcicncdcbcibpboaachbooobjppaachbooobjabaachbooobjacaachbooobjadaachbooobjppppaachbooobjababaachbooobjacacaachbooobjadadaapmcjcidabpcmcoaocjbbcjcmbopkcmcmblddaabbcjcmboaocjacbpdcaaaocjacbpdcaacocjccbpdcaapocibncmddckcoaacogdhegphcaapnbpbncjbobppkcgckccblbmbpcoaaaocjplddcobpaaancocmcdcicbpnblcoblcnokojomaaancocmcdcicbpnblcoblcnokojompkaapnbpbncjbobpdcokojokaacobpcncoaacfcdcgcgakcmcjbnbpcncnpodcbpaacfcdcgcgakcmcjbnbpcncnaabobpcgblddaaakcmcjbnbpcncnadcnamcpcicicdcicbaaancocmcdcicbpnblcoblcnokojonaaancocmcdcicbpnblcoblcnokojonpkaapnbpbncjbobpdcokojolaaampoanaopkamaoaapkciblcgddcnbppkcmcbcnaaahblcdciaacpckboblcobpppcdcgbpaabnccbpbncfpncdcmbpbncocjcmddaaanbldabpppcdcgbpaacpckboblcobpadcicibpcmppcdcgbpcnaacbbpcopkcgcgppcdcgbpcnaaancocmcdcicbpnblcoblcnokojooaaancocmcdcicbpnblcoblcnokojoopkaapnbpbncjbobpdcokojomaacbbpcobbbpbmpnblcoblaacbbpcoaicjbobppnblcoblaafdhjhdhegfgncofcgfhdgphfhcgdgfhdaafcgfhdgphfhcgdgfengbgogbghgfhcaacmbpcncjcpcmbnbpahblciaafdhjhdhegfgncoehgmgpgcgbgmgjhkgbhegjgpgoaaedhfgmhehfhcgfejgogggpaacmbpcncjcpcmbnbppmcpcgcocpcmbpaacbbpcobjambpcncjcpcmbnbpahblciblcbbpcmaacbbpcobjpmcpcgcocpcmbpaacnbpcobjpmcpcgcocpcmbpaapmcpcgcocpcmbpaagegfgggbhfgmheejgohdhegbgogdgfaaghgfhefpeegfgggbhfgmheaaeegfgggbhfgmheaacdcibobpdcokojomaacacdcgbpakblcoccaacgbablcgcpbpaacdancccdcacoplcdcocnaacgbcaacgbdaadcaaddaadeaablaabmaabnaaboaacnaablbnaacnahbpcncnblcbbpaabobpbnaaccbpdcaacncoddckbpaaboblcoblaablokaablolaacdcibobpdcokojonaabpdcbpppcdcgbpaackcmcjbnbpcncnaiblchbpaaahcdcgcgcdcnbpbncjcibocnaacdcibobpdcokojooaablcmcbcnaacpcmcgaachboooaabncjcicacdcbapcmcgaabocdcmakblcoccaackbpcmcacddcaabobpcgbpcoajcmcoccbpcmcnaackblcoccaacdcibobpdcokojopaacicjbobpaiblchbpaacacdciblcgaicjbobpaadablcgcpbpaafdhjhdhegfgncofchfgohegjgngfcofggfhchdgjgpgogjgoghaafegbhcghgfheeghcgbgngfhhgphcglebhehehcgjgchfhegfaafdhjhdhegfgncofcgfgggmgfgdhegjgpgoaaebhdhdgfgngcgmhjfegjhegmgfebhehehcgjgchfhegfaaebhdhdgfgngcgmhjeegfhdgdhcgjhahegjgpgoebhehehcgjgchfhegfaaebhdhdgfgngcgmhjedgpgogggjghhfhcgbhegjgpgoebhehehcgjgchfhegfaaebhdhdgfgngcgmhjedgpgnhagbgohjebhehehcgjgchfhegfaaebhdhdgfgngcgmhjfahcgpgehfgdheebhehehcgjgchfhegfaaebhdhdgfgngcgmhjedgphahjhcgjghgiheebhehehcgjgchfhegfaaebhdhdgfgngcgmhjfehcgbgegfgngbhcglebhehehcgjgchfhegfaaebhdhdgfgngcgmhjedhfgmhehfhcgfebhehehcgjgchfhegfaafdhjhdhegfgncofchfgohegjgngfcoejgohegfhcgphafdgfhchggjgdgfhdaaedgpgnfggjhdgjgcgmgfebhehehcgjgchfhegfaaehhfgjgeebhehehcgjgchfhegfaaebhdhdgfgngcgmhjfggfhchdgjgpgoebhehehcgjgchfhegfaaebhdhdgfgngcgmhjeggjgmgffggfhchdgjgpgoebhehehcgjgchfhegfaafdhjhdhegfgncoeegjgbghgogphdhegjgdhdaaeegfgchfghghgbgcgmgfebhehehcgjgchfhegfaaeegfgchfghghgjgoghengpgegfhdaafdhjhdhegfgncofchfgohegjgngfcoedgpgnhagjgmgfhcfdgfhchggjgdgfhdaaedgpgnhagjgmgbhegjgpgofcgfgmgbhigbhegjgpgohdebhehehcgjgchfhegfaafchfgohegjgngfedgpgnhagbhegjgcgjgmgjhehjebhehehcgjgchfhegfaaedgigbhcaafdhehcgjgoghaafdhagmgjheaafdhjhdhegfgncoejepaaeggjgmgfaaefhigjhdhehdaafdhjhdhegfgncofegfhiheaaefgogdgpgegjgoghaafdhehcgfgbgnfcgfgbgegfhcaafegfhihefcgfgbgegfhcaafcgfgbgefegpefgogeaaedgmgphdgfaaeegjhdhagphdgfaaedgpgohggfhcheaafegpecgpgpgmgfgbgoaaehgfheechjhegfhdaaejgohedgdeaaedgpgogdgbheaaghgfhefpemgfgoghhegiaafdhfgchdhehcgjgoghaafegpfdhehcgjgoghaaengbhegiaafagphhaafegpejgohedgdeaafegpemgphhgfhcaacogdgdhegphcaaechjhegfaafegpedgigbhcebhchcgbhjaaghgfhefpfffeegdiaaehgfhefdhehcgjgoghaaefgogehdfhgjhegiaafagbhegiaaehgfheeggjgmgfeogbgngffhgjhegigphfheefhihegfgohdgjgpgoaafahcgpgdgfhdhdaaehgfhefahcgpgdgfhdhdgfhdechjeogbgngfaaelgjgmgmaaefhigdgfhahegjgpgoaaeegbhegffegjgngfaaghgfhefpeogphhaaebgegeengjgmgmgjhdgfgdgpgogehdaaghgfhefpfegjgdglhdaafdhjhdhegfgncoedgpgmgmgfgdhegjgpgohdcoehgfgogfhcgjgdaaemgjhdhegadbaaefhbhfgbgmhdaaebgegeaafegpebhchcgbhjaafdfeebfegihcgfgbgeebhehehcgjgchfhegfaafehcgjgnaafdhegbhchehdfhgjhegiaaebhahaeegpgngbgjgoaaghgfhefpedhfhchcgfgoheeegpgngbgjgoaaghgfhefpecgbhdgfeegjhcgfgdhegphchjaaehgfheeggjgmgfeogbgngfaaeegfgmgfhegfaafdhjhdhegfgncoeogfheaafhgfgcedgmgjgfgoheaaeegphhgogmgpgbgefdhehcgjgoghaaedgpgohegbgjgohdaafcgfhagmgbgdgfaaeegphhgogmgpgbgeeggjgmgfaafdhegbhcheaaehgfheeegjhcgfgdhegphchjeogbgngfaaeegjhcgfgdhegphchjaaeegjhcgfgdhegphchjejgogggpaaedhcgfgbhegfeegjhcgfgdhegphchjaafdhehcgfgbgnfhhcgjhegfhcaafegfhihefhhcgjhegfhcaafhhcgjhegfaaejgogegfhiepggaafehcgjgnefgogeaaemgbhdheejgogegfhiepggaaefgohggjhcgpgogngfgoheaaefhigjheaafdhehcgjgoghechfgjgmgegfhcaaehgfheeggjgmgfhdaaebhahagfgogeaaehgfheeegjhcgfgdhegphcgjgfhdaahdgfhefpefgogdgpgegjgoghaafdhjhdhegfgncoedgpgegfeegpgncoedgpgnhagjgmgfhcaaehgfgogfhcgbhegfgeedgpgegfebhehehcgjgchfhegfaaeegfgchfghghgfhceogpgoffhdgfhcedgpgegfebhehehcgjgchfhegfaaedgpgnhagjgmgfhcehgfgogfhcgbhegfgeebhehehcgjgchfhegfaafcgfgggfhcgfgogdgfefhbhfgbgmhdaafehjhagfaafchfgohegjgngffehjhagfeigbgogegmgfaaehgfhefehjhagfeghcgpgneigbgogegmgfaaebhdhdgfgngcgmhjaaghgfhefpebhdhdgfgngcgmhjaafdhjhdhegfgncoedgpgnhagpgogfgoheengpgegfgmaaefgegjhegphcechcgphhhdgbgcgmgfebhehehcgjgchfhegfaaefgegjhegphcechcgphhhdgbgcgmgffdhegbhegfaafdgfhehegjgoghhdecgbhdgfaafdhjgogdgihcgpgogjhkgfgeaaffhagegbhegfcofahcgphagfhchegjgfhdcofcgfhdgphfhcgdgfhdcohcgfhdgphfhcgdgfhdaaaaaaaaaaiannceaaghaagcaaceaaghaagcaaghaagdaaghaageaaceaaghaagoaaghaaggaagiaageaagiaageaaghaagcaaghaagiaaghaaggaagdaagbaaghaagfaaghaagkaaghaagiaaghaaggaagiaageaagiaagfaaceaaghaagcaaghaagdaaghaageaaghaagfaaghaaggaaghaaghaaghaagiaaghaagjaaghaagkaaghaaglaaghaagmaaghaagnaaghaagoaaghaagpaaghaahaaagiaagbaagiaagcaagiaagdaagiaageaagiaagfaagiaaggaagiaaghaagiaagiaagiaagjaagiaagkaagiaaglaaceaageaagbaaceaaghaagdaaceaaghaageaaceaaghaagfaaceaaghaaggaaceaaghaaghaaaaepgfaageaaghaagjaaghaagcaagiaagdaaghaagiaaghaaggaagfaagoaaghaahaaaghaagfaagiaaggaaghaagnaaghaaggaaggaahaaaggaaghaageaagfaaceaagdaagpaaghaaggaagiaagjaaghaaggaaaaabaaimmngdaaggaagiaagpaaghaagfaagiaagbaageaagbaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagdaagpaaghaaggaagiaagjaaghaaggaaceaaggaagmaagfaageaagfaahaaagfaagpaagfaaghaagfaagkaagfaagiaaggaagoaaghaagjaagiaagfaagiaagfaagiaagbaagiaageaageaaglaagdaahaaagdaahaaaghaagiaaghaagkaagiaagfaagdaagpaaghaahaaagiaageaaghaageaaghaagjaaghaagkaaghaagpaaghaagcaagdaagpaaghaagpaaghaaggaagiaagfaagdaahaaagiaageaaghaageaaghaagkaaghaagoaaghaaggaaghaagpaaghaageaaghaaggaagdaahaaaghaagcaagiaagbaaghaagmaaggaagfaaghaahaaaghaahaaaghaagnaagdaahaaagiaagdaaghaagcaagiaagiaagdaahaaaghaagoaaghaagcaagiaageaagiaagfaaghaaggaagiaagdaagdaahaaaghaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaahaaagiaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaagpaagiaagfaagiaagjaagiaagfaaceaagfaaggaageaaglaaggaagnaagiaagfaaghaagoaagiaagbaageaagdaaggaagnaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaahaaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaaggaagnaaggaagnaaceaagpaaghaagmaagjaaglaagbaagpaagkaagjaagcaagkaageaagpaagjaaglaagpaaglaagcaagpaagjaagmaagfaagmaagkaagpaaggaagjaagnaagjaaggaaggaagnaageaagbaageaagbaageaagbaageaagbaageaagbaageaagbaageaagcaaggaagnaaggaagnaaceaagiaagfaaghaahaaaghaahaaaghaagnaagiaageaaggaagnaaggaagnaaceaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagdaagpaaghaaggaagiaagjaaghaaggaaceaaggaagmaagfaageaagfaahaaagfaagpaagfaaghaagfaagkaagfaagiaaggaagoaaceaaghaagjaagiaagfaagiaagfaagiaagbaagiaageaageaaglaagdaahaaagdaahaaaghaagiaaghaagkaagiaagfaagdaagpaaghaahaaagiaageaaghaageaaghaagjaaghaagkaaghaagpaaghaagcaagdaagpaaghaagpaaghaaggaagiaagfaagdaahaaagiaageaaghaageaaghaagkaaghaagoaaghaaggaaghaagpaaghaageaaghaaggaagdaahaaaghaagcaagiaagbaaghaagmaaggaagfaaghaahaaaghaahaaaghaagnaagdaahaaagiaagdaaghaagcaagiaagiaagdaahaaaghaagoaaghaagcaagiaageaagiaagfaaghaaggaagiaagdaagdaahaaaghaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaahaaagiaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaagpaagiaagfaagiaagjaagiaagfaaceaagdaagbaaceaaggaagnaaggaagnaaceaaggaagnaaggaagnaaggaagnaaggaagnaaceaaggaagnaagdaagdaaceaaggaagdaagfaaggaaggaageaaggaagfaagfaagcaaggaagdaaggaagfaaceaagfaagfaageaaglaaggaagnaaggaagnaagiaageaaghaageaaghaagkaaggaagnaaggaagnaaggaaghaaghaagkaagiaageaagiaaggaaghaagcaaghaagnaagdaagbaaggaageaagiaagfaagiaaggaaghaagfaaghaagkaaghaahaaagdaagbaageaagdaageaagbaageaagbaageaagjaaggaagnaaggaagnaaggaagbaagiaagdaaghaahaaaghaaglaaghaaggaaghaageaagiaagfaagiaageaaggaagnaaggaagnaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaagnaaggaagnaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaagnaaggaagnaaghaagdaaghaagkaaghaagpaaggaagnaaggaagnaagfaagfaaghaaggaaghaagdaagiaaggaaghaagiaaggaagnaaggaagnaagiaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaagpaagiaagfaagiaagjaagiaagfaaceaagfaaggaageaaglaaggaagnaaggaagnaagiaagfaaghaagoaagiaagbaaggaagnaaggaagnaaghaagcaagiaagbaaghaagmaaggaagfaaghaahaaaghaahaaaghaagnaaggaagnaaggaagnaaghaaghaaghaagkaaghaagnaaghaaggaagiaageaaggaagnaaggaagnaagiaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaagdaagpaagiaagfaagiaagjaagiaagfaaceaaceaagfaaggaageaaglaaggaagnaaggaagnaagiaagfaaghaagoaagiaagbaageaagdaaggaagnaaggaagnaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaahaaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaaggaagnaaggaagnaaceaagpaaghaagmaagjaaglaagbaagpaagkaagjaagcaagkaageaagpaagjaaglaagpaaglaagcaagpaagjaagmaagfaagmaagkaagpaaggaagjaagnaagjaaggaaggaagnaaggaagnaageaagbaageaagbaageaagbaageaagbaageaagjaageaagfaageaageaaggaagnaaggaagnaagdaagoaageaagpaagpaaghaagmaagjaaglaagbaagpaagkaagjaagcaagkaageaagpaagjaaglaagpaaglaagcaagpaagjaagmaagfaagmaagkaagpaaggaagjaagnaagjaaggaaggaagnaaggaagnaageaagcaageaagbaageaagbaageaagbaageaagbaageaagjaageaagfaageaageaaggaagnaaggaagnaaceaaggaagmaagfaageaagfaahaaagfaagpaagfaaghaagfaagkaagfaagiaaggaagoaaghaagjaagiaagfaagiaagfaagiaagbaagiaageaageaaglaagdaahaaagdaahaaaghaagiaaghaagkaagiaagfaagdaagpaaghaahaaagiaageaaghaageaaghaagjaaghaagkaaghaagpaaghaagcaagdaagpaaghaagpaaghaaggaagiaagfaagdaahaaaghaaglaaghaahaaagiaagkaaghaagoaaghaaggaaghaagpaaghaagiaagdaahaaaghaaggaaghaagoaagiaagbaagiaagfaagiaagkaagdaahaaagiaagdaaghaagcaagiaagiaagdaahaaaghaagoaaghaagcaagiaageaagiaagfaaghaaggaagiaagdaagdaahaaagfaagoaagfaagfaageaaggaagdaagpaagiaagfaagiaagjaagiaagfaaceaagfaaggaageaaglaaggaagnaaggaagnaagiaagfaaghaagoaagiaagbaageaagdaaggaagnaaggaagnaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaahaaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaageaagdaaggaagnaaggaagnaaceaaghaaghaaghaagkaaghaagnaaghaaggaagiaageaaggaagnaaggaagnaaceaaggaagmaagfaageaagfaahaaagfaagpaagfaaghaagfaagkaagfaagiaaggaagoaaghaagjaagiaagfaagiaagfaagiaagbaagiaageaageaaglaagdaahaaagdaahaaaghaagiaaghaagkaagiaagfaagdaagpaaghaahaaagiaageaaghaageaaghaagjaaghaagkaaghaagpaaghaagcaagdaagpaaghaagpaaghaaggaagiaagfaagdaahaaaghaaglaaghaahaaagiaagkaaghaagoaaghaaggaaghaagpaaghaagiaagdaahaaagfaageaaghaagjaaghaagcaaghaagpaaghaagpaaghaaggaaghaagnaagfaagfaaghaaggaaghaagoaaghaahaaaggaagfaaghaahaaaghaahaaaghaagnaagdaahaaagiaagdaaghaagcaagiaagiaagdaahaaaghaagoaaghaagcaagiaageaagiaagfaaghaaggaagiaagdaagdaahaaagfaagoaagfaagfaageaaggaagdaagpaagiaagfaagiaagjaagiaagfaaceaagfaagfaageaaglaaggaagnaaggaagnaagiaageaaghaageaaghaagkaaggaagnaaggaagnaaggaaghaaghaagkaagiaageaagiaaggaaghaagcaaghaagnaagdaagbaaggaageaagiaagfaagiaaggaaghaagfaaghaagkaaghaahaaagdaagbaageaagdaageaagbaageaagbaageaagjaaggaagnaaggaagnaaggaagbaagiaagdaaghaahaaaghaaglaaghaaggaaghaageaagiaagfaagiaageaaggaagnaaggaagnaagfaageaaghaagjaaghaagcaaghaagpaaghaagpaaghaaggaaghaagnaagfaagfaaghaaggaaghaagoaaghaahaaaggaagfaaghaahaaaghaahaaaghaagnaaggaagnaaggaagnaagfaageaaghaagjaaghaagcaaghaagpaaghaagpaaghaaggaaghaagnaagfaagfaaghaaggaaghaagoaaghaahaaaggaagfaaghaahaaaghaahaaaghaagnaaggaagnaaggaagnaaghaagdaaghaagkaaghaagpaaggaagnaaggaagnaagfaagfaaghaaggaaghaagdaagiaaggaaghaagiaaggaagnaaggaagnaaceaagfaageaaghaagjaaghaagcaaghaagpaaghaagpaaghaaggaaghaagnaagfaagfaaghaaggaaghaagoaaghaahaaaggaagfaaghaahaaaghaahaaaghaagnaagdaagpaaghaaggaagiaagjaaghaaggaaceaaghaaghaaghaagcaaghaagnaagiaageaaghaaggaaceaaggaaggaagiaagbaaghaagfaaghaagcaagiaagfaaghaaggaaggaahaaagfaaghaaghaagkaaghaagnaaghaaggaagiaageaaggaagnaaggaagnaaceaagdaagpaagiaagfaagiaagjaagiaagfaaceaaggaagnaaghaagpaaceaaggaagnaagiaagdaaggaagnaaghaagpaaceaagdaagoaageaagpaaceaagpaaghaagkaagnaagjaagoaagpaaggaagjaaglaaglaagcaagpaaggaagkaagkaaglaagjaagpaagjaagmaaggaagjaagfaagpaaghaagmaaglaagkaagbaagpaagiaagkaagmaaglaagpaagpaaggaagmaagoaagkaaggaaceaagpaaggaagmaagpaagjaaggaagpaaghaagkaagmaagmaagfaagpaaghaagkaaghaagmaagbaagpaaghaagkaaghaagjaagiaagpaagfaagmaagmaagmaaghaaceaagdaahaaaceaagdaagjaaceaageaagmaaaaibdhghaagjaagiaagfaagiaagfaagiaagbaagiaageaageaaglaagdaahaaagdaahaaaghaagiaaghaagkaagiaagfaagdaagpaaghaahaaagiaageaaghaageaaghaagjaaghaagkaaghaagpaaghaagcaagdaagpaaghaagpaaghaaggaagiaagfaagdaahaaagiaageaaghaageaaghaagkaaghaagoaaghaaggaaghaagpaaghaageaaghaaggaagdaahaaaghaaggaaghaagcaagiaageaagiaagkaagfaagkaaghaageaaghaahaaaghaagpaagdaahaaagiaagiaaghaagkaaghaagmaaghaagkaagiaageaagdaahaaagfaahaaaghaagpaaghaagnaaghaagkaaghaagpaaghaaggaaggaageaaghaaggaagiaagdaaghaagkaaghaagcaaghaagnaaceaagiaageaaghaageaaghaagkaaghaagoaaghaaggaaghaagpaaghaageaaghaaggaaceaagfaagpaaghaagcaaghaagoaaghaaggaageaagcaaceaaceaagdaagjaaceaagdaagkaaaadhffaahaaageaagbaaheaagfaacoaafaaahcaagpaahaaagfaahcaaheaagjaagfaahdaacoaafcaagfaahdaagpaahfaahcaagdaagfaahdaaaaaaaabnolpgapgdldjjenjajfdkblildjmcpaaaailhhkfmfgbjdeoaijacagaiaeaiaaaaaaaeaeaaaaaaaecaaaaaaaacagaoadagbnaoaeaaabaoaiaeaaabaoaoadagbnakafaaacakakakagaaadakakakakalaaahabbaakakakakakakakafaaabbnakaoaeaaabaoakafaaacaoaoaiadcaaaabafaaacafadadadaaaaabaeaaababaoaeaaababanaeaaabacaoacagacagaaabbnaobnaoafaaababbnaoagaaadabaoaoaoafaaacaoaoaoahaaaeabaoaoaoacagaaadaoaoaoacadagbcanadagbcbbaeaaaabcanaeaaaabcbbafaaababbcbbaeaiaabcanaeaiaabcbbadagbccaaeaaaabccaaeaiaabccaababaecaababaoaecaababacafcaababbbenaecaababaiagcaabbnaobnadahahaeaoaoacbnadagahaeaoaoaoacaeaaaabcgfagcaacabaobcgfadcaaaaoahahaeaobcgjaoacaeaaabacakafahadakakacaeahacakakakahaiakakakakakakakacafcaabbnafaobaahakbnakaiaibnakaiaiaibnafbnakacadcaaaaiaecaabaoaiaiahagaoakaiaiaoacafahadaoaoacafahadaoaoakafaaacanananaeaaabakanahaaaeaoaoaoaoaobbahaoaoaibnakaiakakakakakakakakaoacaecaaabnadafcaabaobnafakahagbnafbnadaiafaoacadahabafadahabaoaecaabacaoaeahacaoacahaaabbnbciaifaobcahagbnbciaifbciaifbciaijbnbciaifaiacafaaaabbiainagcaabbbiainanadcaaaakahahadakbbiainacaiahadbnbciaifacacagbfbciajbabaoafcaababbdaaafcaaabnbdaaapahagbfbciajbabaoaobnaoacbnaoaiaeabaaaaaaafcaabaobnadajahagaoaoaoaoacbnadafaaaabciajjagaaadaoaoaoaoaecaabaoaoafcaacaoaoaoafcaacabaoaoagaaabbciaifaoaiahaeaobciajnaoacagaaabbciakfaoahcaadabaoacbcgfagahacbciakjaoaecaabaiaoafcaacaoaiaiafcaabacbdaaaeaaababaiboahbdaoaiaoaoaobnaobfbciajbabaoaoaoaoaoaoaobnaoaoacbnadbnaoaiafaaabbnaoaoagcaabbcialfaobbahakbcialfbnaoaobnaoaoaoaoacbnaoaiafcaababbcgfahahadbciajnaoaoafcaacaiaoaiahahafaoaoaiaiaoeaabaaddfdhjhdhegfgncofcgfhdgphfhcgdgfhdcofegpgpgmhdcofdhehcgpgoghgmhjfehjhagfgefcgfhdgphfhcgdgfechfgjgmgegfhcahdecodacodacodaaaaaafaaacacbmbmaiaaabbciamfbbiamjafcaaabciamnahcaacabaobciamnahahadbcanbcanacaeahabbcbbagcaababbbianfaiabaaacaaaaaaaaaafjabaaelengjgdhcgphdgpgghecofggjhdhfgbgmfdhehfgegjgpcoefgegjhegphchdcofdgfhehegjgoghhdeegfhdgjghgogfhccofdgfhehegjgoghhdfdgjgoghgmgfeggjgmgfehgfgogfhcgbhegphcaidbdbcodacodacodaaaaaaeahabbccaaiaaabbcianjbcianjehabaabkcoeoeffeeghcgbgngfhhgphcglcmfggfhchdgjgpgodnhgdecodaabaafeaobeeghcgbgngfhhgphcgleegjhdhagmgbhjeogbgngfbacoeoeffecaeghcgbgngfhhgphcglcadealabaaagffhagegbhegfaaaabnabaabiogjgihoelllgogjlleogjglaoiloifofikkjoflhkfofiflhaaaaafabaaaaaaaaanabaaaifdgdgjgngfgogdgfaaaabpabaabkedgphahjhcgjghgihecamckjcafdgdgjgngfgogdgfcadcdadbdhaaaacjabaacededgdgdadedhdddccndhgcdagccndedidggecndjdbdddfcngddgdedfggggdddggegddjdiaaaaamabaaahdccodacodacodaaaaaaiabaaahabaaaaaaaaaiabaaaiaaaaaaaaaaboabaaabaafeacbgfhhcgbhaeogpgoefhigdgfhahegjgpgofegihcgphhhdabaaaaaaaajojfjofjaaaaaaaaacaaaaaabmabaaaakegiaaaakeekaaaafcfdeefdjnebjceadkgjfbeflchpfhdlegpiimlbabaaaaaagfdkfmehgjheeegjhcfmffhagegbhegffmffhagegbhegfdcfmffhagegbhegffmgpgcgkfmeegfgchfghfmffhagegbhegfcohagegcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoigjaaaaaaaaaaaaaaaaaaaapogjaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapagjaaaaaaaaaaaaaaaafpedgphcefhigfengbgjgoaagnhdgdgphcgfgfcogegmgmaaaaaaaaaappcfaacaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabaaaaaaacaaaaaiabiaaaaaadiaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaagiaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaajaaaaaaakaiaaaaabaadaaaaaaaaaaaaaaaaaaaalaidaaaaokabaaaaaaaaaaaaaaaaaaaabaaddeaaaaaafgaafdaafpaafgaaefaafcaafdaaejaaepaaeoaafpaaejaaeoaaegaaepaaaaaaaaaalnaeoppoaaaaabaaaaaaacaaaaaaaaaaaaaaacaaaaaaaaaadpaaaaaaaaaaaaaaaeaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeaaaaaaabaafgaagbaahcaaegaagjaagmaagfaaejaagoaaggaagpaaaaaaaaaaceaaaeaaaaaafeaahcaagbaagoaahdaagmaagbaaheaagjaagpaagoaaaaaaaaaaaaaalaaehaacaaaaabaafdaaheaahcaagjaagoaaghaaegaagjaagmaagfaaejaagoaaggaagpaaaaaaemacaaaaabaadaaadaaadaaadaaadaaadeaagcaadaaaaaaacmaaajaaabaaedaagpaagnaagnaagfaagoaaheaahdaaaaaaihgfpgeopegglagfifipkjfcoffnhhfbaaaaaaaadeaaajaaabaaedaagpaagnaahaaagbaagoaahjaaeoaagbaagnaagfaaaaaaaaaafdaagdaagjaagnaagfaagoaagdaagfaaaaaaaaaadiaaahaaabaaegaagjaagmaagfaaeeaagfaahdaagdaahcaagjaahaaaheaagjaagpaagoaaaaaaaaaaffaahaaageaagbaaheaagfaaaaaaaaaadaaaaiaaabaaegaagjaagmaagfaafgaagfaahcaahdaagjaagpaagoaaaaaaaaaadcaacoaadaaacoaadaaacoaadaaaaaaadiaaalaaabaaejaagoaaheaagfaahcaagoaagbaagmaaeoaagbaagnaagfaaaaaaffaahaaageaagbaaheaagfaacoaagfaahiaagfaaaaaaaaaafiaabkaaabaaemaagfaaghaagbaagmaaedaagpaahaaahjaahcaagjaaghaagiaaheaaaaaaedaagpaahaaahjaahcaagjaaghaagiaaheaacaaakjaacaaafdaagdaagjaagnaagfaagoaagdaagfaacaaadcaadaaadbaadhaaaaaaeaaaalaaabaaepaahcaagjaaghaagjaagoaagbaagmaaegaagjaagmaagfaagoaagbaagnaagfaaaaaaffaahaaageaagbaaheaagfaacoaagfaahiaagfaaaaaaaaaadaaaahaaabaafaaahcaagpaageaahfaagdaaheaaeoaagbaagnaagfaaaaaaaaaaffaahaaageaagbaaheaagfaaaaaaaaaadeaaaiaaabaafaaahcaagpaageaahfaagdaaheaafgaagfaahcaahdaagjaagpaagoaaaaaadcaacoaadaaacoaadaaacoaadaaaaaaadiaaaiaaabaaebaahdaahdaagfaagnaagcaagmaahjaacaaafgaagfaahcaahdaagjaagpaagoaaaaaadcaacoaadaaacoaadaaacoaadaaaaaaaoplllpdmdphigngmcahggfhchdgjgpgodnccdbcodacccagfgogdgpgegjgoghdnccfffeegcndicccahdhegbgogegbgmgpgogfdncchjgfhdccdpdoanakdmgbhdhdgfgngcgmhjcahigngmgohddncchfhcgodkhdgdgigfgngbhdcngngjgdhcgphdgpgghecngdgpgndkgbhdgncohgdbcccagngbgogjgggfhdhefggfhchdgjgpgodnccdbcodaccdoanakcacadmgbhdhdgfgngcgmhjejgegfgohegjhehjcahggfhchdgjgpgodnccdbcodacodacodacccagogbgngfdnccenhjebhahagmgjgdgbhegjgpgocogbhahacccpdoanakcacadmhehchfhdheejgogggpcahigngmgohddncchfhcgodkhdgdgigfgngbhdcngngjgdhcgphdgpgghecngdgpgndkgbhdgncohgdcccdoanakcacacacadmhdgfgdhfhcgjhehjdoanakcacacacacacadmhcgfhbhfgfhdhegfgefahcgjhggjgmgfghgfhdcahigngmgohddncchfhcgodkhdgdgigfgngbhdcngngjgdhcgphdgpgghecngdgpgndkgbhdgncohgddccdoanakcacacacacacacacadmhcgfhbhfgfhdhegfgeefhigfgdhfhegjgpgoemgfhggfgmcagmgfhggfgmdnccgbhdejgohggpglgfhccccahfgjebgdgdgfhdhddnccgggbgmhdgfcccpdoanakcacacacacacadmcphcgfhbhfgfhdhegfgefahcgjhggjgmgfghgfhddoanakcacacacadmcphdgfgdhfhcgjhehjdoanakcacadmcphehchfhdheejgogggpdoanakdmcpgbhdhdgfgngcgmhjdoanakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaamaaaaaabadkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
}
}