[dasher] IDE Xcode 9.0, fix compiler errors/warnings, update iphone code, fix few ios issues



commit cdf82bb2c571f811a9faf3b9ff10a331917fa51b
Author: Hossein Amin <hossein aminbros com>
Date:   Tue Oct 31 14:56:48 2017 +0330

    IDE Xcode 9.0, fix compiler errors/warnings, update iphone code, fix few ios issues

 .gitignore                                         |    1 +
 Src/Common/Globber.cpp                             |   13 +-
 Src/Common/Globber.h                               |    5 +
 Src/DasherCore/ControlManager.cpp                  |    2 +-
 Src/DasherCore/ControlManager.h                    |   12 +-
 Src/DasherCore/DashIntfSettings.cpp                |    4 +
 Src/DasherCore/DashIntfSettings.h                  |    2 +-
 Src/DasherCore/ExpansionPolicy.h                   |    4 +-
 Src/DasherCore/Observable.h                        |    2 +-
 Src/DasherCore/SettingsStore.cpp                   |    2 +
 Src/DasherCore/SettingsStore.h                     |    3 +
 Src/iPhone/Classes/ActionConfigurator.mm           |    1 -
 Src/iPhone/Classes/CDasherInterfaceBridge.h        |   43 +-
 Src/iPhone/Classes/CDasherInterfaceBridge.mm       |   19 +-
 Src/iPhone/Classes/COSXSettingsStore.h             |    2 +
 Src/iPhone/Classes/COSXSettingsStore.mm            |    4 +
 Src/iPhone/Classes/DasherAppDelegate.h             |    6 +-
 Src/iPhone/Classes/DasherAppDelegate.mm            |  332 +++++++-----
 Src/iPhone/Classes/DasherUtil.h                    |    2 +-
 Src/iPhone/Classes/DasherUtil.mm                   |    2 +-
 Src/iPhone/Classes/EAGLView.h                      |   11 +-
 Src/iPhone/Classes/EAGLView.mm                     |   12 +-
 Src/iPhone/Classes/FileUtils.h                     |   15 +
 Src/iPhone/Classes/FileUtils.mm                    |   64 ++
 Src/iPhone/Classes/IPhoneInputs.mm                 |    4 +-
 Src/iPhone/Classes/InputMethodSelector.mm          |    2 +-
 Src/iPhone/Classes/ParametersController.mm         |    4 +-
 Src/iPhone/Dasher.xcodeproj/project.pbxproj        |  600 +++++++++++++++++++-
 .../AppIcon.appiconset/Contents.json               |  182 ++++++
 .../AppIcon.appiconset/Icon-App-20x20 1x png       |  Bin 0 -> 484 bytes
 .../AppIcon.appiconset/Icon-App-20x20 2x png       |  Bin 0 -> 883 bytes
 .../AppIcon.appiconset/Icon-App-20x20 3x png       |  Bin 0 -> 1318 bytes
 .../AppIcon.appiconset/Icon-App-29x29 1x png       |  Bin 0 -> 655 bytes
 .../AppIcon.appiconset/Icon-App-29x29 2x png       |  Bin 0 -> 1253 bytes
 .../AppIcon.appiconset/Icon-App-29x29 3x png       |  Bin 0 -> 1957 bytes
 .../AppIcon.appiconset/Icon-App-40x40 1x png       |  Bin 0 -> 883 bytes
 .../AppIcon.appiconset/Icon-App-40x40 2x png       |  Bin 0 -> 1756 bytes
 .../AppIcon.appiconset/Icon-App-40x40 3x png       |  Bin 0 -> 2763 bytes
 .../AppIcon.appiconset/Icon-App-57x57 1x png       |  Bin 0 -> 1263 bytes
 .../AppIcon.appiconset/Icon-App-57x57 2x png       |  Bin 0 -> 2595 bytes
 .../AppIcon.appiconset/Icon-App-60x60 1x png       |  Bin 0 -> 1318 bytes
 .../AppIcon.appiconset/Icon-App-60x60 2x png       |  Bin 0 -> 2763 bytes
 .../AppIcon.appiconset/Icon-App-60x60 3x png       |  Bin 0 -> 4193 bytes
 .../AppIcon.appiconset/Icon-App-72x72 1x png       |  Bin 0 -> 1601 bytes
 .../AppIcon.appiconset/Icon-App-72x72 2x png       |  Bin 0 -> 3253 bytes
 .../AppIcon.appiconset/Icon-App-76x76 1x png       |  Bin 0 -> 1682 bytes
 .../AppIcon.appiconset/Icon-App-76x76 2x png       |  Bin 0 -> 3481 bytes
 .../AppIcon.appiconset/Icon-App-76x76 3x png       |  Bin 0 -> 5330 bytes
 .../AppIcon.appiconset/Icon-App-83 5x83 5 2x png   |  Bin 0 -> 3864 bytes
 .../AppIcon.appiconset/Icon-Small-50x50 1x png     |  Bin 0 -> 1116 bytes
 .../AppIcon.appiconset/Icon-Small-50x50 2x png     |  Bin 0 -> 2267 bytes
 .../AppIcon.appiconset/ItunesArtwork 2x png        |  Bin 0 -> 25939 bytes
 Src/iPhone/Dasher/Images.xcassets/Contents.json    |    6 +
 .../LaunchImage.launchimage/Contents.json          |   49 ++
 Src/iPhone/Dasher/Images.xcassets/README.md        |   24 +
 .../Dasher/Images.xcassets/iTunesArtwork 1x png    |  Bin 0 -> 3061 bytes
 .../Dasher/Images.xcassets/iTunesArtwork 2x png    |  Bin 0 -> 25939 bytes
 .../Dasher/Images.xcassets/iTunesArtwork 3x png    |  Bin 0 -> 42775 bytes
 Src/iPhone/Info.plist                              |    8 +-
 Src/iPhone/MainWindow.xib                          |  170 +-----
 Src/iPhone/fast-forward 2x png                     |  Bin 0 -> 925 bytes
 Src/iPhone/fast-forward 3x png                     |  Bin 0 -> 1255 bytes
 .../flite-1.4-iphone/voices/cmulex/cmu_lex.c       |    2 +-
 Src/iPhone/rewind 2x png                           |  Bin 0 -> 985 bytes
 Src/iPhone/rewind 3x png                           |  Bin 0 -> 1246 bytes
 65 files changed, 1252 insertions(+), 362 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index c1db737..059c7a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.DS_Store
 *.a
 *.make
 *.m4
diff --git a/Src/Common/Globber.cpp b/Src/Common/Globber.cpp
index 9a4153b..a718682 100644
--- a/Src/Common/Globber.cpp
+++ b/Src/Common/Globber.cpp
@@ -10,17 +10,18 @@
 #include <glob.h>
 #include <string.h>
 
-void globScan(AbstractParser *parser, const char **usrPaths, const char **sysPaths) {
+void globScan(AbstractParser *parser, const char **usrPaths, const char **sysPaths, 
int(*error_callback)(const char *,int)) {
   int flags = GLOB_MARK | GLOB_NOSORT;
   glob_t info;
-  int numUser = 0;
+  size_t numUser = 0;
+  memset(&info, 0, sizeof(info));
   while (*usrPaths) {
-    glob(*usrPaths++, flags, NULL, &info); //NULL error function
+    glob(*usrPaths++, flags, error_callback, &info); //NULL error function
     flags |= GLOB_APPEND;
   }
   numUser = info.gl_pathc;
   while (*sysPaths) {
-    glob(*sysPaths++, flags, NULL, &info);
+    glob(*sysPaths++, flags, error_callback, &info);
     flags |= GLOB_APPEND;
   }
   
@@ -33,3 +34,7 @@ void globScan(AbstractParser *parser, const char **usrPaths, const char **sysPat
   }
   globfree(&info);
 }
+
+void globScan(AbstractParser *parser, const char **usrPaths, const char **sysPaths) {
+    globScan(parser, usrPaths, sysPaths, NULL);
+}
diff --git a/Src/Common/Globber.h b/Src/Common/Globber.h
index 69ee08f..41879a7 100644
--- a/Src/Common/Globber.h
+++ b/Src/Common/Globber.h
@@ -14,4 +14,9 @@
 void globScan(AbstractParser *parser,
               const char **userPaths,
               const char **systemPaths);
+void globScan(AbstractParser *parser, 
+              const char **usrPaths, 
+              const char **sysPaths, 
+              int(*error_callback)(const char *,int));
+
 #endif
diff --git a/Src/DasherCore/ControlManager.cpp b/Src/DasherCore/ControlManager.cpp
index e3a750e..e214419 100644
--- a/Src/DasherCore/ControlManager.cpp
+++ b/Src/DasherCore/ControlManager.cpp
@@ -324,7 +324,7 @@ public:
 
     return pNode->mgr()->GetDasherInterface()->ctrlOffsetAfterMove(offsetBefore + 1, m_bForwards, m_dist) - 
1;
   }
-  virtual void happen(CControlBase::CContNode *pNode) {
+  virtual void happen(CControlBase::CContNode *pNode) override {
     pNode->mgr()->GetDasherInterface()->ctrlDelete(m_bForwards, m_dist);
   }
 };
