Game class now tracks board state and moves, as strings, and can step through its history.
Fixed another bug in Go (you could drag your captured stones back to the board!)
1.1 --- a/English.lproj/MainMenu.nib/designable.nib Wed Mar 12 15:51:32 2008 -0700
1.2 +++ b/English.lproj/MainMenu.nib/designable.nib Sun Mar 16 15:06:47 2008 -0700
1.3 @@ -1,31 +1,31 @@
1.4 <?xml version="1.0" encoding="UTF-8"?>
1.5 -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
1.6 +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02">
1.7 <data>
1.8 <int key="IBDocument.SystemTarget">0</int>
1.9 - <string key="IBDocument.SystemVersion">9B18</string>
1.10 - <string key="IBDocument.InterfaceBuilderVersion">629</string>
1.11 - <string key="IBDocument.AppKitVersion">949</string>
1.12 - <string key="IBDocument.HIToolboxVersion">343.00</string>
1.13 + <string key="IBDocument.SystemVersion">9C31</string>
1.14 + <string key="IBDocument.InterfaceBuilderVersion">644</string>
1.15 + <string key="IBDocument.AppKitVersion">949.26</string>
1.16 + <string key="IBDocument.HIToolboxVersion">352.00</string>
1.17 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
1.18 <bool key="EncodedWithXMLCoder">YES</bool>
1.19 <integer value="380"/>
1.20 - <integer value="371"/>
1.21 + <integer value="372"/>
1.22 </object>
1.23 <object class="NSArray" key="IBDocument.PluginDependencies">
1.24 <bool key="EncodedWithXMLCoder">YES</bool>
1.25 - <string id="617114957">com.apple.InterfaceBuilderKit</string>
1.26 - <string id="248469711">com.apple.InterfaceBuilder.CocoaPlugin</string>
1.27 + <string>com.apple.InterfaceBuilderKit</string>
1.28 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.29 </object>
1.30 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
1.31 <bool key="EncodedWithXMLCoder">YES</bool>
1.32 <object class="NSCustomObject" id="1021">
1.33 - <string key="NSClassName" id="1039455869">NSApplication</string>
1.34 + <string key="NSClassName">NSApplication</string>
1.35 </object>
1.36 <object class="NSCustomObject" id="1014">
1.37 <string key="NSClassName">FirstResponder</string>
1.38 </object>
1.39 <object class="NSCustomObject" id="1050">
1.40 - <reference key="NSClassName" ref="1039455869"/>
1.41 + <string key="NSClassName">NSApplication</string>
1.42 </object>
1.43 <object class="NSMenu" id="649796088">
1.44 <string key="NSTitle">AMainMenu</string>
1.45 @@ -33,41 +33,41 @@
1.46 <bool key="EncodedWithXMLCoder">YES</bool>
1.47 <object class="NSMenuItem" id="694149608">
1.48 <reference key="NSMenu" ref="649796088"/>
1.49 - <string key="NSTitle" id="101265034">GeekGameBoard</string>
1.50 - <string key="NSKeyEquiv" id="1003"/>
1.51 + <string key="NSTitle">GeekGameBoard</string>
1.52 + <string key="NSKeyEquiv"/>
1.53 <int key="NSKeyEquivModMask">1048576</int>
1.54 <int key="NSMnemonicLoc">2147483647</int>
1.55 <object class="NSCustomResource" key="NSOnImage" id="484312224">
1.56 - <string key="NSClassName" id="140112029">NSImage</string>
1.57 + <string key="NSClassName">NSImage</string>
1.58 <string key="NSResourceName">NSMenuCheckmark</string>
1.59 </object>
1.60 - <object class="NSCustomResource" key="NSMixedImage" id="309443010">
1.61 - <reference key="NSClassName" ref="140112029"/>
1.62 + <object class="NSCustomResource" key="NSMixedImage" id="237504539">
1.63 + <string key="NSClassName">NSImage</string>
1.64 <string key="NSResourceName">NSMenuMixedState</string>
1.65 </object>
1.66 <string key="NSAction">submenuAction:</string>
1.67 <object class="NSMenu" key="NSSubmenu" id="110575045">
1.68 - <reference key="NSTitle" ref="101265034"/>
1.69 + <string key="NSTitle">GeekGameBoard</string>
1.70 <object class="NSMutableArray" key="NSMenuItems">
1.71 <bool key="EncodedWithXMLCoder">YES</bool>
1.72 <object class="NSMenuItem" id="238522557">
1.73 <reference key="NSMenu" ref="110575045"/>
1.74 <string key="NSTitle">About GeekGameBoard</string>
1.75 - <reference key="NSKeyEquiv" ref="1003"/>
1.76 + <string key="NSKeyEquiv"/>
1.77 <int key="NSMnemonicLoc">2147483647</int>
1.78 <reference key="NSOnImage" ref="484312224"/>
1.79 - <reference key="NSMixedImage" ref="309443010"/>
1.80 + <reference key="NSMixedImage" ref="237504539"/>
1.81 </object>
1.82 <object class="NSMenuItem" id="304266470">
1.83 <reference key="NSMenu" ref="110575045"/>
1.84 <bool key="NSIsDisabled">YES</bool>
1.85 <bool key="NSIsSeparator">YES</bool>
1.86 - <reference key="NSTitle" ref="1003"/>
1.87 - <reference key="NSKeyEquiv" ref="1003"/>
1.88 + <string key="NSTitle"/>
1.89 + <string key="NSKeyEquiv"/>
1.90 <int key="NSKeyEquivModMask">1048576</int>
1.91 <int key="NSMnemonicLoc">2147483647</int>
1.92 <reference key="NSOnImage" ref="484312224"/>
1.93 - <reference key="NSMixedImage" ref="309443010"/>
1.94 + <reference key="NSMixedImage" ref="237504539"/>
1.95 </object>
1.96 <object class="NSMenuItem" id="609285721">
1.97 <reference key="NSMenu" ref="110575045"/>
1.98 @@ -76,30 +76,30 @@
1.99 <int key="NSKeyEquivModMask">1048576</int>
1.100 <int key="NSMnemonicLoc">2147483647</int>
1.101 <reference key="NSOnImage" ref="484312224"/>
1.102 - <reference key="NSMixedImage" ref="309443010"/>
1.103 + <reference key="NSMixedImage" ref="237504539"/>
1.104 </object>
1.105 <object class="NSMenuItem" id="481834944">
1.106 <reference key="NSMenu" ref="110575045"/>
1.107 <bool key="NSIsDisabled">YES</bool>
1.108 <bool key="NSIsSeparator">YES</bool>
1.109 - <reference key="NSTitle" ref="1003"/>
1.110 - <reference key="NSKeyEquiv" ref="1003"/>
1.111 + <string key="NSTitle"/>
1.112 + <string key="NSKeyEquiv"/>
1.113 <int key="NSKeyEquivModMask">1048576</int>
1.114 <int key="NSMnemonicLoc">2147483647</int>
1.115 <reference key="NSOnImage" ref="484312224"/>
1.116 - <reference key="NSMixedImage" ref="309443010"/>
1.117 + <reference key="NSMixedImage" ref="237504539"/>
1.118 </object>
1.119 <object class="NSMenuItem" id="1046388886">
1.120 <reference key="NSMenu" ref="110575045"/>
1.121 - <string key="NSTitle" id="487627014">Services</string>
1.122 - <reference key="NSKeyEquiv" ref="1003"/>
1.123 + <string key="NSTitle">Services</string>
1.124 + <string key="NSKeyEquiv"/>
1.125 <int key="NSKeyEquivModMask">1048576</int>
1.126 <int key="NSMnemonicLoc">2147483647</int>
1.127 <reference key="NSOnImage" ref="484312224"/>
1.128 - <reference key="NSMixedImage" ref="309443010"/>
1.129 + <reference key="NSMixedImage" ref="237504539"/>
1.130 <string key="NSAction">submenuAction:</string>
1.131 <object class="NSMenu" key="NSSubmenu" id="752062318">
1.132 - <reference key="NSTitle" ref="487627014"/>
1.133 + <string key="NSTitle">Services</string>
1.134 <object class="NSMutableArray" key="NSMenuItems">
1.135 <bool key="EncodedWithXMLCoder">YES</bool>
1.136 </object>
1.137 @@ -110,50 +110,50 @@
1.138 <reference key="NSMenu" ref="110575045"/>
1.139 <bool key="NSIsDisabled">YES</bool>
1.140 <bool key="NSIsSeparator">YES</bool>
1.141 - <reference key="NSTitle" ref="1003"/>
1.142 - <reference key="NSKeyEquiv" ref="1003"/>
1.143 + <string key="NSTitle"/>
1.144 + <string key="NSKeyEquiv"/>
1.145 <int key="NSKeyEquivModMask">1048576</int>
1.146 <int key="NSMnemonicLoc">2147483647</int>
1.147 <reference key="NSOnImage" ref="484312224"/>
1.148 - <reference key="NSMixedImage" ref="309443010"/>
1.149 + <reference key="NSMixedImage" ref="237504539"/>
1.150 </object>
1.151 <object class="NSMenuItem" id="755159360">
1.152 <reference key="NSMenu" ref="110575045"/>
1.153 <string key="NSTitle">Hide GeekGameBoard</string>
1.154 - <string key="NSKeyEquiv" id="712247123">h</string>
1.155 + <string key="NSKeyEquiv">h</string>
1.156 <int key="NSKeyEquivModMask">1048576</int>
1.157 <int key="NSMnemonicLoc">2147483647</int>
1.158 <reference key="NSOnImage" ref="484312224"/>
1.159 - <reference key="NSMixedImage" ref="309443010"/>
1.160 + <reference key="NSMixedImage" ref="237504539"/>
1.161 </object>
1.162 <object class="NSMenuItem" id="342932134">
1.163 <reference key="NSMenu" ref="110575045"/>
1.164 <string key="NSTitle">Hide Others</string>
1.165 - <reference key="NSKeyEquiv" ref="712247123"/>
1.166 + <string key="NSKeyEquiv">h</string>
1.167 <int key="NSKeyEquivModMask">1572864</int>
1.168 <int key="NSMnemonicLoc">2147483647</int>
1.169 <reference key="NSOnImage" ref="484312224"/>
1.170 - <reference key="NSMixedImage" ref="309443010"/>
1.171 + <reference key="NSMixedImage" ref="237504539"/>
1.172 </object>
1.173 <object class="NSMenuItem" id="908899353">
1.174 <reference key="NSMenu" ref="110575045"/>
1.175 <string key="NSTitle">Show All</string>
1.176 - <reference key="NSKeyEquiv" ref="1003"/>
1.177 + <string key="NSKeyEquiv"/>
1.178 <int key="NSKeyEquivModMask">1048576</int>
1.179 <int key="NSMnemonicLoc">2147483647</int>
1.180 <reference key="NSOnImage" ref="484312224"/>
1.181 - <reference key="NSMixedImage" ref="309443010"/>
1.182 + <reference key="NSMixedImage" ref="237504539"/>
1.183 </object>
1.184 <object class="NSMenuItem" id="1056857174">
1.185 <reference key="NSMenu" ref="110575045"/>
1.186 <bool key="NSIsDisabled">YES</bool>
1.187 <bool key="NSIsSeparator">YES</bool>
1.188 - <reference key="NSTitle" ref="1003"/>
1.189 - <reference key="NSKeyEquiv" ref="1003"/>
1.190 + <string key="NSTitle"/>
1.191 + <string key="NSKeyEquiv"/>
1.192 <int key="NSKeyEquivModMask">1048576</int>
1.193 <int key="NSMnemonicLoc">2147483647</int>
1.194 <reference key="NSOnImage" ref="484312224"/>
1.195 - <reference key="NSMixedImage" ref="309443010"/>
1.196 + <reference key="NSMixedImage" ref="237504539"/>
1.197 </object>
1.198 <object class="NSMenuItem" id="632727374">
1.199 <reference key="NSMenu" ref="110575045"/>
1.200 @@ -162,7 +162,7 @@
1.201 <int key="NSKeyEquivModMask">1048576</int>
1.202 <int key="NSMnemonicLoc">2147483647</int>
1.203 <reference key="NSOnImage" ref="484312224"/>
1.204 - <reference key="NSMixedImage" ref="309443010"/>
1.205 + <reference key="NSMixedImage" ref="237504539"/>
1.206 </object>
1.207 </object>
1.208 <string key="NSName">_NSAppleMenu</string>
1.209 @@ -170,15 +170,15 @@
1.210 </object>
1.211 <object class="NSMenuItem" id="379814623">
1.212 <reference key="NSMenu" ref="649796088"/>
1.213 - <string key="NSTitle" id="589729360">File</string>
1.214 - <reference key="NSKeyEquiv" ref="1003"/>
1.215 + <string key="NSTitle">File</string>
1.216 + <string key="NSKeyEquiv"/>
1.217 <int key="NSKeyEquivModMask">1048576</int>
1.218 <int key="NSMnemonicLoc">2147483647</int>
1.219 <reference key="NSOnImage" ref="484312224"/>
1.220 - <reference key="NSMixedImage" ref="309443010"/>
1.221 + <reference key="NSMixedImage" ref="237504539"/>
1.222 <string key="NSAction">submenuAction:</string>
1.223 <object class="NSMenu" key="NSSubmenu" id="720053764">
1.224 - <reference key="NSTitle" ref="589729360"/>
1.225 + <string key="NSTitle">File</string>
1.226 <object class="NSMutableArray" key="NSMenuItems">
1.227 <bool key="EncodedWithXMLCoder">YES</bool>
1.228 <object class="NSMenuItem" id="705341025">
1.229 @@ -188,7 +188,7 @@
1.230 <int key="NSKeyEquivModMask">1048576</int>
1.231 <int key="NSMnemonicLoc">2147483647</int>
1.232 <reference key="NSOnImage" ref="484312224"/>
1.233 - <reference key="NSMixedImage" ref="309443010"/>
1.234 + <reference key="NSMixedImage" ref="237504539"/>
1.235 </object>
1.236 <object class="NSMenuItem" id="722745758">
1.237 <reference key="NSMenu" ref="720053764"/>
1.238 @@ -197,29 +197,29 @@
1.239 <int key="NSKeyEquivModMask">1048576</int>
1.240 <int key="NSMnemonicLoc">2147483647</int>
1.241 <reference key="NSOnImage" ref="484312224"/>
1.242 - <reference key="NSMixedImage" ref="309443010"/>
1.243 + <reference key="NSMixedImage" ref="237504539"/>
1.244 </object>
1.245 <object class="NSMenuItem" id="1025936716">
1.246 <reference key="NSMenu" ref="720053764"/>
1.247 - <string key="NSTitle" id="1022827674">Open Recent</string>
1.248 - <reference key="NSKeyEquiv" ref="1003"/>
1.249 + <string key="NSTitle">Open Recent</string>
1.250 + <string key="NSKeyEquiv"/>
1.251 <int key="NSKeyEquivModMask">1048576</int>
1.252 <int key="NSMnemonicLoc">2147483647</int>
1.253 <reference key="NSOnImage" ref="484312224"/>
1.254 - <reference key="NSMixedImage" ref="309443010"/>
1.255 + <reference key="NSMixedImage" ref="237504539"/>
1.256 <string key="NSAction">submenuAction:</string>
1.257 <object class="NSMenu" key="NSSubmenu" id="1065607017">
1.258 - <reference key="NSTitle" ref="1022827674"/>
1.259 + <string key="NSTitle">Open Recent</string>
1.260 <object class="NSMutableArray" key="NSMenuItems">
1.261 <bool key="EncodedWithXMLCoder">YES</bool>
1.262 <object class="NSMenuItem" id="759406840">
1.263 <reference key="NSMenu" ref="1065607017"/>
1.264 <string key="NSTitle">Clear Menu</string>
1.265 - <reference key="NSKeyEquiv" ref="1003"/>
1.266 + <string key="NSKeyEquiv"/>
1.267 <int key="NSKeyEquivModMask">1048576</int>
1.268 <int key="NSMnemonicLoc">2147483647</int>
1.269 <reference key="NSOnImage" ref="484312224"/>
1.270 - <reference key="NSMixedImage" ref="309443010"/>
1.271 + <reference key="NSMixedImage" ref="237504539"/>
1.272 </object>
1.273 </object>
1.274 <string key="NSName">_NSRecentDocumentsMenu</string>
1.275 @@ -229,12 +229,12 @@
1.276 <reference key="NSMenu" ref="720053764"/>
1.277 <bool key="NSIsDisabled">YES</bool>
1.278 <bool key="NSIsSeparator">YES</bool>
1.279 - <reference key="NSTitle" ref="1003"/>
1.280 - <reference key="NSKeyEquiv" ref="1003"/>
1.281 + <string key="NSTitle"/>
1.282 + <string key="NSKeyEquiv"/>
1.283 <int key="NSKeyEquivModMask">1048576</int>
1.284 <int key="NSMnemonicLoc">2147483647</int>
1.285 <reference key="NSOnImage" ref="484312224"/>
1.286 - <reference key="NSMixedImage" ref="309443010"/>
1.287 + <reference key="NSMixedImage" ref="237504539"/>
1.288 </object>
1.289 <object class="NSMenuItem" id="776162233">
1.290 <reference key="NSMenu" ref="720053764"/>
1.291 @@ -243,7 +243,7 @@
1.292 <int key="NSKeyEquivModMask">1048576</int>
1.293 <int key="NSMnemonicLoc">2147483647</int>
1.294 <reference key="NSOnImage" ref="484312224"/>
1.295 - <reference key="NSMixedImage" ref="309443010"/>
1.296 + <reference key="NSMixedImage" ref="237504539"/>
1.297 </object>
1.298 <object class="NSMenuItem" id="1023925487">
1.299 <reference key="NSMenu" ref="720053764"/>
1.300 @@ -252,7 +252,7 @@
1.301 <int key="NSKeyEquivModMask">1048576</int>
1.302 <int key="NSMnemonicLoc">2147483647</int>
1.303 <reference key="NSOnImage" ref="484312224"/>
1.304 - <reference key="NSMixedImage" ref="309443010"/>
1.305 + <reference key="NSMixedImage" ref="237504539"/>
1.306 </object>
1.307 <object class="NSMenuItem" id="117038363">
1.308 <reference key="NSMenu" ref="720053764"/>
1.309 @@ -261,26 +261,26 @@
1.310 <int key="NSKeyEquivModMask">1179648</int>
1.311 <int key="NSMnemonicLoc">2147483647</int>
1.312 <reference key="NSOnImage" ref="484312224"/>
1.313 - <reference key="NSMixedImage" ref="309443010"/>
1.314 + <reference key="NSMixedImage" ref="237504539"/>
1.315 </object>
1.316 <object class="NSMenuItem" id="579971712">
1.317 <reference key="NSMenu" ref="720053764"/>
1.318 <string key="NSTitle">Revert to Saved</string>
1.319 - <reference key="NSKeyEquiv" ref="1003"/>
1.320 + <string key="NSKeyEquiv"/>
1.321 <int key="NSMnemonicLoc">2147483647</int>
1.322 <reference key="NSOnImage" ref="484312224"/>
1.323 - <reference key="NSMixedImage" ref="309443010"/>
1.324 + <reference key="NSMixedImage" ref="237504539"/>
1.325 </object>
1.326 <object class="NSMenuItem" id="1010469920">
1.327 <reference key="NSMenu" ref="720053764"/>
1.328 <bool key="NSIsDisabled">YES</bool>
1.329 <bool key="NSIsSeparator">YES</bool>
1.330 - <reference key="NSTitle" ref="1003"/>
1.331 - <reference key="NSKeyEquiv" ref="1003"/>
1.332 + <string key="NSTitle"/>
1.333 + <string key="NSKeyEquiv"/>
1.334 <int key="NSKeyEquivModMask">1048576</int>
1.335 <int key="NSMnemonicLoc">2147483647</int>
1.336 <reference key="NSOnImage" ref="484312224"/>
1.337 - <reference key="NSMixedImage" ref="309443010"/>
1.338 + <reference key="NSMixedImage" ref="237504539"/>
1.339 </object>
1.340 <object class="NSMenuItem" id="294629803">
1.341 <reference key="NSMenu" ref="720053764"/>
1.342 @@ -289,8 +289,8 @@
1.343 <int key="NSKeyEquivModMask">1179648</int>
1.344 <int key="NSMnemonicLoc">2147483647</int>
1.345 <reference key="NSOnImage" ref="484312224"/>
1.346 - <reference key="NSMixedImage" ref="309443010"/>
1.347 - <reference key="NSToolTip" ref="1003"/>
1.348 + <reference key="NSMixedImage" ref="237504539"/>
1.349 + <string key="NSToolTip"/>
1.350 </object>
1.351 <object class="NSMenuItem" id="49223823">
1.352 <reference key="NSMenu" ref="720053764"/>
1.353 @@ -299,22 +299,22 @@
1.354 <int key="NSKeyEquivModMask">1048576</int>
1.355 <int key="NSMnemonicLoc">2147483647</int>
1.356 <reference key="NSOnImage" ref="484312224"/>
1.357 - <reference key="NSMixedImage" ref="309443010"/>
1.358 + <reference key="NSMixedImage" ref="237504539"/>
1.359 </object>
1.360 </object>
1.361 </object>
1.362 </object>
1.363 <object class="NSMenuItem" id="952259628">
1.364 <reference key="NSMenu" ref="649796088"/>
1.365 - <string key="NSTitle" id="459142759">Edit</string>
1.366 - <reference key="NSKeyEquiv" ref="1003"/>
1.367 + <string key="NSTitle">Edit</string>
1.368 + <string key="NSKeyEquiv"/>
1.369 <int key="NSKeyEquivModMask">1048576</int>
1.370 <int key="NSMnemonicLoc">2147483647</int>
1.371 <reference key="NSOnImage" ref="484312224"/>
1.372 - <reference key="NSMixedImage" ref="309443010"/>
1.373 + <reference key="NSMixedImage" ref="237504539"/>
1.374 <string key="NSAction">submenuAction:</string>
1.375 <object class="NSMenu" key="NSSubmenu" id="789758025">
1.376 - <reference key="NSTitle" ref="459142759"/>
1.377 + <string key="NSTitle">Edit</string>
1.378 <object class="NSMutableArray" key="NSMenuItems">
1.379 <bool key="EncodedWithXMLCoder">YES</bool>
1.380 <object class="NSMenuItem" id="1058277027">
1.381 @@ -324,7 +324,7 @@
1.382 <int key="NSKeyEquivModMask">1048576</int>
1.383 <int key="NSMnemonicLoc">2147483647</int>
1.384 <reference key="NSOnImage" ref="484312224"/>
1.385 - <reference key="NSMixedImage" ref="309443010"/>
1.386 + <reference key="NSMixedImage" ref="237504539"/>
1.387 </object>
1.388 <object class="NSMenuItem" id="790794224">
1.389 <reference key="NSMenu" ref="789758025"/>
1.390 @@ -333,18 +333,18 @@
1.391 <int key="NSKeyEquivModMask">1179648</int>
1.392 <int key="NSMnemonicLoc">2147483647</int>
1.393 <reference key="NSOnImage" ref="484312224"/>
1.394 - <reference key="NSMixedImage" ref="309443010"/>
1.395 + <reference key="NSMixedImage" ref="237504539"/>
1.396 </object>
1.397 <object class="NSMenuItem" id="1040322652">
1.398 <reference key="NSMenu" ref="789758025"/>
1.399 <bool key="NSIsDisabled">YES</bool>
1.400 <bool key="NSIsSeparator">YES</bool>
1.401 - <reference key="NSTitle" ref="1003"/>
1.402 - <reference key="NSKeyEquiv" ref="1003"/>
1.403 + <string key="NSTitle"/>
1.404 + <string key="NSKeyEquiv"/>
1.405 <int key="NSKeyEquivModMask">1048576</int>
1.406 <int key="NSMnemonicLoc">2147483647</int>
1.407 <reference key="NSOnImage" ref="484312224"/>
1.408 - <reference key="NSMixedImage" ref="309443010"/>
1.409 + <reference key="NSMixedImage" ref="237504539"/>
1.410 </object>
1.411 <object class="NSMenuItem" id="296257095">
1.412 <reference key="NSMenu" ref="789758025"/>
1.413 @@ -353,7 +353,7 @@
1.414 <int key="NSKeyEquivModMask">1048576</int>
1.415 <int key="NSMnemonicLoc">2147483647</int>
1.416 <reference key="NSOnImage" ref="484312224"/>
1.417 - <reference key="NSMixedImage" ref="309443010"/>
1.418 + <reference key="NSMixedImage" ref="237504539"/>
1.419 </object>
1.420 <object class="NSMenuItem" id="860595796">
1.421 <reference key="NSMenu" ref="789758025"/>
1.422 @@ -362,7 +362,7 @@
1.423 <int key="NSKeyEquivModMask">1048576</int>
1.424 <int key="NSMnemonicLoc">2147483647</int>
1.425 <reference key="NSOnImage" ref="484312224"/>
1.426 - <reference key="NSMixedImage" ref="309443010"/>
1.427 + <reference key="NSMixedImage" ref="237504539"/>
1.428 </object>
1.429 <object class="NSMenuItem" id="29853731">
1.430 <reference key="NSMenu" ref="789758025"/>
1.431 @@ -371,16 +371,16 @@
1.432 <int key="NSKeyEquivModMask">1048576</int>
1.433 <int key="NSMnemonicLoc">2147483647</int>
1.434 <reference key="NSOnImage" ref="484312224"/>
1.435 - <reference key="NSMixedImage" ref="309443010"/>
1.436 + <reference key="NSMixedImage" ref="237504539"/>
1.437 </object>
1.438 <object class="NSMenuItem" id="437104165">
1.439 <reference key="NSMenu" ref="789758025"/>
1.440 <string key="NSTitle">Delete</string>
1.441 - <reference key="NSKeyEquiv" ref="1003"/>
1.442 + <string key="NSKeyEquiv"/>
1.443 <int key="NSKeyEquivModMask">1048576</int>
1.444 <int key="NSMnemonicLoc">2147483647</int>
1.445 <reference key="NSOnImage" ref="484312224"/>
1.446 - <reference key="NSMixedImage" ref="309443010"/>
1.447 + <reference key="NSMixedImage" ref="237504539"/>
1.448 </object>
1.449 <object class="NSMenuItem" id="583158037">
1.450 <reference key="NSMenu" ref="789758025"/>
1.451 @@ -389,49 +389,49 @@
1.452 <int key="NSKeyEquivModMask">1048576</int>
1.453 <int key="NSMnemonicLoc">2147483647</int>
1.454 <reference key="NSOnImage" ref="484312224"/>
1.455 - <reference key="NSMixedImage" ref="309443010"/>
1.456 + <reference key="NSMixedImage" ref="237504539"/>
1.457 </object>
1.458 <object class="NSMenuItem" id="212016141">
1.459 <reference key="NSMenu" ref="789758025"/>
1.460 <bool key="NSIsDisabled">YES</bool>
1.461 <bool key="NSIsSeparator">YES</bool>
1.462 - <reference key="NSTitle" ref="1003"/>
1.463 - <reference key="NSKeyEquiv" ref="1003"/>
1.464 + <string key="NSTitle"/>
1.465 + <string key="NSKeyEquiv"/>
1.466 <int key="NSKeyEquivModMask">1048576</int>
1.467 <int key="NSMnemonicLoc">2147483647</int>
1.468 <reference key="NSOnImage" ref="484312224"/>
1.469 - <reference key="NSMixedImage" ref="309443010"/>
1.470 + <reference key="NSMixedImage" ref="237504539"/>
1.471 </object>
1.472 <object class="NSMenuItem" id="676164635">
1.473 <reference key="NSMenu" ref="789758025"/>
1.474 - <string key="NSTitle" id="1050731385">Speech</string>
1.475 - <reference key="NSKeyEquiv" ref="1003"/>
1.476 + <string key="NSTitle">Speech</string>
1.477 + <string key="NSKeyEquiv"/>
1.478 <int key="NSKeyEquivModMask">1048576</int>
1.479 <int key="NSMnemonicLoc">2147483647</int>
1.480 <reference key="NSOnImage" ref="484312224"/>
1.481 - <reference key="NSMixedImage" ref="309443010"/>
1.482 + <reference key="NSMixedImage" ref="237504539"/>
1.483 <string key="NSAction">submenuAction:</string>
1.484 <object class="NSMenu" key="NSSubmenu" id="785027613">
1.485 - <reference key="NSTitle" ref="1050731385"/>
1.486 + <string key="NSTitle">Speech</string>
1.487 <object class="NSMutableArray" key="NSMenuItems">
1.488 <bool key="EncodedWithXMLCoder">YES</bool>
1.489 <object class="NSMenuItem" id="731782645">
1.490 <reference key="NSMenu" ref="785027613"/>
1.491 <string key="NSTitle">Start Speaking</string>
1.492 - <reference key="NSKeyEquiv" ref="1003"/>
1.493 + <string key="NSKeyEquiv"/>
1.494 <int key="NSKeyEquivModMask">1048576</int>
1.495 <int key="NSMnemonicLoc">2147483647</int>
1.496 <reference key="NSOnImage" ref="484312224"/>
1.497 - <reference key="NSMixedImage" ref="309443010"/>
1.498 + <reference key="NSMixedImage" ref="237504539"/>
1.499 </object>
1.500 <object class="NSMenuItem" id="680220178">
1.501 <reference key="NSMenu" ref="785027613"/>
1.502 <string key="NSTitle">Stop Speaking</string>
1.503 - <reference key="NSKeyEquiv" ref="1003"/>
1.504 + <string key="NSKeyEquiv"/>
1.505 <int key="NSKeyEquivModMask">1048576</int>
1.506 <int key="NSMnemonicLoc">2147483647</int>
1.507 <reference key="NSOnImage" ref="484312224"/>
1.508 - <reference key="NSMixedImage" ref="309443010"/>
1.509 + <reference key="NSMixedImage" ref="237504539"/>
1.510 </object>
1.511 </object>
1.512 </object>
1.513 @@ -441,55 +441,55 @@
1.514 </object>
1.515 <object class="NSMenuItem" id="517895433">
1.516 <reference key="NSMenu" ref="649796088"/>
1.517 - <string key="NSTitle" id="898761740">Game</string>
1.518 - <reference key="NSKeyEquiv" ref="1003"/>
1.519 + <string key="NSTitle">Game</string>
1.520 + <string key="NSKeyEquiv"/>
1.521 <int key="NSKeyEquivModMask">1048576</int>
1.522 <int key="NSMnemonicLoc">2147483647</int>
1.523 <reference key="NSOnImage" ref="484312224"/>
1.524 - <reference key="NSMixedImage" ref="309443010"/>
1.525 + <reference key="NSMixedImage" ref="237504539"/>
1.526 <string key="NSAction">submenuAction:</string>
1.527 <object class="NSMenu" key="NSSubmenu" id="330268596">
1.528 - <reference key="NSTitle" ref="898761740"/>
1.529 + <string key="NSTitle">Game</string>
1.530 <object class="NSMutableArray" key="NSMenuItems">
1.531 <bool key="EncodedWithXMLCoder">YES</bool>
1.532 <object class="NSMenuItem" id="394352720">
1.533 <reference key="NSMenu" ref="330268596"/>
1.534 <string key="NSTitle">Klondike (Solitaire)</string>
1.535 - <string key="NSKeyEquiv" id="344781584">1</string>
1.536 + <string key="NSKeyEquiv">1</string>
1.537 <int key="NSKeyEquivModMask">1048840</int>
1.538 <int key="NSMnemonicLoc">2147483647</int>
1.539 <reference key="NSOnImage" ref="484312224"/>
1.540 - <reference key="NSMixedImage" ref="309443010"/>
1.541 + <reference key="NSMixedImage" ref="237504539"/>
1.542 </object>
1.543 <object class="NSMenuItem" id="154289436">
1.544 <reference key="NSMenu" ref="330268596"/>
1.545 <bool key="NSIsDisabled">YES</bool>
1.546 <bool key="NSIsSeparator">YES</bool>
1.547 - <reference key="NSTitle" ref="1003"/>
1.548 - <reference key="NSKeyEquiv" ref="1003"/>
1.549 + <string key="NSTitle"/>
1.550 + <string key="NSKeyEquiv"/>
1.551 <int key="NSKeyEquivModMask">1048576</int>
1.552 <int key="NSMnemonicLoc">2147483647</int>
1.553 <reference key="NSOnImage" ref="484312224"/>
1.554 - <reference key="NSMixedImage" ref="309443010"/>
1.555 + <reference key="NSMixedImage" ref="237504539"/>
1.556 </object>
1.557 <object class="NSMenuItem" id="630661937">
1.558 <reference key="NSMenu" ref="330268596"/>
1.559 <string key="NSTitle">Checkers</string>
1.560 - <string key="NSKeyEquiv" id="5220549">2</string>
1.561 + <string key="NSKeyEquiv">2</string>
1.562 <int key="NSKeyEquivModMask">1048840</int>
1.563 <int key="NSMnemonicLoc">2147483647</int>
1.564 <reference key="NSOnImage" ref="484312224"/>
1.565 - <reference key="NSMixedImage" ref="309443010"/>
1.566 + <reference key="NSMixedImage" ref="237504539"/>
1.567 <int key="NSTag">1</int>
1.568 </object>
1.569 <object class="NSMenuItem" id="778498721">
1.570 <reference key="NSMenu" ref="330268596"/>
1.571 <string key="NSTitle">Go</string>
1.572 - <string key="NSKeyEquiv" id="8808733">3</string>
1.573 + <string key="NSKeyEquiv">3</string>
1.574 <int key="NSKeyEquivModMask">1048840</int>
1.575 <int key="NSMnemonicLoc">2147483647</int>
1.576 <reference key="NSOnImage" ref="484312224"/>
1.577 - <reference key="NSMixedImage" ref="309443010"/>
1.578 + <reference key="NSMixedImage" ref="237504539"/>
1.579 <int key="NSTag">4</int>
1.580 </object>
1.581 <object class="NSMenuItem" id="538211827">
1.582 @@ -499,17 +499,17 @@
1.583 <int key="NSKeyEquivModMask">1048840</int>
1.584 <int key="NSMnemonicLoc">2147483647</int>
1.585 <reference key="NSOnImage" ref="484312224"/>
1.586 - <reference key="NSMixedImage" ref="309443010"/>
1.587 + <reference key="NSMixedImage" ref="237504539"/>
1.588 <int key="NSTag">2</int>
1.589 </object>
1.590 <object class="NSMenuItem" id="739065818">
1.591 <reference key="NSMenu" ref="330268596"/>
1.592 <string key="NSTitle">Tic-Tac-Toe</string>
1.593 - <string key="NSKeyEquiv" id="720655175">5</string>
1.594 + <string key="NSKeyEquiv">5</string>
1.595 <int key="NSKeyEquivModMask">1048840</int>
1.596 <int key="NSMnemonicLoc">2147483647</int>
1.597 <reference key="NSOnImage" ref="484312224"/>
1.598 - <reference key="NSMixedImage" ref="309443010"/>
1.599 + <reference key="NSMixedImage" ref="237504539"/>
1.600 <int key="NSTag">3</int>
1.601 </object>
1.602 </object>
1.603 @@ -517,15 +517,15 @@
1.604 </object>
1.605 <object class="NSMenuItem" id="586577488">
1.606 <reference key="NSMenu" ref="649796088"/>
1.607 - <string key="NSTitle" id="180305338">View</string>
1.608 - <reference key="NSKeyEquiv" ref="1003"/>
1.609 + <string key="NSTitle">View</string>
1.610 + <string key="NSKeyEquiv"/>
1.611 <int key="NSKeyEquivModMask">1048576</int>
1.612 <int key="NSMnemonicLoc">2147483647</int>
1.613 <reference key="NSOnImage" ref="484312224"/>
1.614 - <reference key="NSMixedImage" ref="309443010"/>
1.615 + <reference key="NSMixedImage" ref="237504539"/>
1.616 <string key="NSAction">submenuAction:</string>
1.617 <object class="NSMenu" key="NSSubmenu" id="466310130">
1.618 - <reference key="NSTitle" ref="180305338"/>
1.619 + <string key="NSTitle">View</string>
1.620 <object class="NSMutableArray" key="NSMenuItems">
1.621 <bool key="EncodedWithXMLCoder">YES</bool>
1.622 <object class="NSMenuItem" id="713673133">
1.623 @@ -535,18 +535,18 @@
1.624 <int key="NSKeyEquivModMask">1048576</int>
1.625 <int key="NSMnemonicLoc">2147483647</int>
1.626 <reference key="NSOnImage" ref="484312224"/>
1.627 - <reference key="NSMixedImage" ref="309443010"/>
1.628 + <reference key="NSMixedImage" ref="237504539"/>
1.629 </object>
1.630 <object class="NSMenuItem" id="30531644">
1.631 <reference key="NSMenu" ref="466310130"/>
1.632 <bool key="NSIsDisabled">YES</bool>
1.633 <bool key="NSIsSeparator">YES</bool>
1.634 - <reference key="NSTitle" ref="1003"/>
1.635 - <reference key="NSKeyEquiv" ref="1003"/>
1.636 + <string key="NSTitle"/>
1.637 + <string key="NSKeyEquiv"/>
1.638 <int key="NSKeyEquivModMask">1048576</int>
1.639 <int key="NSMnemonicLoc">2147483647</int>
1.640 <reference key="NSOnImage" ref="484312224"/>
1.641 - <reference key="NSMixedImage" ref="309443010"/>
1.642 + <reference key="NSMixedImage" ref="237504539"/>
1.643 </object>
1.644 <object class="NSMenuItem" id="102151532">
1.645 <reference key="NSMenu" ref="466310130"/>
1.646 @@ -555,31 +555,31 @@
1.647 <int key="NSKeyEquivModMask">1572864</int>
1.648 <int key="NSMnemonicLoc">2147483647</int>
1.649 <reference key="NSOnImage" ref="484312224"/>
1.650 - <reference key="NSMixedImage" ref="309443010"/>
1.651 + <reference key="NSMixedImage" ref="237504539"/>
1.652 </object>
1.653 <object class="NSMenuItem" id="237841660">
1.654 <reference key="NSMenu" ref="466310130"/>
1.655 <string type="base64-UTF8" key="NSTitle">Q3VzdG9taXplIFRvb2xiYXLigKY</string>
1.656 - <reference key="NSKeyEquiv" ref="1003"/>
1.657 + <string key="NSKeyEquiv"/>
1.658 <int key="NSKeyEquivModMask">1048576</int>
1.659 <int key="NSMnemonicLoc">2147483647</int>
1.660 <reference key="NSOnImage" ref="484312224"/>
1.661 - <reference key="NSMixedImage" ref="309443010"/>
1.662 + <reference key="NSMixedImage" ref="237504539"/>
1.663 </object>
1.664 </object>
1.665 </object>
1.666 </object>
1.667 <object class="NSMenuItem" id="713487014">
1.668 <reference key="NSMenu" ref="649796088"/>
1.669 - <string key="NSTitle" id="15506412">Window</string>
1.670 - <reference key="NSKeyEquiv" ref="1003"/>
1.671 + <string key="NSTitle">Window</string>
1.672 + <string key="NSKeyEquiv"/>
1.673 <int key="NSKeyEquivModMask">1048576</int>
1.674 <int key="NSMnemonicLoc">2147483647</int>
1.675 <reference key="NSOnImage" ref="484312224"/>
1.676 - <reference key="NSMixedImage" ref="309443010"/>
1.677 + <reference key="NSMixedImage" ref="237504539"/>
1.678 <string key="NSAction">submenuAction:</string>
1.679 <object class="NSMenu" key="NSSubmenu" id="835318025">
1.680 - <reference key="NSTitle" ref="15506412"/>
1.681 + <string key="NSTitle">Window</string>
1.682 <object class="NSMutableArray" key="NSMenuItems">
1.683 <bool key="EncodedWithXMLCoder">YES</bool>
1.684 <object class="NSMenuItem" id="1011231497">
1.685 @@ -589,36 +589,36 @@
1.686 <int key="NSKeyEquivModMask">1048576</int>
1.687 <int key="NSMnemonicLoc">2147483647</int>
1.688 <reference key="NSOnImage" ref="484312224"/>
1.689 - <reference key="NSMixedImage" ref="309443010"/>
1.690 + <reference key="NSMixedImage" ref="237504539"/>
1.691 </object>
1.692 <object class="NSMenuItem" id="575023229">
1.693 <reference key="NSMenu" ref="835318025"/>
1.694 <string key="NSTitle">Zoom</string>
1.695 - <reference key="NSKeyEquiv" ref="1003"/>
1.696 + <string key="NSKeyEquiv"/>
1.697 <int key="NSKeyEquivModMask">1048576</int>
1.698 <int key="NSMnemonicLoc">2147483647</int>
1.699 <reference key="NSOnImage" ref="484312224"/>
1.700 - <reference key="NSMixedImage" ref="309443010"/>
1.701 + <reference key="NSMixedImage" ref="237504539"/>
1.702 </object>
1.703 <object class="NSMenuItem" id="299356726">
1.704 <reference key="NSMenu" ref="835318025"/>
1.705 <bool key="NSIsDisabled">YES</bool>
1.706 <bool key="NSIsSeparator">YES</bool>
1.707 - <reference key="NSTitle" ref="1003"/>
1.708 - <reference key="NSKeyEquiv" ref="1003"/>
1.709 + <string key="NSTitle"/>
1.710 + <string key="NSKeyEquiv"/>
1.711 <int key="NSKeyEquivModMask">1048576</int>
1.712 <int key="NSMnemonicLoc">2147483647</int>
1.713 <reference key="NSOnImage" ref="484312224"/>
1.714 - <reference key="NSMixedImage" ref="309443010"/>
1.715 + <reference key="NSMixedImage" ref="237504539"/>
1.716 </object>
1.717 <object class="NSMenuItem" id="625202149">
1.718 <reference key="NSMenu" ref="835318025"/>
1.719 <string key="NSTitle">Bring All to Front</string>
1.720 - <reference key="NSKeyEquiv" ref="1003"/>
1.721 + <string key="NSKeyEquiv"/>
1.722 <int key="NSKeyEquivModMask">1048576</int>
1.723 <int key="NSMnemonicLoc">2147483647</int>
1.724 <reference key="NSOnImage" ref="484312224"/>
1.725 - <reference key="NSMixedImage" ref="309443010"/>
1.726 + <reference key="NSMixedImage" ref="237504539"/>
1.727 </object>
1.728 </object>
1.729 <string key="NSName">_NSWindowsMenu</string>
1.730 @@ -626,15 +626,15 @@
1.731 </object>
1.732 <object class="NSMenuItem" id="391199113">
1.733 <reference key="NSMenu" ref="649796088"/>
1.734 - <string key="NSTitle" id="519223894">Help</string>
1.735 - <reference key="NSKeyEquiv" ref="1003"/>
1.736 + <string key="NSTitle">Help</string>
1.737 + <string key="NSKeyEquiv"/>
1.738 <int key="NSKeyEquivModMask">1048576</int>
1.739 <int key="NSMnemonicLoc">2147483647</int>
1.740 <reference key="NSOnImage" ref="484312224"/>
1.741 - <reference key="NSMixedImage" ref="309443010"/>
1.742 + <reference key="NSMixedImage" ref="237504539"/>
1.743 <string key="NSAction">submenuAction:</string>
1.744 <object class="NSMenu" key="NSSubmenu" id="374024848">
1.745 - <reference key="NSTitle" ref="519223894"/>
1.746 + <string key="NSTitle">Help</string>
1.747 <object class="NSMutableArray" key="NSMenuItems">
1.748 <bool key="EncodedWithXMLCoder">YES</bool>
1.749 </object>
1.750 @@ -646,9 +646,9 @@
1.751 <object class="NSWindowTemplate" id="972006081">
1.752 <int key="NSWindowStyleMask">7</int>
1.753 <int key="NSWindowBacking">2</int>
1.754 - <string key="NSWindowRect">{{57, 175}, {1084, 587}}</string>
1.755 + <string key="NSWindowRect">{{57, 145}, {1084, 617}}</string>
1.756 <int key="NSWTFlags">1946157056</int>
1.757 - <reference key="NSWindowTitle" ref="101265034"/>
1.758 + <string key="NSWindowTitle">GeekGameBoard</string>
1.759 <string key="NSWindowClass">NSWindow</string>
1.760 <nil key="NSViewClass"/>
1.761 <object class="NSView" key="NSWindowView" id="439893737">
1.762 @@ -659,19 +659,43 @@
1.763 <object class="NSCustomView" id="1060834180">
1.764 <reference key="NSNextResponder" ref="439893737"/>
1.765 <int key="NSvFlags">274</int>
1.766 - <string key="NSFrameSize">{1084, 587}</string>
1.767 + <string key="NSFrame">{{0, 30}, {1084, 587}}</string>
1.768 <reference key="NSSuperview" ref="439893737"/>
1.769 - <reference key="NSWindow"/>
1.770 <bool key="NSViewIsLayerTreeHost">YES</bool>
1.771 <string key="NSClassName">DemoBoardView</string>
1.772 </object>
1.773 + <object class="NSSlider" id="817996208">
1.774 + <reference key="NSNextResponder" ref="439893737"/>
1.775 + <int key="NSvFlags">290</int>
1.776 + <string key="NSFrame">{{162, 1}, {754, 25}}</string>
1.777 + <reference key="NSSuperview" ref="439893737"/>
1.778 + <bool key="NSEnabled">YES</bool>
1.779 + <object class="NSSliderCell" key="NSCell" id="42512652">
1.780 + <int key="NSCellFlags">-2080244224</int>
1.781 + <int key="NSCellFlags2">0</int>
1.782 + <string key="NSContents"/>
1.783 + <object class="NSFont" key="NSSupport">
1.784 + <string key="NSName">Helvetica</string>
1.785 + <double key="NSSize">1.200000e+01</double>
1.786 + <int key="NSfFlags">16</int>
1.787 + </object>
1.788 + <reference key="NSControlView" ref="817996208"/>
1.789 + <double key="NSMaxValue">1.000000e+00</double>
1.790 + <double key="NSMinValue">0.000000e+00</double>
1.791 + <double key="NSValue">0.000000e+00</double>
1.792 + <double key="NSAltIncValue">0.000000e+00</double>
1.793 + <int key="NSNumberOfTickMarks">2</int>
1.794 + <int key="NSTickMarkPosition">0</int>
1.795 + <bool key="NSAllowsTickMarkValuesOnly">YES</bool>
1.796 + <bool key="NSVertical">NO</bool>
1.797 + </object>
1.798 + </object>
1.799 </object>
1.800 - <string key="NSFrameSize">{1084, 587}</string>
1.801 + <string key="NSFrameSize">{1084, 617}</string>
1.802 <reference key="NSSuperview"/>
1.803 - <reference key="NSWindow"/>
1.804 </object>
1.805 <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
1.806 - <reference key="NSFrameAutosaveName" ref="1003"/>
1.807 + <string key="NSFrameAutosaveName"/>
1.808 </object>
1.809 </object>
1.810 <object class="IBObjectContainer" key="IBDocument.Objects">
1.811 @@ -911,7 +935,7 @@
1.812 </object>
1.813 <object class="IBConnectionRecord">
1.814 <object class="IBActionConnection" key="connection">
1.815 - <string key="label" id="560321708">startGameFromMenu:</string>
1.816 + <string key="label">startGameFromMenu:</string>
1.817 <reference key="source" ref="1060834180"/>
1.818 <reference key="destination" ref="394352720"/>
1.819 </object>
1.820 @@ -919,7 +943,7 @@
1.821 </object>
1.822 <object class="IBConnectionRecord">
1.823 <object class="IBActionConnection" key="connection">
1.824 - <reference key="label" ref="560321708"/>
1.825 + <string key="label">startGameFromMenu:</string>
1.826 <reference key="source" ref="1060834180"/>
1.827 <reference key="destination" ref="630661937"/>
1.828 </object>
1.829 @@ -927,7 +951,7 @@
1.830 </object>
1.831 <object class="IBConnectionRecord">
1.832 <object class="IBActionConnection" key="connection">
1.833 - <reference key="label" ref="560321708"/>
1.834 + <string key="label">startGameFromMenu:</string>
1.835 <reference key="source" ref="1060834180"/>
1.836 <reference key="destination" ref="538211827"/>
1.837 </object>
1.838 @@ -935,7 +959,7 @@
1.839 </object>
1.840 <object class="IBConnectionRecord">
1.841 <object class="IBActionConnection" key="connection">
1.842 - <reference key="label" ref="560321708"/>
1.843 + <string key="label">startGameFromMenu:</string>
1.844 <reference key="source" ref="1060834180"/>
1.845 <reference key="destination" ref="739065818"/>
1.846 </object>
1.847 @@ -943,7 +967,7 @@
1.848 </object>
1.849 <object class="IBConnectionRecord">
1.850 <object class="IBActionConnection" key="connection">
1.851 - <reference key="label" ref="560321708"/>
1.852 + <string key="label">startGameFromMenu:</string>
1.853 <reference key="source" ref="1060834180"/>
1.854 <reference key="destination" ref="778498721"/>
1.855 </object>
1.856 @@ -965,6 +989,14 @@
1.857 </object>
1.858 <int key="connectionID">400</int>
1.859 </object>
1.860 + <object class="IBConnectionRecord">
1.861 + <object class="IBOutletConnection" key="connection">
1.862 + <string key="label">_turnSlider</string>
1.863 + <reference key="source" ref="1060834180"/>
1.864 + <reference key="destination" ref="817996208"/>
1.865 + </object>
1.866 + <int key="connectionID">403</int>
1.867 + </object>
1.868 </object>
1.869 <object class="IBMutableOrderedSet" key="objectRecords">
1.870 <object class="NSArray" key="orderedObjects">
1.871 @@ -1037,7 +1069,7 @@
1.872 <reference ref="374024848"/>
1.873 </object>
1.874 <reference key="parent" ref="649796088"/>
1.875 - <reference key="objectName" ref="344781584"/>
1.876 + <string key="objectName">1</string>
1.877 </object>
1.878 <object class="IBObjectRecord">
1.879 <int key="objectID">217</int>
1.880 @@ -1080,7 +1112,7 @@
1.881 <int key="objectID">75</int>
1.882 <reference key="object" ref="1023925487"/>
1.883 <reference key="parent" ref="720053764"/>
1.884 - <reference key="objectName" ref="8808733"/>
1.885 + <string key="objectName">3</string>
1.886 </object>
1.887 <object class="IBObjectRecord">
1.888 <int key="objectID">80</int>
1.889 @@ -1118,13 +1150,13 @@
1.890 <int key="objectID">77</int>
1.891 <reference key="object" ref="294629803"/>
1.892 <reference key="parent" ref="720053764"/>
1.893 - <reference key="objectName" ref="720655175"/>
1.894 + <string key="objectName">5</string>
1.895 </object>
1.896 <object class="IBObjectRecord">
1.897 <int key="objectID">73</int>
1.898 <reference key="object" ref="776162233"/>
1.899 <reference key="parent" ref="720053764"/>
1.900 - <reference key="objectName" ref="344781584"/>
1.901 + <string key="objectName">1</string>
1.902 </object>
1.903 <object class="IBObjectRecord">
1.904 <int key="objectID">79</int>
1.905 @@ -1142,7 +1174,7 @@
1.906 <int key="objectID">74</int>
1.907 <reference key="object" ref="1010469920"/>
1.908 <reference key="parent" ref="720053764"/>
1.909 - <reference key="objectName" ref="5220549"/>
1.910 + <string key="objectName">2</string>
1.911 </object>
1.912 <object class="IBObjectRecord">
1.913 <int key="objectID">125</int>
1.914 @@ -1228,7 +1260,7 @@
1.915 <bool key="EncodedWithXMLCoder">YES</bool>
1.916 </object>
1.917 <reference key="parent" ref="391199113"/>
1.918 - <reference key="objectName" ref="5220549"/>
1.919 + <string key="objectName">2</string>
1.920 </object>
1.921 <object class="IBObjectRecord">
1.922 <int key="objectID">57</int>
1.923 @@ -1422,6 +1454,7 @@
1.924 <object class="NSMutableArray" key="children">
1.925 <bool key="EncodedWithXMLCoder">YES</bool>
1.926 <reference ref="1060834180"/>
1.927 + <reference ref="817996208"/>
1.928 </object>
1.929 <reference key="parent" ref="972006081"/>
1.930 </object>
1.931 @@ -1493,6 +1526,20 @@
1.932 <reference key="object" ref="778498721"/>
1.933 <reference key="parent" ref="330268596"/>
1.934 </object>
1.935 + <object class="IBObjectRecord">
1.936 + <int key="objectID">401</int>
1.937 + <reference key="object" ref="817996208"/>
1.938 + <object class="NSMutableArray" key="children">
1.939 + <bool key="EncodedWithXMLCoder">YES</bool>
1.940 + <reference ref="42512652"/>
1.941 + </object>
1.942 + <reference key="parent" ref="439893737"/>
1.943 + </object>
1.944 + <object class="IBObjectRecord">
1.945 + <int key="objectID">402</int>
1.946 + <reference key="object" ref="42512652"/>
1.947 + <reference key="parent" ref="817996208"/>
1.948 + </object>
1.949 </object>
1.950 </object>
1.951 <object class="NSMutableDictionary" key="flattenedProperties">
1.952 @@ -1580,6 +1627,7 @@
1.953 <string>24.IBPluginDependency</string>
1.954 <string>24.ImportedFromIB2</string>
1.955 <string>24.editorWindowContentRectSynchronizationRect</string>
1.956 + <string>29.IBEditorWindowLastContentRect</string>
1.957 <string>29.IBPluginDependency</string>
1.958 <string>29.ImportedFromIB2</string>
1.959 <string>29.WindowOrigin</string>
1.960 @@ -1589,15 +1637,18 @@
1.961 <string>296.editorWindowContentRectSynchronizationRect</string>
1.962 <string>297.IBPluginDependency</string>
1.963 <string>298.IBPluginDependency</string>
1.964 + <string>371.IBEditorWindowLastContentRect</string>
1.965 <string>371.IBPluginDependency</string>
1.966 <string>371.IBWindowTemplateEditedContentRect</string>
1.967 <string>371.NSWindowTemplate.visibleAtLaunch</string>
1.968 <string>371.editorWindowContentRectSynchronizationRect</string>
1.969 + <string>371.lastResizeAction</string>
1.970 <string>372.IBPluginDependency</string>
1.971 <string>375.IBPluginDependency</string>
1.972 <string>376.IBPluginDependency</string>
1.973 <string>377.IBPluginDependency</string>
1.974 <string>379.IBPluginDependency</string>
1.975 + <string>380.IBEditorWindowLastContentRect</string>
1.976 <string>380.IBPluginDependency</string>
1.977 <string>380.editorWindowContentRectSynchronizationRect</string>
1.978 <string>381.IBPluginDependency</string>
1.979 @@ -1606,6 +1657,8 @@
1.980 <string>384.IBPluginDependency</string>
1.981 <string>387.IBPluginDependency</string>
1.982 <string>393.IBPluginDependency</string>
1.983 + <string>401.IBPluginDependency</string>
1.984 + <string>402.IBPluginDependency</string>
1.985 <string>5.IBPluginDependency</string>
1.986 <string>5.ImportedFromIB2</string>
1.987 <string>56.IBPluginDependency</string>
1.988 @@ -1643,146 +1696,164 @@
1.989 </object>
1.990 <object class="NSMutableArray" key="dict.values">
1.991 <bool key="EncodedWithXMLCoder">YES</bool>
1.992 - <reference ref="248469711"/>
1.993 - <reference ref="617114957"/>
1.994 - <reference ref="617114957"/>
1.995 - <reference ref="248469711"/>
1.996 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.997 + <string>com.apple.InterfaceBuilderKit</string>
1.998 + <string>com.apple.InterfaceBuilderKit</string>
1.999 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1000 <integer value="1" id="9"/>
1.1001 - <reference ref="248469711"/>
1.1002 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1003 <reference ref="9"/>
1.1004 <string>{{497, 828}, {64, 6}}</string>
1.1005 - <reference ref="248469711"/>
1.1006 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1007 <reference ref="9"/>
1.1008 - <reference ref="248469711"/>
1.1009 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1010 <reference ref="9"/>
1.1011 - <reference ref="248469711"/>
1.1012 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1013 <reference ref="9"/>
1.1014 <string>{{522, 812}, {146, 23}}</string>
1.1015 - <reference ref="248469711"/>
1.1016 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1017 <reference ref="9"/>
1.1018 - <reference ref="248469711"/>
1.1019 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1020 <reference ref="9"/>
1.1021 - <reference ref="248469711"/>
1.1022 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1023 <reference ref="9"/>
1.1024 <string>{{436, 809}, {64, 6}}</string>
1.1025 - <reference ref="248469711"/>
1.1026 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1027 <reference ref="9"/>
1.1028 - <reference ref="248469711"/>
1.1029 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1030 <reference ref="9"/>
1.1031 - <reference ref="248469711"/>
1.1032 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1033 <reference ref="9"/>
1.1034 - <reference ref="248469711"/>
1.1035 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1036 <reference ref="9"/>
1.1037 - <reference ref="248469711"/>
1.1038 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1039 <reference ref="9"/>
1.1040 - <reference ref="248469711"/>
1.1041 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1042 <reference ref="9"/>
1.1043 - <reference ref="248469711"/>
1.1044 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1045 <reference ref="9"/>
1.1046 - <reference ref="248469711"/>
1.1047 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1048 <reference ref="9"/>
1.1049 - <reference ref="248469711"/>
1.1050 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1051 <reference ref="9"/>
1.1052 - <reference ref="248469711"/>
1.1053 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1054 <reference ref="9"/>
1.1055 - <reference ref="248469711"/>
1.1056 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1057 <reference ref="9"/>
1.1058 - <reference ref="248469711"/>
1.1059 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1060 <reference ref="9"/>
1.1061 - <reference ref="248469711"/>
1.1062 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1063 <reference ref="9"/>
1.1064 - <reference ref="248469711"/>
1.1065 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1066 <reference ref="9"/>
1.1067 - <reference ref="248469711"/>
1.1068 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1069 <reference ref="9"/>
1.1070 - <reference ref="248469711"/>
1.1071 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1072 <reference ref="9"/>
1.1073 - <reference ref="248469711"/>
1.1074 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1075 <reference ref="9"/>
1.1076 <string>{{271, 653}, {154, 183}}</string>
1.1077 - <reference ref="248469711"/>
1.1078 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1079 <reference ref="9"/>
1.1080 - <reference ref="248469711"/>
1.1081 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1082 <reference ref="9"/>
1.1083 - <reference ref="248469711"/>
1.1084 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1085 <reference ref="9"/>
1.1086 - <reference ref="248469711"/>
1.1087 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1088 <reference ref="9"/>
1.1089 <string>{{514, 573}, {167, 43}}</string>
1.1090 - <reference ref="248469711"/>
1.1091 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1092 <reference ref="9"/>
1.1093 - <reference ref="248469711"/>
1.1094 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1095 <reference ref="9"/>
1.1096 - <reference ref="248469711"/>
1.1097 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1098 <reference ref="9"/>
1.1099 - <reference ref="248469711"/>
1.1100 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1101 <reference ref="9"/>
1.1102 - <reference ref="248469711"/>
1.1103 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1104 <reference ref="9"/>
1.1105 - <reference ref="248469711"/>
1.1106 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1107 <reference ref="9"/>
1.1108 - <reference ref="248469711"/>
1.1109 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1110 <reference ref="9"/>
1.1111 <string>{{525, 802}, {197, 73}}</string>
1.1112 - <reference ref="248469711"/>
1.1113 + <string>{{79, 825}, {473, 20}}</string>
1.1114 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1115 <reference ref="9"/>
1.1116 <string>{74, 862}</string>
1.1117 <string>{{85, 834}, {473, 20}}</string>
1.1118 - <reference ref="248469711"/>
1.1119 - <reference ref="248469711"/>
1.1120 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1121 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1122 <string>{{319, 763}, {234, 73}}</string>
1.1123 - <reference ref="248469711"/>
1.1124 - <reference ref="248469711"/>
1.1125 - <reference ref="248469711"/>
1.1126 - <string>{{117, 199}, {1084, 587}}</string>
1.1127 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1128 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1129 + <string>{{85, 58}, {1084, 617}}</string>
1.1130 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1131 + <string>{{85, 58}, {1084, 617}}</string>
1.1132 <reference ref="9"/>
1.1133 <string>{{117, 199}, {1084, 587}}</string>
1.1134 - <reference ref="248469711"/>
1.1135 - <reference ref="248469711"/>
1.1136 - <reference ref="248469711"/>
1.1137 - <reference ref="248469711"/>
1.1138 - <reference ref="248469711"/>
1.1139 - <reference ref="248469711"/>
1.1140 + <object class="NSDictionary">
1.1141 + <bool key="EncodedWithXMLCoder">YES</bool>
1.1142 + <object class="NSMutableArray" key="dict.sortedKeys">
1.1143 + <bool key="EncodedWithXMLCoder">YES</bool>
1.1144 + <string>IBResizeActionFinalFrame</string>
1.1145 + <string>IBResizeActionInitialFrame</string>
1.1146 + </object>
1.1147 + <object class="NSMutableArray" key="dict.values">
1.1148 + <bool key="EncodedWithXMLCoder">YES</bool>
1.1149 + <string>{{60, 145}, {1084, 617}}</string>
1.1150 + <string>{{60, 175}, {1084, 587}}</string>
1.1151 + </object>
1.1152 + </object>
1.1153 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1154 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1155 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1156 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1157 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1158 + <string>{{313, 712}, {205, 113}}</string>
1.1159 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1160 <string>{{319, 721}, {205, 113}}</string>
1.1161 - <reference ref="248469711"/>
1.1162 - <reference ref="248469711"/>
1.1163 - <reference ref="248469711"/>
1.1164 - <reference ref="248469711"/>
1.1165 - <reference ref="248469711"/>
1.1166 - <reference ref="248469711"/>
1.1167 - <reference ref="248469711"/>
1.1168 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1169 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1170 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1171 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1172 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1173 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1174 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1175 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1176 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1177 <reference ref="9"/>
1.1178 - <reference ref="248469711"/>
1.1179 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1180 <reference ref="9"/>
1.1181 - <reference ref="248469711"/>
1.1182 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1183 <reference ref="9"/>
1.1184 <string>{{97, 651}, {250, 183}}</string>
1.1185 - <reference ref="248469711"/>
1.1186 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1187 <reference ref="9"/>
1.1188 - <reference ref="248469711"/>
1.1189 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1190 <reference ref="9"/>
1.1191 - <reference ref="248469711"/>
1.1192 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1193 <reference ref="9"/>
1.1194 - <reference ref="248469711"/>
1.1195 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1196 <reference ref="9"/>
1.1197 - <reference ref="248469711"/>
1.1198 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1199 <reference ref="9"/>
1.1200 - <reference ref="248469711"/>
1.1201 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1202 <reference ref="9"/>
1.1203 - <reference ref="248469711"/>
1.1204 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1205 <reference ref="9"/>
1.1206 - <reference ref="248469711"/>
1.1207 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1208 <reference ref="9"/>
1.1209 - <reference ref="248469711"/>
1.1210 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1211 <reference ref="9"/>
1.1212 - <reference ref="248469711"/>
1.1213 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1214 <reference ref="9"/>
1.1215 <string>{{233, 633}, {199, 203}}</string>
1.1216 - <reference ref="248469711"/>
1.1217 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1218 <reference ref="9"/>
1.1219 - <reference ref="248469711"/>
1.1220 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1221 <reference ref="9"/>
1.1222 - <reference ref="248469711"/>
1.1223 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
1.1224 <reference ref="9"/>
1.1225 </object>
1.1226 </object>
1.1227 @@ -1806,7 +1877,7 @@
1.1228 </object>
1.1229 </object>
1.1230 <nil key="sourceID"/>
1.1231 - <int key="maxID">400</int>
1.1232 + <int key="maxID">403</int>
1.1233 </object>
1.1234 <object class="IBClassDescriber" key="IBDocument.Classes">
1.1235 <object class="NSMutableArray" key="referencedPartialClassDescriptions">
1.1236 @@ -1816,19 +1887,10 @@
1.1237 <string key="superclassName">NSView</string>
1.1238 <object class="NSMutableDictionary" key="actions">
1.1239 <string key="NS.key.0">enterFullScreen:</string>
1.1240 - <string key="NS.object.0" id="765642758">id</string>
1.1241 - </object>
1.1242 - <object class="NSMutableDictionary" key="outlets">
1.1243 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1244 - <object class="NSArray" key="dict.sortedKeys">
1.1245 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1246 - </object>
1.1247 - <object class="NSMutableArray" key="dict.values">
1.1248 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1249 - </object>
1.1250 + <string key="NS.object.0">id</string>
1.1251 </object>
1.1252 <object class="IBClassDescriptionSource" key="sourceIdentifier">
1.1253 - <string key="majorKey" id="755626269">IBProjectSource</string>
1.1254 + <string key="majorKey">IBProjectSource</string>
1.1255 <string key="minorKey">Source/BoardView.h</string>
1.1256 </object>
1.1257 </object>
1.1258 @@ -1837,290 +1899,21 @@
1.1259 <string key="superclassName">BoardView</string>
1.1260 <object class="NSMutableDictionary" key="actions">
1.1261 <string key="NS.key.0">startGameFromMenu:</string>
1.1262 - <reference key="NS.object.0" ref="765642758"/>
1.1263 + <string key="NS.object.0">id</string>
1.1264 </object>
1.1265 <object class="NSMutableDictionary" key="outlets">
1.1266 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1267 - <object class="NSArray" key="dict.sortedKeys">
1.1268 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1269 - </object>
1.1270 - <object class="NSMutableArray" key="dict.values">
1.1271 - <bool key="EncodedWithXMLCoder">YES</bool>
1.1272 - </object>
1.1273 + <string key="NS.key.0">_turnSlider</string>
1.1274 + <string key="NS.object.0">NSSlider</string>
1.1275 </object>
1.1276 <object class="IBClassDescriptionSource" key="sourceIdentifier">
1.1277 - <reference key="majorKey" ref="755626269"/>
1.1278 + <string key="majorKey">IBProjectSource</string>
1.1279 <string key="minorKey">Source/DemoBoardView.h</string>
1.1280 </object>
1.1281 </object>
1.1282 </object>
1.1283 </object>
1.1284 <int key="IBDocument.localizationMode">0</int>
1.1285 - <string key="IBDocument.LastKnownRelativeProjectPath">../../GeekGameBoard.xcodeproj</string>
1.1286 + <string key="IBDocument.LastKnownRelativeProjectPath">../GeekGameBoard.xcodeproj</string>
1.1287 <int key="IBDocument.defaultPropertyAccessControl">3</int>
1.1288 - <object class="NSMutableData" key="IBDocument.RunnableNib">
1.1289 - <bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
1.1290 -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEByQALAAwAMQA1ADYAPAA9
1.1291 -AEIAWABZAFoAWwALAGgAbAB2AHcAeAB9AHYACwCBAIMAhACFAIgAjACzALsAzADRANIA0wDYANkA2gDd
1.1292 -AOEA4gDlAOYA6gDuAPYA/AD9AP4BAgEJAQ0BDgEPARMBGgEeAR8BIAEkASwBMAExATIBMwE4ATkBPAFA
1.1293 -AUcBSAFJAUoBTgFVAVkBWgFbAV8BZgFnAWgBbAF0AXkBegF7AXwBgAGHAYgBiQGKAY4BlQGWAZcBmAGd
1.1294 -AaUBpgGnAawBtAG1AbYBugHBAcIBwwHIAc8B0AHRAdUB3AHhAeIB4wHnAe4B7wHwAfEB9QH8Af0B/gH/
1.1295 -AgMCCgILAgwCDQIRAhoCGwIcAh0CIQIoAikCKgIuAjUCNgI3AjgCPAJDAkQCRQJGAkoCUQJSAlMCWAJZ
1.1296 -Al0CZAJlAmYCZwJsAnMCdAJ1AnoCgQKCAoMChAKJApECkgKTApcCngKfAqACoQKlAqwCrQKuAq8CswK6
1.1297 -ArsCvAK9AsECyALJAsoCywLPAtYC1wLYAtwC4wLkAuUC5gMwAzEDOANDA0QDRgNRA1YDVwNlA24DdQN2
1.1298 -A3cDgAOJA1YDigOPA5IDkwOcA6UDpgOqA6sDrgO3A7gDxQPOA9cD4ANWA+ED5gPvA1YD+ANWBAEECgQT
1.1299 -A1YEFAQdBB4EKAQxA1YEMgRABEkDVgRKBE4ETwRYA1YEWQRgBGkDVgRyBHMEdgR4BMIFDQVYBVkFWgVb
1.1300 -BVwFXQVeBV8FYAVhBWIFYwVkBWUFZgVnBWgFaQVqBWsFbAVtBW4FbwVwBXEFcgVzBXQFdQV2BXcFeAV5
1.1301 -BXoFewV8BX0FfgV/BYAFgQWCBYMFhAWFBYYFhwWIBYkFigWLBYwFjQWOBY8FkAWRBZIFkwWUBZUFlgWX
1.1302 -BZgFmQWaBZsFnAWfBaIGEQaABoEGggaDBoQGhQaGBocGiAaJBooGiwaMBo0GjgaPBpAGkQaSBpMGlAaV
1.1303 -BpYGlwaYBpkGmgabBpwGnQaeBp8GoAahBqIGowakBqUGpganBqgGqQaqBqsGrAatBq4GrwawBrEGsgaz
1.1304 -BrQGtQa2BrcGuAa5BroGuwa8Br0Gvga/BsAGwQbCBsMGxAbFBsYGxwbIBskGygbLBswGzQbOBs8G0AbR
1.1305 -BtIG0wbUBtUG1gbXBtgG2QbaBtsG3AbdBt4G3wbgBuEG4gbjBuQG5QbmBucG6AbpBuoG6wbsBu8G8gb1
1.1306 -VSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUA
1.1307 -JgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmplY3RzS2V5c18QD05TQ2xhc3Nl
1.1308 -c1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25uZWN0aW9uc1tOU05hbWVzS2V5
1.1309 -c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNOYW1lc1ZhbHVlc18QGU5TQWNj
1.1310 -ZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlzaWJsZVdpbmRvd3NfEA9OU09i
1.1311 -amVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05leHRPaWRcTlNPaWRzVmFsdWVz
1.1312 -gAKBAciAy4EBVoEBx4AagQEPgAWBAVWBAVeBARCBAcWAAIAGgQEOgQHGEQGSgQFY0gAOADIAMwA0W05T
1.1313 -Q2xhc3NOYW1lgASAA11OU0FwcGxpY2F0aW9u0gA3ADgAOQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoA
1.1314 -O15OU0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2Jq
1.1315 -ZWN0c4AZoQBBgAfbAEMADgBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWACtcTlNX
1.1316 -aW5kb3dWaWV3XE5TU2NyZWVuUmVjdF8QE05TRnJhbWVBdXRvc2F2ZU5hbWVdTlNXaW5kb3dUaXRsZVlO
1.1317 -U1dURmxhZ3NdTlNXaW5kb3dDbGFzc1xOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tpbmdfEBFOU1dp
1.1318 -bmRvd1N0eWxlTWFza1tOU1ZpZXdDbGFzc4ALgBiAFoAXgAkSdAAAAIAKgAgQAhAHgABfEBh7ezU3LCAx
1.1319 -NzV9LCB7MTA4NCwgNTg3fX1dR2Vla0dhbWVCb2FyZFhOU1dpbmRvd9cAXAAOAF0AXgBfAFoAYABhAGIA
1.1320 -YwBkAGUAYQBnXxAPTlNOZXh0UmVzcG9uZGVyWk5TU3Vidmlld3NYTlN2RmxhZ3NbTlNGcmFtZVNpemVb
1.1321 -TlNTdXBlcnZpZXeADIAVgA0RAQCAE4AMgBTSAA4APgBpAGqAEqEAa4AO2ABcAA4AXgBfAFoAMgBgAG0A
1.1322 -TQBvAHAAcQBhAHMATQB1XxAVTlNWaWV3SXNMYXllclRyZWVIb3N0gAuAEREBEoAPgAyAEIALCVt7MTA4
1.1323 -NCwgNTg3fV1EZW1vQm9hcmRWaWV30gA3ADgAeQB6pAB6AHsAfAA7XE5TQ3VzdG9tVmlld1ZOU1ZpZXdb
1.1324 -TlNSZXNwb25kZXLSADcAOAB+AH+jAH8AgAA7Xk5TTXV0YWJsZUFycmF5V05TQXJyYXnSADcAOACCAHuj
1.1325 -AHsAfAA7XxAVe3swLCAwfSwgezE0NDAsIDg3OH19UNIANwA4AIYAh6IAhwA7XxAQTlNXaW5kb3dUZW1w
1.1326 -bGF0ZdIANwA4AIkAiqMAigCLADtcTlNNdXRhYmxlU2V0VU5TU2V00gAOAD4AaQCOgBKvECQAjwCQAJEA
1.1327 -kgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AngCfAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8A
1.1328 -sACxALKAG4ApgC6AM4A4gD6AQYBGgEuAT4BVgFqAX4BjgGeAa4BvgHSAeYB+gIOAiICMgJGAloCagJyA
1.1329 -oYClgKqAroCzgLiAvYDCgMbUAA4AtAC1ALYAtwBrALkAul1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05T
1.1330 -TGFiZWyAKIAOgByAJ9kADgC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAFVXTlNUaXRsZV8Q
1.1331 -EU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZdTlNNbmVtb25pY0xvY1lOU09uSW1hZ2VcTlNNaXhl
1.1332 -ZEltYWdlVk5TTWVudVVOU1RhZ4AmgB4SABABCIAfEn////+AIIAkgB3TAA4AvADNAM4AzwDQW05TTWVu
1.1333 -dUl0ZW1zgNCA9oD4WkhleGNoZXF1ZXJRNNMADgAyANQA1QDWANdeTlNSZXNvdXJjZU5hbWWAI4AhgCJX
1.1334 -TlNJbWFnZV8QD05TTWVudUNoZWNrbWFya9IANwA4ANsA3KIA3AA7XxAQTlNDdXN0b21SZXNvdXJjZdMA
1.1335 -DgAyANQA1QDWAOCAI4AhgCVfEBBOU01lbnVNaXhlZFN0YXRl0gA3ADgA4wDkogDkADtaTlNNZW51SXRl
1.1336 -bV8QEnN0YXJ0R2FtZUZyb21NZW51OtIANwA4AOcA6KMA6ADpADtfEBVOU05pYkNvbnRyb2xDb25uZWN0
1.1337 -b3JeTlNOaWJDb25uZWN0b3LTAA4AtQC2ALcA7ADtgCiAKoAt2AAOALwAvQC+AL8AwADBAMIAxADwAPEA
1.1338 -UADIAMkAygD1gCaALBIAEAAAgBeAIIAkgCvUAA4AvAD3AM0AzgD5APoA+1ZOU05hbWWA0IDMgM+AzV8Q
1.1339 -EkJyaW5nIEFsbCB0byBGcm9udF8QD2FycmFuZ2VJbkZyb250OtMADgC1ALYAtwEAAQGAKIAvgDLYAA4A
1.1340 -vAC9AL4AvwDAAMEAwgDEAQQA8QBQAMgAyQDKAQiAJoAxgBeAIIAkgDDTAA4AvADNAM4BCwEMgNCA7IDu
1.1341 -XlN0YXJ0IFNwZWFraW5nXnN0YXJ0U3BlYWtpbmc60wAOALUAtgC3AREBEoAogDSAN9cADgC8AL4AvwDA
1.1342 -AMEAwgDEARUAUADIAMkAygEZgCaANoAXgCCAJIA10wAOALwAzQDOARwBHYDQgPyA/l8QD1JldmVydCB0
1.1343 -byBTYXZlZF8QFnJldmVydERvY3VtZW50VG9TYXZlZDrTAA4AtQC2ALcBIgEjgCiAOYA92AAOALwAvQC+
1.1344 -AL8AwADBAMIAxAEmAScBKADIAMkAygErgCaAOxIAEgAAgDyAIIAkgDrTAA4AvADNAM4BLgEvgNCA54Do
1.1345 -VFJlZG9RWlVyZWRvOtQADgC0ALUAtgE0AGsAHwE3gECADoACgD9YZGVsZWdhdGXSADcAOAE6ATujATsA
1.1346 -6QA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LTAA4AtQC2ALcBPgE/gCiAQoBF2AAOALwAvQC+AL8AwADB
1.1347 -AMIAxAFCAPEBQwDIAMkAygEZgCaAQ4BEgCCAJIA1U05ld1FuXG5ld0RvY3VtZW50OtMADgC1ALYAtwFM
1.1348 -AU2AKIBHgErYAA4AvAC9AL4AvwDAAMEAwgDEAVAA8QBQAMgAyQDKAVSAJoBJgBeAIIAkgEjTAA4AvADN
1.1349 -AM4BVwFYgNCBAQWBAQdvEBIAQwB1AHMAdABvAG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICZfEB9ydW5U
1.1350 -b29sYmFyQ3VzdG9taXphdGlvblBhbGV0dGU60wAOALUAtgC3AV0BXoAogEyATtgADgC8AL0AvgC/AMAA
1.1351 -wQDCAMQBYQDxAFAAyADJAMoBK4AmgE2AF4AggCSAOlZEZWxldGVXZGVsZXRlOtMADgC1ALYAtwFqAWuA
1.1352 -KIBQgFTYAA4AvAC9AL4AvwDAAMEAwgDEAW4BbwFwAMgAyQDKAXOAJoBSEgAYAACAU4AggCSAUdQADgC8
1.1353 -APcAzQDOAFEBdwF4gNCACYDigNRbSGlkZSBPdGhlcnNRaF8QFmhpZGVPdGhlckFwcGxpY2F0aW9uczrT
1.1354 -AA4AtQC2ALcBfgF/gCiAVoBZ2AAOALwAvQC+AL8AwADBAMIAxAGCAPEBgwDIAMkAygEZgCaAV4BYgCCA
1.1355 -JIA1ZgBQAHIAaQBuAHQgJlFwVnByaW50OtMADgC1ALYAtwGMAY2AKIBbgF7YAA4AvAC9AL4AvwDAAMEA
1.1356 -wgDEAZAA8QGRAMgAyQDKARmAJoBcgF2AIIAkgDVlAE8AcABlAG4gJlFvXW9wZW5Eb2N1bWVudDrUAA4A
1.1357 -tAC1ALYAtwBrAZsAuoAogA6AYIAn2QAOALwAvQC+AL8AwADBAMIAwwDEAZ8AxgGgAMgAyQDKAMsBpIAm
1.1358 -gGGAYoAggCSAHRAEUkdvUTPUAA4AtAC1ALYAtwBrAaoAuoAogA6AZIAn2QAOALwAvQC+AL8AwADBAMIA
1.1359 -wwDEAa4AxgGvAMgAyQDKAMsBs4AmgGWAZoAggCSAHRADW1RpYy1UYWMtVG9lUTXTAA4AtQC2ALcBuAG5
1.1360 -gCiAaIBq2AAOALwAvQC+AL8AwADBAMIAxAG8APEAUADIAMkAygD1gCaAaYAXgCCAJIArVFpvb21ccGVy
1.1361 -Zm9ybVpvb2061AAOALQAtQC2ALcAawHGALqAKIAOgGyAJ9gADgC8AL0AvgC/AMAAwQDCAMQBygDGAcsA
1.1362 -yADJAMoAy4AmgG2AboAggCSAHV8QFEtsb25kaWtlIChTb2xpdGFpcmUpUTHTAA4AtQC2ALcB0wHUgCiA
1.1363 -cIBz2AAOALwAvQC+AL8AwADBAMIAxAHXAPEAUADIAMkAygHbgCaAcoAXgCCAJIBx1AAOALwA9wDNAM4B
1.1364 -3gHfAeCA0IEBAIEBA4EBAlpDbGVhciBNZW51XxAVY2xlYXJSZWNlbnREb2N1bWVudHM60wAOALUAtgC3
1.1365 -AeUB5oAogHWAeNgADgC8AL0AvgC/AMAAwQDCAMQB6QDxAeoAyADJAMoA9YAmgHaAd4AggCSAK1hNaW5p
1.1366 -bWl6ZVFtXxATcGVyZm9ybU1pbmlhdHVyaXplOtMADgC1ALYAtwHzAfSAKIB6gH3YAA4AvAC9AL4AvwDA
1.1367 -AMEAwgDEAfcA8QH4AMgAyQDKARmAJoB7gHyAIIAkgDVUU2F2ZVFzXXNhdmVEb2N1bWVudDrTAA4AtQC2
1.1368 -ALcCAQICgCiAf4CC2AAOALwAvQC+AL8AwADBAMIAxAIFAPECBgDIAMkAygErgCaAgICBgCCAJIA6VVBh
1.1369 -c3RlUXZWcGFzdGU60wAOALUAtgC3Ag8CEIAogISAh9kADgISALwAvQC+AL8AwADBAMIAxABQAhUBJwIW
1.1370 -AMgAyQDKARlZTlNUb29sVGlwgCaAF4CFgIaAIIAkgDVdUGFnZSBTZXR1cC4uLlFQXnJ1blBhZ2VMYXlv
1.1371 -dXQ60wAOALUAtgC3Ah8CIIAogImAi9gADgC8AL0AvgC/AMAAwQDCAMQCIwDxAFAAyADJAMoBCIAmgIqA
1.1372 -F4AggCSAMF1TdG9wIFNwZWFraW5nXXN0b3BTcGVha2luZzrTAA4AtQC2ALcCLAItgCiAjYCQ2AAOALwA
1.1373 -vQC+AL8AwADBAMIAxAIwAPECMQDIAMkAygErgCaAjoCPgCCAJIA6WlNlbGVjdCBBbGxRYVpzZWxlY3RB
1.1374 -bGw60wAOALUAtgC3AjoCO4AogJKAldgADgC8AL0AvgC/AMAAwQDCAMQCPgDxAj8AyADJAMoBK4AmgJOA
1.1375 -lIAggCSAOlRDb3B5UWNVY29weTrTAA4AtQC2ALcCSAJJgCiAl4CZ2AAOALwAvQC+AL8AwADBAMIAxAJM
1.1376 -APEBcADIAMkAygFzgCaAmIBTgCCAJIBRXxASSGlkZSBHZWVrR2FtZUJvYXJkVWhpZGU61AAOALQAtQC2
1.1377 -ATQAawBBAleAQIAOgAeAm18QFWluaXRpYWxGaXJzdFJlc3BvbmRlctMADgC1ALYAtwJbAlyAKICdgKDY
1.1378 -AA4AvAC9AL4AvwDAAMEAwgDEAl8A8QJgAMgAyQDKARmAJoCegJ+AIIAkgDVVQ2xvc2VRd11wZXJmb3Jt
1.1379 -Q2xvc2U61AAOALQAtQC2ALcAHwJqAmuAKIACgKKApNcADgC8AL4AvwDAAMEAwgDEAm4AUADIAMkAygFz
1.1380 -gCaAo4AXgCCAJIBRXxATQWJvdXQgR2Vla0dhbWVCb2FyZF8QHW9yZGVyRnJvbnRTdGFuZGFyZEFib3V0
1.1381 -UGFuZWw61AAOALQAtQC2ALcAawJ4AnmAKIAOgKaAqdgADgC8AL0AvgC/AMAAwQDCAMQCfADxAn0AyADJ
1.1382 -AMoBVIAmgKeAqIAggCSASFtGdWxsIFNjcmVlblFmXxAQZW50ZXJGdWxsU2NyZWVuOtQADgC0ALUAtgC3
1.1383 -AGsChwC6gCiADoCrgCfZAA4AvAC9AL4AvwDAAMEAwgDDAMQCiwDGAowAyADJAMoAywKQgCaArICtgCCA
1.1384 -JIAdEAFYQ2hlY2tlcnNRMtMADgC1ALYAtwKVApaAKICvgLLYAA4AvAC9AL4AvwDAAMEAwgDEApkA8QKa
1.1385 -AMgAyQDKASuAJoCwgLGAIIAkgDpUVW5kb1F6VXVuZG860wAOALUAtgC3AqMCpIAogLSAt9gADgC8AL0A
1.1386 -vgC/AMAAwQDCAMQCpwDxAqgAyADJAMoBc4AmgLWAtoAggCSAUV8QElF1aXQgR2Vla0dhbWVCb2FyZFFx
1.1387 -WnRlcm1pbmF0ZTrTAA4AtQC2ALcCsQKygCiAuYC82AAOALwAvQC+AL8AwADBAMIAxAK1APECtgDIAMkA
1.1388 -ygErgCaAuoC7gCCAJIA6U0N1dFF4VGN1dDrTAA4AtQC2ALcCvwLAgCiAvoDB2AAOALwAvQC+AL8AwADB
1.1389 -AMIAxALDAW8CxADIAMkAygFUgCaAv4DAgCCAJIBIXFNob3cgVG9vbGJhclF0XxATdG9nZ2xlVG9vbGJh
1.1390 -clNob3duOtMADgC1ALYAtwLNAs6AKIDDgMXYAA4AvAC9AL4AvwDAAMEAwgDEAtEA8QBQAMgAyQDKAXOA
1.1391 -JoDEgBeAIIAkgFFYU2hvdyBBbGxfEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM60wAOALUAtgC3AtoC24Ao
1.1392 -gMeAytgADgC8AL0AvgC/AMAAwQDCAMQC3gEnAt8AyADJAMoBGYAmgMiAyYAggCSANWgAUwBhAHYAZQAg
1.1393 -AEEAcyAmUVNfEA9zYXZlRG9jdW1lbnRBczrSAA4APgLnAuiBAQ2vEEcA9QE+AusC7AHlAu4CLAGMAvEC
1.1394 -8gKHASsBagHGAvcBcwKVAfMBIgEAAUwCowL/AdMBqgLaAg8COgK/AwYBfgMIAwkCeAMLAwwBXQMOAw8B
1.1395 -GQMRAxIDEwMUAxUAuQKxAs0ATQERAEEDHAJqAh8DHwJIAGsB2wEIAbgCAQMmAMsBmwMpAVQDKwDsAy0C
1.1396 -WwMvgCuAQoDOgNGAdYDjgI2AW4DmgNWAq4A6gFCAbIDvgFGAr4B6gDmAL4BHgLSA8IBwgGSAx4CEgJKA
1.1397 -voDrgFaA8oDdgKaA9ID1gEyA0oDZgDWA4YEBCYEBDIDWgPuAHIC5gMOAC4A0gAeA6YCigImBAQSAl4AO
1.1398 -gHGAMIBogH+A2oAdgGCA/4BIgQEIgCqA4ICdgOpWV2luZG930gAOAD4AaQMzgBKkAeUBuALrAOyAdYBo
1.1399 -gM6AKtoADgC8AL0DOQC+AzoAvwDAAMEAwgDEAFAA8QB1AFAAdQDIAMkAygD1XU5TSXNTZXBhcmF0b3Jc
1.1400 -TlNJc0Rpc2FibGVkgCaAFwmAFwmAIIAkgCteX05TV2luZG93c01lbnXSADcAOANFAMKiAMIAO9oADgNH
1.1401 -ALwAvQC+AL8AwADBAMIDSADEAXMAUQDxAFAAyADJAMoDDgNQWU5TU3VibWVudVhOU0FjdGlvboAmgFGA
1.1402 -CYAXgCCAJIDSgNPUAA4AvAD3AM0AzgNTA1QDVYDQgPmBAQuA+l5zdWJtZW51QWN0aW9uOtIADgA+AGkD
1.1403 -WYASqwJqAvIDFAMPAyYDLQJIAWoCzQMRAqOAooDVgNaA2YDagOCAl4BQgMOA4YC02gAOALwAvQM5AL4D
1.1404 -OgC/AMAAwQDCAMQAUADxAHUAUAB1AMgAyQDKAXOAJoAXCYAXCYAggCSAUdgADgC8AL0AvgC/AMAAwQDC
1.1405 -AMQDcADxA3EAyADJAMoBc4AmgNeA2IAggCSAUWwAUAByAGUAZgBlAHIAZQBuAGMAZQBzICZRLNoADgC8
1.1406 -AL0DOQC+AzoAvwDAAMEAwgDEAFAA8QB1AFAAdQDIAMkAygFzgCaAFwmAFwmAIIAkgFHaAA4DRwC8AL0A
1.1407 -vgC/AMAAwQDCA0gAxAMJA4MA8QBQAMgAyQDKAXMDiIAmgN2A24AXgCCAJIBRgNxYU2VydmljZXPUAA4A
1.1408 -vAD3AM0AzgODA40DjoDQgNuA34De0gAOAD4AaQORgBKgXxAPX05TU2VydmljZXNNZW512gAOALwAvQM5
1.1409 -AL4DOgC/AMAAwQDCAMQAUADxAHUAUAB1AMgAyQDKAXOAJoAXCYAXCYAggCSAUdoADgC8AL0DOQC+AzoA
1.1410 -vwDAAMEAwgDEAFAA8QB1AFAAdQDIAMkAygFzgCaAFwmAFwmAIIAkgFFcX05TQXBwbGVNZW510wAOALwA
1.1411 -zQDOA6gDqYDQgOSA5VRIZWxw0gAOAD4AaQOtgBKg2gAOALwAvQM5AL4DOgC/AMAAwQDCAMQAUADxAHUA
1.1412 -UAB1AMgAyQDKARmAJoAXCYAXCYAggCSANVRFZGl00gAOAD4AaQO6gBKqApUBIgMcArECOgIBAV0CLAMv
1.1413 -AwaAr4A5gOmAuYCSgH+ATICNgOqA69oADgC8AL0DOQC+AzoAvwDAAMEAwgDEAFAA8QB1AFAAdQDIAMkA
1.1414 -ygErgCaAFwmAFwmAIIAkgDraAA4AvAC9AzkAvgM6AL8AwADBAMIAxABQAPEAdQBQAHUAyADJAMoBK4Am
1.1415 -gBcJgBcJgCCAJIA62gAOA0cAvAC9AL4AvwDAAMEAwgNIAMQBCAELAPEAUADIAMkAygErA9+AJoAwgOyA
1.1416 -F4AggCSAOoDtVlNwZWVjaNIADgA+AGkD44ASogEAAh+AL4CJ2gAOALwAvQM5AL4DOgC/AMAAwQDCAMQA
1.1417 -UADxAHUAUAB1AMgAyQDKAMuAJoAXCYAXCYAggCSAHdoADgNHALwAvQC+AL8AwADBAMIDSADEAu4DqADx
1.1418 -AFAAyADJAMoDDgP3gCaA44DkgBeAIIAkgNKA8doADgNHALwAvQC+AL8AwADBAMIDSADEASsBLgDxAFAA
1.1419 -yADJAMoDDgQAgCaAOoDngBeAIIAkgNKA89oADgC8AL0DOQC+AzoAvwDAAMEAwgDEAFAA8QB1AFAAdQDI
1.1420 -AMkAygEZgCaAFwmAFwmAIIAkgDXaAA4DRwC8AL0AvgC/AMAAwQDCA0gAxADLAM8A8QBQAMgAyQDKAw4E
1.1421 -EoAmgB2A9oAXgCCAJIDSgPdUR2FtZdIADgA+AGkEFoASpgHGAvcChwGbALkBqoBsgO+Aq4BggByAZFlB
1.1422 -TWFpbk1lbnXSAA4APgBpBCCAEqcC7AMVAwgDDAMfAxIC/4DRgPuA8oD1gQEEgQEJgPDaAA4DRwC8AL0A
1.1423 -vgC/AMAAwQDCA0gAxAEZARwA8QBQAMgAyQDKAw4EMIAmgDWA/IAXgCCAJIDSgP1URmlsZdIADgA+AGkE
1.1424 -NIASqwE+AYwDKQLxAlsB8wLaAREDCwIPAX6AQoBbgP+A5oCdgHqAx4A0gPSAhIBW2gAOA0cAvAC9AL4A
1.1425 -vwDAAMEAwgNIAMQB2wHeAPEAUADIAMkAygEZBEiAJoBxgQEAgBeAIIAkgDWBAQFbT3BlbiBSZWNlbnTS
1.1426 -AA4APgBpBEyAEqEB04BwXxAWX05TUmVjZW50RG9jdW1lbnRzTWVuddoADgNHALwAvQC+AL8AwADBAMID
1.1427 -SADEAVQBVwDxAFAAyADJAMoDDgRXgCaASIEBBYAXgCCAJIDSgQEGVFZpZXfSAA4APgBpBFuAEqQCeAMr
1.1428 -Ar8BTICmgQEIgL6AR9oADgC8AL0DOQC+AzoAvwDAAMEAwgDEAFAA8QB1AFAAdQDIAMkAygFUgCaAFwmA
1.1429 -FwmAIIAkgEjaAA4DRwC8AL0AvgC/AMAAwQDCA0gAxAD1APkA8QBQAMgAyQDKAw4EcYAmgCuAzIAXgCCA
1.1430 -JIDSgQEKW19OU01haW5NZW510gAOADIAMwA0gASAA9IANwA4BHcAgKIAgAA70gAOAD4C5wR6gQENrxBH
1.1431 -AxIBGQD1Aw4A9QL/ASsBGQEZAXMAywMIAXMAywDLAuwBKwEZASsBCAFUAXMDDgHbAMsBGQEZASsBVAEr
1.1432 -ARkDDgMmAVQBGQMOASsAHwFzAxUBcwMOAB8BcwMOAMsBKwFzAEEBGQAfASsBcwEIAw4BcwBNAykDBgD1
1.1433 -ASsBcwMMAMsBGQMfAVQA9QFzARkBK4EBCYA1gCuA0oArgPCAOoA1gDWAUYAdgPKAUYAdgB2A0YA6gDWA
1.1434 -OoAwgEiAUYDSgHGAHYA1gDWAOoBIgDqANYDSgNqASIA1gNKAOoACgFGA+4BRgNKAAoBRgNKAHYA6gFGA
1.1435 -B4A1gAKAOoBRgDCA0oBRgAuA/4DrgCuAOoBRgPWAHYA1gQEEgEiAK4BRgDWAOtIADgA+AucExIEBDa8Q
1.1436 -SAD1AT4C7ALrAeUC7gIsAYwC8QLyAocBKwFqAcYC9wFzApUB8wEiAaoBTAL/AqMBAAHTAtoCDwI6Ar8D
1.1437 -BgF+AwgDCQJ4AB8DCwMMAV0DDgEZAw8DEQMSAxMDFQMUALkCsQLNAE0BEQBBAGsDHwJqAxwCSAIfAdsB
1.1438 -CAG4AMsDJgIBAZsDKQFUAysDLQDsAlsDL4ArgEKA0YDOgHWA44CNgFuA5oDVgKuAOoBQgGyA74BRgK+A
1.1439 -eoA5gGSAR4DwgLSAL4BwgMeAhICSgL6A64BWgPKA3YCmgAKA9ID1gEyA0oA1gNmA4YEBCYEBDID7gNaA
1.1440 -HIC5gMOAC4A0gAeADoEBBICigOmAl4CJgHGAMIBogB2A2oB/gGCA/4BIgQEIgOCAKoCdgOrSAA4APgLn
1.1441 -BQ+BAQ2vEEgFEAURBRIFEwUUAowFFgUXBRgFGQUaBRsFHAUdBR4FHwUgAaAFIgUjBSQBywUmBScFKAUp
1.1442 -Aa8FKwUsBS0FLgUvBTAFMQUyBTMFNAU1BTYFNwU4BTkFOgU7BTwFPQU+BT8FQAVBBUIFQwVEBUUFRgVH
1.1443 -BUgFSQVKBUsFTAVNBU4FTwVQBVEFUgVTBVQFVQVWBVeBARGBARKBAROBARSBARWArYEBFoEBF4EBGIEB
1.1444 -GYEBGoEBG4EBHIEBHYEBHoEBH4EBIIBigQEhgQEigQEjgG6BASSBASWBASaBASeAZoEBKIEBKYEBKoEB
1.1445 -K4EBLIEBLYEBLoEBL4EBMIEBMYEBMoEBM4EBNIEBNYEBNoEBN4EBOIEBOYEBOoEBO4EBPIEBPYEBPoEB
1.1446 -P4EBQIEBQYEBQoEBQ4EBRIEBRYEBRoEBR4EBSIEBSYEBSoEBS4EBTIEBTYEBToEBT4EBUIEBUYEBUoEB
1.1447 -U4EBVF1NZW51IChXaW5kb3cpUTlfEBlNZW51IEl0ZW0gKEdlZWtHYW1lQm9hcmQpW1NlcGFyYXRvci03
1.1448 -XxAUTWVudSBJdGVtIChNaW5pbWl6ZSlfEBZNZW51IEl0ZW0gKFNlbGVjdCBBbGwpbxARAE0AZQBuAHUA
1.1449 -IABJAHQAZQBtACAAKABPAHAAZQBuICYAKVE3WVNlcGFyYXRvcl8QFE1lbnUgSXRlbSAoQ2hlY2tlcnMp
1.1450 -W01lbnUgKEVkaXQpXxAXTWVudSBJdGVtIChIaWRlIE90aGVycylfECBNZW51IEl0ZW0gKEtsb25kaWtl
1.1451 -IChTb2xpdGFpcmUpKVtTZXBhcmF0b3ItNl8QFE1lbnUgKEdlZWtHYW1lQm9hcmQpXxAQTWVudSBJdGVt
1.1452 -IChVbmRvKV8QEE1lbnUgSXRlbSAoUmVkbylfEBdNZW51IEl0ZW0gKFRpYy1UYWMtVG9lKW8QHgBNAGUA
1.1453 -bgB1ACAASQB0AGUAbQAgACgAQwB1AHMAdABvAG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICYAKVQxMTEx
1.1454 -XxAaTWVudSBJdGVtIChTdGFydCBTcGVha2luZylfEBZNZW51IEl0ZW0gKENsZWFyIE1lbnUpUThfEBBN
1.1455 -ZW51IEl0ZW0gKENvcHkpXxAYTWVudSBJdGVtIChTaG93IFRvb2xiYXIpXxASTWVudSBJdGVtIChTcGVl
1.1456 -Y2gpUTZfEBBNZW51IEl0ZW0gKEVkaXQpXxAPTWVudSAoU2VydmljZXMpXxAXTWVudSBJdGVtIChGdWxs
1.1457 -IFNjcmVlbilcRmlsZSdzIE93bmVyUzItMV8QEE1lbnUgSXRlbSAoR2FtZSlfEBJNZW51IEl0ZW0gKERl
1.1458 -bGV0ZSlYTWFpbk1lbnVbTWVudSAoRmlsZSlbU2VwYXJhdG9yLTFbU2VwYXJhdG9yLTJfEBJNZW51IEl0
1.1459 -ZW0gKFdpbmRvdylbQXBwbGljYXRpb25fEBBNZW51IEl0ZW0gKEZpbGUpUzEyMV8QFk1lbnUgSXRlbSAo
1.1460 -SGV4Y2hlcXVlcilfEA9NZW51IEl0ZW0gKEN1dClfEBRNZW51IEl0ZW0gKFNob3cgQWxsKVxDb250ZW50
1.1461 -IFZpZXdSMTBfEBZXaW5kb3cgKEdlZWtHYW1lQm9hcmQpXxAPRGVtbyBCb2FyZCBWaWV3XxAQTWVudSBJ
1.1462 -dGVtIChWaWV3KV8QH01lbnUgSXRlbSAoQWJvdXQgR2Vla0dhbWVCb2FyZClbU2VwYXJhdG9yLTRfEB5N
1.1463 -ZW51IEl0ZW0gKEhpZGUgR2Vla0dhbWVCb2FyZClfEBlNZW51IEl0ZW0gKFN0b3AgU3BlYWtpbmcpXxAS
1.1464 -TWVudSAoT3BlbiBSZWNlbnQpXU1lbnUgKFNwZWVjaClfEBBNZW51IEl0ZW0gKFpvb20pW01lbnUgKEdh
1.1465 -bWUpXxAUTWVudSBJdGVtIChTZXJ2aWNlcylfEBFNZW51IEl0ZW0gKFBhc3RlKV5NZW51IEl0ZW0gKEdv
1.1466 -KV8QF01lbnUgSXRlbSAoT3BlbiBSZWNlbnQpW01lbnUgKFZpZXcpW1NlcGFyYXRvci04W1NlcGFyYXRv
1.1467 -ci0zXxAeTWVudSBJdGVtIChCcmluZyBBbGwgdG8gRnJvbnQpUzEtMVtTZXBhcmF0b3ItNdIADgA+AucF
1.1468 -noEBDaDSAA4APgLnBaGBAQ2g0gAOAD4C5wWkgQENrxBsAT4AlwLuAiwBjAHGAvcAsAKVAfMBAAChAUwC
1.1469 -owL/AKUC2gI6Ar8ApACsAX4AqAMJAJUArwMLAwwAsQFdAw4BGQCcAxIApgMTAJ0DFACqAJMAngCuAs0B
1.1470 -EQBBAxwDHwCaAkgArQIBAMsBmwMrAOwDLQMvAPUC6wLsAeUC8QLyAocBKwFqAJ8BcwEiAaoAogHTAg8D
1.1471 -BgCrAKkDCACQALIAowJ4AB8ApwCPAw8DEQMVALkAkgKxAJEATQCWAGsCHwJqAJkAoAHbAQgBuAMmAJgD
1.1472 -KQFUAJQAmwJbgEKAS4DjgI2AW4BsgO+AvYCvgHqAL4B5gEeAtIDwgIyAx4CSgL6AiICqgFaAmoDdgEGA
1.1473 -uID0gPWAwoBMgNKANYBjgQEJgJGBAQyAZ4DWgKGAOIBrgLOAw4A0gAeA6YEBBIBagJeAroB/gB2AYIEB
1.1474 -CIAqgOCA6oArgM6A0YB1gOaA1YCrgDqAUIBvgFGAOYBkgH6AcICEgOuApYCcgPKAKYDGgIOApoACgJaA
1.1475 -G4DZgOGA+4AcgDOAuYAugAuARoAOgImAooBVgHSAcYAwgGiA2oBPgP+ASIA+gF+AndIADgA+AucGE4EB
1.1476 -Da8QbAYUBhUGFgYXBhgGGQYaBhsGHAYdBh4GHwYgBiEGIgYjBiQGJQYmBicGKAYpBioGKwYsBi0GLgYv
1.1477 -BjAGMQYyBjMGNAY1BjYGNwY4BjkGOgY7BjwGPQY+Bj8GQAZBBkIGQwZEBkUGRgZHBkgGSQZKBksGTAZN
1.1478 -Bk4GTwZQBlEGUgZTBlQGVQZWBlcGWAZZBloGWwZcBl0GXgZfBmAGYQZiBmMGZAZlBmYGZwZoBmkGagZr
1.1479 -BmwGbQZuBm8GcAZxBnIGcwZ0BnUGdgZ3BngGeQZ6BnsGfAZ9Bn4Gf4EBWYEBWoEBW4EBXIEBXYEBXoEB
1.1480 -X4EBYIEBYYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIEBaYEBaoEBa4EBbIEBbYEBboEBb4EBcIEBcYEBcoEB
1.1481 -c4EBdIEBdYEBdoEBd4EBeIEBeYEBeoEBe4EBfIEBfYEBfoEBf4EBgIEBgYEBgoEBg4EBhIEBhYEBhoEB
1.1482 -h4EBiIEBiYEBioEBi4EBjIEBjYEBjoEBj4EBkIEBkYEBkoEBk4EBlIEBlYEBloEBl4EBmIEBmYEBmoEB
1.1483 -m4EBnIEBnYEBnoEBn4EBoIEBoYEBooEBo4EBpIEBpYEBpoEBp4EBqIEBqYEBqoEBq4EBrIEBrYEBroEB
1.1484 -r4EBsIEBsYEBsoEBs4EBtIEBtYEBtoEBt4EBuIEBuYEBuoEBu4EBvIEBvYEBvoEBv4EBwIEBwYEBwoEB
1.1485 -w4EBxBBSEOsQahDGEEgRAX0RAYMRAW4QzxBLEMQRAWoRASoQiBBnEOgQUBDFEQEpEOMRAYUQThEBjxCC
1.1486 -EQF1EOQQShEBexEBchDKEB0QUREBhxATEOAT//////////0Q8BCBEI4Q5xEBhBEBcRCWEHARAXMQzhEB
1.1487 -JxEBdhCGEN8QyxEBfBEBiREBeRAFEJAQ1hAYEFwQOBAXEE8Q7BEBfhDNEJEQfxA5ENcRAYAQ4hB+EE0Q
1.1488 -0xEBehDBENkQJxEBaxBXEQF4EQGREQFvEQGGEI8QlRBTEQF/EQFsEMcQ6REBdBEBbREBdxDDEDoQVhAl
1.1489 -EH0Q1BDvEIMRAXAQfBEBKBEBkBEBihBJ0gAOAD4AaQbugBKg0gAOAD4C5wbxgQENoNIADgA+AucG9IEB
1.1490 -DaDSADcAOAb2BveiBvcAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYD/AQCBE0E
1.1491 -VARbBGkEewSXBKUEsQS9BMsE1gTkBQAFDgUhBTMFTQVXBWQFZgVpBWsFbgVxBXMFdgV4BXsFfgWBBYQF
1.1492 -hgWIBYsFjgWRBZQFnQWpBasFrQW7BcQFzQXYBd0F7AX1BggGEQYcBh4GIQYjBlAGXQZqBoAGjgaYBqYG
1.1493 -swbFBtkG5QbnBukG6wbtBu8G9Ab2BvgG+gb8Bv4HGQcnBzAHTQdfB2oHcwd/B4sHjQePB5EHlAeWB5gH
1.1494 -mgejB6UHqAeqB8sH4wflB+cH6gfsB+4H8AfyB/MH/wgNCBYIHwgsCDMIPwhICE8IXghmCG8IdgiOCI8I
1.1495 -mAidCLAIuQjACM0I0wjcCN4JKQkrCS0JLwkxCTMJNQk3CTkJOwk9CT8JQQlDCUUJRwlJCUsJTQlPCVEJ
1.1496 -UwlVCVcJWQlbCV0JXwlhCWMJZQlnCWkJawltCW8JcQmCCZAJmQmhCaMJpQmnCakJzgnWCeoJ9QoDCg0K
1.1497 -GgohCicKKQorCjAKMgo3CjkKOwo9CkoKVgpYCloKXApnCmkKdgqFCocKiQqLCpMKpQquCrMKxgrTCtUK
1.1498 -1wrZCuwK9Qr6CwULGgsjCyoLQgtRC14LYAtiC2QLhQuHC4kLjguQC5ILlAuWC6cLrguwC7ILtAu2C8sL
1.1499 -3QvqC+wL7gvwDBEMEwwVDBcMGQwbDB0MKgwsDC4MMAw/DE4MWwxdDF8MYQx+DIAMggyEDIYMiAyKDJcM
1.1500 -mQybDJ0MrwzIDNUM1wzZDNsM/Az+DQANBQ0HDQkNCw0NDRoNHA0eDSANJQ0nDS0NPg1ADUINRA1GDU8N
1.1501 -WA1fDXYNgw2FDYcNiQ2qDawNrg2wDbINtA22DboNvA3JDdYN2A3aDdwN/Q3/DgEOAw4FDgcOCQ4WDhgO
1.1502 -Gw4eDkUOZw50DnYOeA56DpsOnQ6fDqEOow6lDqcOrg62DsMOxQ7HDskO6g7sDu4O8w71DvcO+Q77DwwP
1.1503 -Dg8QDxIPFA8gDyIPOw9ID0oPTA9OD28PcQ9zD3UPdw95D3sPiA+KD5EPng+gD6IPpA/FD8cPyQ/LD80P
1.1504 -zw/RD9wP3g/sD/0P/xABEAMQBRAqECwQLhAwEDIQNBA2EDgQOxA9EE4QUBBSEFQQVhB7EH0QfxCBEIMQ
1.1505 -hRCHEIkQlRCXEKQQphCoEKoQyxDNEM8Q0RDTENUQ1xDcEOkQ+hD8EP4RABECESMRJREnESkRKxEtES8R
1.1506 -RhFIEVURVxFZEVsRfBF+EYARghGEEYYRiBGZEZsRnhGhEaQRrxHHEdQR1hHYEdoR+xH9Ef8SARIDEgUS
1.1507 -BxIQEhISKBI1EjcSORI7ElwSXhJgEmISZBJmEmgSbRJvEn0SihKMEo4SkBKxErMStRK3ErkSuxK9EsMS
1.1508 -xRLMEtkS2xLdEt8TBBMOExATEhMUExYTGBMaExwTKhMsEzsTSBNKE0wTThNvE3ETcxN1E3cTeRN7E4kT
1.1509 -lxOkE6YTqBOqE8sTzRPPE9ET0xPVE9cT4hPkE+8T/BP+FAAUAhQjFCUUJxQpFCsULRQvFDQUNhQ8FEkU
1.1510 -SxRNFE8UcBRyFHQUdhR4FHoUfBSRFJcUqBSqFKwUrhSwFMgU1RTXFNkU2xT8FP4VABUCFQQVBhUIFQ4V
1.1511 -EBUeFS8VMRUzFTUVNxVUFVYVWBVaFVwVXhVgFXYVlhWnFakVqxWtFa8V0BXSFdQV1hXYFdoV3BXoFeoV
1.1512 -/RYOFhAWEhYUFhYWOxY9Fj8WQRZDFkUWRxZJFlIWVBZhFmMWZRZnFogWihaMFo4WkBaSFpQWmRabFqEW
1.1513 -rhawFrIWtBbVFtcW2RbbFt0W3xbhFvYW+BcDFxAXEhcUFxYXNxc5FzsXPRc/F0EXQxdHF0kXThdbF10X
1.1514 -XxdhF4IXhBeGF4gXiheMF44XmxedF7MXwBfCF8QXxhfnF+kX6xftF+8X8RfzF/wYFRgiGCQYJhgoGEkY
1.1515 -SxhNGE8YURhTGFUYZhhoGHoYgxiGGRcZGRkbGR0ZHxkhGSMZJRknGSkZKxktGS8ZMRkzGTUZNxk5GTsZ
1.1516 -PRk/GUEZQxlFGUcZSRlLGU0ZTxlRGVMZVRlXGVkZWxldGV8ZYRljGWUZZxlpGWwZbxlxGXMZdRl3GXkZ
1.1517 -exl9GX8ZgRmDGYUZiBmKGYwZjhmQGZIZlBmWGZgZmhmcGZ4ZoRmjGaUZpxmpGbAZuRm7GcQZxhnIGcoZ
1.1518 -zBn1GgMaEBoSGhQaFRoXGhgaGhocGh4aLRo2GjsaZBpuGncaeRp7Gn0afxqBGoMahRqHGpgamhqcGp8a
1.1519 -oRqwGrkauxrSGtQa1hrYGtoa3BreGuAa4hrkGuYa6BsRGxMbFRsWGxgbGRsbGx0bHxtAG0IbRBtGG0gb
1.1520 -ShtMG2UbZxuQG5IblBuVG5cbmBuaG5wbnhvHG8kbyxvNG88b0RvTG9Ub1xvgG/Eb8xv1G/cb+RwCHAQc
1.1521 -BRwXHEAcQhxEHEUcRxxIHEocTBxOHHcceRx7HHwcfhx/HIEcgxyFHJIcnxyhHKMcpRyqHLMctRy2HN8c
1.1522 -4RzjHOQc5hznHOkc6xztHPIc+xz9HRIdFB0WHRgdGh0cHR4dIB0iHSQdJh1PHVEdUx1UHVYdVx1ZHVsd
1.1523 -XR2GHYgdih2LHY0djh2QHZIdlB29Hb8dwR3DHcUdxx3JHcsdzR3UHd0d3x3kHeYd6B4RHhMeFR4WHhge
1.1524 -GR4bHh0eHx5IHkoeTB5OHlAeUh5UHlYeWB6BHoMehR6HHokeix6NHo8ekR66Hrwevh6/HsEewh7EHsYe
1.1525 -yB7xHvMe9R73Hvke+x79Hv8fAR8GHw8fER8eHyAfIh8kHyYfKB8qHzQfPR8/H04fUB9SH1QfVh9ZH1wf
1.1526 -Xh+HH4kfix+NH48fkR+TH5Uflx+cH6Ufpx++H8Afwh/EH8YfyB/KH8wfzh/QH9If1B/9H/8gASAEIAYg
1.1527 -CCAKIAwgDyAbICQgJiApICsgRCBtIG8gcSB0IHYgeCB6IHwgfyCEII0gjyCYIJognSCfIKEgyiDMIM4g
1.1528 -zyDRINIg1CDWINghASEDIQUhByEJIQshDSEPIRIhHiEnISkhKyE0ITkhQiFFIdYh2SHbId0h3yHhIeMh
1.1529 -5SHnIekh6yHtIe8h8SHzIfUh9yH5Ifsh/SH/IgEiAyIFIgciCSILIg0iDyIRIhMiFSIXIhkiGyIdIh8i
1.1530 -ISIjIiUiJyIpIisiLSIvIjEiMyI1IjciOSI7Ij0iPyJBIkMiRSJHIkkiSyJNIk8iUSJTIlUiVyJZIlwi
1.1531 -XiJgImIiZCJmIm8iciMFIwcjCSMLIw0jDyMRIxMjFSMXIxkjGyMdIx8jISMjIyUjJyMpIysjLSMvIzEj
1.1532 -MyM1IzcjOSM7Iz0jPyNBI0MjRSNHI0kjSyNNI08jUSNTI1UjVyNZI1wjXyNhI2MjZSNnI2kjayNtI28j
1.1533 -cSN0I3YjeCN6I3wjfiOAI4IjhCOGI4gjiiOMI44jkSOTI5UjlyOZI6IjpSQ4JDskPiRBJEQkRyRJJEwk
1.1534 -TyRSJFUkWCRbJF4kYSRkJGckaiRsJG8kciR1JHckeiR9JIAkgySFJIgkiySOJJEklCSXJJoknSSgJKMk
1.1535 -piSpJKwkrySyJLUkuCS7JL4kwSTEJMckyiTNJNAk0yTWJNkk3CTfJOIk5SToJOsk7iTxJPQk9yT6JP0l
1.1536 -ACUDJQYlCSUMJRolHCU4JUQlWyV0JZklmyWlJbwlyCXiJgUmESYoJjsmTiZoJqcmrCbJJuIm5Cb3JxIn
1.1537 -JycpJzwnTidoJ3UneSeMJ6Enqie2J8InzifjJ+8oAigGKB8oMShIKFUoWChxKIMolii4KMQo5SkBKRYp
1.1538 -JCk3KUMpWiluKX0plymjKa8puyncKeAp7Cn1Kfgp+SoCKgUqBioPKhIq7SrvKvEq8yr1Kvcq+Sr7Kv0q
1.1539 -/ysBKwMrBSsHKwkrCysNKw8rESsTKxUrFysZKxsrHSsfKyErIyslKycrKSsrKy0rLysyKzQrNys5Kzsr
1.1540 -PSs/K0ErQytFK0crSStLK04rUCtSK1QrVitYK1orXStfK2ErYytlK2craStrK20rbytxK3MrdSt3K3kr
1.1541 -eyt9K38rgSuDK4UrhyuJK4srjSuPK5ErkyuVK5crmSubK50rnyuhK6MrpSunK6krqyutK68rsSuzK7Ur
1.1542 -tyu5K7srvSu/K8ErwyvFK8crySvSK9UssCyzLLYsuSy8LL8swizFLMgsyyzOLNEs1CzXLNos3SzgLOMs
1.1543 -5izpLOws7yzyLPUs+Cz7LP4tAS0ELQctCi0NLRAtEy0WLRktHC0fLSItJS0oLSstLi0xLTQtNy06LT0t
1.1544 -QC1DLUYtSS1MLU8tUi1VLVgtWy1eLWEtZC1nLWotbS1wLXMtdi15LXwtfy2CLYUtiC2LLY4tkS2ULZct
1.1545 -mi2dLaAtoy2mLaktrC2vLbIttS24Lbstvi3BLcQtxy3KLc0t0C3TLdYt2S3cLd8t4i3lLegt6y3uLfEt
1.1546 -9C32Lfgt+i38Lf4uAS4ELgcuCS4LLg0uEC4TLhUuFy4ZLhsuHS4gLiIuJS4nLiouLC4vLjEuMy42Ljku
1.1547 -Oy49Lj8uQi5ELkYuTy5RLlMuVS5XLlouXS5fLmEuZC5mLmkubC5uLnAuci51Lnguey59Ln8ugS6DLoUu
1.1548 -hy6JLosujS6QLpIulC6WLpgumi6dLp8uoS6jLqUuqC6qLqwuri6xLrMuti65Lrwuvy7BLsMuxS7ILssu
1.1549 -zS7PLtIu1S7YLtou3C7eLuAu4i7kLuYu6C7rLu0u8C7zLvYu+C8BLwMvBC8NLxAvES8aLx0vHi8nLywA
1.1550 -AAAAAAACAgAAAAAAAAb4AAAAAAAAAAAAAAAAAAAvOw</bytes>
1.1551 - </object>
1.1552 </data>
1.1553 </archive>
2.1 Binary file English.lproj/MainMenu.nib/keyedobjects.nib has changed
3.1 --- a/Source/Bit.m Wed Mar 12 15:51:32 2008 -0700
3.2 +++ b/Source/Bit.m Sun Mar 16 15:06:47 2008 -0700
3.3 @@ -35,11 +35,26 @@
3.4 return clone;
3.5 }
3.6
3.7 +- (void) dealloc
3.8 +{
3.9 + [super dealloc];
3.10 +}
3.11 +
3.12 +
3.13 @synthesize owner=_owner;
3.14
3.15 - (BOOL) isFriendly {return _owner.friendly;}
3.16 - (BOOL) isUnfriendly {return _owner.unfriendly;}
3.17
3.18 +/*
3.19 +- (NSString*) identifier
3.20 +{
3.21 + if( _identifier )
3.22 + return _identifier;
3.23 + // Defaults to just identifying the owner:
3.24 + return [NSString stringWithFormat: @"p%i", _owner.index+1];
3.25 +}
3.26 +*/
3.27
3.28 - (CGFloat) scale
3.29 {
4.1 --- a/Source/BitHolder.m Wed Mar 12 15:51:32 2008 -0700
4.2 +++ b/Source/BitHolder.m Sun Mar 16 15:06:47 2008 -0700
4.3 @@ -46,8 +46,12 @@
4.4 - (void) setBit: (Bit*)bit
4.5 {
4.6 if( bit != self.bit ) {
4.7 - if( bit && _bit )
4.8 - [_bit destroy];
4.9 + if( _bit ) {
4.10 + if( bit )
4.11 + [_bit destroy];
4.12 + else
4.13 + [_bit removeFromSuperlayer];
4.14 + }
4.15 setObj(&_bit,bit);
4.16 ChangeSuperlayer(bit,self,-1);
4.17 }
5.1 --- a/Source/CheckersGame.h Wed Mar 12 15:51:32 2008 -0700
5.2 +++ b/Source/CheckersGame.h Sun Mar 16 15:06:47 2008 -0700
5.3 @@ -29,13 +29,8 @@
5.4 @interface CheckersGame : Game
5.5 {
5.6 int _numPieces[2];
5.7 + Grid *_grid;
5.8 + NSMutableArray *_cells;
5.9 }
5.10
5.11 -// For subclasses (See HexchequerGame):
5.12 -- (void) addPieces: (NSString*)imageName
5.13 - toGrid: (Grid*)grid
5.14 - forPlayer: (int)playerNum
5.15 - rows: (NSRange)rows
5.16 - alternating: (BOOL)alternating;
5.17 -
5.18 @end
6.1 --- a/Source/CheckersGame.m Wed Mar 12 15:51:32 2008 -0700
6.2 +++ b/Source/CheckersGame.m Sun Mar 16 15:06:47 2008 -0700
6.3 @@ -30,46 +30,34 @@
6.4 @implementation CheckersGame
6.5
6.6
6.7 -- (void) addPieces: (NSString*)imageName
6.8 - toGrid: (Grid*)grid
6.9 - forPlayer: (int)playerNum
6.10 - rows: (NSRange)rows
6.11 - alternating: (BOOL)alternating
6.12 +- (Piece*) pieceForPlayer: (int)playerNum
6.13 {
6.14 - Piece *prototype = [[Piece alloc] initWithImageNamed: imageName scale: floor(grid.spacing.width * 0.8)];
6.15 - prototype.owner = [self.players objectAtIndex: playerNum];
6.16 - unsigned cols=grid.columns;
6.17 - for( unsigned row=rows.location; row<NSMaxRange(rows); row++ )
6.18 - for( unsigned col=0; col<cols; col++ ) {
6.19 - if( !alternating || ((row+col) & 1) == 0 ) {
6.20 - GridCell *cell = [grid cellAtRow: row column: col];
6.21 - if( cell ) {
6.22 - Piece *piece = [prototype copy];
6.23 - cell.bit = piece;
6.24 - [piece release];
6.25 - //cell.bit.rotation = random() % 360; // keeps pieces from looking too samey
6.26 - _numPieces[playerNum]++;
6.27 - }
6.28 - }
6.29 - }
6.30 - [prototype release];
6.31 + Piece *p = [[Piece alloc] initWithImageNamed: (playerNum==0 ?@"Green Ball.png" :@"Red Ball.png")
6.32 + scale: floor(_grid.spacing.width * 0.8)];
6.33 + p.owner = [self.players objectAtIndex: playerNum];
6.34 + p.name = playerNum ?@"2" :@"1";
6.35 + return [p autorelease];
6.36 }
6.37
6.38 -
6.39 - (Grid*) x_makeGrid
6.40 {
6.41 RectGrid *grid = [[[RectGrid alloc] initWithRows: 8 columns: 8 frame: _board.bounds] autorelease];
6.42 - CGPoint pos = grid.position;
6.43 + _grid = grid;
6.44 + CGPoint pos = _grid.position;
6.45 pos.x = floor((_board.bounds.size.width-grid.frame.size.width)/2);
6.46 - [grid addAllCells];
6.47 grid.position = pos;
6.48 grid.allowsMoves = YES;
6.49 grid.allowsCaptures = NO;
6.50 grid.cellColor = CreateGray(0.0, 0.25);
6.51 grid.altCellColor = CreateGray(1.0, 0.25);
6.52 grid.lineColor = nil;
6.53 - [self addPieces: @"Green Ball.png" toGrid: grid forPlayer: 0 rows: NSMakeRange(0,3) alternating: YES];
6.54 - [self addPieces: @"Red Ball.png" toGrid: grid forPlayer: 1 rows: NSMakeRange(5,3) alternating: YES];
6.55 +
6.56 + [grid addAllCells];
6.57 + for( int i=0; i<32; i++ ) {
6.58 + int row = i/4;
6.59 + [_cells addObject: [_grid cellAtRow: row column: 2*(i%4) + (row&1)]];
6.60 + }
6.61 + self.stateString = @"111111111111--------222222222222";
6.62 return grid;
6.63 }
6.64
6.65 @@ -79,12 +67,56 @@
6.66 self = [super initWithBoard: board];
6.67 if (self != nil) {
6.68 [self setNumberOfPlayers: 2];
6.69 - [board addSublayer: [self x_makeGrid]];
6.70 + _cells = [[NSMutableArray alloc] init];
6.71 + [self x_makeGrid];
6.72 + [board addSublayer: _grid];
6.73 [self nextPlayer];
6.74 +
6.75 + PreloadSound(@"Tink");
6.76 + PreloadSound(@"Funk");
6.77 + PreloadSound(@"Blow");
6.78 + PreloadSound(@"Pop");
6.79 }
6.80 return self;
6.81 }
6.82
6.83 +- (void) dealloc
6.84 +{
6.85 + [_cells release];
6.86 + [_grid release];
6.87 + [super dealloc];
6.88 +}
6.89 +
6.90 +
6.91 +- (NSString*) stateString
6.92 +{
6.93 + unichar state[_cells.count];
6.94 + int i = 0;
6.95 + for( GridCell *cell in _cells ) {
6.96 + NSString *ident = cell.bit.name;
6.97 + if( ident )
6.98 + state[i++] = [ident characterAtIndex: 0];
6.99 + else
6.100 + state[i++] = '-';
6.101 + }
6.102 + return [NSString stringWithCharacters: state length: i];
6.103 +}
6.104 +
6.105 +- (void) setStateString: (NSString*)state
6.106 +{
6.107 + _numPieces[0] = _numPieces[1] = 0;
6.108 + int i = 0;
6.109 + for( GridCell *cell in _cells ) {
6.110 + Piece *piece;
6.111 + switch( [state characterAtIndex: i++] ) {
6.112 + case '1': piece = [self pieceForPlayer: 0]; _numPieces[0]++; break;
6.113 + case '2': piece = [self pieceForPlayer: 1]; _numPieces[1]++; break;
6.114 + default: piece = nil; break;
6.115 + }
6.116 + cell.bit = piece;
6.117 + }
6.118 +}
6.119 +
6.120
6.121 - (BOOL) canBit: (Bit*)bit moveFrom: (id<BitHolder>)srcHolder to: (id<BitHolder>)dstHolder
6.122 {
6.123 @@ -101,8 +133,12 @@
6.124 {
6.125 Square *src=(Square*)srcHolder, *dst=(Square*)dstHolder;
6.126 int playerIndex = self.currentPlayer.index;
6.127 +
6.128 + if( self.currentMove.length==0 )
6.129 + [self.currentMove appendString: src.name];
6.130 + [self.currentMove appendString: dst.name];
6.131 +
6.132 BOOL isKing = ([bit valueForKey: @"King"] != nil);
6.133 -
6.134 PlaySound(isKing ?@"Funk" :@"Tink");
6.135
6.136 // "King" a piece that made it to the last row:
6.137 @@ -154,4 +190,22 @@
6.138 }
6.139
6.140
6.141 +- (BOOL) applyMoveString: (NSString*)move
6.142 +{
6.143 + int length = move.length;
6.144 + if( length<4 || (length&1) )
6.145 + return NO;
6.146 + GridCell *src = nil;
6.147 + for( int i=0; i<length; i+=2 ) {
6.148 + NSString *ident = [move substringWithRange: NSMakeRange(i,2)];
6.149 + GridCell *dst = [_grid cellWithName: ident];
6.150 + if( i > 0 )
6.151 + if( ! [self animateMoveFrom: src to: dst] )
6.152 + return NO;
6.153 + src = dst;
6.154 + }
6.155 + return YES;
6.156 +}
6.157 +
6.158 +
6.159 @end
7.1 --- a/Source/DemoBoardView.h Wed Mar 12 15:51:32 2008 -0700
7.2 +++ b/Source/DemoBoardView.h Sun Mar 16 15:06:47 2008 -0700
7.3 @@ -28,6 +28,7 @@
7.4 @interface DemoBoardView : BoardView
7.5 {
7.6 CATextLayer *_headline;
7.7 + IBOutlet NSSlider *_turnSlider;
7.8 }
7.9
7.10 - (IBAction) startGameFromMenu: (id)sender;
8.1 --- a/Source/DemoBoardView.m Wed Mar 12 15:51:32 2008 -0700
8.2 +++ b/Source/DemoBoardView.m Sun Mar 16 15:06:47 2008 -0700
8.3 @@ -43,7 +43,7 @@
8.4 @"TicTacToeGame", @"GoGame"};
8.5
8.6 /** Class name of the current game. */
8.7 -static NSString* sCurrentGameName = @"KlondikeGame";
8.8 +static NSString* sCurrentGameName = @"CheckersGame";
8.9
8.10
8.11 - (void) startGameNamed: (NSString*)gameClassName
8.12 @@ -89,6 +89,8 @@
8.13 alignment: kCALayerWidthSizable | kCALayerMinYMargin];
8.14
8.15 [self startGameNamed: sCurrentGameName];
8.16 +
8.17 + [_turnSlider bind: @"value" toObject: self withKeyPath: @"game.currentTurn" options: nil];
8.18 }
8.19
8.20
8.21 @@ -106,6 +108,10 @@
8.22 {
8.23 Game *game = self.game;
8.24 if( object == game ) {
8.25 + NSLog(@"maxTurn = %u, currentTurn=%u", self.game.maxTurn,self.game.currentTurn);
8.26 + _turnSlider.maxValue = self.game.maxTurn;
8.27 + _turnSlider.numberOfTickMarks = self.game.maxTurn+1;
8.28 +
8.29 Player *p = game.winner;
8.30 NSString *msg;
8.31 if( p ) {
8.32 @@ -114,6 +120,7 @@
8.33 } else {
8.34 p = game.currentPlayer;
8.35 msg = @"Your turn, %@";
8.36 + NSLog(@"Game state = '%@'", self.game.stateString);
8.37 }
8.38 _headline.string = [NSString stringWithFormat: msg, p.name];
8.39 }
9.1 --- a/Source/GGBLayer.h Wed Mar 12 15:51:32 2008 -0700
9.2 +++ b/Source/GGBLayer.h Sun Mar 16 15:06:47 2008 -0700
9.3 @@ -14,18 +14,24 @@
9.4
9.5
9.6 @interface GGBLayer : CALayer <NSCopying>
9.7 +{
9.8 + CABasicAnimation *_curAnimation;
9.9
9.10 -#if TARGET_OS_ASPEN
9.11 +#if ! TARGET_OS_ASPEN
9.12 +}
9.13 +#else
9.14 // For some reason, the CALayer class on iPhone OS doesn't have these!
9.15 -{
9.16 CGFloat _cornerRadius, _borderWidth;
9.17 CGColorRef _borderColor, _realBGColor;
9.18 unsigned int _autoresizingMask;
9.19 }
9.20 +
9.21 @property CGFloat cornerRadius, borderWidth;
9.22 @property CGColorRef borderColor;
9.23 #endif
9.24
9.25 - (void) redisplayAll;
9.26
9.27 +- (void) animateAndBlock: (NSString*)keyPath from: (id)from to: (id)to duration: (NSTimeInterval)duration;
9.28 +
9.29 @end
10.1 --- a/Source/GGBLayer.m Wed Mar 12 15:51:32 2008 -0700
10.2 +++ b/Source/GGBLayer.m Sun Mar 16 15:06:47 2008 -0700
10.3 @@ -30,6 +30,43 @@
10.4 }
10.5
10.6
10.7 +/*
10.8 +- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key
10.9 +{
10.10 + NSLog(@"%@[%p] addAnimation: %p forKey: %@",[self class],self,anim,key);
10.11 + [super addAnimation: anim forKey: key];
10.12 +}
10.13 +*/
10.14 +
10.15 +
10.16 +- (void) animateAndBlock: (NSString*)keyPath from: (id)from to: (id)to duration: (NSTimeInterval)duration
10.17 +{
10.18 + //WARNING: This code works, but is a mess. I hope to find a better way to do this. --Jens 3/16/08
10.19 + CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath: keyPath];
10.20 + anim.duration= duration;
10.21 + anim.fromValue = from;
10.22 + anim.toValue = to;
10.23 + anim.isRemovedOnCompletion = YES;
10.24 + anim.delegate = self;
10.25 + [self addAnimation:anim forKey: @"animateAndBlock:"];
10.26 + _curAnimation = (id)[self animationForKey: @"animateAndBlock:"];
10.27 + [self setValue: to forKeyPath: keyPath]; // animation doesn't update the property value
10.28 +
10.29 + // Now wait for it to finish:
10.30 + while( _curAnimation ) {
10.31 + [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode//NSEventTrackingRunLoopMode
10.32 + beforeDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]];
10.33 + }
10.34 +}
10.35 +
10.36 +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
10.37 +{
10.38 + if( anim==_curAnimation ) {
10.39 + _curAnimation = nil;
10.40 + }
10.41 +}
10.42 +
10.43 +
10.44 #if TARGET_OS_ASPEN
10.45
10.46 #pragma mark -
11.1 --- a/Source/GGBUtils.h Wed Mar 12 15:51:32 2008 -0700
11.2 +++ b/Source/GGBUtils.h Sun Mar 16 15:06:47 2008 -0700
11.3 @@ -30,5 +30,6 @@
11.4 void setObjCopy( id<NSCopying> *variable, id<NSCopying> newValue );
11.5
11.6
11.7 +void PreloadSound( NSString* name );
11.8 void PlaySound( NSString* name );
11.9 void Beep( void );
11.10 \ No newline at end of file
12.1 --- a/Source/GGBUtils.m Wed Mar 12 15:51:32 2008 -0700
12.2 +++ b/Source/GGBUtils.m Sun Mar 16 15:06:47 2008 -0700
12.3 @@ -42,6 +42,17 @@
12.4 }
12.5
12.6
12.7 +void PreloadSound( NSString* name )
12.8 +{
12.9 +#if ! TARGET_OS_ASPEN
12.10 + NSSound *sound = [[NSSound soundNamed: @"Pop"] copy];
12.11 + sound.volume = 0;
12.12 + [sound play];
12.13 + [sound release];
12.14 +#endif
12.15 +}
12.16 +
12.17 +
12.18 void PlaySound( NSString* name )
12.19 {
12.20 #if TARGET_OS_ASPEN
13.1 --- a/Source/Game.h Wed Mar 12 15:51:32 2008 -0700
13.2 +++ b/Source/Game.h Sun Mar 16 15:06:47 2008 -0700
13.3 @@ -20,7 +20,7 @@
13.4 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
13.5 THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13.6 */
13.7 -@class GGBLayer, Bit, Player;
13.8 +@class GGBLayer, Bit, BitHolder, Player;
13.9 @protocol BitHolder;
13.10
13.11
13.12 @@ -30,6 +30,9 @@
13.13 GGBLayer *_board;
13.14 NSArray *_players;
13.15 Player *_currentPlayer, *_winner;
13.16 + NSMutableString *_currentMove;
13.17 + NSMutableArray *_states, *_moves;
13.18 + unsigned _currentTurn;
13.19 }
13.20
13.21 /** Returns the human-readable name of this game.
13.22 @@ -41,6 +44,13 @@
13.23 @property (readonly, copy) NSArray *players;
13.24 @property (readonly) Player *currentPlayer, *winner;
13.25
13.26 +@property (readonly) NSArray *states, *moves;
13.27 +@property (readonly) unsigned maxTurn;
13.28 +@property unsigned currentTurn;
13.29 +@property (readonly) BOOL isLatestTurn;
13.30 +
13.31 +- (BOOL) animateMoveFrom: (BitHolder*)src to: (BitHolder*)dst;
13.32 +
13.33
13.34 // Methods for subclasses to implement:
13.35
13.36 @@ -48,6 +58,7 @@
13.37 it should add the necessary Grids, Pieces, Cards, Decks etc. to the board. */
13.38 - (id) initWithBoard: (GGBLayer*)board;
13.39
13.40 +
13.41 /** Should return YES if it is legal for the given bit to be moved from its current holder.
13.42 Default implementation always returns YES. */
13.43 - (BOOL) canBit: (Bit*)bit moveFrom: (id<BitHolder>)src;
13.44 @@ -56,6 +67,7 @@
13.45 Default implementation always returns YES. */
13.46 - (BOOL) canBit: (Bit*)bit moveFrom: (id<BitHolder>)src to: (id<BitHolder>)dst;
13.47
13.48 +
13.49 /** Should handle any side effects of a Bit's movement, such as captures or scoring.
13.50 Does not need to do the actual movement! That's already happened.
13.51 It should end by calling -endTurn, if the player's turn is over.
13.52 @@ -76,11 +88,18 @@
13.53 - (Player*) checkForWinner;
13.54
13.55
13.56 +@property (copy) NSString* stateString;
13.57 +- (BOOL) applyMoveString: (NSString*)move;
13.58 +
13.59 +
13.60 // Protected methods for subclasses to call:
13.61
13.62 /** Sets the number of players in the game. Subclass initializers should call this. */
13.63 - (void) setNumberOfPlayers: (unsigned)n;
13.64
13.65 +/** The current move in progress. Append text to it as the user makes moves. */
13.66 +@property (readonly) NSMutableString* currentMove;
13.67 +
13.68 /** Advance to the next player, when a turn is over. */
13.69 - (void) nextPlayer;
13.70
14.1 --- a/Source/Game.m Wed Mar 12 15:51:32 2008 -0700
14.2 +++ b/Source/Game.m Sun Mar 16 15:06:47 2008 -0700
14.3 @@ -22,6 +22,8 @@
14.4 */
14.5 #import "Game.h"
14.6 #import "Bit.h"
14.7 +#import "BitHolder.h"
14.8 +#import "QuartzUtils.h"
14.9
14.10
14.11 @interface Game ()
14.12 @@ -46,6 +48,9 @@
14.13 {
14.14 self = [super init];
14.15 if (self != nil) {
14.16 + _states = [[NSMutableArray alloc] init];
14.17 + _moves = [[NSMutableArray alloc] init];
14.18 + _currentMove = [[NSMutableString alloc] init];
14.19 _board = [board retain];
14.20 // Store a pointer to myself as the value of the "Game" property
14.21 // of my root layer. (CALayers can have arbitrary KV properties stored into them.)
14.22 @@ -60,11 +65,15 @@
14.23 {
14.24 [_board release];
14.25 [_players release];
14.26 + [_currentMove release];
14.27 + [_states release];
14.28 + [_moves release];
14.29 [super dealloc];
14.30 }
14.31
14.32
14.33 -@synthesize players=_players, currentPlayer=_currentPlayer, winner=_winner;
14.34 +@synthesize players=_players, currentPlayer=_currentPlayer, winner=_winner,
14.35 + currentMove=_currentMove, states=_states, moves=_moves;
14.36
14.37
14.38 - (void) setNumberOfPlayers: (unsigned)n
14.39 @@ -82,13 +91,35 @@
14.40 }
14.41
14.42
14.43 +- (void) addToMove: (NSString*)str;
14.44 +{
14.45 + [_currentMove appendString: str];
14.46 +}
14.47 +
14.48 +
14.49 +- (BOOL) _rememberState
14.50 +{
14.51 + if( self.isLatestTurn ) {
14.52 + [_states addObject: self.stateString];
14.53 + return YES;
14.54 + } else
14.55 + return NO;
14.56 +}
14.57 +
14.58 +
14.59 - (void) nextPlayer
14.60 {
14.61 + BOOL latestTurn = [self _rememberState];
14.62 if( ! _currentPlayer ) {
14.63 NSLog(@"*** The %@ Begins! ***", self.class);
14.64 self.currentPlayer = [_players objectAtIndex: 0];
14.65 } else {
14.66 self.currentPlayer = _currentPlayer.nextPlayer;
14.67 + if( latestTurn ) {
14.68 + [self willChangeValueForKey: @"currentTurn"];
14.69 + _currentTurn++;
14.70 + [self didChangeValueForKey: @"currentTurn"];
14.71 + }
14.72 }
14.73 NSLog(@"Current player is %@",_currentPlayer);
14.74 }
14.75 @@ -96,16 +127,88 @@
14.76
14.77 - (void) endTurn
14.78 {
14.79 - NSLog(@"--- End of turn");
14.80 + NSLog(@"--- End of turn (move was '%@')", _currentMove);
14.81 + if( self.isLatestTurn ) {
14.82 + [self willChangeValueForKey: @"maxTurn"];
14.83 + [_moves addObject: [[_currentMove copy] autorelease]];
14.84 + [_currentMove setString: @""];
14.85 + [self didChangeValueForKey: @"maxTurn"];
14.86 + }
14.87 +
14.88 Player *winner = [self checkForWinner];
14.89 if( winner ) {
14.90 NSLog(@"*** The %@ Ends! The winner is %@ ! ***", self.class, winner);
14.91 + [self _rememberState];
14.92 self.winner = winner;
14.93 } else
14.94 [self nextPlayer];
14.95 }
14.96
14.97
14.98 +- (unsigned) maxTurn
14.99 +{
14.100 + return _moves.count;
14.101 +}
14.102 +
14.103 +- (unsigned) currentTurn
14.104 +{
14.105 + return _currentTurn;
14.106 +}
14.107 +
14.108 +- (void) setCurrentTurn: (unsigned)turn
14.109 +{
14.110 + NSParameterAssert(turn<=self.maxTurn);
14.111 + if( turn != _currentTurn ) {
14.112 + if( turn==_currentTurn+1 ) {
14.113 + [self applyMoveString: [_moves objectAtIndex: _currentTurn]];
14.114 + } else {
14.115 + [CATransaction begin];
14.116 + [CATransaction setValue:(id)kCFBooleanTrue
14.117 + forKey:kCATransactionDisableActions];
14.118 + self.stateString = [_states objectAtIndex: turn];
14.119 + [CATransaction commit];
14.120 + }
14.121 + _currentTurn = turn;
14.122 + self.currentPlayer = [_players objectAtIndex: (turn % _players.count)];
14.123 + }
14.124 +}
14.125 +
14.126 +
14.127 +- (BOOL) isLatestTurn
14.128 +{
14.129 + return _currentTurn == MAX(_states.count,1)-1;
14.130 +}
14.131 +
14.132 +
14.133 +- (BOOL) animateMoveFrom: (BitHolder*)src to: (BitHolder*)dst
14.134 +{
14.135 + if( src==nil || dst==nil || dst==src )
14.136 + return NO;
14.137 + Bit *bit = [src canDragBit: src.bit];
14.138 + if( ! bit || ! [dst canDropBit: bit atPoint: GetCGRectCenter(dst.bounds)]
14.139 + || ! [self canBit: bit moveFrom: src to: dst] )
14.140 + return NO;
14.141 +
14.142 + ChangeSuperlayer(bit, _board.superlayer, -1);
14.143 + bit.pickedUp = YES;
14.144 + dst.highlighted = YES;
14.145 + [bit performSelector: @selector(setPickedUp:) withObject:nil afterDelay: 0.15];
14.146 + CGPoint endPosition = [dst convertPoint: GetCGRectCenter(dst.bounds) toLayer: bit.superlayer];
14.147 + [bit animateAndBlock: @"position"
14.148 + from: [NSValue valueWithPoint: NSPointFromCGPoint(bit.position)]
14.149 + to: [NSValue valueWithPoint: NSPointFromCGPoint(endPosition)]
14.150 + duration: 0.25];
14.151 + dst.bit = bit;
14.152 + dst.highlighted = NO;
14.153 + bit.pickedUp = NO;
14.154 +
14.155 + [src draggedBit: bit to: dst];
14.156 + [self bit: bit movedFrom: src to: dst];
14.157 + src = dst;
14.158 + return YES;
14.159 +}
14.160 +
14.161 +
14.162 #pragma mark -
14.163 #pragma mark GAMEPLAY METHODS TO BE OVERRIDDEN:
14.164
14.165 @@ -148,6 +251,11 @@
14.166 }
14.167
14.168
14.169 +- (NSString*) stateString {return @"";}
14.170 +- (void) setStateString: (NSString*)s { }
14.171 +
14.172 +- (BOOL) applyMoveString: (NSString*)move {return NO;}
14.173 +
14.174 @end
14.175
14.176
15.1 --- a/Source/GoGame.m Wed Mar 12 15:51:32 2008 -0700
15.2 +++ b/Source/GoGame.m Sun Mar 16 15:06:47 2008 -0700
15.3 @@ -87,6 +87,7 @@
15.4 [_captured[1] release];
15.5
15.6 [self nextPlayer];
15.7 + PreloadSound(@"Pop");
15.8 }
15.9 return self;
15.10 }
15.11 @@ -104,9 +105,15 @@
15.12 }
15.13
15.14
15.15 +- (BOOL) canBit: (Bit*)bit moveFrom: (id<BitHolder>)srcHolder
15.16 +{
15.17 + return (srcHolder==nil);
15.18 +}
15.19 +
15.20 +
15.21 - (BOOL) canBit: (Bit*)bit moveFrom: (id<BitHolder>)srcHolder to: (id<BitHolder>)dstHolder
15.22 {
15.23 - if( ! [dstHolder isKindOfClass: [Square class]] )
15.24 + if( srcHolder!=nil || ! [dstHolder isKindOfClass: [Square class]] )
15.25 return NO;
15.26 Square *dst=(Square*)dstHolder;
15.27
16.1 --- a/Source/Grid.h Wed Mar 12 15:51:32 2008 -0700
16.2 +++ b/Source/Grid.h Sun Mar 16 15:06:47 2008 -0700
16.3 @@ -67,6 +67,7 @@
16.4 /** Removes a particular cell, leaving a blank space. */
16.5 - (void) removeCellAtRow: (unsigned)row column: (unsigned)col;
16.6
16.7 +- (GridCell*) cellWithName: (NSString*)identifier;
16.8
16.9 // protected:
16.10 - (GridCell*) createCellAtRow: (unsigned)row column: (unsigned)col
17.1 --- a/Source/Grid.m Wed Mar 12 15:51:32 2008 -0700
17.2 +++ b/Source/Grid.m Sun Mar 16 15:06:47 2008 -0700
17.3 @@ -124,10 +124,11 @@
17.4 - (GridCell*) createCellAtRow: (unsigned)row column: (unsigned)col
17.5 suggestedFrame: (CGRect)frame
17.6 {
17.7 - return [[[_cellClass alloc] initWithGrid: self
17.8 + GridCell *cell = [[_cellClass alloc] initWithGrid: self
17.9 row: row column: col
17.10 - frame: frame]
17.11 - autorelease];
17.12 + frame: frame];
17.13 + cell.name = [NSString stringWithFormat: @"%c%u", ('A'+row),col];
17.14 + return [cell autorelease];
17.15 }
17.16
17.17
17.18 @@ -172,6 +173,16 @@
17.19 }
17.20
17.21
17.22 +- (GridCell*) cellWithName: (NSString*)name
17.23 +{
17.24 + for( CALayer *layer in self.sublayers )
17.25 + if( [layer isKindOfClass: [GridCell class]] )
17.26 + if( [name isEqualToString: ((GridCell*)layer).name] )
17.27 + return (GridCell*)layer;
17.28 + return nil;
17.29 +}
17.30 +
17.31 +
17.32 #pragma mark -
17.33 #pragma mark DRAWING:
17.34
18.1 --- a/Source/HexchequerGame.m Wed Mar 12 15:51:32 2008 -0700
18.2 +++ b/Source/HexchequerGame.m Sun Mar 16 15:06:47 2008 -0700
18.3 @@ -32,18 +32,31 @@
18.4
18.5 - (Grid*) x_makeGrid
18.6 {
18.7 - HexGrid *grid = [[[HexGrid alloc] initWithRows: 9 columns: 9 frame: _board.bounds] autorelease];
18.8 + HexGrid *grid = [[HexGrid alloc] initWithRows: 9 columns: 9 frame: _board.bounds];
18.9 + _grid = grid;
18.10 CGPoint pos = grid.position;
18.11 pos.x = floor((_board.bounds.size.width-grid.frame.size.width)/2);
18.12 grid.position = pos;
18.13 - [grid addCellsInHexagon];
18.14 grid.allowsMoves = YES;
18.15 grid.allowsCaptures = NO; // no land-on captures, that is
18.16 grid.cellColor = CreateGray(1.0, 0.25);
18.17 grid.lineColor = kTranslucentLightGrayColor;
18.18
18.19 - [self addPieces: @"Green Ball.png" toGrid: grid forPlayer: 0 rows: NSMakeRange(0,2) alternating: NO];
18.20 - [self addPieces: @"Red Ball.png" toGrid: grid forPlayer: 1 rows: NSMakeRange(7,2) alternating: NO];
18.21 + [grid addCellsInHexagon];
18.22 + for( int y=0; y<9; y++ ) {
18.23 + for( int x=0; x<9; x++ ) {
18.24 + GridCell *cell = [_grid cellAtRow: y column: x];
18.25 + if( cell )
18.26 + [_cells addObject: cell];
18.27 + }
18.28 + }
18.29 + self.stateString = @"111111111111111111-------------------------222222222222222222";
18.30 +
18.31 + [self performSelector: @selector(applyMoveString:) withObject: @"C4D4" afterDelay: 2.0];
18.32 + [self performSelector: @selector(applyMoveString:) withObject: @"G3F3" afterDelay: 5.0];
18.33 + [self performSelector: @selector(applyMoveString:) withObject: @"D4E4" afterDelay: 8.0];
18.34 + [self performSelector: @selector(applyMoveString:) withObject: @"F3D4" afterDelay: 11.0];
18.35 +
18.36 return grid;
18.37 }
18.38
18.39 @@ -64,8 +77,12 @@
18.40 {
18.41 Hex *src=(Hex*)srcHolder, *dst=(Hex*)dstHolder;
18.42 int playerIndex = self.currentPlayer.index;
18.43 - BOOL isKing = ([bit valueForKey: @"King"] != nil);
18.44 +
18.45 + if( self.currentMove.length==0 )
18.46 + [self.currentMove appendString: src.name];
18.47 + [self.currentMove appendString: dst.name];
18.48
18.49 + BOOL isKing = ([bit valueForKey: @"King"] != nil);
18.50 PlaySound(isKing ?@"Funk" :@"Tink");
18.51
18.52 // "King" a piece that made it to the last row:
19.1 --- a/Source/QuartzUtils.m Wed Mar 12 15:51:32 2008 -0700
19.2 +++ b/Source/QuartzUtils.m Sun Mar 16 15:06:47 2008 -0700
19.3 @@ -76,11 +76,11 @@
19.4 pos = [newSuperlayer convertPoint: pos fromLayer: layer.superlayer];
19.5 [layer retain];
19.6 [layer removeFromSuperlayer];
19.7 + layer.position = pos;
19.8 if( index >= 0 )
19.9 [newSuperlayer insertSublayer: layer atIndex: index];
19.10 else
19.11 [newSuperlayer addSublayer: layer];
19.12 - layer.position = pos;
19.13 [layer release];
19.14
19.15 [CATransaction commit];
20.1 --- a/Source/TicTacToeGame.m Wed Mar 12 15:51:32 2008 -0700
20.2 +++ b/Source/TicTacToeGame.m Sun Mar 16 15:06:47 2008 -0700
20.3 @@ -29,21 +29,13 @@
20.4
20.5 @implementation TicTacToeGame
20.6
20.7 -- (void) x_createDispenser: (NSString*)imageName forPlayer: (int)playerNumber
20.8 +- (Piece*) pieceForPlayer: (int)playerNumber
20.9 {
20.10 - Piece *p = [[Piece alloc] initWithImageNamed: imageName scale: 80];
20.11 + Piece *p = [[Piece alloc] initWithImageNamed: (playerNumber ? @"O.tiff" :@"X.tiff")
20.12 + scale: 80];
20.13 p.owner = [self.players objectAtIndex: playerNumber];
20.14 - CGFloat x = floor(CGRectGetMidX(_board.bounds));
20.15 -#if TARGET_OS_ASPEN
20.16 - x = x - 80 + 160*playerNumber;
20.17 - CGFloat y = 360;
20.18 -#else
20.19 - x += (playerNumber==0 ?-230 :230);
20.20 - CGFloat y = 175;
20.21 -#endif
20.22 - _dispenser[playerNumber] = [[Dispenser alloc] initWithPrototype: p quantity: 0
20.23 - frame: CGRectMake(x-45,y-45, 90,90)];
20.24 - [_board addSublayer: _dispenser[playerNumber]];
20.25 + p.name = (playerNumber ?@"O" :@"X");
20.26 + return [p autorelease];
20.27 }
20.28
20.29 - (id) initWithBoard: (GGBLayer*)board
20.30 @@ -62,8 +54,20 @@
20.31 [board addSublayer: _grid];
20.32
20.33 // Create piece dispensers for the two players:
20.34 - [self x_createDispenser: @"X.tiff" forPlayer: 0];
20.35 - [self x_createDispenser: @"O.tiff" forPlayer: 1];
20.36 + for( int playerNumber=0; playerNumber<=1; playerNumber++ ) {
20.37 + Piece *p = [self pieceForPlayer: playerNumber];
20.38 + CGFloat x = floor(CGRectGetMidX(_board.bounds));
20.39 +#if TARGET_OS_ASPEN
20.40 + x = x - 80 + 160*playerNumber;
20.41 + CGFloat y = 360;
20.42 +#else
20.43 + x += (playerNumber==0 ?-230 :230);
20.44 + CGFloat y = 175;
20.45 +#endif
20.46 + _dispenser[playerNumber] = [[Dispenser alloc] initWithPrototype: p quantity: 0
20.47 + frame: CGRectMake(x-45,y-45, 90,90)];
20.48 + [_board addSublayer: _dispenser[playerNumber]];
20.49 + }
20.50
20.51 // And they're off!
20.52 [self nextPlayer];
20.53 @@ -71,6 +75,34 @@
20.54 return self;
20.55 }
20.56
20.57 +
20.58 +- (NSString*) stateString
20.59 +{
20.60 + unichar str[10];
20.61 + for( int i=0; i<9; i++ ) {
20.62 + NSString *ident = [_grid cellAtRow: i/3 column: i%3].bit.name;
20.63 + if( ident==nil )
20.64 + str[i] = '-';
20.65 + else
20.66 + str[i] = [ident characterAtIndex: 0];
20.67 + }
20.68 + return [NSString stringWithCharacters: str length: 9];
20.69 +}
20.70 +
20.71 +- (void) setStateString: (NSString*)stateString
20.72 +{
20.73 + for( int i=0; i<9; i++ ) {
20.74 + Piece *piece;
20.75 + switch( [stateString characterAtIndex: i] ) {
20.76 + case 'X': case 'x': piece = [self pieceForPlayer: 0]; break;
20.77 + case 'O': case 'o': piece = [self pieceForPlayer: 1]; break;
20.78 + default: piece = nil; break;
20.79 + }
20.80 + [_grid cellAtRow: i/3 column: i%3].bit = piece;
20.81 + }
20.82 +}
20.83 +
20.84 +
20.85 - (Bit*) bitToPlaceInHolder: (id<BitHolder>)holder
20.86 {
20.87 if( holder.bit==nil && [holder isKindOfClass: [Square class]] )
20.88 @@ -79,6 +111,15 @@
20.89 return nil;
20.90 }
20.91
20.92 +
20.93 +- (void) bit: (Bit*)bit movedFrom: (id<BitHolder>)src to: (id<BitHolder>)dst
20.94 +{
20.95 + Square *square = (Square*)dst;
20.96 + int squareIndex = 3*square.row + square.column;
20.97 + [self.currentMove appendFormat: @"%@%i", bit.name, squareIndex];
20.98 + [super bit: bit movedFrom: src to: dst];
20.99 +}
20.100 +
20.101 - (void) nextPlayer
20.102 {
20.103 [super nextPlayer];