diff --git a/Src/DasherCore/ControlManager.h b/Src/DasherCore/ControlManager.h
index 6425396..25ff218 100644
--- a/Src/DasherCore/ControlManager.h
+++ b/Src/DasherCore/ControlManager.h
@@ -57,9 +57,9 @@ namespace Dasher {
 
     class CContNode : public CDasherNode {
     public:
-      CControlBase *mgr() const {return m_pMgr;}
+      CControlBase *mgr() const override {return m_pMgr;}
       CContNode(int iOffset, int iColour, NodeTemplate *pTemplate, CControlBase *pMgr);
-      CDasherScreen::Label *getLabel() { return m_pTemplate->m_pLabel; }
+      CDasherScreen::Label *getLabel() override { return m_pTemplate->m_pLabel; }
 
       bool bShove() override {return false;}
       double SpeedMul() override;
@@ -67,10 +67,10 @@ namespace Dasher {
       /// Provide children for the supplied node
       ///
 
-      virtual void PopulateChildren();
-      virtual int ExpectedNumChildren();
+      virtual void PopulateChildren() override;
+      virtual int ExpectedNumChildren() override;
 
-      virtual void Output();
+      virtual void Output() override;
 
     private:
       NodeTemplate *m_pTemplate;
@@ -79,7 +79,7 @@ namespace Dasher {
 
     class Action {
     public:
-      virtual ~Action() = default;
+      virtual ~Action() { };
       virtual int calculateNewOffset(CControlBase::CContNode *pNode, int offsetBefore) { return 
offsetBefore; }
         virtual void happen(CContNode *pNode) {}
     };
diff --git a/Src/DasherCore/DashIntfSettings.cpp b/Src/DasherCore/DashIntfSettings.cpp
index 6c1844d..a58b130 100644
--- a/Src/DasherCore/DashIntfSettings.cpp
+++ b/Src/DasherCore/DashIntfSettings.cpp
@@ -30,3 +30,7 @@ void CDashIntfSettings::SetLongParameter(int iParameter, long lValue) {
 void CDashIntfSettings::SetStringParameter(int iParameter, const string &strValue) {
   CDasherInterfaceBase::SetStringParameter(iParameter, strValue);
 }
+
+bool CDashIntfSettings::IsParameterSaved(std::string & Key) {
+    return CDasherInterfaceBase::IsParameterSaved(Key);
+}
diff --git a/Src/DasherCore/DashIntfSettings.h b/Src/DasherCore/DashIntfSettings.h
index 9f774c8..6a21839 100644
--- a/Src/DasherCore/DashIntfSettings.h
+++ b/Src/DasherCore/DashIntfSettings.h
@@ -46,7 +46,7 @@ public:
   void SetBoolParameter(int iParameter, bool bValue);
   void SetLongParameter(int iParameter, long lValue);
   void SetStringParameter(int iParameter, const string &sValue);
-
+  bool IsParameterSaved(std::string & Key);
 };
 
 }
diff --git a/Src/DasherCore/ExpansionPolicy.h b/Src/DasherCore/ExpansionPolicy.h
index c0e2ce8..7b05f0e 100644
--- a/Src/DasherCore/ExpansionPolicy.h
+++ b/Src/DasherCore/ExpansionPolicy.h
@@ -23,7 +23,7 @@ namespace Dasher {
 class CExpansionPolicy
 {
 public:
-  virtual ~CExpansionPolicy() = default;
+    virtual ~CExpansionPolicy() { };
   ///dMaxCost should be the value returned by pushNode from the call for the node most closely enclosing 
pNode (that was pushed!)
   ///for the first (outermost) node, i.e. when no enclosing node has been passed, (+ive) INFINITY should be 
passed in.
        virtual double pushNode(CDasherNode *pNode, int iDasherMinY, int iDasherMaxY, bool bExpand, double 
dMaxCost)=0;
@@ -43,7 +43,6 @@ class NoExpansions : public CExpansionPolicy
 {
 public:
   NoExpansions() = default;
-  ~NoExpansions() override = default;
        double pushNode(CDasherNode *pNode, int iMin, int iMax, bool bExpand, double dMaxCost) override 
{return dMaxCost;}
   bool apply() override {return false;}
 };
@@ -54,7 +53,6 @@ class BudgettingPolicy : public CExpansionPolicy
 {
 public:
   BudgettingPolicy(CDasherModel *pModel, unsigned int iNodeBudget);
-  ~BudgettingPolicy() override = default;
   ///sets cost according to getCost(pNode,iMin,iMax);
   ///then assures node is cheaper (less important) than its parent;
   ///then adds to relevant queue
diff --git a/Src/DasherCore/Observable.h b/Src/DasherCore/Observable.h
index 5ddb3a0..4a00c80 100644
--- a/Src/DasherCore/Observable.h
+++ b/Src/DasherCore/Observable.h
@@ -9,7 +9,7 @@ template <typename  T> class Observable;
 ///Thing that listens to events - parameterized by the type of event.
 template <typename T> class Observer {
 public:
-  virtual ~Observer() = default;
+  virtual ~Observer() {};
   ///Called to indicate an event has occurred! Subclasses must implement.
   virtual void HandleEvent(T evt)=0;
 };
diff --git a/Src/DasherCore/SettingsStore.cpp b/Src/DasherCore/SettingsStore.cpp
index 23c184f..3561d85 100644
--- a/Src/DasherCore/SettingsStore.cpp
+++ b/Src/DasherCore/SettingsStore.cpp
@@ -286,6 +286,8 @@ void CSettingsUser::SetBoolParameter(int iParameter, bool bValue) {s_pSettingsSt
 void CSettingsUser::SetLongParameter(int iParameter, long lValue) 
{s_pSettingsStore->SetLongParameter(iParameter, lValue);}
 void CSettingsUser::SetStringParameter(int iParameter, const std::string &strValue) 
{s_pSettingsStore->SetStringParameter(iParameter, strValue);}
 
+bool CSettingsUser::IsParameterSaved(const std::string &Key) { return 
s_pSettingsStore->IsParameterSaved(Key); }
+
 CSettingsObserver::CSettingsObserver(CSettingsUser *pCreateFrom) {
   DASHER_ASSERT(pCreateFrom);
   s_pSettingsStore->Register(this);
diff --git a/Src/DasherCore/SettingsStore.h b/Src/DasherCore/SettingsStore.h
index e705479..748f6a7 100644
--- a/Src/DasherCore/SettingsStore.h
+++ b/Src/DasherCore/SettingsStore.h
@@ -62,6 +62,8 @@ public:
   void AddParameters(const Settings::lp_table* table, size_t count);
   void AddParameters(const Settings::sp_table* table, size_t count);
   Observable<CParameterChange>& PreSetObservable() { return pre_set_observable_; }
+    
+  virtual bool IsParameterSaved(const std::string & Key) { return false; }; // avoid undef sub-classes error
 
 protected:
     ///Loads all (persistent) prefs from disk, using+storing default values when no
@@ -145,6 +147,7 @@ private:
     CSettingsUser(CSettingsStore *pSettingsStore);
   public:
     virtual ~CSettingsUser();
+    bool IsParameterSaved(const std::string & Key);
   protected:
     ///Create a new SettingsUser, inheriting+sharing settings from the creator.
     CSettingsUser(CSettingsUser *pCreateFrom);
diff --git a/Src/iPhone/Classes/ActionConfigurator.mm b/Src/iPhone/Classes/ActionConfigurator.mm
index 1c73fa7..38122a4 100644
--- a/Src/iPhone/Classes/ActionConfigurator.mm
+++ b/Src/iPhone/Classes/ActionConfigurator.mm
@@ -144,7 +144,6 @@ using Dasher::Settings::GetParameterName;
       int *params;
       DASHER_ASSERT([indexPath section]==0);
       params=OTHER_BPS;
-      }
       int iParameter = params[[indexPath row]];
       [sw addTarget:self action:@selector(paramSlid:) forControlEvents:UIControlEventValueChanged];
       cell.textLabel.text = NSStringFromStdString(GetParameterName(iParameter));
diff --git a/Src/iPhone/Classes/CDasherInterfaceBridge.h b/Src/iPhone/Classes/CDasherInterfaceBridge.h
index 775dc2d..fe67cd8 100644
--- a/Src/iPhone/Classes/CDasherInterfaceBridge.h
+++ b/Src/iPhone/Classes/CDasherInterfaceBridge.h
@@ -12,6 +12,7 @@
 #import "DefaultFilter.h"
 #import "StylusFilter.h"
 #import "Vec3.h"
+#import "FileUtils.h"
 
 @class DasherAppDelegate;
 
@@ -52,31 +53,32 @@ public:
   void SetTiltAxes(Vec3 main, float off, Vec3 slow, float off2);
   virtual void WriteTrainFile(const std::string &filename,const std::string &strNewText);
   virtual int GetFileSize(const std::string &strFileName);
-  bool SupportsClipboard() {return true;}
-  void CopyToClipboard(const std::string &strText);
-  bool SupportsSpeech();
-  void Speak(const std::string &strText, bool bInterrupt);
-  void ClearAllContext();
-  std::string GetAllContext();
-  std::string GetContext(unsigned int iStart, unsigned int iLength);
-  unsigned int ctrlMove(bool bForwards, Dasher::CControlManager::EditDistance dist);
-  unsigned int ctrlDelete(bool bForwards, Dasher::CControlManager::EditDistance dist);
-  void SetLockStatus(const string &strText, int iPercent);
-  void editOutput(const string &strText, Dasher::CDasherNode *pNode);
-  void editDelete(const string &strText, Dasher::CDasherNode *pNode);
-  void editConvert(Dasher::CDasherNode *pNode);
-  void editProtect(Dasher::CDasherNode *pNode);
+  bool SupportsClipboard() override {return true;}
+  void CopyToClipboard(const std::string &strText) override;
+  bool SupportsSpeech() override;
+  void Speak(const std::string &strText, bool bInterrupt) override;
+  void ClearAllContext() override;
+  std::string GetAllContext() override;
+  std::string GetContext(unsigned int iStart, unsigned int iLength) override;
+  unsigned int ctrlMove(bool bForwards, Dasher::CControlManager::EditDistance dist) override;
+  unsigned int ctrlDelete(bool bForwards, Dasher::CControlManager::EditDistance dist) override;
+  void SetLockStatus(const string &strText, int iPercent) override;
+  void editOutput(const string &strText, Dasher::CDasherNode *pNode) override;
+  void editDelete(const string &strText, Dasher::CDasherNode *pNode) override;
+  void editConvert(Dasher::CDasherNode *pNode) override;
+  void editProtect(Dasher::CDasherNode *pNode) override;
   ///Override for asynchronous messages only...TODO?
-  void Message(const string &strText, bool bInterrupt);
-  Dasher::CGameModule *CreateGameModule();
+  void Message(const string &strText, bool bInterrupt) override;
+  Dasher::CGameModule *CreateGameModule() override;
   
-  void HandleEvent(int iParameter);
-  void EnterGameMode(Dasher::CGameModule *pGameModule);
+  void HandleEvent(int iParameter) override;
+  void EnterGameMode(Dasher::CGameModule *pGameModule) override;
   void LeaveGameMode();
 
-  void ScanFiles(AbstractParser *parser, const std::string &strPattern);
+  // void ScanFiles(AbstractParser *parser, const std::string &strPattern);
+  int GetAllContextLenght() override;
 private:
-  virtual void CreateModules();
+  virtual void CreateModules() override;
   
   ///
   /// Pass events coming from the core to the appropriate handler.
@@ -90,4 +92,5 @@ private:
   Dasher::CIPhoneTiltInput *m_pTiltDevice;
   Dasher::UndoubledTouch *m_pUndoubledTouch;
   Dasher::CIPhoneTwoFingerInput *m_pTwoFingerDevice;
+  FileUtils m_fileUtils;
 };
diff --git a/Src/iPhone/Classes/CDasherInterfaceBridge.mm b/Src/iPhone/Classes/CDasherInterfaceBridge.mm
index ea6a7bb..3f11def 100644
--- a/Src/iPhone/Classes/CDasherInterfaceBridge.mm
+++ b/Src/iPhone/Classes/CDasherInterfaceBridge.mm
@@ -75,7 +75,7 @@ private:
   UIWebView *m_pWebView;
 };
 
-CDasherInterfaceBridge::CDasherInterfaceBridge(DasherAppDelegate *aDasherApp) : CDashIntfScreenMsgs(new 
COSXSettingsStore()),
+CDasherInterfaceBridge::CDasherInterfaceBridge(DasherAppDelegate *aDasherApp) : CDashIntfScreenMsgs(new 
COSXSettingsStore(), &m_fileUtils),
 dasherApp(aDasherApp),
 userPath([[NSString stringWithFormat:@"%@/", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES) objectAtIndex:0]] retain]) {
 }
@@ -125,10 +125,13 @@ void CDasherInterfaceBridge::Realize() {
   [dasherApp setAlphabet:GetActiveAlphabet()];
   //don't call HandleEvent, would call superclass and reconstruct the NCManager!
   //TODO maybe better to make ChangeAlphabet virtual and override that?  
-
+    dispatch_async(dispatch_get_main_queue(), ^{
+    
   [dasherApp glView].animating=YES;
+    });
 }
 
+/*
 void CDasherInterfaceBridge::ScanFiles(AbstractParser *parser, const std::string &strPattern) {
 
   string strPath(StdStringFromNSString([[NSBundle mainBundle] bundlePath])+"/"+strPattern);
@@ -147,7 +150,7 @@ void CDasherInterfaceBridge::ScanFiles(AbstractParser *parser, const std::string
   globScan(parser, user, sys);
 
 }
-
+*/
 /*void CDasherInterfaceBridge::ScanForFiles(AbstractFileParser *parser, const std::string &strName) {
   NSFileManager *mgr = [NSFileManager defaultManager];
   NSArray *names = [[mgr enumeratorAtPath:systemPath] allObjects];
@@ -209,6 +212,7 @@ void CDasherInterfaceBridge::editProtect(CDasherNode *pSource) {
 }
 
 void CDasherInterfaceBridge::Message(const string &strMessage, bool bInterrupt) {
+  NSLog(@"Message: %s", strMessage.c_str());
   if (bInterrupt)
     CDashIntfScreenMsgs::Message(strMessage,true);
   else
@@ -250,6 +254,11 @@ string CDasherInterfaceBridge::GetContext(unsigned int iOffset, unsigned int iLe
   return StdStringFromNSString([dasherApp textAtOffset:iOffset Length:iLength]);
 }
 
+/// Subclasses should return the length of whole text. In letters, not bytes.
+int CDasherInterfaceBridge::GetAllContextLenght() {
+  return (int)[[dasherApp allText] length];
+}
+
 unsigned int CDasherInterfaceBridge::ctrlMove(bool bForwards, CControlManager::EditDistance dist) {
   return [dasherApp move:dist forwards:bForwards];
 }
@@ -271,8 +280,8 @@ int CDasherInterfaceBridge::GetFileSize(const std::string &strFileName) {
 void CDasherInterfaceBridge::WriteTrainFile(const std::string &filename,const std::string &strNewText) {
   if(strNewText.length() == 0)
     return;
-  
-  std::string strFilename(StdStringFromNSString(userPath) + filename);
+    
+  std::string strFilename(StdStringFromNSString((const NSString*)userPath) + filename);
   
   NSLog(@"Write train file: %s", strFilename.c_str());
   
diff --git a/Src/iPhone/Classes/COSXSettingsStore.h b/Src/iPhone/Classes/COSXSettingsStore.h
index 24467fb..72ba4fd 100644
--- a/Src/iPhone/Classes/COSXSettingsStore.h
+++ b/Src/iPhone/Classes/COSXSettingsStore.h
@@ -24,6 +24,8 @@ public:
   std::string GetParamName(int iParameter);
 
   //int GetParameterIndex(const std::string &  Key);
+    
+  bool IsParameterSaved(const std::string & Key);
 
 private:
 
diff --git a/Src/iPhone/Classes/COSXSettingsStore.mm b/Src/iPhone/Classes/COSXSettingsStore.mm
index 9c5e831..d1ff59b 100644
--- a/Src/iPhone/Classes/COSXSettingsStore.mm
+++ b/Src/iPhone/Classes/COSXSettingsStore.mm
@@ -63,3 +63,7 @@ void COSXSettingsStore::SaveSetting(const std::string & Key, long Value) {
 void COSXSettingsStore::SaveSetting(const std::string & Key, const std::string & Value) {
   [[NSUserDefaults standardUserDefaults] setObject:NSStringFromStdString(Value) 
forKey:NSStringFromStdString(Key)];
 }
+
+bool COSXSettingsStore::IsParameterSaved(const std::string &Key) {
+    return [[NSUserDefaults standardUserDefaults] objectForKey:NSStringFromStdString(Key)];
+}
diff --git a/Src/iPhone/Classes/DasherAppDelegate.h b/Src/iPhone/Classes/DasherAppDelegate.h
index 27d75ca..1c479fe 100644
--- a/Src/iPhone/Classes/DasherAppDelegate.h
+++ b/Src/iPhone/Classes/DasherAppDelegate.h
@@ -15,14 +15,12 @@
 @class FliteTTS;
 
 @interface DasherAppDelegate : UIViewController <UIApplicationDelegate, UIActionSheetDelegate, 
UITextViewDelegate, UIWebViewDelegate> {
-    UIWindow *window;
     EAGLView *glView;
   FliteTTS *fliteEng;
        TextView *textView;
   UIWebView *webView;
        NSRange selectedText;
        CDasherInterfaceBridge* _dasherInterface;
-       UIButton *speedBtn;
        UIToolbar *tools;
   UITextView *messageLabel;
   UISlider *speedSlider;
@@ -56,6 +54,10 @@
 
 @property (readonly) CDasherInterfaceBridge *dasherInterface;
 @property BOOL allowsRotation;
+@property (nonatomic, retain) UIWindow *window;
+@property (nonatomic, retain) UILabel *speedLabel;
+
+@property (nonatomic, assign) CGFloat speedChangeStep;
 @end
 
 @interface UIViewController (lockable)
diff --git a/Src/iPhone/Classes/DasherAppDelegate.mm b/Src/iPhone/Classes/DasherAppDelegate.mm
index ae4f811..b4c62c7 100644
--- a/Src/iPhone/Classes/DasherAppDelegate.mm
+++ b/Src/iPhone/Classes/DasherAppDelegate.mm
@@ -18,6 +18,8 @@
 #import "FliteTTS.h"
 #import "ActionConfigurator.h"
 
+#import "FileUtils.h"
+
 @interface UITextView (MessageHider)
 -(void)hideMessage:(NSNumber *)height;
 @end
@@ -51,14 +53,12 @@
 - (void)settings;
 - (void)initDasherInterface;
 - (void)finishStartup;
-- (void)doSpeedBtnImage:(NSString *)msg;
 - (void)speedSlid:(id)slider;
 - (CGRect)doLayout:(UIInterfaceOrientation)orient;
 //calls through to [EAGLView makeContextCurrent]
 - (void)selectEAGLContext;
 @property (retain) UILabel *screenLockLabel;
 @property (retain) NSString *lockText;
-@property (retain) UIWindow *window;
 @property (nonatomic,retain) NSString *m_wordBoundary;
 @property (nonatomic,retain) NSString *m_sentenceBoundary;
 @property (nonatomic,retain) NSString *m_lineBoundary;
@@ -111,8 +111,9 @@ static NSString *EDIT_FONT_SIZE = @"iPhoneEditBoxFontSize";
   UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, y, appSize.width-20, 20.0)] autorelease];
   label.textAlignment = UITextAlignmentCenter;
   UISlider *slider = [[[UISlider alloc] initWithFrame:CGRectMake(10.0, y+20, appSize.width-20, 20.0)] 
autorelease];
-  slider.tag = (int)label; label.tag=(int)EDIT_FONT_SIZE;
-  slider.minimumValue = 5; slider.maximumValue = 40;
+  slider.tag = (NSInteger)label; label.tag=(NSInteger)EDIT_FONT_SIZE;
+  slider.minimumValue = 5;
+  slider.maximumValue = 40;
   slider.value = [ud integerForKey:EDIT_FONT_SIZE];
   [slider addTarget:self action:@selector(longUserDefChanged:) forControlEvents:UIControlEventValueChanged];
   [self longUserDefChanged:slider];
@@ -146,7 +147,8 @@ using namespace Dasher;
 @synthesize m_sentenceBoundary;
 @synthesize m_lineBoundary;
 @synthesize allowsRotation = m_bAllowsRotation;
-@synthesize window;
+
+static DasherAppDelegate *s_appDelegate;
 
 //a private method called only by CDasherInterfaceBridge
 -(EAGLView *)glView {
@@ -168,8 +170,8 @@ using namespace Dasher;
 /// Sets sizes of toolbar and textview according to supplied orientation
 /// Also computes and returns desired size of glView, and sets said _iff_ glView is non-nil
 -(CGRect)doLayout:(UIInterfaceOrientation)orient {
-  self.view.frame = [UIScreen mainScreen].applicationFrame;
-
+  self.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen 
mainScreen].bounds.size.height);
+  CGFloat top = [UIApplication sharedApplication].statusBarFrame.size.height;
   const CGSize mainSize = self.view.bounds.size;
   //now always display toolbar, even in landscape
   const int barHeight(mainSize.height/20);
@@ -178,15 +180,15 @@ using namespace Dasher;
   CGRect dashRect,textRect;
   switch (orient) {
     case UIInterfaceOrientationPortrait: {
-      dashRect = CGRectMake(0.0, 0.0, mainSize.width, ((mainHeight*3)/4));
-      textRect = CGRectMake(0.0, dashRect.size.height, mainSize.width, mainHeight-dashRect.size.height);
+      dashRect = CGRectMake(0.0, top, mainSize.width, ((mainHeight*3)/4));
+      textRect = CGRectMake(0.0, top + dashRect.size.height, mainSize.width, 
mainHeight-dashRect.size.height-top);
       textView.bLandscape = NO;
       break;
     }
     case UIInterfaceOrientationLandscapeRight:
     case UIInterfaceOrientationLandscapeLeft: {
-      textRect = CGRectMake(0.0, 0.0, static_cast<int>((mainSize.width*2)/9), mainHeight);
-      dashRect = CGRectMake(textRect.size.width, 0.0, mainSize.width-textRect.size.width, mainHeight);
+      textRect = CGRectMake(0.0, top, static_cast<int>((mainSize.width*2)/9), mainHeight-top);
+      dashRect = CGRectMake(textRect.size.width, top, mainSize.width-textRect.size.width, mainHeight-top);
       textView.bLandscape = YES;
       break;
     }
@@ -208,16 +210,15 @@ using namespace Dasher;
 -(CDasherInterfaceBridge *)dasherInterface {return _dasherInterface;}
 
 - (void)applicationDidFinishLaunching:(UIApplication *)application {
+  // check delegate
+  id<UIApplicationDelegate> appDelegate = application.delegate;
+  NSAssert ([appDelegate isMemberOfClass:[DasherAppDelegate class]], @"AppDelegate is not 
DasherAppDelegate!");
+  s_appDelegate = (DasherAppDelegate*)appDelegate;
+  
   //by default, we support landscape mode (i.e. unless the input device _disables_ it)
   // - hence, set now, before the input device is activate()d...
   m_bAllowsRotation = YES;
-
-  //sizes set in doLayout, below...
-       self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
-       self.view = [[[UIView alloc] init] autorelease];
-
-       [self.window addSubview:self.view];
-  
+    
   //make object (this doesn't do anything much, initialization/Realize later
   // - but we have to set a screen before we Realize)
   _dasherInterface = new CDasherInterfaceBridge(self);
@@ -225,85 +226,142 @@ using namespace Dasher;
   //adjust to new scale...
   if (_dasherInterface->GetLongParameter(LP_DASHER_FONTSIZE)<5)
     _dasherInterface->SetLongParameter(LP_DASHER_FONTSIZE, 
10*max(_dasherInterface->GetLongParameter(LP_DASHER_FONTSIZE),1l));
-  //create GUI components...
-       textView = [[[TextView alloc] init] autorelease];
-  webView = [[[UIWebView alloc] init] autorelease];
-  messageLabel = [[[UITextView alloc] init] autorelease];
-  speedSlider = [[[UISlider alloc] init] autorelease];
-  tools = [[UIToolbar alloc] init]; //retain a reference (until dealloc) because of rotation
-       glView = [[[EAGLView alloc] initWithFrame:[self doLayout:UIInterfaceOrientationPortrait] 
Delegate:self] autorelease];
-  glView.multipleTouchEnabled = YES;
-               
-  //start Realization i.e. training in a separate thread. (Has to be after first
-  // call to doLayout, or get a black band across top of screen)
-  [self doAsyncLocked:@"Initializing..." target:self selector:@selector(initDasherInterface) param:nil];
-
-       textView.text=@"";
-       textView.editable = NO;
-       textView.delegate = self;
-       selectedText.location = selectedText.length = 0;
-  textView.selectedRange=selectedText;
-  int sz = [[NSUserDefaults standardUserDefaults] integerForKey:EDIT_FONT_SIZE];
-  if (!sz)
-    [[NSUserDefaults standardUserDefaults] setInteger:sz=12 forKey:EDIT_FONT_SIZE];
-       
-  textView.font = [UIFont systemFontOfSize:sz];
-
-  webView.dataDetectorTypes = UIDataDetectorTypeNone;
-  webView.delegate = self;
-  
-  messageLabel.editable = NO;
-  messageLabel.backgroundColor = [UIColor grayColor];
-  messageLabel.textColor = [UIColor whiteColor];
-  messageLabel.contentInset = UIEdgeInsetsZero;
-  messageLabel.hidden = YES;
-
-  speedSlider.minimumValue=0.1; speedSlider.maximumValue=12.0;
-  speedSlider.hidden = YES;
-  
-  [speedSlider addTarget:self action:@selector(fadeSlider) forControlEvents:UIControlEventAllTouchEvents];
-  [speedSlider addTarget:self action:@selector(speedSlid:) forControlEvents:UIControlEventValueChanged];
-  //...and lay them out
-       speedBtn = [UIButton buttonWithType:UIButtonTypeCustom];
-       [speedBtn setImageEdgeInsets:UIEdgeInsetsMake(0.0, 2.0, 0.0, 2.0)];
-       [speedBtn addTarget:self action:@selector(fadeSlider) forControlEvents:UIControlEventAllTouchEvents];
-  
-  [self refreshToolbar];
-       
-       [self.view addSubview:glView];
-       [self.view addSubview:textView]; [self.view addSubview:webView];
-  //relying here on things added later being on top of those added earlier.
-  //Seems to work ok but not sure whether this is guaranteed?!
-  [self.view addSubview:speedSlider];
-  [self.view addSubview:messageLabel];
-       [self.view addSubview:tools];
-       [window makeKeyAndVisible];
-  //exit this routine; initDasherInterface (in separate thread) will cause this (main) thread
+    
+    // iOS specific default settings
+    std::string geometryStr("Geometry");
+    if(!_dasherInterface->IsParameterSaved(geometryStr)) {
+        // maybe new value needed
+        // _dasherInterface->SetLongParameter(LP_GEOMETRY, 0);
+    }
+    // initiate window, the rest at viewDidLoad
+    //sizes set in doLayout, below...
+    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
+    // self.view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 
self.window.bounds.size.height)] autorelease];
+    // [self.window addSubview:self.view];
+    self.window.rootViewController = self;
+    [self.window makeKeyAndVisible];
+      //exit this routine; initDasherInterface (in separate thread) will cause this (main) thread
   // to execute finishStartup, and finally unlock the display, when it's done with training etc.
 }
 
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    //create GUI components...
+    textView = [[[TextView alloc] init] autorelease];
+    webView = [[[UIWebView alloc] init] autorelease];
+    messageLabel = [[[UITextView alloc] init] autorelease];
+    speedSlider = [[[UISlider alloc] init] autorelease];
+    tools = [[UIToolbar alloc] init]; //retain a reference (until dealloc) because of rotation
+    glView = [[[EAGLView alloc] initWithFrame:[self doLayout:UIInterfaceOrientationPortrait] Delegate:self] 
autorelease];
+    glView.animating = NO;
+    glView.multipleTouchEnabled = YES;
+    
+    textView.text=@"";
+    textView.editable = NO;
+    textView.delegate = self;
+    selectedText.location = selectedText.length = 0;
+    textView.selectedRange=selectedText;
+    NSInteger sz = [[NSUserDefaults standardUserDefaults] integerForKey:EDIT_FONT_SIZE];
+    if (!sz)
+        [[NSUserDefaults standardUserDefaults] setInteger:sz=12 forKey:EDIT_FONT_SIZE];
+    
+    textView.font = [UIFont systemFontOfSize:sz];
+    
+    webView.dataDetectorTypes = UIDataDetectorTypeNone;
+    webView.delegate = self;
+    
+    messageLabel.editable = NO;
+    messageLabel.backgroundColor = [UIColor grayColor];
+    messageLabel.textColor = [UIColor whiteColor];
+    messageLabel.contentInset = UIEdgeInsetsZero;
+    messageLabel.hidden = YES;
+    
+    CGFloat maxSpeed = _dasherInterface->GetLongParameter(LP_X_LIMIT_SPEED) / 100.0;
+    self.speedChangeStep = (CGFloat)maxSpeed / 15;
+    speedSlider.minimumValue = 0.1;
+    speedSlider.maximumValue = maxSpeed;
+    speedSlider.hidden = YES;
+    
+    [speedSlider addTarget:self action:@selector(fadeSlider) forControlEvents:UIControlEventAllTouchEvents];
+    [speedSlider addTarget:self action:@selector(speedSlid:) forControlEvents:UIControlEventValueChanged];
+    
+    // init speed label, it will be added to view in refreshToolbar call
+    self.speedLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
+    self.speedLabel.userInteractionEnabled = YES;
+    [self.speedLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self 
action:@selector(fadeSlider)]];
+    
+    [self notifySpeedChange];
+    [self refreshToolbar];
+    
+    [self.view addSubview:glView];
+    [self.view addSubview:textView];
+    [self.view addSubview:webView];
+    //relying here on things added later being on top of those added earlier.
+    //Seems to work ok but not sure whether this is guaranteed?!
+    [self.view addSubview:speedSlider];
+    [self.view addSubview:messageLabel];
+    [self.view addSubview:tools];
+    
+    
+    //start Realization i.e. training in a separate thread. (Has to be after first
+    // call to doLayout, or get a black band across top of screen)
+    [self doAsyncLocked:@"Initializing..." target:self selector:@selector(initDasherInterface) param:nil];
+    
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if(doneSetup) {
+        glView.animating = YES;
+    }
+}
+
+- (void)viewDidDisappear:(BOOL)animated {
+    [super viewDidDisappear:animated];
+    glView.animating = NO;
+}
 -(void)refreshToolbar {
   UIBarButtonSystemItem icon = _dasherInterface->GetGameModule() ? UIBarButtonSystemItemStop : 
UIBarButtonSystemItemPlay;
   UIBarButtonItem *game = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:icon target:self 
action:@selector(toggleGameMode)] autorelease];
   UIBarButtonItem *action = [ActionButton buttonForToolbar:tools];
   if (!toolbarItems) {
-    toolbarItems = [[NSMutableArray arrayWithObjects:
+      UIBarButtonItem *flexSpaceLeft = [[[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease];
+      flexSpaceLeft.width = 40.0;
+      toolbarItems = [[NSMutableArray arrayWithObjects:
                    [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"cog.png"] 
style:UIBarButtonItemStylePlain target:self action:@selector(settings)] autorelease],
-                   [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
target:nil action:nil] autorelease],
-                   [[[UIBarButtonItem alloc] initWithCustomView:speedBtn] autorelease],
+                       flexSpaceLeft,
+                   // rewind icon for slowing down
+                     [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"rewind"] 
style:UIBarButtonItemStylePlain target:self action:@selector(didTapSlowDown:)] autorelease],
+                   // speed label
+                   [[[UIBarButtonItem alloc] initWithCustomView:self.speedLabel] autorelease],
+                   // fast-forward icon for speeding up
+                     [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"fast-forward"] 
style:UIBarButtonItemStylePlain target:self action:@selector(didTapSpeedUp:)] autorelease],
                    [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
target:nil action:nil] autorelease],
                    game,
-                   [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
target:nil action:nil] autorelease],
+                   //[[[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
                    action,
                    nil] retain];
   } else {
-    [toolbarItems replaceObjectAtIndex:4 withObject:game];
-    [toolbarItems replaceObjectAtIndex:6 withObject:action];
+    [toolbarItems replaceObjectAtIndex:6 withObject:game];
+    [toolbarItems replaceObjectAtIndex:7 withObject:action];
   }
   webView.hidden = !(textView.hidden = _dasherInterface->GetGameModule() ? YES : NO);
   [tools setItems:toolbarItems];
 }
 
+- (IBAction)didTapSlowDown:(id)sender {
+    speedSlider.value = MAX(speedSlider.value - self.speedChangeStep, speedSlider.minimumValue);
+    [self speedSlid:speedSlider];
+    [self fadeSlider];
+}
+
+- (IBAction)didTapSpeedUp:(id)sender {
+    speedSlider.value = MIN(speedSlider.value + self.speedChangeStep, speedSlider.maximumValue);
+    [self speedSlid:speedSlider];
+    [self fadeSlider];
+}
+
 -(void)webViewDidFinishLoad:(UIWebView *)sender {
   DASHER_ASSERT(sender==webView);
   //try for approx twice as much beneath as above
@@ -349,8 +407,8 @@ using namespace Dasher;
 }
 
 - (void)speedSlid:(id)sender {
-       float v = ((UISlider *)sender).value;
-       _dasherInterface->SetLongParameter(LP_MAX_BITRATE, 100*v);
+       CGFloat v = ((UISlider *)sender).value;
+    _dasherInterface->SetLongParameter(LP_MAX_BITRATE, (long)(v * 100.0));
        //[self notifySpeedChange];//no need, CDasherInterfaceBridge calls if SetLongParameter did anything
 }
 
@@ -398,17 +456,11 @@ using namespace Dasher;
                                                    misc,
                 [[[ActionConfigurator alloc] init] autorelease],
                                                    nil];
-  [self presentModalViewController:settings animated:YES];
-}
-
--(void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated {
-  glView.animating=NO;
-  [[[UIApplication sharedApplication] keyWindow] setRootViewController:modalViewController];
-  [super presentModalViewController:modalViewController animated:animated];
+    [self presentViewController:settings animated:YES completion:nil];
 }
 
 - (void)settingsDone {
-       [self dismissModalViewControllerAnimated:YES];
+    [self dismissViewControllerAnimated:YES completion:nil];
        glView.animating=YES;
 }
 
@@ -478,50 +530,14 @@ using namespace Dasher;
 }
 
 - (void)notifySpeedChange {
-  double speed = self.dasherInterface->GetLongParameter(LP_MAX_BITRATE) / 100.0;
+  CGFloat speed = (CGFloat)self.dasherInterface->GetLongParameter(LP_MAX_BITRATE) / 100.0;
   speedSlider.value = speed; 
        NSString *caption = [NSString stringWithFormat:@"%.2f", speed];
-       [self doSpeedBtnImage:caption];
-}
-
-- (void)doSpeedBtnImage:(NSString *)msg {
-       CGSize size = [msg sizeWithFont:[UIFont boldSystemFontOfSize:12.0]];
-       int h = size.height, w = size.width + h + 4.0;
-       CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
-       CGContextRef context = CGBitmapContextCreate(nil, w, h, 8, w*4, colorSpace, 
kCGImageAlphaPremultipliedLast);
-       UIGraphicsPushContext(context);
-       CGContextClearRect(context, CGRectMake(0.0, 0.0, w, h));
-       const CGFloat whiteComps[] = {1.0, 1.0, 1.0, 1.0};
-       CGColorRef white = CGColorCreate(colorSpace, whiteComps);
-       CGContextSetFillColorWithColor(context, white);
-       CGContextSetStrokeColorWithColor(context, white);
-       CGContextTranslateCTM(context, 0.0, h);
-       CGContextScaleCTM(context, 1.0, -1.0);
-       [msg drawAtPoint:CGPointMake(h/2.0 + 2.0, 0.0) withFont:[UIFont boldSystemFontOfSize:12.0]];
-       CGContextBeginPath(context);
-       CGContextMoveToPoint(context, 0.0, h/2.0);
-       CGContextAddLineToPoint(context, h/2.0, 0.0);
-       CGContextAddLineToPoint(context, h/2.0, h);
-       CGContextFillPath(context); //implicitly ClosePath's first
-
-       CGContextBeginPath(context);
-       
-       CGContextMoveToPoint(context, w - h/2.0, 0.0);
-       CGContextAddLineToPoint(context, w - h/2, h);
-       CGContextAddLineToPoint(context, w, h/2.0);
-       CGContextFillPath(context);
-       
-       CGColorRelease(white);
-       UIGraphicsPopContext();
-       CGImageRef whole = CGBitmapContextCreateImage(context);
-       CGContextRelease(context);
-       [speedBtn setImage:[UIImage imageWithCGImage:whole] forState:UIControlStateNormal];
-       [speedBtn sizeToFit];
-       CGImageRelease(whole);
+    self.speedLabel.text = caption;
+    [self.speedLabel sizeToFit];
 }
 
 - (void)dealloc {
-       [window release];
   [tools release];
   [fliteEng release];
        [super dealloc];
@@ -533,8 +549,10 @@ using namespace Dasher;
   // (Although requiring offset+length to be within text, has identified many bugs,
   // the editing functions in control mode are too broken to fix right now! Hence,
   // copying the Gtk2 behaviour...)
-  range.location = max(0u,min(offset,[textView.text length]));
-  range.length = min(length,[textView.text length] - range.location);
+  unsigned int tmp1 = (unsigned int)[textView.text length];
+  unsigned int tmp2 = (unsigned int)max(0, (int)([textView.text length] - (int)offset));
+  range.location = min(offset,tmp1);
+  range.length = min(length,tmp2);
   return [textView.text substringWithRange:range];
 }
 
@@ -548,8 +566,8 @@ using namespace Dasher;
 }
 
 - (int)find:(CControlManager::EditDistance)amt forwards:(BOOL)bForwards {
-  if (amt==CControlManager::EDIT_FILE) return bForwards ? [textView.text length] : 0;
-  int pos = selectedText.location;
+  if (amt==CControlManager::EDIT_FILE) return bForwards ? (int)[textView.text length] : 0;
+  int pos = (int)selectedText.location;
   for(;;) {
     if (bForwards) {
       if (++pos > [textView.text length]) return pos-1;
@@ -615,9 +633,11 @@ using namespace Dasher;
 }
 
 + (DasherAppDelegate *)theApp {
-       id<UIApplicationDelegate> app = [UIApplication sharedApplication].delegate;
-       NSAssert ([app isMemberOfClass:[DasherAppDelegate class]], @"AppDelegate is not DasherAppDelegate!");
-       return (DasherAppDelegate *)app;
+  DasherAppDelegate *ret;
+  @synchronized ([UIApplication sharedApplication]) {
+    ret = s_appDelegate;
+  }
+  return ret;
 }
 
 #pragma mark TextViewDelegate method
@@ -637,13 +657,39 @@ using namespace Dasher;
 
 @implementation UIViewController (lockable)
 
+#define kASYNC_LOCK_VIEW_TAG -99901
+
+- (void)doAsyncUnlock {
+    NSMutableArray *rmvcs = [NSMutableArray new];
+    for(UIViewController *viewController in self.childViewControllers) {
+        if(viewController.view.tag == kASYNC_LOCK_VIEW_TAG) {
+            [rmvcs addObject:viewController];
+        }
+    }
+    
+    [UIView animateWithDuration:0.5 animations:^{
+        for(UIViewController *viewController in rmvcs) {
+            viewController.view.alpha = 0;
+        }
+    } completion:^(BOOL finished) {
+        for(UIViewController *viewController in rmvcs) {
+            [viewController.view removeFromSuperview];
+            [viewController removeFromParentViewController];
+        }
+    }];    
+}
+
 - (void)doAsyncLocked:(NSString *)msg target:(id)obj selector:(SEL)sel param:(id)param,... {
-  CGSize mainSize = [UIScreen mainScreen].applicationFrame.size;
+  CGSize mainSize = [UIScreen mainScreen].bounds.size;
   UIViewController *lockCon = [[[UIViewController alloc] init] autorelease];
+    lockCon.view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, mainSize.width, mainSize.height)] 
autorelease];
+    lockCon.view.userInteractionEnabled = YES;
+/*
   UIImageView *imgView = [[[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, mainSize.width, 
mainSize.height)] autorelease];
   imgView.image = [UIImage imageNamed:@"Default"];
   imgView.contentMode = UIViewContentModeBottomRight;
-  lockCon.view = imgView;
+  [lockCon.view addSubview:imgView];
+ */
   CGRect mainLabelRect = CGRectMake(40.0, (mainSize.height*5)/12, mainSize.width-80.0, mainSize.height/6);
   UILabel *lbl1 = [[[UILabel alloc] initWithFrame:mainLabelRect] autorelease];
   lbl1.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
@@ -651,18 +697,21 @@ using namespace Dasher;
   lbl1.textAlignment = UITextAlignmentCenter;
   lbl1.text = msg;
   lbl1.adjustsFontSizeToFitWidth = YES;
-  [imgView addSubview:lbl1];
+  [lockCon.view addSubview:lbl1]; // WAS IMGVIEW
   UILabel *lbl2 = [[[UILabel alloc] 
initWithFrame:CGRectMake(mainLabelRect.origin.x+20.0,(mainSize.height*15)/24,mainLabelRect.size.width-40, 
mainSize.height/12)] autorelease];
   lbl2.backgroundColor = lbl1.backgroundColor;
   lbl2.textColor = lbl1.textColor;
   lbl2.textAlignment = UITextAlignmentCenter;
   lbl2.adjustsFontSizeToFitWidth = YES;
   lbl2.hidden = YES;
-  [imgView addSubview:lbl2];
+  [lockCon.view addSubview:lbl2]; // WAS IMGVIEW
   //think we just hope old value of screenLockLabel was null
   // (i.e. no nested calls to doAsyncLocked...)
   [DasherAppDelegate theApp].screenLockLabel = lbl2;
-  [self presentModalViewController:lockCon animated:NO];
+    // [self presentViewController:lockCon animated:NO completion:nil];
+    [self addChildViewController:lockCon];
+    lockCon.view.tag = kASYNC_LOCK_VIEW_TAG;
+    [self.view addSubview:lockCon.view];
   NSMethodSignature *sig = [obj methodSignatureForSelector:sel];
   NSInvocation *action = [NSInvocation invocationWithMethodSignature:sig];
   int numArgs = [sig numberOfArguments];
@@ -694,7 +743,10 @@ using namespace Dasher;
   //passing 'nil' here, where a BOOL is expected, is a horrendous trick - nil = 0x0 is effectively 
reinterpret_casted... 
   // however, the 'correct' method of passing [NSNumber numberWithBool:] is erratic, resulting in either 
inversion, 
   // always true, or always false, on different versions of the iPhone OS/SDK...
-  [self performSelectorOnMainThread:@selector(dismissModalViewControllerAnimated:) withObject:nil 
waitUntilDone:NO];
+  dispatch_async(dispatch_get_main_queue(), ^{
+    // [self dismissViewControllerAnimated:YES completion:nil];
+    [self doAsyncUnlock];
+  });
   [pool release];
 }
 
diff --git a/Src/iPhone/Classes/DasherUtil.h b/Src/iPhone/Classes/DasherUtil.h
index 4c81d62..bcf0429 100644
--- a/Src/iPhone/Classes/DasherUtil.h
+++ b/Src/iPhone/Classes/DasherUtil.h
@@ -12,5 +12,5 @@
 unsigned long get_time();
 
 NSString *NSStringFromStdString(const std::string& aString);
-std::string StdStringFromNSString(NSString *aString);
+std::string StdStringFromNSString(const NSString *const aString);
 
diff --git a/Src/iPhone/Classes/DasherUtil.mm b/Src/iPhone/Classes/DasherUtil.mm
index 0d9a444..ea6bd4e 100644
--- a/Src/iPhone/Classes/DasherUtil.mm
+++ b/Src/iPhone/Classes/DasherUtil.mm
@@ -34,7 +34,7 @@ NSString *NSStringFromStdString(const std::string& aString)
   return [NSString stringWithUTF8String:aString.c_str()];
 }
 
-std::string StdStringFromNSString(NSString *aString)
+std::string StdStringFromNSString(const NSString *const aString)
 {
   std::string result;
 
diff --git a/Src/iPhone/Classes/EAGLView.h b/Src/iPhone/Classes/EAGLView.h
index e457768..10f4c05 100644
--- a/Src/iPhone/Classes/EAGLView.h
+++ b/Src/iPhone/Classes/EAGLView.h
@@ -23,12 +23,13 @@ public:
   CDasherScreenBridge(EAGLView *_view, Dasher::screenint iWidth, Dasher::screenint iHeight, GLshort 
backingWidth, GLshort backingHeight, GLfloat tc_x, GLfloat tc_y, GLuint *textures);
   ///Only for EAGLView to call...
   void resize(Dasher::screenint iWidth, Dasher::screenint iHeight, GLshort backingWidth, GLshort 
backingHeight, GLfloat tc_x, GLfloat tc_y);
-  void Display();
-  void SendMarker(int iMarker);
-  
+  void Display() override;
+  void SendMarker(int iMarker) override;
+  // Returns always true, because touch is used instead of mouse
+  bool IsWindowUnderCursor() override { return YES; }
 protected:
-  void RenderStringOntoCGContext(NSString *str, CGContextRef context, unsigned int iFontSize, bool bWrap);
-  CGSize TextSize(NSString *str, unsigned int iFontSize, bool bWrap);
+  void RenderStringOntoCGContext(NSString *str, CGContextRef context, unsigned int iFontSize, bool bWrap) 
override;
+  CGSize TextSize(NSString *str, unsigned int iFontSize, bool bWrap) override;
 };
 
 /*
diff --git a/Src/iPhone/Classes/EAGLView.mm b/Src/iPhone/Classes/EAGLView.mm
index fa08f73..7b57dde 100644
--- a/Src/iPhone/Classes/EAGLView.mm
+++ b/Src/iPhone/Classes/EAGLView.mm
@@ -35,7 +35,7 @@ void CDasherScreenBridge::resize(screenint iWidth, screenint iHeight, GLshort ba
 void CDasherScreenBridge::Display() {
   if (!view.readyToDisplay) return; //can't display anything yet!
   OpenGLScreen::Display();
-  [view displayCallback];
+    [view displayCallback];
 };
   
 void CDasherScreenBridge::SendMarker(int iMarker) {
@@ -178,7 +178,7 @@ bool operator==(CGPoint p,CGPoint q) {
 - (void)drawView {
        [EAGLContext setCurrentContext:context];
   if (animating) {
-    dasherApp.dasherInterface->NewFrame(get_time(), false);  
+    dasherApp.dasherInterface->NewFrame(get_time(), false);
     [self performSelector:@selector(drawView) withObject:nil afterDelay:animationInterval];
   }
 }
@@ -206,9 +206,10 @@ bool operator==(CGPoint p,CGPoint q) {
        //CGRect r = [self bounds];
     //glViewport(r.origin.x, r.origin.y, r.size.width, r.size.height);
 
+    // set backingWidth and backingHeight
     glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
     glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
-       
+    
     if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
         NSLog(@"failed to make complete framebuffer object %x", 
glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
         return NO;
@@ -235,10 +236,13 @@ bool operator==(CGPoint p,CGPoint q) {
        glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
        //glOrthof(0.0, 1.0, 1.0, 0.0, -1.0, 1.0);
+/*
 #if !TARGET_IPHONE_SIMULATOR || __IPHONE_3_0
 #define IntToFixed(A) A<<16
 #endif
-    glOrthox(0, IntToFixed(backingWidth), IntToFixed(backingHeight), 0, IntToFixed(-1), IntToFixed(1));
+*/
+#define IntToFixed(A) A
+    glOrthof(0, IntToFixed(backingWidth), IntToFixed(backingHeight), 0, IntToFixed(-1), IntToFixed(1));
     glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        
diff --git a/Src/iPhone/Classes/FileUtils.h b/Src/iPhone/Classes/FileUtils.h
new file mode 100644
index 0000000..a638c69
--- /dev/null
+++ b/Src/iPhone/Classes/FileUtils.h
@@ -0,0 +1,15 @@
+#ifndef DASHER_FILEUTILS_H
+#define DASHER_FILEUTILS_H
+
+#include <string>
+#include "../DasherCore/DasherInterfaceBase.h"
+
+class FileUtils : public CFileUtils {
+public:
+  ~FileUtils() override = default;
+  int GetFileSize(const std::string &strFileName) override;
+  void ScanFiles(AbstractParser *parser, const std::string &strPattern) override;
+  bool WriteUserDataFile(const std::string &filename, const std::string &strNewText, bool append) override;
+};
+
+#endif //DASHER_FILEUTILS_H
diff --git a/Src/iPhone/Classes/FileUtils.mm b/Src/iPhone/Classes/FileUtils.mm
new file mode 100644
index 0000000..3045f57
--- /dev/null
+++ b/Src/iPhone/Classes/FileUtils.mm
@@ -0,0 +1,64 @@
+#include <string>
+#include <stdio.h>
+#include <sys/stat.h>
+
+#include "../Common/Globber.h"
+#include "../DasherCore/AbstractXMLParser.h"
+#include "../DasherCore/DasherInterfaceBase.h"
+#include "FileUtils.h"
+
+#include <sys/syslimits.h>
+#include "Globber.h"
+#include <glob.h>
+#include <string.h>
+
+static int glob_onerror(const char *s, int c) {
+    NSLog(@"glob error: (%d) %s", c, s);
+    return 0;
+}
+
+int FileUtils::GetFileSize(const std::string &strFileName) {
+  NSError *err = nil;
+  NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString 
stringWithUTF8String:strFileName.c_str()] error:&err];
+  if(err != nil) {
+    NSLog(@"Warning request for file size failed: %s, error: %@", strFileName.c_str(), [err 
localizedDescription]);
+    return 0;
+  } else {
+    return (int)[attrs fileSize];
+  }
+}
+
+void FileUtils::ScanFiles(AbstractParser *parser, const std::string &strPattern) {
+  const char *user[2], *sys[2];
+  user[1] = sys[1] = nullptr; //terminators
+  NSString *path;
+  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+  if([paths count] > 0) {
+      const char *cstrPattern = strPattern.c_str();
+      path = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0], [NSString 
stringWithUTF8String:cstrPattern]];
+      user[0] = [path cStringUsingEncoding:NSUTF8StringEncoding];
+  } else {
+      user[0] = nullptr;
+  }
+  const char *cstrPattern = strPattern.c_str();
+  path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], [NSString 
stringWithUTF8String:cstrPattern]];
+  sys[0] = [path cStringUsingEncoding:NSUTF8StringEncoding];
+  globScan(parser, user, sys, glob_onerror);
+}
+
+bool FileUtils::WriteUserDataFile(const std::string &filename, const std::string &strNewText, bool append) {
+  if (strNewText.length() == 0)
+    return true;
+  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+  if([paths count] == 0) {
+    return false;
+  }
+  const char *cfilename = filename.c_str();
+  NSString *path = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0], [NSString 
stringWithUTF8String:cfilename]];
+  FILE* f = fopen([path fileSystemRepresentation], append ? "a+" : "w+");
+  if (f == nullptr)
+    return false;
+  size_t written = fwrite(strNewText.c_str(), 1, strNewText.length(), f);
+  fclose(f);
+  return written == strNewText.length();
+}
diff --git a/Src/iPhone/Classes/IPhoneInputs.mm b/Src/iPhone/Classes/IPhoneInputs.mm
index 5f0dfad..d0b850a 100644
--- a/Src/iPhone/Classes/IPhoneInputs.mm
+++ b/Src/iPhone/Classes/IPhoneInputs.mm
@@ -73,7 +73,9 @@ IPhonePrefsObserver::~IPhonePrefsObserver() {
   if (self = [super init]) {
     tilt=_tilt;
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) 
name:UIApplicationDidChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]];
-    [self orientationDidChange:nil];
+    dispatch_async(dispatch_get_main_queue(), ^{
+      [self orientationDidChange:nil];
+    });
   }
   return self;
 }
diff --git a/Src/iPhone/Classes/InputMethodSelector.mm b/Src/iPhone/Classes/InputMethodSelector.mm
index 059ed41..5cc8e14 100644
--- a/Src/iPhone/Classes/InputMethodSelector.mm
+++ b/Src/iPhone/Classes/InputMethodSelector.mm
@@ -304,7 +304,7 @@ int numSections = sizeof(allMeths) / sizeof(allMeths[0]);
   if (iPhonePrefKeys) {
     for (NSString **key=iPhonePrefKeys; *key; key++) {
       UISwitch *sw=[self makeSwitch:*key onView:view atY:&y];
-      sw.tag=(int)*key;
+      sw.tag=(NSInteger)*key;
       sw.on = [ud boolForKey:*key];
       [sw addTarget:self action:@selector(boolUserDefChanged:) forControlEvents:UIControlEventValueChanged];
     }
diff --git a/Src/iPhone/Classes/ParametersController.mm b/Src/iPhone/Classes/ParametersController.mm
index ec973c6..665861a 100644
--- a/Src/iPhone/Classes/ParametersController.mm
+++ b/Src/iPhone/Classes/ParametersController.mm
@@ -66,9 +66,9 @@ using Dasher::Settings::GetParameterName;
       [sw addTarget:self action:@selector(boolParamChanged:) forControlEvents:UIControlEventValueChanged];
     } else if (settings[i].iType == T_LONG) {
       UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, y, appSize.width-20, 20.0)] 
autorelease];
-      label.textAlignment = UITextAlignmentCenter;
+      label.textAlignment = NSTextAlignmentCenter;
       UISlider *slider = [[[UISlider alloc] initWithFrame:CGRectMake(10.0, y+20, appSize.width-20, 20.0)] 
autorelease];
-      slider.tag = (int)label; label.tag=(int)&settings[i];
+      slider.tag = (NSInteger)label; label.tag=(NSInteger)&settings[i];
       slider.minimumValue = settings[i].iMin; slider.maximumValue = settings[i].iMax;
       slider.value = intf->GetLongParameter(settings[i].iParameter);
       [slider addTarget:self action:@selector(longParamChanged:) 
forControlEvents:UIControlEventValueChanged];
diff --git a/Src/iPhone/Dasher.xcodeproj/project.pbxproj b/Src/iPhone/Dasher.xcodeproj/project.pbxproj
index 7132b1e..b3f47df 100755
--- a/Src/iPhone/Dasher.xcodeproj/project.pbxproj
+++ b/Src/iPhone/Dasher.xcodeproj/project.pbxproj
@@ -289,6 +289,124 @@
                33F87A240FB1C775003E737C /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 
33F87A230FB1C775003E737C /* MainWindow.xib */; };
                33F87A720FB1CB91003E737C /* Dasher_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 
33F87A710FB1CB91003E737C /* Dasher_small.png */; };
                33FDB7F5135F310E00D6C952 /* UserLogBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 
33FDB7F4135F310E00D6C952 /* UserLogBase.cpp */; };
+               8B9329E01FA8DC1E005159D5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 
8B9329DF1FA8DC1E005159D5 /* Images.xcassets */; };
+               8BE2EA7B1FB27E2500F7543A /* training_spyNew_fullyAnnotated.txt in Resources */ = {isa = 
PBXBuildFile; fileRef = 8BE2EA791FB27E2400F7543A /* training_spyNew_fullyAnnotated.txt */; };
+               8BE2EA7C1FB27E2500F7543A /* training_spyNew.txt in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA7A1FB27E2400F7543A /* training_spyNew.txt */; };
+               8BE2EAEB1FB27E5400F7543A /* alphabet.faroese.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA7D1FB27E4700F7543A /* alphabet.faroese.xml */; };
+               8BE2EAEC1FB27E5400F7543A /* alphabet.Estonian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA7E1FB27E4700F7543A /* alphabet.Estonian.xml */; };
+               8BE2EAED1FB27E5400F7543A /* alphabet.Ndebele.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA7F1FB27E4800F7543A /* alphabet.Ndebele.xml */; };
+               8BE2EAEE1FB27E5400F7543A /* alphabet.Yoruba.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA801FB27E4800F7543A /* alphabet.Yoruba.xml */; };
+               8BE2EAEF1FB27E5400F7543A /* alphabet.Belarusian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA811FB27E4800F7543A /* alphabet.Belarusian.xml */; };
+               8BE2EAF01FB27E5400F7543A /* alphabet.Xhosa.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA821FB27E4800F7543A /* alphabet.Xhosa.xml */; };
+               8BE2EAF11FB27E5400F7543A /* alphabet.turkmen.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA831FB27E4800F7543A /* alphabet.turkmen.xml */; };
+               8BE2EAF21FB27E5400F7543A /* alphabet.Marathi.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA841FB27E4800F7543A /* alphabet.Marathi.xml */; };
+               8BE2EAF31FB27E5400F7543A /* alphabet.akan.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA851FB27E4800F7543A /* alphabet.akan.xml */; };
+               8BE2EAF41FB27E5400F7543A /* alphabet.bosnian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA861FB27E4900F7543A /* alphabet.bosnian.xml */; };
+               8BE2EAF51FB27E5400F7543A /* alphabet.lao.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EA871FB27E4900F7543A /* alphabet.lao.xml */; };
+               8BE2EAF61FB27E5400F7543A /* alphabet.macedonian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA881FB27E4900F7543A /* alphabet.macedonian.xml */; };
+               8BE2EAF71FB27E5400F7543A /* alphabet.maltese.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA891FB27E4900F7543A /* alphabet.maltese.xml */; };
+               8BE2EAF81FB27E5400F7543A /* alphabet.Tamil.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA8A1FB27E4900F7543A /* alphabet.Tamil.xml */; };
+               8BE2EAF91FB27E5400F7543A /* alphabet.Oriya.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA8B1FB27E4900F7543A /* alphabet.Oriya.xml */; };
+               8BE2EAFA1FB27E5400F7543A /* alphabet.sanskrit.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA8C1FB27E4900F7543A /* alphabet.sanskrit.xml */; };
+               8BE2EAFB1FB27E5400F7543A /* alphabet.Tsonga.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA8D1FB27E4900F7543A /* alphabet.Tsonga.xml */; };
+               8BE2EAFC1FB27E5400F7543A /* alphabet.abc.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EA8E1FB27E4900F7543A /* alphabet.abc.xml */; };
+               8BE2EAFD1FB27E5400F7543A /* alphabet.pashto.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA8F1FB27E4900F7543A /* alphabet.pashto.xml */; };
+               8BE2EAFE1FB27E5400F7543A /* alphabet.Azerbaijani.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA901FB27E4A00F7543A /* alphabet.Azerbaijani.xml */; };
+               8BE2EAFF1FB27E5400F7543A /* alphabet.kirundi.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA911FB27E4A00F7543A /* alphabet.kirundi.xml */; };
+               8BE2EB001FB27E5400F7543A /* alphabet.Moldavian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA921FB27E4A00F7543A /* alphabet.Moldavian.xml */; };
+               8BE2EB011FB27E5400F7543A /* alphabet.Urdu.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA931FB27E4A00F7543A /* alphabet.Urdu.xml */; };
+               8BE2EB021FB27E5400F7543A /* alphabet.Esperanto.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA941FB27E4A00F7543A /* alphabet.Esperanto.xml */; };
+               8BE2EB031FB27E5400F7543A /* alphabet.AfaanOromo.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA951FB27E4A00F7543A /* alphabet.AfaanOromo.xml */; };
+               8BE2EB041FB27E5400F7543A /* alphabet.thaana.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA961FB27E4A00F7543A /* alphabet.thaana.xml */; };
+               8BE2EB051FB27E5400F7543A /* alphabet.corsican.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA971FB27E4A00F7543A /* alphabet.corsican.xml */; };
+               8BE2EB061FB27E5400F7543A /* alphabet.Hawaiian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA981FB27E4A00F7543A /* alphabet.Hawaiian.xml */; };
+               8BE2EB071FB27E5400F7543A /* alphabet.croatian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA991FB27E4A00F7543A /* alphabet.croatian.xml */; };
+               8BE2EB081FB27E5400F7543A /* alphabet.Sepedi.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA9A1FB27E4B00F7543A /* alphabet.Sepedi.xml */; };
+               8BE2EB091FB27E5400F7543A /* alphabet.spyTones2New.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA9B1FB27E4B00F7543A /* alphabet.spyTones2New.xml */; };
+               8BE2EB0A1FB27E5400F7543A /* alphabet.Sami.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EA9C1FB27E4B00F7543A /* alphabet.Sami.xml */; };
+               8BE2EB0B1FB27E5400F7543A /* alphabet.catalan.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA9D1FB27E4B00F7543A /* alphabet.catalan.xml */; };
+               8BE2EB0C1FB27E5400F7543A /* alphabet.ScotsGaelic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA9E1FB27E4B00F7543A /* alphabet.ScotsGaelic.xml */; };
+               8BE2EB0D1FB27E5400F7543A /* alphabet.kirghiz.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EA9F1FB27E4B00F7543A /* alphabet.kirghiz.xml */; };
+               8BE2EB0E1FB27E5400F7543A /* alphabet.afrikaans.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA01FB27E4B00F7543A /* alphabet.afrikaans.xml */; };
+               8BE2EB0F1FB27E5400F7543A /* alphabet.Slovenian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA11FB27E4B00F7543A /* alphabet.Slovenian.xml */; };
+               8BE2EB101FB27E5400F7543A /* alphabet.Sesotho.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA21FB27E4B00F7543A /* alphabet.Sesotho.xml */; };
+               8BE2EB111FB27E5400F7543A /* alphabet.Malayalam.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA31FB27E4B00F7543A /* alphabet.Malayalam.xml */; };
+               8BE2EB121FB27E5400F7543A /* alphabet.pinyin2.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA41FB27E4C00F7543A /* alphabet.pinyin2.xml */; };
+               8BE2EB131FB27E5400F7543A /* alphabet.spyNew.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA51FB27E4C00F7543A /* alphabet.spyNew.xml */; };
+               8BE2EB141FB27E5400F7543A /* alphabet.Icelandic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA61FB27E4C00F7543A /* alphabet.Icelandic.xml */; };
+               8BE2EB151FB27E5400F7543A /* alphabet.Tajik.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAA71FB27E4C00F7543A /* alphabet.Tajik.xml */; };
+               8BE2EB161FB27E5400F7543A /* alphabet.latvian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA81FB27E4C00F7543A /* alphabet.latvian.xml */; };
+               8BE2EB171FB27E5400F7543A /* alphabet.Armenian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAA91FB27E4C00F7543A /* alphabet.Armenian.xml */; };
+               8BE2EB181FB27E5400F7543A /* alphabet.latin.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAAA1FB27E4C00F7543A /* alphabet.latin.xml */; };
+               8BE2EB191FB27E5400F7543A /* alphabet.tigrinya.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAAB1FB27E4C00F7543A /* alphabet.tigrinya.xml */; };
+               8BE2EB1A1FB27E5400F7543A /* alphabet.arabic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAAC1FB27E4C00F7543A /* alphabet.arabic.xml */; };
+               8BE2EB1B1FB27E5400F7543A /* alphabet_langcodes.txt in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAAD1FB27E4D00F7543A /* alphabet_langcodes.txt */; };
+               8BE2EB1C1FB27E5400F7543A /* alphabet.bopoTrad.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAAE1FB27E4D00F7543A /* alphabet.bopoTrad.xml */; };
+               8BE2EB1D1FB27E5400F7543A /* alphabet.somali.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAAF1FB27E4D00F7543A /* alphabet.somali.xml */; };
+               8BE2EB1E1FB27E5400F7543A /* alphabet.georgian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB01FB27E4D00F7543A /* alphabet.georgian.xml */; };
+               8BE2EB1F1FB27E5400F7543A /* alphabet.venda.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAB11FB27E4D00F7543A /* alphabet.venda.xml */; };
+               8BE2EB201FB27E5400F7543A /* alphabet.serbian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB21FB27E4D00F7543A /* alphabet.serbian.xml */; };
+               8BE2EB211FB27E5400F7543A /* alphabet.ukrainian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB31FB27E4D00F7543A /* alphabet.ukrainian.xml */; };
+               8BE2EB221FB27E5400F7543A /* alphabet.koreanNested.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB41FB27E4D00F7543A /* alphabet.koreanNested.xml */; };
+               8BE2EB231FB27E5400F7543A /* alphabet.korean.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB51FB27E4D00F7543A /* alphabet.korean.xml */; };
+               8BE2EB241FB27E5400F7543A /* alphabet.Indonesian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB61FB27E4D00F7543A /* alphabet.Indonesian.xml */; };
+               8BE2EB251FB27E5400F7543A /* alphabet.Thai2.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAB71FB27E4E00F7543A /* alphabet.Thai2.xml */; };
+               8BE2EB261FB27E5400F7543A /* alphabet.Turkish.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAB81FB27E4E00F7543A /* alphabet.Turkish.xml */; };
+               8BE2EB271FB27E5400F7543A /* alphabet.Malay.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAB91FB27E4E00F7543A /* alphabet.Malay.xml */; };
+               8BE2EB281FB27E5400F7543A /* alphabet.bopomofo.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EABA1FB27E4E00F7543A /* alphabet.bopomofo.xml */; };
+               8BE2EB291FB27E5400F7543A /* alphabet.Vietnamese.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EABB1FB27E4E00F7543A /* alphabet.Vietnamese.xml */; };
+               8BE2EB2A1FB27E5400F7543A /* alphabet.amharic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EABC1FB27E4E00F7543A /* alphabet.amharic.xml */; };
+               8BE2EB2B1FB27E5400F7543A /* alphabet.luxembourgish.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EABD1FB27E4E00F7543A /* alphabet.luxembourgish.xml */; };
+               8BE2EB2C1FB27E5400F7543A /* alphabet.perl.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EABE1FB27E4E00F7543A /* alphabet.perl.xml */; };
+               8BE2EB2D1FB27E5400F7543A /* alphabet.ewe.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EABF1FB27E4E00F7543A /* alphabet.ewe.xml */; };
+               8BE2EB2E1FB27E5400F7543A /* alphabet.iso8859.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC01FB27E4E00F7543A /* alphabet.iso8859.xml */; };
+               8BE2EB2F1FB27E5400F7543A /* alphabet.Hindi.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAC11FB27E4F00F7543A /* alphabet.Hindi.xml */; };
+               8BE2EB301FB27E5400F7543A /* alphabet.kazakh.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC21FB27E4F00F7543A /* alphabet.kazakh.xml */; };
+               8BE2EB311FB27E5400F7543A /* alphabet.Katakana.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC31FB27E4F00F7543A /* alphabet.Katakana.xml */; };
+               8BE2EB321FB27E5400F7543A /* alphabet.romansch.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC41FB27E4F00F7543A /* alphabet.romansch.xml */; };
+               8BE2EB331FB27E5400F7543A /* alphabet.cherokee.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC51FB27E4F00F7543A /* alphabet.cherokee.xml */; };
+               8BE2EB341FB27E5400F7543A /* alphabet.breton.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC61FB27E4F00F7543A /* alphabet.breton.xml */; };
+               8BE2EB351FB27E5400F7543A /* alphabet.IrishGaelic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC71FB27E4F00F7543A /* alphabet.IrishGaelic.xml */; };
+               8BE2EB361FB27E5400F7543A /* alphabet.Punjabi.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC81FB27E4F00F7543A /* alphabet.Punjabi.xml */; };
+               8BE2EB371FB27E5400F7543A /* alphabet.kurdish.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAC91FB27E4F00F7543A /* alphabet.kurdish.xml */; };
+               8BE2EB381FB27E5400F7543A /* alphabet.lithuanian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACA1FB27E4F00F7543A /* alphabet.lithuanian.xml */; };
+               8BE2EB391FB27E5400F7543A /* alphabet.Austen.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACB1FB27E5000F7543A /* alphabet.Austen.xml */; };
+               8BE2EB3A1FB27E5400F7543A /* alphabet.galician.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACC1FB27E5000F7543A /* alphabet.galician.xml */; };
+               8BE2EB3B1FB27E5400F7543A /* alphabet.ethiopic.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACD1FB27E5000F7543A /* alphabet.ethiopic.xml */; };
+               8BE2EB3C1FB27E5400F7543A /* alphabet.Kannada.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACE1FB27E5000F7543A /* alphabet.Kannada.xml */; };
+               8BE2EB3D1FB27E5400F7543A /* alphabet.Assamese.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EACF1FB27E5000F7543A /* alphabet.Assamese.xml */; };
+               8BE2EB3E1FB27E5400F7543A /* alphabet.adangbe.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD01FB27E5000F7543A /* alphabet.adangbe.xml */; };
+               8BE2EB3F1FB27E5400F7543A /* alphabet.Slovak.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD11FB27E5000F7543A /* alphabet.Slovak.xml */; };
+               8BE2EB401FB27E5400F7543A /* alphabet.klingon.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD21FB27E5000F7543A /* alphabet.klingon.xml */; };
+               8BE2EB411FB27E5400F7543A /* alphabet.Tswana.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD31FB27E5000F7543A /* alphabet.Tswana.xml */; };
+               8BE2EB421FB27E5400F7543A /* alphabet.uzbek.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAD41FB27E5100F7543A /* alphabet.uzbek.xml */; };
+               8BE2EB431FB27E5400F7543A /* alphabet.Sinhala.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD51FB27E5100F7543A /* alphabet.Sinhala.xml */; };
+               8BE2EB441FB27E5400F7543A /* alphabet.Filipino.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD61FB27E5100F7543A /* alphabet.Filipino.xml */; };
+               8BE2EB451FB27E5400F7543A /* alphabet.ga.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EAD71FB27E5100F7543A /* alphabet.ga.xml */; };
+               8BE2EB461FB27E5400F7543A /* alphabet.spyTonesNew.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAD81FB27E5100F7543A /* alphabet.spyTonesNew.xml */; };
+               8BE2EB471FB27E5400F7543A /* alphabet.ipa.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EAD91FB27E5100F7543A /* alphabet.ipa.xml */; };
+               8BE2EB481FB27E5400F7543A /* alphabet.Thai.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EADA1FB27E5200F7543A /* alphabet.Thai.xml */; };
+               8BE2EB491FB27E5400F7543A /* alphabet.norwegian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EADB1FB27E5200F7543A /* alphabet.norwegian.xml */; };
+               8BE2EB4A1FB27E5400F7543A /* alphabet.Zulu.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EADC1FB27E5200F7543A /* alphabet.Zulu.xml */; };
+               8BE2EB4B1FB27E5400F7543A /* alphabet.Swati.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EADD1FB27E5200F7543A /* alphabet.Swati.xml */; };
+               8BE2EB4C1FB27E5400F7543A /* alphabet.myanmar.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EADE1FB27E5200F7543A /* alphabet.myanmar.xml */; };
+               8BE2EB4D1FB27E5400F7543A /* alphabet.Telugu.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EADF1FB27E5200F7543A /* alphabet.Telugu.xml */; };
+               8BE2EB4E1FB27E5400F7543A /* alphabet.Bulgarian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAE01FB27E5200F7543A /* alphabet.Bulgarian.xml */; };
+               8BE2EB4F1FB27E5400F7543A /* alphabet.runic.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAE11FB27E5200F7543A /* alphabet.runic.xml */; };
+               8BE2EB501FB27E5400F7543A /* alphabet.cangjie.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAE21FB27E5300F7543A /* alphabet.cangjie.xml */; };
+               8BE2EB511FB27E5400F7543A /* alphabet.hausa.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAE31FB27E5300F7543A /* alphabet.hausa.xml */; };
+               8BE2EB521FB27E5400F7543A /* alphabet.ogham.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAE41FB27E5300F7543A /* alphabet.ogham.xml */; };
+               8BE2EB531FB27E5400F7543A /* alphabet.latex.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAE51FB27E5300F7543A /* alphabet.latex.xml */; };
+               8BE2EB541FB27E5400F7543A /* alphabet.occitan.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAE61FB27E5300F7543A /* alphabet.occitan.xml */; };
+               8BE2EB551FB27E5400F7543A /* alphabet.Igbo.xml in Resources */ = {isa = PBXBuildFile; fileRef 
= 8BE2EAE71FB27E5300F7543A /* alphabet.Igbo.xml */; };
+               8BE2EB561FB27E5400F7543A /* alphabet.Gujarati.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAE81FB27E5300F7543A /* alphabet.Gujarati.xml */; };
+               8BE2EB571FB27E5400F7543A /* alphabet.Romanian.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAE91FB27E5300F7543A /* alphabet.Romanian.xml */; };
+               8BE2EB581FB27E5400F7543A /* alphabet.nepali.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EAEA1FB27E5400F7543A /* alphabet.nepali.xml */; };
+               8BE2EB5A1FB27E6B00F7543A /* colour.ean.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EB591FB27E6A00F7543A /* colour.ean.xml */; };
+               8BE2EB631FB2891500F7543A /* rewind 3x png in Resources */ = {isa = PBXBuildFile; fileRef = 
8BE2EB5D1FB2891400F7543A /* rewind 3x png */; };
+               8BE2EB651FB2891500F7543A /* fast-forward 2x png in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EB5F1FB2891400F7543A /* fast-forward 2x png */; };
+               8BE2EB661FB2891500F7543A /* fast-forward 3x png in Resources */ = {isa = PBXBuildFile; 
fileRef = 8BE2EB601FB2891400F7543A /* fast-forward 3x png */; };
+               94A831C71F79274F0017BA2D /* FileUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 
94A831C61F79274F0017BA2D /* FileUtils.mm */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -753,7 +871,126 @@
                33F87A230FB1C775003E737C /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = 
file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
                33F87A710FB1CB91003E737C /* Dasher_small.png */ = {isa = PBXFileReference; lastKnownFileType 
= image.png; path = Dasher_small.png; sourceTree = "<group>"; };
                33FDB7F4135F310E00D6C952 /* UserLogBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.cpp.cpp; path = UserLogBase.cpp; sourceTree = "<group>"; };
+               8B9329DF1FA8DC1E005159D5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = 
folder.assetcatalog; name = Images.xcassets; path = Dasher/Images.xcassets; sourceTree = "<group>"; };
+               8BE2EA791FB27E2400F7543A /* training_spyNew_fullyAnnotated.txt */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text; path = training_spyNew_fullyAnnotated.txt; sourceTree = 
"<group>"; };
+               8BE2EA7A1FB27E2400F7543A /* training_spyNew.txt */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text; path = training_spyNew.txt; sourceTree = "<group>"; };
+               8BE2EA7D1FB27E4700F7543A /* alphabet.faroese.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.faroese.xml; sourceTree = "<group>"; };
+               8BE2EA7E1FB27E4700F7543A /* alphabet.Estonian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Estonian.xml; sourceTree = "<group>"; };
+               8BE2EA7F1FB27E4800F7543A /* alphabet.Ndebele.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Ndebele.xml; sourceTree = "<group>"; };
+               8BE2EA801FB27E4800F7543A /* alphabet.Yoruba.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Yoruba.xml; sourceTree = "<group>"; };
+               8BE2EA811FB27E4800F7543A /* alphabet.Belarusian.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.Belarusian.xml; sourceTree = "<group>"; };
+               8BE2EA821FB27E4800F7543A /* alphabet.Xhosa.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Xhosa.xml; sourceTree = "<group>"; };
+               8BE2EA831FB27E4800F7543A /* alphabet.turkmen.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.turkmen.xml; sourceTree = "<group>"; };
+               8BE2EA841FB27E4800F7543A /* alphabet.Marathi.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Marathi.xml; sourceTree = "<group>"; };
+               8BE2EA851FB27E4800F7543A /* alphabet.akan.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.akan.xml; sourceTree = "<group>"; };
+               8BE2EA861FB27E4900F7543A /* alphabet.bosnian.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.bosnian.xml; sourceTree = "<group>"; };
+               8BE2EA871FB27E4900F7543A /* alphabet.lao.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.lao.xml; sourceTree = "<group>"; };
+               8BE2EA881FB27E4900F7543A /* alphabet.macedonian.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.macedonian.xml; sourceTree = "<group>"; };
+               8BE2EA891FB27E4900F7543A /* alphabet.maltese.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.maltese.xml; sourceTree = "<group>"; };
+               8BE2EA8A1FB27E4900F7543A /* alphabet.Tamil.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Tamil.xml; sourceTree = "<group>"; };
+               8BE2EA8B1FB27E4900F7543A /* alphabet.Oriya.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Oriya.xml; sourceTree = "<group>"; };
+               8BE2EA8C1FB27E4900F7543A /* alphabet.sanskrit.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.sanskrit.xml; sourceTree = "<group>"; };
+               8BE2EA8D1FB27E4900F7543A /* alphabet.Tsonga.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Tsonga.xml; sourceTree = "<group>"; };
+               8BE2EA8E1FB27E4900F7543A /* alphabet.abc.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.abc.xml; sourceTree = "<group>"; };
+               8BE2EA8F1FB27E4900F7543A /* alphabet.pashto.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.pashto.xml; sourceTree = "<group>"; };
+               8BE2EA901FB27E4A00F7543A /* alphabet.Azerbaijani.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.Azerbaijani.xml; sourceTree = "<group>"; };
+               8BE2EA911FB27E4A00F7543A /* alphabet.kirundi.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.kirundi.xml; sourceTree = "<group>"; };
+               8BE2EA921FB27E4A00F7543A /* alphabet.Moldavian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Moldavian.xml; sourceTree = "<group>"; };
+               8BE2EA931FB27E4A00F7543A /* alphabet.Urdu.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.Urdu.xml; sourceTree = "<group>"; };
+               8BE2EA941FB27E4A00F7543A /* alphabet.Esperanto.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Esperanto.xml; sourceTree = "<group>"; };
+               8BE2EA951FB27E4A00F7543A /* alphabet.AfaanOromo.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.AfaanOromo.xml; sourceTree = "<group>"; };
+               8BE2EA961FB27E4A00F7543A /* alphabet.thaana.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.thaana.xml; sourceTree = "<group>"; };
+               8BE2EA971FB27E4A00F7543A /* alphabet.corsican.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.corsican.xml; sourceTree = "<group>"; };
+               8BE2EA981FB27E4A00F7543A /* alphabet.Hawaiian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Hawaiian.xml; sourceTree = "<group>"; };
+               8BE2EA991FB27E4A00F7543A /* alphabet.croatian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.croatian.xml; sourceTree = "<group>"; };
+               8BE2EA9A1FB27E4B00F7543A /* alphabet.Sepedi.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Sepedi.xml; sourceTree = "<group>"; };
+               8BE2EA9B1FB27E4B00F7543A /* alphabet.spyTones2New.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.spyTones2New.xml; sourceTree = "<group>"; };
+               8BE2EA9C1FB27E4B00F7543A /* alphabet.Sami.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.Sami.xml; sourceTree = "<group>"; };
+               8BE2EA9D1FB27E4B00F7543A /* alphabet.catalan.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.catalan.xml; sourceTree = "<group>"; };
+               8BE2EA9E1FB27E4B00F7543A /* alphabet.ScotsGaelic.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.ScotsGaelic.xml; sourceTree = "<group>"; };
+               8BE2EA9F1FB27E4B00F7543A /* alphabet.kirghiz.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.kirghiz.xml; sourceTree = "<group>"; };
+               8BE2EAA01FB27E4B00F7543A /* alphabet.afrikaans.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.afrikaans.xml; sourceTree = "<group>"; };
+               8BE2EAA11FB27E4B00F7543A /* alphabet.Slovenian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Slovenian.xml; sourceTree = "<group>"; };
+               8BE2EAA21FB27E4B00F7543A /* alphabet.Sesotho.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Sesotho.xml; sourceTree = "<group>"; };
+               8BE2EAA31FB27E4B00F7543A /* alphabet.Malayalam.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Malayalam.xml; sourceTree = "<group>"; };
+               8BE2EAA41FB27E4C00F7543A /* alphabet.pinyin2.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.pinyin2.xml; sourceTree = "<group>"; };
+               8BE2EAA51FB27E4C00F7543A /* alphabet.spyNew.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.spyNew.xml; sourceTree = "<group>"; };
+               8BE2EAA61FB27E4C00F7543A /* alphabet.Icelandic.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Icelandic.xml; sourceTree = "<group>"; };
+               8BE2EAA71FB27E4C00F7543A /* alphabet.Tajik.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Tajik.xml; sourceTree = "<group>"; };
+               8BE2EAA81FB27E4C00F7543A /* alphabet.latvian.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.latvian.xml; sourceTree = "<group>"; };
+               8BE2EAA91FB27E4C00F7543A /* alphabet.Armenian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Armenian.xml; sourceTree = "<group>"; };
+               8BE2EAAA1FB27E4C00F7543A /* alphabet.latin.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.latin.xml; sourceTree = "<group>"; };
+               8BE2EAAB1FB27E4C00F7543A /* alphabet.tigrinya.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.tigrinya.xml; sourceTree = "<group>"; };
+               8BE2EAAC1FB27E4C00F7543A /* alphabet.arabic.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.arabic.xml; sourceTree = "<group>"; };
+               8BE2EAAD1FB27E4D00F7543A /* alphabet_langcodes.txt */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text; path = alphabet_langcodes.txt; sourceTree = "<group>"; };
+               8BE2EAAE1FB27E4D00F7543A /* alphabet.bopoTrad.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.bopoTrad.xml; sourceTree = "<group>"; };
+               8BE2EAAF1FB27E4D00F7543A /* alphabet.somali.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.somali.xml; sourceTree = "<group>"; };
+               8BE2EAB01FB27E4D00F7543A /* alphabet.georgian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.georgian.xml; sourceTree = "<group>"; };
+               8BE2EAB11FB27E4D00F7543A /* alphabet.venda.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.venda.xml; sourceTree = "<group>"; };
+               8BE2EAB21FB27E4D00F7543A /* alphabet.serbian.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.serbian.xml; sourceTree = "<group>"; };
+               8BE2EAB31FB27E4D00F7543A /* alphabet.ukrainian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.ukrainian.xml; sourceTree = "<group>"; };
+               8BE2EAB41FB27E4D00F7543A /* alphabet.koreanNested.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.koreanNested.xml; sourceTree = "<group>"; };
+               8BE2EAB51FB27E4D00F7543A /* alphabet.korean.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.korean.xml; sourceTree = "<group>"; };
+               8BE2EAB61FB27E4D00F7543A /* alphabet.Indonesian.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.Indonesian.xml; sourceTree = "<group>"; };
+               8BE2EAB71FB27E4E00F7543A /* alphabet.Thai2.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Thai2.xml; sourceTree = "<group>"; };
+               8BE2EAB81FB27E4E00F7543A /* alphabet.Turkish.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Turkish.xml; sourceTree = "<group>"; };
+               8BE2EAB91FB27E4E00F7543A /* alphabet.Malay.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Malay.xml; sourceTree = "<group>"; };
+               8BE2EABA1FB27E4E00F7543A /* alphabet.bopomofo.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.bopomofo.xml; sourceTree = "<group>"; };
+               8BE2EABB1FB27E4E00F7543A /* alphabet.Vietnamese.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.Vietnamese.xml; sourceTree = "<group>"; };
+               8BE2EABC1FB27E4E00F7543A /* alphabet.amharic.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.amharic.xml; sourceTree = "<group>"; };
+               8BE2EABD1FB27E4E00F7543A /* alphabet.luxembourgish.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.luxembourgish.xml; sourceTree = "<group>"; };
+               8BE2EABE1FB27E4E00F7543A /* alphabet.perl.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.perl.xml; sourceTree = "<group>"; };
+               8BE2EABF1FB27E4E00F7543A /* alphabet.ewe.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.ewe.xml; sourceTree = "<group>"; };
+               8BE2EAC01FB27E4E00F7543A /* alphabet.iso8859.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.iso8859.xml; sourceTree = "<group>"; };
+               8BE2EAC11FB27E4F00F7543A /* alphabet.Hindi.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Hindi.xml; sourceTree = "<group>"; };
+               8BE2EAC21FB27E4F00F7543A /* alphabet.kazakh.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.kazakh.xml; sourceTree = "<group>"; };
+               8BE2EAC31FB27E4F00F7543A /* alphabet.Katakana.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Katakana.xml; sourceTree = "<group>"; };
+               8BE2EAC41FB27E4F00F7543A /* alphabet.romansch.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.romansch.xml; sourceTree = "<group>"; };
+               8BE2EAC51FB27E4F00F7543A /* alphabet.cherokee.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.cherokee.xml; sourceTree = "<group>"; };
+               8BE2EAC61FB27E4F00F7543A /* alphabet.breton.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.breton.xml; sourceTree = "<group>"; };
+               8BE2EAC71FB27E4F00F7543A /* alphabet.IrishGaelic.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.IrishGaelic.xml; sourceTree = "<group>"; };
+               8BE2EAC81FB27E4F00F7543A /* alphabet.Punjabi.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Punjabi.xml; sourceTree = "<group>"; };
+               8BE2EAC91FB27E4F00F7543A /* alphabet.kurdish.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.kurdish.xml; sourceTree = "<group>"; };
+               8BE2EACA1FB27E4F00F7543A /* alphabet.lithuanian.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.lithuanian.xml; sourceTree = "<group>"; };
+               8BE2EACB1FB27E5000F7543A /* alphabet.Austen.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Austen.xml; sourceTree = "<group>"; };
+               8BE2EACC1FB27E5000F7543A /* alphabet.galician.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.galician.xml; sourceTree = "<group>"; };
+               8BE2EACD1FB27E5000F7543A /* alphabet.ethiopic.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.ethiopic.xml; sourceTree = "<group>"; };
+               8BE2EACE1FB27E5000F7543A /* alphabet.Kannada.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Kannada.xml; sourceTree = "<group>"; };
+               8BE2EACF1FB27E5000F7543A /* alphabet.Assamese.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Assamese.xml; sourceTree = "<group>"; };
+               8BE2EAD01FB27E5000F7543A /* alphabet.adangbe.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.adangbe.xml; sourceTree = "<group>"; };
+               8BE2EAD11FB27E5000F7543A /* alphabet.Slovak.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Slovak.xml; sourceTree = "<group>"; };
+               8BE2EAD21FB27E5000F7543A /* alphabet.klingon.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.klingon.xml; sourceTree = "<group>"; };
+               8BE2EAD31FB27E5000F7543A /* alphabet.Tswana.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Tswana.xml; sourceTree = "<group>"; };
+               8BE2EAD41FB27E5100F7543A /* alphabet.uzbek.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.uzbek.xml; sourceTree = "<group>"; };
+               8BE2EAD51FB27E5100F7543A /* alphabet.Sinhala.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Sinhala.xml; sourceTree = "<group>"; };
+               8BE2EAD61FB27E5100F7543A /* alphabet.Filipino.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Filipino.xml; sourceTree = "<group>"; };
+               8BE2EAD71FB27E5100F7543A /* alphabet.ga.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.ga.xml; sourceTree = "<group>"; };
+               8BE2EAD81FB27E5100F7543A /* alphabet.spyTonesNew.xml */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text.xml; path = alphabet.spyTonesNew.xml; sourceTree = "<group>"; };
+               8BE2EAD91FB27E5100F7543A /* alphabet.ipa.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.ipa.xml; sourceTree = "<group>"; };
+               8BE2EADA1FB27E5200F7543A /* alphabet.Thai.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.Thai.xml; sourceTree = "<group>"; };
+               8BE2EADB1FB27E5200F7543A /* alphabet.norwegian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.norwegian.xml; sourceTree = "<group>"; };
+               8BE2EADC1FB27E5200F7543A /* alphabet.Zulu.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.Zulu.xml; sourceTree = "<group>"; };
+               8BE2EADD1FB27E5200F7543A /* alphabet.Swati.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Swati.xml; sourceTree = "<group>"; };
+               8BE2EADE1FB27E5200F7543A /* alphabet.myanmar.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.myanmar.xml; sourceTree = "<group>"; };
+               8BE2EADF1FB27E5200F7543A /* alphabet.Telugu.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.Telugu.xml; sourceTree = "<group>"; };
+               8BE2EAE01FB27E5200F7543A /* alphabet.Bulgarian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Bulgarian.xml; sourceTree = "<group>"; };
+               8BE2EAE11FB27E5200F7543A /* alphabet.runic.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.runic.xml; sourceTree = "<group>"; };
+               8BE2EAE21FB27E5300F7543A /* alphabet.cangjie.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.cangjie.xml; sourceTree = "<group>"; };
+               8BE2EAE31FB27E5300F7543A /* alphabet.hausa.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.hausa.xml; sourceTree = "<group>"; };
+               8BE2EAE41FB27E5300F7543A /* alphabet.ogham.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.ogham.xml; sourceTree = "<group>"; };
+               8BE2EAE51FB27E5300F7543A /* alphabet.latex.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.latex.xml; sourceTree = "<group>"; };
+               8BE2EAE61FB27E5300F7543A /* alphabet.occitan.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.occitan.xml; sourceTree = "<group>"; };
+               8BE2EAE71FB27E5300F7543A /* alphabet.Igbo.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = alphabet.Igbo.xml; sourceTree = "<group>"; };
+               8BE2EAE81FB27E5300F7543A /* alphabet.Gujarati.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Gujarati.xml; sourceTree = "<group>"; };
+               8BE2EAE91FB27E5300F7543A /* alphabet.Romanian.xml */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = text.xml; path = alphabet.Romanian.xml; sourceTree = "<group>"; };
+               8BE2EAEA1FB27E5400F7543A /* alphabet.nepali.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.nepali.xml; sourceTree = "<group>"; };
+               8BE2EB591FB27E6A00F7543A /* colour.ean.xml */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.xml; path = colour.ean.xml; sourceTree = "<group>"; };
+               8BE2EB5D1FB2891400F7543A /* rewind 3x png */ = {isa = PBXFileReference; lastKnownFileType = 
image.png; path = "rewind 3x png"; sourceTree = "<group>"; };
+               8BE2EB5F1FB2891400F7543A /* fast-forward 2x png */ = {isa = PBXFileReference; 
lastKnownFileType = image.png; path = "fast-forward 2x png"; sourceTree = "<group>"; };
+               8BE2EB601FB2891400F7543A /* fast-forward 3x png */ = {isa = PBXFileReference; 
lastKnownFileType = image.png; path = "fast-forward 3x png"; sourceTree = "<group>"; };
                8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+               94A831C51F79274E0017BA2D /* FileUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.c.h; path = FileUtils.h; sourceTree = "<group>"; };
+               94A831C61F79274F0017BA2D /* FileUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.cpp.objcpp; path = FileUtils.mm; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -776,6 +1013,8 @@
                080E96DDFE201D6D7F000001 /* IPhone Classes */ = {
                        isa = PBXGroup;
                        children = (
+                               94A831C51F79274E0017BA2D /* FileUtils.h */,
+                               94A831C61F79274F0017BA2D /* FileUtils.mm */,
                                333F6F4A11A8A6EF002E2BDF /* FliteTTS.h */,
                                333F6F4B11A8A6EF002E2BDF /* FliteTTS.m */,
                                334B1BEF11232A8E007A6DFF /* ParametersController.h */,
@@ -853,6 +1092,10 @@
                29B97317FDCFA39411CA2CEA /* Resources */ = {
                        isa = PBXGroup;
                        children = (
+                               8BE2EB5F1FB2891400F7543A /* fast-forward 2x png */,
+                               8BE2EB601FB2891400F7543A /* fast-forward 3x png */,
+                               8BE2EB5D1FB2891400F7543A /* rewind 3x png */,
+                               8B9329DF1FA8DC1E005159D5 /* Images.xcassets */,
                                3302678A11B8040D00C07880 /* spanner_lg.png */,
                                3302678B11B8040D00C07880 /* spanner.png */,
                                332F34D8103D9858008448D7 /* palette.png */,
@@ -893,6 +1136,116 @@
                331F28B60F7A9C270044EB9C /* alphabets */ = {
                        isa = PBXGroup;
                        children = (
+                               8BE2EAAD1FB27E4D00F7543A /* alphabet_langcodes.txt */,
+                               8BE2EA8E1FB27E4900F7543A /* alphabet.abc.xml */,
+                               8BE2EAD01FB27E5000F7543A /* alphabet.adangbe.xml */,
+                               8BE2EA951FB27E4A00F7543A /* alphabet.AfaanOromo.xml */,
+                               8BE2EAA01FB27E4B00F7543A /* alphabet.afrikaans.xml */,
+                               8BE2EA851FB27E4800F7543A /* alphabet.akan.xml */,
+                               8BE2EABC1FB27E4E00F7543A /* alphabet.amharic.xml */,
+                               8BE2EAAC1FB27E4C00F7543A /* alphabet.arabic.xml */,
+                               8BE2EAA91FB27E4C00F7543A /* alphabet.Armenian.xml */,
+                               8BE2EACF1FB27E5000F7543A /* alphabet.Assamese.xml */,
+                               8BE2EACB1FB27E5000F7543A /* alphabet.Austen.xml */,
+                               8BE2EA901FB27E4A00F7543A /* alphabet.Azerbaijani.xml */,
+                               8BE2EA811FB27E4800F7543A /* alphabet.Belarusian.xml */,
+                               8BE2EABA1FB27E4E00F7543A /* alphabet.bopomofo.xml */,
+                               8BE2EAAE1FB27E4D00F7543A /* alphabet.bopoTrad.xml */,
+                               8BE2EA861FB27E4900F7543A /* alphabet.bosnian.xml */,
+                               8BE2EAC61FB27E4F00F7543A /* alphabet.breton.xml */,
+                               8BE2EAE01FB27E5200F7543A /* alphabet.Bulgarian.xml */,
+                               8BE2EAE21FB27E5300F7543A /* alphabet.cangjie.xml */,
+                               8BE2EA9D1FB27E4B00F7543A /* alphabet.catalan.xml */,
+                               8BE2EAC51FB27E4F00F7543A /* alphabet.cherokee.xml */,
+                               8BE2EA971FB27E4A00F7543A /* alphabet.corsican.xml */,
+                               8BE2EA991FB27E4A00F7543A /* alphabet.croatian.xml */,
+                               8BE2EA941FB27E4A00F7543A /* alphabet.Esperanto.xml */,
+                               8BE2EA7E1FB27E4700F7543A /* alphabet.Estonian.xml */,
+                               8BE2EACD1FB27E5000F7543A /* alphabet.ethiopic.xml */,
+                               8BE2EABF1FB27E4E00F7543A /* alphabet.ewe.xml */,
+                               8BE2EA7D1FB27E4700F7543A /* alphabet.faroese.xml */,
+                               8BE2EAD61FB27E5100F7543A /* alphabet.Filipino.xml */,
+                               8BE2EAD71FB27E5100F7543A /* alphabet.ga.xml */,
+                               8BE2EACC1FB27E5000F7543A /* alphabet.galician.xml */,
+                               8BE2EAB01FB27E4D00F7543A /* alphabet.georgian.xml */,
+                               8BE2EAE81FB27E5300F7543A /* alphabet.Gujarati.xml */,
+                               8BE2EAE31FB27E5300F7543A /* alphabet.hausa.xml */,
+                               8BE2EA981FB27E4A00F7543A /* alphabet.Hawaiian.xml */,
+                               8BE2EAC11FB27E4F00F7543A /* alphabet.Hindi.xml */,
+                               8BE2EAA61FB27E4C00F7543A /* alphabet.Icelandic.xml */,
+                               8BE2EAE71FB27E5300F7543A /* alphabet.Igbo.xml */,
+                               8BE2EAB61FB27E4D00F7543A /* alphabet.Indonesian.xml */,
+                               8BE2EAD91FB27E5100F7543A /* alphabet.ipa.xml */,
+                               8BE2EAC71FB27E4F00F7543A /* alphabet.IrishGaelic.xml */,
+                               8BE2EAC01FB27E4E00F7543A /* alphabet.iso8859.xml */,
+                               8BE2EACE1FB27E5000F7543A /* alphabet.Kannada.xml */,
+                               8BE2EAC31FB27E4F00F7543A /* alphabet.Katakana.xml */,
+                               8BE2EAC21FB27E4F00F7543A /* alphabet.kazakh.xml */,
+                               8BE2EA9F1FB27E4B00F7543A /* alphabet.kirghiz.xml */,
+                               8BE2EA911FB27E4A00F7543A /* alphabet.kirundi.xml */,
+                               8BE2EAD21FB27E5000F7543A /* alphabet.klingon.xml */,
+                               8BE2EAB51FB27E4D00F7543A /* alphabet.korean.xml */,
+                               8BE2EAB41FB27E4D00F7543A /* alphabet.koreanNested.xml */,
+                               8BE2EAC91FB27E4F00F7543A /* alphabet.kurdish.xml */,
+                               8BE2EA871FB27E4900F7543A /* alphabet.lao.xml */,
+                               8BE2EAE51FB27E5300F7543A /* alphabet.latex.xml */,
+                               8BE2EAAA1FB27E4C00F7543A /* alphabet.latin.xml */,
+                               8BE2EAA81FB27E4C00F7543A /* alphabet.latvian.xml */,
+                               8BE2EACA1FB27E4F00F7543A /* alphabet.lithuanian.xml */,
+                               8BE2EABD1FB27E4E00F7543A /* alphabet.luxembourgish.xml */,
+                               8BE2EA881FB27E4900F7543A /* alphabet.macedonian.xml */,
+                               8BE2EAB91FB27E4E00F7543A /* alphabet.Malay.xml */,
+                               8BE2EAA31FB27E4B00F7543A /* alphabet.Malayalam.xml */,
+                               8BE2EA891FB27E4900F7543A /* alphabet.maltese.xml */,
+                               8BE2EA841FB27E4800F7543A /* alphabet.Marathi.xml */,
+                               8BE2EA921FB27E4A00F7543A /* alphabet.Moldavian.xml */,
+                               8BE2EADE1FB27E5200F7543A /* alphabet.myanmar.xml */,
+                               8BE2EA7F1FB27E4800F7543A /* alphabet.Ndebele.xml */,
+                               8BE2EAEA1FB27E5400F7543A /* alphabet.nepali.xml */,
+                               8BE2EADB1FB27E5200F7543A /* alphabet.norwegian.xml */,
+                               8BE2EAE61FB27E5300F7543A /* alphabet.occitan.xml */,
+                               8BE2EAE41FB27E5300F7543A /* alphabet.ogham.xml */,
+                               8BE2EA8B1FB27E4900F7543A /* alphabet.Oriya.xml */,
+                               8BE2EA8F1FB27E4900F7543A /* alphabet.pashto.xml */,
+                               8BE2EABE1FB27E4E00F7543A /* alphabet.perl.xml */,
+                               8BE2EAA41FB27E4C00F7543A /* alphabet.pinyin2.xml */,
+                               8BE2EAC81FB27E4F00F7543A /* alphabet.Punjabi.xml */,
+                               8BE2EAE91FB27E5300F7543A /* alphabet.Romanian.xml */,
+                               8BE2EAC41FB27E4F00F7543A /* alphabet.romansch.xml */,
+                               8BE2EAE11FB27E5200F7543A /* alphabet.runic.xml */,
+                               8BE2EA9C1FB27E4B00F7543A /* alphabet.Sami.xml */,
+                               8BE2EA8C1FB27E4900F7543A /* alphabet.sanskrit.xml */,
+                               8BE2EA9E1FB27E4B00F7543A /* alphabet.ScotsGaelic.xml */,
+                               8BE2EA9A1FB27E4B00F7543A /* alphabet.Sepedi.xml */,
+                               8BE2EAB21FB27E4D00F7543A /* alphabet.serbian.xml */,
+                               8BE2EAA21FB27E4B00F7543A /* alphabet.Sesotho.xml */,
+                               8BE2EAD51FB27E5100F7543A /* alphabet.Sinhala.xml */,
+                               8BE2EAD11FB27E5000F7543A /* alphabet.Slovak.xml */,
+                               8BE2EAA11FB27E4B00F7543A /* alphabet.Slovenian.xml */,
+                               8BE2EAAF1FB27E4D00F7543A /* alphabet.somali.xml */,
+                               8BE2EAA51FB27E4C00F7543A /* alphabet.spyNew.xml */,
+                               8BE2EA9B1FB27E4B00F7543A /* alphabet.spyTones2New.xml */,
+                               8BE2EAD81FB27E5100F7543A /* alphabet.spyTonesNew.xml */,
+                               8BE2EADD1FB27E5200F7543A /* alphabet.Swati.xml */,
+                               8BE2EAA71FB27E4C00F7543A /* alphabet.Tajik.xml */,
+                               8BE2EA8A1FB27E4900F7543A /* alphabet.Tamil.xml */,
+                               8BE2EADF1FB27E5200F7543A /* alphabet.Telugu.xml */,
+                               8BE2EA961FB27E4A00F7543A /* alphabet.thaana.xml */,
+                               8BE2EADA1FB27E5200F7543A /* alphabet.Thai.xml */,
+                               8BE2EAB71FB27E4E00F7543A /* alphabet.Thai2.xml */,
+                               8BE2EAAB1FB27E4C00F7543A /* alphabet.tigrinya.xml */,
+                               8BE2EA8D1FB27E4900F7543A /* alphabet.Tsonga.xml */,
+                               8BE2EAD31FB27E5000F7543A /* alphabet.Tswana.xml */,
+                               8BE2EAB81FB27E4E00F7543A /* alphabet.Turkish.xml */,
+                               8BE2EA831FB27E4800F7543A /* alphabet.turkmen.xml */,
+                               8BE2EAB31FB27E4D00F7543A /* alphabet.ukrainian.xml */,
+                               8BE2EA931FB27E4A00F7543A /* alphabet.Urdu.xml */,
+                               8BE2EAD41FB27E5100F7543A /* alphabet.uzbek.xml */,
+                               8BE2EAB11FB27E4D00F7543A /* alphabet.venda.xml */,
+                               8BE2EABB1FB27E4E00F7543A /* alphabet.Vietnamese.xml */,
+                               8BE2EA821FB27E4800F7543A /* alphabet.Xhosa.xml */,
+                               8BE2EA801FB27E4800F7543A /* alphabet.Yoruba.xml */,
+                               8BE2EADC1FB27E5200F7543A /* alphabet.Zulu.xml */,
                                33CBB4E4101FA33E00510BF9 /* alphabet.Greek.xml */,
                                33CBB4E5101FA33E00510BF9 /* alphabet.Hebrew.xml */,
                                33CBB4E6101FA33E00510BF9 /* alphabet.hiragana.xml */,
@@ -964,6 +1317,7 @@
                332F3495103D8F54008448D7 /* colours */ = {
                        isa = PBXGroup;
                        children = (
+                               8BE2EB591FB27E6A00F7543A /* colour.ean.xml */,
                                332F3496103D8F54008448D7 /* colour.blue.xml */,
                                332F3497103D8F54008448D7 /* colour.dtd */,
                                332F3498103D8F54008448D7 /* colour.euroasian.xml */,
@@ -1378,6 +1732,8 @@
                33627F980F7A82CE000C8818 /* training */ = {
                        isa = PBXGroup;
                        children = (
+                               8BE2EA791FB27E2400F7543A /* training_spyNew_fullyAnnotated.txt */,
+                               8BE2EA7A1FB27E2400F7543A /* training_spyNew.txt */,
                                33CBB4F4101FA35900510BF9 /* training_basque_ES.txt */,
                                33CBB4C7101F9E5F00510BF9 /* training_czechC_CS.txt */,
                                33CBB4C8101F9E5F00510BF9 /* training_englishLC_GB.txt */,
@@ -1441,6 +1797,9 @@
 /* Begin PBXProject section */
                29B97313FDCFA39411CA2CEA /* Project object */ = {
                        isa = PBXProject;
+                       attributes = {
+                               LastUpgradeCheck = 0900;
+                       };
                        buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for 
PBXProject "Dasher" */;
                        compatibilityVersion = "Xcode 3.1";
                        developmentRegion = English;
@@ -1466,44 +1825,88 @@
                        buildActionMask = 2147483647;
                        files = (
                                332BCAB40F71621400585DBD /* expat.dsp in Resources */,
+                               8BE2EB1A1FB27E5400F7543A /* alphabet.arabic.xml in Resources */,
+                               8BE2EB331FB27E5400F7543A /* alphabet.cherokee.xml in Resources */,
                                332BCAB50F71621400585DBD /* expat_static.dsp in Resources */,
                                332BCAB60F71621400585DBD /* expatw.dsp in Resources */,
+                               8BE2EB3B1FB27E5400F7543A /* alphabet.ethiopic.xml in Resources */,
                                332BCAB70F71621400585DBD /* expatw_static.dsp in Resources */,
+                               8BE2EB0E1FB27E5400F7543A /* alphabet.afrikaans.xml in Resources */,
                                332BCAB80F71621400585DBD /* libexpat.def in Resources */,
+                               8BE2EAEE1FB27E5400F7543A /* alphabet.Yoruba.xml in Resources */,
                                332BCAB90F71621400585DBD /* libexpatw.def in Resources */,
+                               8BE2EB531FB27E5400F7543A /* alphabet.latex.xml in Resources */,
                                3344FE380F71717C00506EAA /* DasherViewSquare.inl in Resources */,
                                33627FBA0F7A82CF000C8818 /* training_albanian_SQ.txt in Resources */,
                                33627FBD0F7A82CF000C8818 /* training_bengali_BD.txt in Resources */,
+                               8BE2EB291FB27E5400F7543A /* alphabet.Vietnamese.xml in Resources */,
+                               8B9329E01FA8DC1E005159D5 /* Images.xcassets in Resources */,
+                               8BE2EB321FB27E5400F7543A /* alphabet.romansch.xml in Resources */,
+                               8BE2EB661FB2891500F7543A /* fast-forward 3x png in Resources */,
                                33627FBF0F7A82CF000C8818 /* training_canna_JP.txt in Resources */,
+                               8BE2EB301FB27E5400F7543A /* alphabet.kazakh.xml in Resources */,
                                33627FC10F7A82CF000C8818 /* training_czech_CS.txt in Resources */,
+                               8BE2EB391FB27E5400F7543A /* alphabet.Austen.xml in Resources */,
+                               8BE2EB491FB27E5400F7543A /* alphabet.norwegian.xml in Resources */,
+                               8BE2EB1E1FB27E5400F7543A /* alphabet.georgian.xml in Resources */,
                                33627FC20F7A82CF000C8818 /* training_danish_DK.txt in Resources */,
                                33627FC40F7A82CF000C8818 /* training_dutch_NL.txt in Resources */,
+                               8BE2EAED1FB27E5400F7543A /* alphabet.Ndebele.xml in Resources */,
                                33627FC50F7A82CF000C8818 /* training_english_GB.txt in Resources */,
+                               8BE2EB281FB27E5400F7543A /* alphabet.bopomofo.xml in Resources */,
                                33627FC60F7A82CF000C8818 /* training_finnish_FI.txt in Resources */,
                                33627FC70F7A82CF000C8818 /* training_french_FR.txt in Resources */,
                                33627FC80F7A82CF000C8818 /* training_german_DE.txt in Resources */,
+                               8BE2EB2F1FB27E5400F7543A /* alphabet.Hindi.xml in Resources */,
+                               8BE2EB651FB2891500F7543A /* fast-forward 2x png in Resources */,
+                               8BE2EAF41FB27E5400F7543A /* alphabet.bosnian.xml in Resources */,
+                               8BE2EB3E1FB27E5400F7543A /* alphabet.adangbe.xml in Resources */,
                                33627FC90F7A82CF000C8818 /* training_greek_GR.txt in Resources */,
                                33627FCA0F7A82CF000C8818 /* training_hebrew_IL.txt in Resources */,
                                33627FCB0F7A82CF000C8818 /* training_hiragana60_JP.txt in Resources */,
+                               8BE2EB4A1FB27E5400F7543A /* alphabet.Zulu.xml in Resources */,
                                33627FCC0F7A82CF000C8818 /* training_hiragana83_JP.txt in Resources */,
+                               8BE2EB021FB27E5400F7543A /* alphabet.Esperanto.xml in Resources */,
+                               8BE2EB1B1FB27E5400F7543A /* alphabet_langcodes.txt in Resources */,
                                33627FCD0F7A82CF000C8818 /* training_hungarian_HU.txt in Resources */,
+                               8BE2EB1C1FB27E5400F7543A /* alphabet.bopoTrad.xml in Resources */,
                                33627FCE0F7A82CF000C8818 /* training_italian_IT.txt in Resources */,
                                33627FCF0F7A82CF000C8818 /* training_mongolian_MN.txt in Resources */,
+                               8BE2EB551FB27E5400F7543A /* alphabet.Igbo.xml in Resources */,
                                33627FD00F7A82CF000C8818 /* training_persian_IR.txt in Resources */,
                                33627FD10F7A82CF000C8818 /* training_polish_PL.txt in Resources */,
+                               8BE2EB1F1FB27E5400F7543A /* alphabet.venda.xml in Resources */,
+                               8BE2EB581FB27E5400F7543A /* alphabet.nepali.xml in Resources */,
+                               8BE2EB111FB27E5400F7543A /* alphabet.Malayalam.xml in Resources */,
                                33627FD20F7A82CF000C8818 /* training_portuguese_BR.txt in Resources */,
+                               8BE2EB541FB27E5400F7543A /* alphabet.occitan.xml in Resources */,
                                33627FD30F7A82CF000C8818 /* training_russian_RU.txt in Resources */,
+                               8BE2EB3C1FB27E5400F7543A /* alphabet.Kannada.xml in Resources */,
                                33627FD40F7A82CF000C8818 /* training_spanish_ES.txt in Resources */,
                                33627FD50F7A82CF000C8818 /* training_swahili_KE.txt in Resources */,
+                               8BE2EB201FB27E5400F7543A /* alphabet.serbian.xml in Resources */,
                                33627FD60F7A82CF000C8818 /* training_swedish_SE.txt in Resources */,
+                               8BE2EB2D1FB27E5400F7543A /* alphabet.ewe.xml in Resources */,
                                33627FD70F7A82CF000C8818 /* training_turkish_TR.txt in Resources */,
+                               8BE2EAFF1FB27E5400F7543A /* alphabet.kirundi.xml in Resources */,
+                               8BE2EAFC1FB27E5400F7543A /* alphabet.abc.xml in Resources */,
                                33627FD80F7A82CF000C8818 /* training_welsh_GB.txt in Resources */,
+                               8BE2EB2C1FB27E5400F7543A /* alphabet.perl.xml in Resources */,
                                331F29430F7A9C270044EB9C /* alphabet-nest.xsl in Resources */,
                                331F29440F7A9C270044EB9C /* alphabet-nest2.xsl in Resources */,
+                               8BE2EB231FB27E5400F7543A /* alphabet.korean.xml in Resources */,
+                               8BE2EAFE1FB27E5400F7543A /* alphabet.Azerbaijani.xml in Resources */,
+                               8BE2EB401FB27E5400F7543A /* alphabet.klingon.xml in Resources */,
                                331F294A0F7A9C270044EB9C /* alphabet.albanian.xml in Resources */,
+                               8BE2EB011FB27E5400F7543A /* alphabet.Urdu.xml in Resources */,
                                331F295E0F7A9C270044EB9C /* alphabet.czech.xml in Resources */,
+                               8BE2EB4D1FB27E5400F7543A /* alphabet.Telugu.xml in Resources */,
                                331F295F0F7A9C270044EB9C /* alphabet.danish.xml in Resources */,
+                               8BE2EB191FB27E5400F7543A /* alphabet.tigrinya.xml in Resources */,
+                               8BE2EB2A1FB27E5400F7543A /* alphabet.amharic.xml in Resources */,
+                               8BE2EB571FB27E5400F7543A /* alphabet.Romanian.xml in Resources */,
                                331F29600F7A9C270044EB9C /* alphabet.dtd in Resources */,
+                               8BE2EB2E1FB27E5400F7543A /* alphabet.iso8859.xml in Resources */,
                                331F29610F7A9C270044EB9C /* alphabet.dutch.xml in Resources */,
                                331F29620F7A9C270044EB9C /* alphabet.english.xml in Resources */,
                                331F29630F7A9C270044EB9C /* alphabet.englishC.xml in Resources */,
@@ -1511,13 +1914,21 @@
                                331F296B0F7A9C270044EB9C /* alphabet.finnish2.xml in Resources */,
                                331F296C0F7A9C270044EB9C /* alphabet.french.xml in Resources */,
                                331F29700F7A9C270044EB9C /* alphabet.german.xml in Resources */,
+                               8BE2EB061FB27E5400F7543A /* alphabet.Hawaiian.xml in Resources */,
+                               8BE2EB4F1FB27E5400F7543A /* alphabet.runic.xml in Resources */,
                                331F297F0F7A9C270044EB9C /* alphabet.italian.xml in Resources */,
                                331F29A30F7A9C270044EB9C /* alphabet.polish.xml in Resources */,
                                331F29A90F7A9C270044EB9C /* alphabet.russian.xml in Resources */,
+                               8BE2EB361FB27E5400F7543A /* alphabet.Punjabi.xml in Resources */,
+                               8BE2EB441FB27E5400F7543A /* alphabet.Filipino.xml in Resources */,
+                               8BE2EB241FB27E5400F7543A /* alphabet.Indonesian.xml in Resources */,
+                               8BE2EB501FB27E5400F7543A /* alphabet.cangjie.xml in Resources */,
                                331F29B40F7A9C270044EB9C /* alphabet.spanish.xml in Resources */,
                                331F29B50F7A9C270044EB9C /* alphabet.swahili.xml in Resources */,
+                               8BE2EAEF1FB27E5400F7543A /* alphabet.Belarusian.xml in Resources */,
                                331F29C80F7A9C270044EB9C /* alphabet.welsh.xml in Resources */,
                                331F29CA0F7A9C270044EB9C /* alphabet.xsl in Resources */,
+                               8BE2EB251FB27E5400F7543A /* alphabet.Thai2.xml in Resources */,
                                331F29CB0F7A9C270044EB9C /* alphabet.xsl.good in Resources */,
                                33F879F70FB1C27A003E737C /* Dasher.png in Resources */,
                                33F87A240FB1C775003E737C /* MainWindow.xib in Resources */,
@@ -1526,52 +1937,117 @@
                                3334D99A101627A00077948A /* alphabet.hungarian.xml in Resources */,
                                3334D99C101627DE0077948A /* alphabet.mongolian.xml in Resources */,
                                33CBB4CD101F9E5F00510BF9 /* training_czechC_CS.txt in Resources */,
+                               8BE2EAF51FB27E5400F7543A /* alphabet.lao.xml in Resources */,
+                               8BE2EB121FB27E5400F7543A /* alphabet.pinyin2.xml in Resources */,
                                33CBB4CE101F9E5F00510BF9 /* training_englishLC_GB.txt in Resources */,
                                33CBB4CF101F9E5F00510BF9 /* training_frenchC_FR.txt in Resources */,
+                               8BE2EB631FB2891500F7543A /* rewind 3x png in Resources */,
                                33CBB4D0101F9E5F00510BF9 /* training_italianC_IT.txt in Resources */,
+                               8BE2EB421FB27E5400F7543A /* alphabet.uzbek.xml in Resources */,
                                33CBB4D1101F9E5F00510BF9 /* training_portugueseC_BR.txt in Resources */,
+                               8BE2EB411FB27E5400F7543A /* alphabet.Tswana.xml in Resources */,
+                               8BE2EB311FB27E5400F7543A /* alphabet.Katakana.xml in Resources */,
                                33CBB4D2101F9E5F00510BF9 /* training_spanishC_ES.txt in Resources */,
+                               8BE2EB161FB27E5400F7543A /* alphabet.latvian.xml in Resources */,
                                33CBB4E3101FA31C00510BF9 /* alphabet.basque.xml in Resources */,
+                               8BE2EB461FB27E5400F7543A /* alphabet.spyTonesNew.xml in Resources */,
+                               8BE2EAEC1FB27E5400F7543A /* alphabet.Estonian.xml in Resources */,
                                33CBB4EC101FA33E00510BF9 /* alphabet.Greek.xml in Resources */,
                                33CBB4ED101FA33E00510BF9 /* alphabet.Hebrew.xml in Resources */,
                                33CBB4EE101FA33E00510BF9 /* alphabet.hiragana.xml in Resources */,
                                33CBB4EF101FA33E00510BF9 /* alphabet.hiragana2.xml in Resources */,
                                33CBB4F0101FA33E00510BF9 /* alphabet.japanese.canna.xml in Resources */,
+                               8BE2EB221FB27E5400F7543A /* alphabet.koreanNested.xml in Resources */,
+                               8BE2EB0B1FB27E5400F7543A /* alphabet.catalan.xml in Resources */,
                                33CBB4F1101FA33E00510BF9 /* alphabet.persian.xml in Resources */,
+                               8BE2EAF91FB27E5400F7543A /* alphabet.Oriya.xml in Resources */,
                                33CBB4F2101FA33E00510BF9 /* alphabet.portuguese.xml in Resources */,
+                               8BE2EB131FB27E5400F7543A /* alphabet.spyNew.xml in Resources */,
+                               8BE2EB5A1FB27E6B00F7543A /* colour.ean.xml in Resources */,
+                               8BE2EAF01FB27E5400F7543A /* alphabet.Xhosa.xml in Resources */,
                                33CBB4F3101FA33E00510BF9 /* alphabet.swedish.xml in Resources */,
+                               8BE2EAF81FB27E5400F7543A /* alphabet.Tamil.xml in Resources */,
+                               8BE2EB171FB27E5400F7543A /* alphabet.Armenian.xml in Resources */,
+                               8BE2EAF71FB27E5400F7543A /* alphabet.maltese.xml in Resources */,
+                               8BE2EB3D1FB27E5400F7543A /* alphabet.Assamese.xml in Resources */,
                                33CBB4F5101FA35900510BF9 /* training_basque_ES.txt in Resources */,
+                               8BE2EB521FB27E5400F7543A /* alphabet.ogham.xml in Resources */,
                                33F61A5510123FBE00DB7685 /* mail.png in Resources */,
                                3334D44C1013620D0077948A /* cog.png in Resources */,
                                3334D49210137A1C0077948A /* pen.png in Resources */,
+                               8BE2EB3F1FB27E5400F7543A /* alphabet.Slovak.xml in Resources */,
                                3334D4A3101385060077948A /* tilt.png in Resources */,
                                3334D4BC1014713B0077948A /* globe.png in Resources */,
+                               8BE2EAF11FB27E5400F7543A /* alphabet.turkmen.xml in Resources */,
                                3334D4D31014740B0077948A /* misc.png in Resources */,
+                               8BE2EB211FB27E5400F7543A /* alphabet.ukrainian.xml in Resources */,
                                332F34A3103D8F54008448D7 /* colour.blue.xml in Resources */,
+                               8BE2EB511FB27E5400F7543A /* alphabet.hausa.xml in Resources */,
+                               8BE2EB181FB27E5400F7543A /* alphabet.latin.xml in Resources */,
+                               8BE2EB471FB27E5400F7543A /* alphabet.ipa.xml in Resources */,
                                332F34A4103D8F54008448D7 /* colour.dtd in Resources */,
+                               8BE2EB051FB27E5400F7543A /* alphabet.corsican.xml in Resources */,
+                               8BE2EB001FB27E5400F7543A /* alphabet.Moldavian.xml in Resources */,
                                332F34A5103D8F54008448D7 /* colour.euroasian.xml in Resources */,
+                               8BE2EAF21FB27E5400F7543A /* alphabet.Marathi.xml in Resources */,
+                               8BE2EB071FB27E5400F7543A /* alphabet.croatian.xml in Resources */,
+                               8BE2EA7C1FB27E2500F7543A /* training_spyNew.txt in Resources */,
+                               8BE2EB1D1FB27E5400F7543A /* alphabet.somali.xml in Resources */,
                                332F34A6103D8F54008448D7 /* colour.euroasian2.xml in Resources */,
                                332F34A7103D8F54008448D7 /* colour.euroasian3.xml in Resources */,
+                               8BE2EB031FB27E5400F7543A /* alphabet.AfaanOromo.xml in Resources */,
+                               8BE2EB271FB27E5400F7543A /* alphabet.Malay.xml in Resources */,
+                               8BE2EB481FB27E5400F7543A /* alphabet.Thai.xml in Resources */,
                                332F34A8103D8F54008448D7 /* colour.jamie.xml in Resources */,
+                               8BE2EB0D1FB27E5400F7543A /* alphabet.kirghiz.xml in Resources */,
+                               8BE2EB0F1FB27E5400F7543A /* alphabet.Slovenian.xml in Resources */,
+                               8BE2EB341FB27E5400F7543A /* alphabet.breton.xml in Resources */,
+                               8BE2EB091FB27E5400F7543A /* alphabet.spyTones2New.xml in Resources */,
+                               8BE2EB151FB27E5400F7543A /* alphabet.Tajik.xml in Resources */,
                                332F34A9103D8F54008448D7 /* colour.rainbow.xml in Resources */,
+                               8BE2EB261FB27E5400F7543A /* alphabet.Turkish.xml in Resources */,
+                               8BE2EAEB1FB27E5400F7543A /* alphabet.faroese.xml in Resources */,
+                               8BE2EB381FB27E5400F7543A /* alphabet.lithuanian.xml in Resources */,
                                332F34AA103D8F54008448D7 /* colour.thai.xml in Resources */,
+                               8BE2EB4B1FB27E5400F7543A /* alphabet.Swati.xml in Resources */,
+                               8BE2EB081FB27E5400F7543A /* alphabet.Sepedi.xml in Resources */,
+                               8BE2EB431FB27E5400F7543A /* alphabet.Sinhala.xml in Resources */,
+                               8BE2EB0A1FB27E5400F7543A /* alphabet.Sami.xml in Resources */,
                                332F34AB103D8F54008448D7 /* colour.vowels.xml in Resources */,
                                332F34AC103D8F54008448D7 /* colour.vowels2.xml in Resources */,
+                               8BE2EAFD1FB27E5400F7543A /* alphabet.pashto.xml in Resources */,
+                               8BE2EAF61FB27E5400F7543A /* alphabet.macedonian.xml in Resources */,
+                               8BE2EA7B1FB27E2500F7543A /* training_spyNew_fullyAnnotated.txt in Resources 
*/,
                                332F34AD103D8F54008448D7 /* colour.xml in Resources */,
                                332F34AE103D8F54008448D7 /* colour.xsl in Resources */,
+                               8BE2EAF31FB27E5400F7543A /* alphabet.akan.xml in Resources */,
+                               8BE2EB4C1FB27E5400F7543A /* alphabet.myanmar.xml in Resources */,
                                332F34AF103D8F54008448D7 /* Makefile.am in Resources */,
                                332F34D9103D9858008448D7 /* palette.png in Resources */,
+                               8BE2EB4E1FB27E5400F7543A /* alphabet.Bulgarian.xml in Resources */,
                                333F707711A8AA66002E2BDF /* us_pos.tree in Resources */,
+                               8BE2EB141FB27E5400F7543A /* alphabet.Icelandic.xml in Resources */,
                                33DA5E2D11B70FA100011CD2 /* paste.png in Resources */,
                                3302672811B7F0D000C07880 /* copy.png in Resources */,
+                               8BE2EB3A1FB27E5400F7543A /* alphabet.galician.xml in Resources */,
                                3302675611B7F80800C07880 /* bubble.png in Resources */,
+                               8BE2EB041FB27E5400F7543A /* alphabet.thaana.xml in Resources */,
                                3302675711B7F80800C07880 /* bubbletrash.png in Resources */,
+                               8BE2EB0C1FB27E5400F7543A /* alphabet.ScotsGaelic.xml in Resources */,
+                               8BE2EB561FB27E5400F7543A /* alphabet.Gujarati.xml in Resources */,
                                3302678111B8026900C07880 /* scissors.png in Resources */,
+                               8BE2EB451FB27E5400F7543A /* alphabet.ga.xml in Resources */,
                                3302678C11B8040D00C07880 /* spanner_lg.png in Resources */,
+                               8BE2EB2B1FB27E5400F7543A /* alphabet.luxembourgish.xml in Resources */,
                                3302678D11B8040D00C07880 /* spanner.png in Resources */,
+                               8BE2EAFB1FB27E5400F7543A /* alphabet.Tsonga.xml in Resources */,
+                               8BE2EB101FB27E5400F7543A /* alphabet.Sesotho.xml in Resources */,
+                               8BE2EB351FB27E5400F7543A /* alphabet.IrishGaelic.xml in Resources */,
+                               8BE2EAFA1FB27E5400F7543A /* alphabet.sanskrit.xml in Resources */,
                                3378A267133543B800A96C5D /* control.xml in Resources */,
                                3304E31313C6121A000B2971 /* Default~ipad.png in Resources */,
                                339E340E13C6206E007A2BCC /* Default.png in Resources */,
+                               8BE2EB371FB27E5400F7543A /* alphabet.kurdish.xml in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
@@ -1601,6 +2077,7 @@
                                3344FE210F71717C00506EAA /* ColourIO.cpp in Sources */,
                                3344FE220F71717C00506EAA /* ControlManager.cpp in Sources */,
                                3344FE240F71717C00506EAA /* ConversionManager.cpp in Sources */,
+                               94A831C71F79274F0017BA2D /* FileUtils.mm in Sources */,
                                3344FE260F71717C00506EAA /* CustomColours.cpp in Sources */,
                                3344FE270F71717C00506EAA /* DasherButtons.cpp in Sources */,
                                3344FE310F71717C00506EAA /* DasherInterfaceBase.cpp in Sources */,
@@ -1761,13 +2238,29 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+                               CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+                               CLANG_CXX_LIBRARY = "compiler-default";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               CODE_SIGN_STYLE = Manual;
                                COPY_PHASE_STRIP = NO;
+                               DEVELOPMENT_TEAM = "";
                                GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_CPP_EXCEPTIONS = YES;
                                GCC_OPTIMIZATION_LEVEL = 0;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = Dasher_Prefix.pch;
                                INFOPLIST_FILE = Info.plist;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-stdlib=libc++",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = org.uk.acecentre.dasher;
                                PRODUCT_NAME = Dasher;
+                               PROVISIONING_PROFILE = "";
+                               PROVISIONING_PROFILE_SPECIFIER = "";
                        };
                        name = Debug;
                };
@@ -1775,32 +2268,70 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+                               CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+                               CLANG_CXX_LIBRARY = "compiler-default";
                                CODE_SIGN_IDENTITY = "iPhone Developer: Alan Lawrence (YB2RM5STT4)";
+                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+                               CODE_SIGN_STYLE = Manual;
                                COPY_PHASE_STRIP = YES;
+                               DEVELOPMENT_TEAM = K45HHA96ND;
+                               GCC_ENABLE_CPP_EXCEPTIONS = YES;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = Dasher_Prefix.pch;
                                INFOPLIST_FILE = Info.plist;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-stdlib=libc++",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = org.uk.acecentre.dasher;
                                PRODUCT_NAME = Dasher;
+                               PROVISIONING_PROFILE = "ff8b4df8-6a9a-44fc-b876-16bead9f9001";
+                               PROVISIONING_PROFILE_SPECIFIER = "Dasher-Dist";
                        };
                        name = Release;
                };
                33B24B510FB1D08C0016C8DE /* Distribution */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                CODE_SIGN_IDENTITY = "iPhone Distribution";
                                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
                                GCC_C_LANGUAGE_STANDARD = c99;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        HAVE_EXPAT_CONFIG_H,
                                        HAVE_CONFIG_H,
                                );
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                HEADER_SEARCH_PATHS = (
                                        "${SRCROOT}/lib",
                                        "${SRCROOT}",
                                );
+                               IPHONEOS_DEPLOYMENT_TARGET = 8.0;
                                PREBINDING = NO;
                                PROVISIONING_PROFILE = "";
                                "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
@@ -1812,37 +2343,73 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+                               CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+                               CLANG_CXX_LIBRARY = "compiler-default";
                                CODE_SIGN_IDENTITY = "iPhone Distribution";
                                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+                               CODE_SIGN_STYLE = Manual;
                                COPY_PHASE_STRIP = YES;
+                               DEVELOPMENT_TEAM = K45HHA96ND;
+                               GCC_ENABLE_CPP_EXCEPTIONS = YES;
                                GCC_PRECOMPILE_PREFIX_HEADER = YES;
                                GCC_PREFIX_HEADER = Dasher_Prefix.pch;
                                INFOPLIST_FILE = Info.plist;
+                               IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+                               OTHER_CPLUSPLUSFLAGS = (
+                                       "$(OTHER_CFLAGS)",
+                                       "-stdlib=libc++",
+                               );
+                               PRODUCT_BUNDLE_IDENTIFIER = org.uk.acecentre.dasher;
                                PRODUCT_NAME = Dasher;
-                               PROVISIONING_PROFILE = "";
+                               PROVISIONING_PROFILE = "ff8b4df8-6a9a-44fc-b876-16bead9f9001";
                                "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+                               PROVISIONING_PROFILE_SPECIFIER = "Dasher-Dist";
                        };
                        name = Distribution;
                };
                C01FCF4F08A954540054247B /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                CODE_SIGN_IDENTITY = "iPhone Developer";
                                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               ENABLE_TESTABILITY = YES;
                                GCC_C_LANGUAGE_STANDARD = c99;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        HAVE_EXPAT_CONFIG_H,
                                        HAVE_CONFIG_H,
                                        DEBUG,
                                );
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                HEADER_SEARCH_PATHS = (
                                        "${SRCROOT}/lib",
                                        "${SRCROOT}",
                                );
-                               IPHONEOS_DEPLOYMENT_TARGET = 3.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 8.0;
                                ONLY_ACTIVE_ARCH = YES;
                                PREBINDING = NO;
                                PROVISIONING_PROFILE = "";
@@ -1855,21 +2422,42 @@
                C01FCF5008A954540054247B /* Release */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                CODE_SIGN_IDENTITY = "iPhone Developer";
                                "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
                                GCC_C_LANGUAGE_STANDARD = c99;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        HAVE_EXPAT_CONFIG_H,
                                        HAVE_CONFIG_H,
                                );
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
                                HEADER_SEARCH_PATHS = (
                                        "${SRCROOT}/lib",
                                        "${SRCROOT}",
                                );
-                               IPHONEOS_DEPLOYMENT_TARGET = 4.0;
+                               IPHONEOS_DEPLOYMENT_TARGET = 8.0;
                                PREBINDING = NO;
                                PROVISIONING_PROFILE = "";
                                "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Contents.json 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100755
index 0000000..98be84a
--- /dev/null
+++ b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,182 @@
+{
+    "images":[
+        {
+            "idiom":"iphone",
+            "size":"20x20",
+            "scale":"2x",
+            "filename":"Icon-App-20x20 2x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"20x20",
+            "scale":"3x",
+            "filename":"Icon-App-20x20 3x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"1x",
+            "filename":"Icon-App-29x29 1x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"2x",
+            "filename":"Icon-App-29x29 2x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"3x",
+            "filename":"Icon-App-29x29 3x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"1x",
+            "filename":"Icon-App-40x40 1x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"2x",
+            "filename":"Icon-App-40x40 2x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"3x",
+            "filename":"Icon-App-40x40 3x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"57x57",
+            "scale":"1x",
+            "filename":"Icon-App-57x57 1x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"57x57",
+            "scale":"2x",
+            "filename":"Icon-App-57x57 2x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"1x",
+            "filename":"Icon-App-60x60 1x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"2x",
+            "filename":"Icon-App-60x60 2x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"3x",
+            "filename":"Icon-App-60x60 3x png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"76x76",
+            "scale":"1x",
+            "filename":"Icon-App-76x76 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"20x20",
+            "scale":"1x",
+            "filename":"Icon-App-20x20 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"20x20",
+            "scale":"2x",
+            "filename":"Icon-App-20x20 2x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"29x29",
+            "scale":"1x",
+            "filename":"Icon-App-29x29 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"29x29",
+            "scale":"2x",
+            "filename":"Icon-App-29x29 2x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"40x40",
+            "scale":"1x",
+            "filename":"Icon-App-40x40 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"40x40",
+            "scale":"2x",
+            "filename":"Icon-App-40x40 2x png"
+        },
+        {
+          "size" : "50x50",
+          "idiom" : "ipad",
+          "filename" : "Icon-Small-50x50 1x png",
+          "scale" : "1x"
+        },
+        {
+          "size" : "50x50",
+          "idiom" : "ipad",
+          "filename" : "Icon-Small-50x50 2x png",
+          "scale" : "2x"
+        },
+        {
+            "idiom":"ipad",
+            "size":"72x72",
+            "scale":"1x",
+            "filename":"Icon-App-72x72 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"72x72",
+            "scale":"2x",
+            "filename":"Icon-App-72x72 2x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"1x",
+            "filename":"Icon-App-76x76 1x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"2x",
+            "filename":"Icon-App-76x76 2x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"3x",
+            "filename":"Icon-App-76x76 3x png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"83.5x83.5",
+            "scale":"2x",
+            "filename":"Icon-App-83 5x83 5 2x png"
+        },
+        {
+          "size" : "1024x1024",
+          "idiom" : "ios-marketing",
+          "filename" : "ItunesArtwork 2x png",
+          "scale" : "1x"
+        }
+    ],
+    "info":{
+        "version":1,
+        "author":"makeappicon"
+    }
+}
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 1x png
new file mode 100644
index 0000000..5874486
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 2x png
new file mode 100644
index 0000000..d1675b4
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 3x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 3x png
new file mode 100644
index 0000000..45c455a
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-20x20 3x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 1x png
new file mode 100644
index 0000000..8943260
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 2x png
new file mode 100644
index 0000000..6a73076
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 3x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 3x png
new file mode 100644
index 0000000..c67d54c
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-29x29 3x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 1x png
new file mode 100644
index 0000000..d1675b4
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 2x png
new file mode 100644
index 0000000..680a7e2
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 3x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 3x png
new file mode 100644
index 0000000..765c78a
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-40x40 3x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 1x png
new file mode 100644
index 0000000..429d1c7
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 2x png
new file mode 100644
index 0000000..003e072
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-57x57 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 1x png
new file mode 100644
index 0000000..45c455a
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 2x png
new file mode 100644
index 0000000..765c78a
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 3x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 3x png
new file mode 100644
index 0000000..1d97a7f
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-60x60 3x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 1x png
new file mode 100644
index 0000000..405b124
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 2x png
new file mode 100644
index 0000000..bdea89c
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-72x72 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 1x png
new file mode 100644
index 0000000..53e6a4e
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 2x png
new file mode 100644
index 0000000..820ba6a
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 3x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 3x png
new file mode 100644
index 0000000..29bea4b
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-76x76 3x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-83 5x83 5 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-83 5x83 5 2x png
new file mode 100644
index 0000000..391b309
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-App-83 5x83 5 2x png 
differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 1x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 1x png
new file mode 100644
index 0000000..b92735e
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 1x png 
differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 2x png
new file mode 100644
index 0000000..d6bd1f0
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50 2x png 
differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/ItunesArtwork 2x png 
b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/ItunesArtwork 2x png
new file mode 100644
index 0000000..aabdb28
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/AppIcon.appiconset/ItunesArtwork 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/Contents.json b/Src/iPhone/Dasher/Images.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/Src/iPhone/Dasher/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/Src/iPhone/Dasher/Images.xcassets/LaunchImage.launchimage/Contents.json 
b/Src/iPhone/Dasher/Images.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..3814ad8
--- /dev/null
+++ b/Src/iPhone/Dasher/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,49 @@
+{
+  "images" : [
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "subtype" : "retina4",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/Src/iPhone/Dasher/Images.xcassets/README.md b/Src/iPhone/Dasher/Images.xcassets/README.md
new file mode 100644
index 0000000..6b3251a
--- /dev/null
+++ b/Src/iPhone/Dasher/Images.xcassets/README.md
@@ -0,0 +1,24 @@
+## iTunesArtwork & iTunesArtwork@2x (App Icon) file extension:
+
+PNG extension is prepended to these two files - 
+
+While Apple suggested to omit the extension for these files, 
+the '.png' extension is actually required for iTunesConnect submission.
+
+This is done for you so you don't have to.
+
+However, for Ad_hoc or Enterprise distirbution, the extension should be removed
+from the files before adding to XCode to avoid error.
+
+refs: https://developer.apple.com/library/ios/qa/qa1686/_index.html
+
+## iTunesArtwork & iTunesArtwork@2x (App Icon) transparency handling:
+
+As images with alpha channels or transparencies cannot be set as an application's icon on
+iTunesConnect, all transparent pixels in your images will be converted into 
+solid blacks.
+
+To achieve the best result, you're advised to adjust the transparency settings 
+in your source files before converting them with makeAppIcon.
+
+refs: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/AppIcons.html
diff --git a/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 1x png 
b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 1x png
new file mode 100644
index 0000000..1eca2f8
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 1x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 2x png 
b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 2x png
new file mode 100644
index 0000000..aabdb28
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 2x png differ
diff --git a/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 3x png 
b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 3x png
new file mode 100644
index 0000000..7b8140d
Binary files /dev/null and b/Src/iPhone/Dasher/Images.xcassets/iTunesArtwork 3x png differ
diff --git a/Src/iPhone/Info.plist b/Src/iPhone/Info.plist
index bc7cb28..ba28da0 100644
--- a/Src/iPhone/Info.plist
+++ b/Src/iPhone/Info.plist
@@ -8,20 +8,20 @@
        <string>${PRODUCT_NAME}</string>
        <key>CFBundleExecutable</key>
        <string>${EXECUTABLE_NAME}</string>
-       <key>CFBundleIconFile</key>
-       <string>Dasher_small.png</string>
        <key>CFBundleIdentifier</key>
-       <string>uk.ac.cam.phy.inference.dasher</string>
+       <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <string>${PRODUCT_NAME}</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>2.5.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>2.5.2</string>
+       <string>254</string>
        <key>LSRequiresIPhoneOS</key>
        <true/>
        <key>NSMainNibFile</key>
diff --git a/Src/iPhone/MainWindow.xib b/Src/iPhone/MainWindow.xib
index 98b2c96..c1b8903 100644
--- a/Src/iPhone/MainWindow.xib
+++ b/Src/iPhone/MainWindow.xib
@@ -1,153 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.03">
-       <data>
-               <int key="IBDocument.SystemTarget">528</int>
-               <string key="IBDocument.SystemVersion">9G55</string>
-               <string key="IBDocument.InterfaceBuilderVersion">677</string>
-               <string key="IBDocument.AppKitVersion">949.43</string>
-               <string key="IBDocument.HIToolboxVersion">353.00</string>
-               <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-               </object>
-               <object class="NSArray" key="IBDocument.PluginDependencies">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-               </object>
-               <object class="NSMutableDictionary" key="IBDocument.Metadata">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-                       <object class="NSArray" key="dict.sortedKeys">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                       </object>
-                       <object class="NSMutableArray" key="dict.values">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                       </object>
-               </object>
-               <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-                       <bool key="EncodedWithXMLCoder">YES</bool>
-                       <object class="IBProxyObject" id="841351856">
-                               <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-                       </object>
-                       <object class="IBProxyObject" id="191355593">
-                               <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-                       </object>
-                       <object class="IBUICustomObject" id="664661524"/>
-               </object>
-               <object class="IBObjectContainer" key="IBDocument.Objects">
-                       <object class="NSMutableArray" key="connectionRecords">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBCocoaTouchOutletConnection" key="connection">
-                                               <string key="label">delegate</string>
-                                               <reference key="source" ref="841351856"/>
-                                               <reference key="destination" ref="664661524"/>
-                                       </object>
-                                       <int key="connectionID">4</int>
-                               </object>
-                       </object>
-                       <object class="IBMutableOrderedSet" key="objectRecords">
-                               <object class="NSArray" key="orderedObjects">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">0</int>
-                                               <object class="NSArray" key="object" id="957960031">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                               </object>
-                                               <reference key="children" ref="1000"/>
-                                               <nil key="parent"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">-1</int>
-                                               <reference key="object" ref="841351856"/>
-                                               <reference key="parent" ref="957960031"/>
-                                               <string type="base64-UTF8" 
key="objectName">RmlsZSdzIE93bmVyA</string>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">3</int>
-                                               <reference key="object" ref="664661524"/>
-                                               <reference key="parent" ref="957960031"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">-2</int>
-                                               <reference key="object" ref="191355593"/>
-                                               <reference key="parent" ref="957960031"/>
-                                       </object>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="flattenedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="NSMutableArray" key="dict.sortedKeys">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>-1.CustomClassName</string>
-                                       <string>-2.CustomClassName</string>
-                                       <string>3.CustomClassName</string>
-                                       <string>3.IBPluginDependency</string>
-                               </object>
-                               <object class="NSMutableArray" key="dict.values">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                       <string>UIApplication</string>
-                                       <string>UIResponder</string>
-                                       <string>DasherAppDelegate</string>
-                                       <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-                               </object>
-                       </object>
-                       <object class="NSMutableDictionary" key="unlocalizedProperties">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="NSArray" key="dict.sortedKeys">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                               </object>
-                               <object class="NSMutableArray" key="dict.values">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                               </object>
-                       </object>
-                       <nil key="activeLocalization"/>
-                       <object class="NSMutableDictionary" key="localizations">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="NSArray" key="dict.sortedKeys">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                               </object>
-                               <object class="NSMutableArray" key="dict.values">
-                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                               </object>
-                       </object>
-                       <nil key="sourceID"/>
-                       <int key="maxID">9</int>
-               </object>
-               <object class="IBClassDescriber" key="IBDocument.Classes">
-                       <object class="NSMutableArray" key="referencedPartialClassDescriptions">
-                               <bool key="EncodedWithXMLCoder">YES</bool>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">DasherAppDelegate</string>
-                                       <string key="superclassName">NSObject</string>
-                                       <object class="NSMutableDictionary" key="outlets">
-                                               <bool key="EncodedWithXMLCoder">YES</bool>
-                                               <object class="NSMutableArray" key="dict.sortedKeys">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>glView</string>
-                                                       <string>window</string>
-                                               </object>
-                                               <object class="NSMutableArray" key="dict.values">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <string>EAGLView</string>
-                                                       <string>UIWindow</string>
-                                               </object>
-                                       </object>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">Classes/DasherAppDelegate.h</string>
-                                       </object>
-                               </object>
-                               <object class="IBPartialClassDescription">
-                                       <string key="className">EAGLView</string>
-                                       <string key="superclassName">UIView</string>
-                                       <object class="IBClassDescriptionSource" key="sourceIdentifier">
-                                               <string key="majorKey">IBProjectSource</string>
-                                               <string key="minorKey">Classes/EAGLView.h</string>
-                                       </object>
-                               </object>
-                       </object>
-               </object>
-               <int key="IBDocument.localizationMode">0</int>
-               <string key="IBDocument.LastKnownRelativeProjectPath">Dasher.xcodeproj</string>
-               <int key="IBDocument.defaultPropertyAccessControl">3</int>
-       </data>
-</archive>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13196" 
targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment version="2320" identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" 
customClass="UIApplication">
+            <connections>
+                <outlet property="delegate" destination="3" id="4"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <customObject id="3" customClass="DasherAppDelegate"/>
+    </objects>
+</document>
diff --git a/Src/iPhone/fast-forward 2x png b/Src/iPhone/fast-forward 2x png
new file mode 100644
index 0000000..ba23ca5
Binary files /dev/null and b/Src/iPhone/fast-forward 2x png differ
diff --git a/Src/iPhone/fast-forward 3x png b/Src/iPhone/fast-forward 3x png
new file mode 100644
index 0000000..afd20f6
Binary files /dev/null and b/Src/iPhone/fast-forward 3x png differ
diff --git a/Src/iPhone/flite-1.4-iphone/voices/cmulex/cmu_lex.c 
b/Src/iPhone/flite-1.4-iphone/voices/cmulex/cmu_lex.c
index c14fe0a..2104138 100644
--- a/Src/iPhone/flite-1.4-iphone/voices/cmulex/cmu_lex.c
+++ b/Src/iPhone/flite-1.4-iphone/voices/cmulex/cmu_lex.c
@@ -356,7 +356,7 @@ cst_lexicon *cmu_lex_init()
 #ifdef CST_NO_STATIC_LEX
     /* cmu_lex.data will be set elsewhere */
 #else
-    cmu_lex.data = cmu_lex_data;
+    cmu_lex.data = (unsigned char*)cmu_lex_data;
 #endif
     cmu_lex.num_bytes = cmu_lex_num_bytes;
     cmu_lex.phone_table = (char **) cmu_lex_phone_table;
diff --git a/Src/iPhone/rewind 2x png b/Src/iPhone/rewind 2x png
new file mode 100644
index 0000000..eb74c46
Binary files /dev/null and b/Src/iPhone/rewind 2x png differ
diff --git a/Src/iPhone/rewind 3x png b/Src/iPhone/rewind 3x png
new file mode 100644
index 0000000..6002f22
Binary files /dev/null and b/Src/iPhone/rewind 3x png differ


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]