##// END OF EJS Templates
Merge with upstream
Fernando Perez -
r1452:7e1a3ed6 merge
parent child Browse files
Show More
@@ -0,0 +1,123
1 # encoding: utf-8
2
3 """The IPython Core Notification Center.
4
5 See docs/source/development/notification_blueprint.txt for an overview of the
6 notification module.
7 """
8
9 __docformat__ = "restructuredtext en"
10
11 #-----------------------------------------------------------------------------
12 # Copyright (C) 2008 The IPython Development Team
13 #
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
16 #-----------------------------------------------------------------------------
17
18
19 class NotificationCenter(object):
20 """Synchronous notification center
21
22 Example
23 -------
24 >>> import IPython.kernel.core.notification as notification
25 >>> def callback(theType, theSender, args={}):
26 ... print theType,theSender,args
27 ...
28 >>> notification.sharedCenter.add_observer(callback, 'NOTIFICATION_TYPE', None)
29 >>> notification.sharedCenter.post_notification('NOTIFICATION_TYPE', object()) # doctest:+ELLIPSIS
30 NOTIFICATION_TYPE ...
31
32 """
33 def __init__(self):
34 super(NotificationCenter, self).__init__()
35 self._init_observers()
36
37
38 def _init_observers(self):
39 """Initialize observer storage"""
40
41 self.registered_types = set() #set of types that are observed
42 self.registered_senders = set() #set of senders that are observed
43 self.observers = {} #map (type,sender) => callback (callable)
44
45
46 def post_notification(self, theType, sender, **kwargs):
47 """Post notification (type,sender,**kwargs) to all registered
48 observers.
49
50 Implementation
51 --------------
52 * If no registered observers, performance is O(1).
53 * Notificaiton order is undefined.
54 * Notifications are posted synchronously.
55 """
56
57 if(theType==None or sender==None):
58 raise Exception("NotificationCenter.post_notification requires \
59 type and sender.")
60
61 # If there are no registered observers for the type/sender pair
62 if((theType not in self.registered_types and
63 None not in self.registered_types) or
64 (sender not in self.registered_senders and
65 None not in self.registered_senders)):
66 return
67
68 for o in self._observers_for_notification(theType, sender):
69 o(theType, sender, args=kwargs)
70
71
72 def _observers_for_notification(self, theType, sender):
73 """Find all registered observers that should recieve notification"""
74
75 keys = (
76 (theType,sender),
77 (theType, None),
78 (None, sender),
79 (None,None)
80 )
81
82
83 obs = set()
84 for k in keys:
85 obs.update(self.observers.get(k, set()))
86
87 return obs
88
89
90 def add_observer(self, callback, theType, sender):
91 """Add an observer callback to this notification center.
92
93 The given callback will be called upon posting of notifications of
94 the given type/sender and will receive any additional kwargs passed
95 to post_notification.
96
97 Parameters
98 ----------
99 observerCallback : callable
100 Callable. Must take at least two arguments::
101 observerCallback(type, sender, args={})
102
103 theType : hashable
104 The notification type. If None, all notifications from sender
105 will be posted.
106
107 sender : hashable
108 The notification sender. If None, all notifications of theType
109 will be posted.
110 """
111 assert(callback != None)
112 self.registered_types.add(theType)
113 self.registered_senders.add(sender)
114 self.observers.setdefault((theType,sender), set()).add(callback)
115
116 def remove_all_observers(self):
117 """Removes all observers from this notification center"""
118
119 self._init_observers()
120
121
122
123 sharedCenter = NotificationCenter() No newline at end of file
@@ -0,0 +1,171
1 # encoding: utf-8
2
3 """This file contains unittests for the notification.py module."""
4
5 __docformat__ = "restructuredtext en"
6
7 #-----------------------------------------------------------------------------
8 # Copyright (C) 2008 The IPython Development Team
9 #
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
12 #-----------------------------------------------------------------------------
13
14 #-----------------------------------------------------------------------------
15 # Imports
16 #-----------------------------------------------------------------------------
17
18 import unittest
19 import IPython.kernel.core.notification as notification
20 from nose.tools import timed
21
22 #
23 # Supporting test classes
24 #
25
26 class Observer(object):
27 """docstring for Observer"""
28 def __init__(self, expectedType, expectedSender,
29 center=notification.sharedCenter, **kwargs):
30 super(Observer, self).__init__()
31 self.expectedType = expectedType
32 self.expectedSender = expectedSender
33 self.expectedKwArgs = kwargs
34 self.recieved = False
35 center.add_observer(self.callback,
36 self.expectedType,
37 self.expectedSender)
38
39
40 def callback(self, theType, sender, args={}):
41 """callback"""
42
43 assert(theType == self.expectedType or
44 self.expectedType == None)
45 assert(sender == self.expectedSender or
46 self.expectedSender == None)
47 assert(args == self.expectedKwArgs)
48 self.recieved = True
49
50
51 def verify(self):
52 """verify"""
53
54 assert(self.recieved)
55
56 def reset(self):
57 """reset"""
58
59 self.recieved = False
60
61
62
63 class Notifier(object):
64 """docstring for Notifier"""
65 def __init__(self, theType, **kwargs):
66 super(Notifier, self).__init__()
67 self.theType = theType
68 self.kwargs = kwargs
69
70 def post(self, center=notification.sharedCenter):
71 """fire"""
72
73 center.post_notification(self.theType, self,
74 **self.kwargs)
75
76
77 #
78 # Test Cases
79 #
80
81 class NotificationTests(unittest.TestCase):
82 """docstring for NotificationTests"""
83
84 def tearDown(self):
85 notification.sharedCenter.remove_all_observers()
86
87 def test_notification_delivered(self):
88 """Test that notifications are delivered"""
89 expectedType = 'EXPECTED_TYPE'
90 sender = Notifier(expectedType)
91 observer = Observer(expectedType, sender)
92
93 sender.post()
94
95 observer.verify()
96
97
98 def test_type_specificity(self):
99 """Test that observers are registered by type"""
100
101 expectedType = 1
102 unexpectedType = "UNEXPECTED_TYPE"
103 sender = Notifier(expectedType)
104 unexpectedSender = Notifier(unexpectedType)
105 observer = Observer(expectedType, sender)
106
107 sender.post()
108 unexpectedSender.post()
109
110 observer.verify()
111
112
113 def test_sender_specificity(self):
114 """Test that observers are registered by sender"""
115
116 expectedType = "EXPECTED_TYPE"
117 sender1 = Notifier(expectedType)
118 sender2 = Notifier(expectedType)
119 observer = Observer(expectedType, sender1)
120
121 sender1.post()
122 sender2.post()
123
124 observer.verify()
125
126
127 def test_remove_all_observers(self):
128 """White-box test for remove_all_observers"""
129
130 for i in xrange(10):
131 Observer('TYPE', None, center=notification.sharedCenter)
132
133 self.assert_(len(notification.sharedCenter.observers[('TYPE',None)]) >= 10,
134 "observers registered")
135
136 notification.sharedCenter.remove_all_observers()
137
138 self.assert_(len(notification.sharedCenter.observers) == 0, "observers removed")
139
140
141 def test_any_sender(self):
142 """test_any_sender"""
143
144 expectedType = "EXPECTED_TYPE"
145 sender1 = Notifier(expectedType)
146 sender2 = Notifier(expectedType)
147 observer = Observer(expectedType, None)
148
149
150 sender1.post()
151 observer.verify()
152
153 observer.reset()
154 sender2.post()
155 observer.verify()
156
157
158 @timed(.01)
159 def test_post_performance(self):
160 """Test that post_notification, even with many registered irrelevant
161 observers is fast"""
162
163 for i in xrange(10):
164 Observer("UNRELATED_TYPE", None)
165
166 o = Observer('EXPECTED_TYPE', None)
167
168 notification.sharedCenter.post_notification('EXPECTED_TYPE', self)
169
170 o.verify()
171
@@ -0,0 +1,47
1 .. Notification:
2
3 ==========================================
4 IPython.kernel.core.notification blueprint
5 ==========================================
6
7 Overview
8 ========
9 The :mod:`IPython.kernel.core.notification` module will provide a simple implementation of a notification center and support for the observer pattern within the :mod:`IPython.kernel.core`. The main intended use case is to provide notification of Interpreter events to an observing frontend during the execution of a single block of code.
10
11 Functional Requirements
12 =======================
13 The notification center must:
14 * Provide synchronous notification of events to all registered observers.
15 * Provide typed or labeled notification types
16 * Allow observers to register callbacks for individual or all notification types
17 * Allow observers to register callbacks for events from individual or all notifying objects
18 * Notification to the observer consists of the notification type, notifying object and user-supplied extra information [implementation: as keyword parameters to the registered callback]
19 * Perform as O(1) in the case of no registered observers.
20 * Permit out-of-process or cross-network extension.
21
22 What's not included
23 ==============================================================
24 As written, the :mod:`IPython.kernel.core.notificaiton` module does not:
25 * Provide out-of-process or network notifications [these should be handled by a separate, Twisted aware module in :mod:`IPython.kernel`].
26 * Provide zope.interface-style interfaces for the notification system [these should also be provided by the :mod:`IPython.kernel` module]
27
28 Use Cases
29 =========
30 The following use cases describe the main intended uses of the notificaiton module and illustrate the main success scenario for each use case:
31
32 1. Dwight Schroot is writing a frontend for the IPython project. His frontend is stuck in the stone age and must communicate synchronously with an IPython.kernel.core.Interpreter instance. Because code is executed in blocks by the Interpreter, Dwight's UI freezes every time he executes a long block of code. To keep track of the progress of his long running block, Dwight adds the following code to his frontend's set-up code::
33 from IPython.kernel.core.notification import NotificationCenter
34 center = NotificationCenter.sharedNotificationCenter
35 center.registerObserver(self, type=IPython.kernel.core.Interpreter.STDOUT_NOTIFICATION_TYPE, notifying_object=self.interpreter, callback=self.stdout_notification)
36
37 and elsewhere in his front end::
38 def stdout_notification(self, type, notifying_object, out_string=None):
39 self.writeStdOut(out_string)
40
41 If everything works, the Interpreter will (according to its published API) fire a notification via the :data:`IPython.kernel.core.notification.sharedCenter` of type :const:`STD_OUT_NOTIFICATION_TYPE` before writing anything to stdout [it's up to the Intereter implementation to figure out when to do this]. The notificaiton center will then call the registered callbacks for that event type (in this case, Dwight's frontend's stdout_notification method). Again, according to its API, the Interpreter provides an additional keyword argument when firing the notificaiton of out_string, a copy of the string it will write to stdout.
42
43 Like magic, Dwight's frontend is able to provide output, even during long-running calculations. Now if Jim could just convince Dwight to use Twisted...
44
45 2. Boss Hog is writing a frontend for the IPython project. Because Boss Hog is stuck in the stone age, his frontend will be written in a new Fortran-like dialect of python and will run only from the command line. Because he doesn't need any fancy notification system and is used to worrying about every cycle on his rat-wheel powered mini, Boss Hog is adamant that the new notification system not produce any performance penalty. As they say in Hazard county, there's no such thing as a free lunch. If he wanted zero overhead, he should have kept using IPython 0.8. Instead, those tricky Duke boys slide in a suped-up bridge-out jumpin' awkwardly confederate-lovin' notification module that imparts only a constant (and small) performance penalty when the Interpreter (or any other object) fires an event for which there are no registered observers. Of course, the same notificaiton-enabled Interpreter can then be used in frontends that require notifications, thus saving the IPython project from a nasty civil war.
46
47 3. Barry is wrting a frontend for the IPython project. Because Barry's front end is the *new hotness*, it uses an asynchronous event model to communicate with a Twisted :mod:`~IPython.kernel.engineservice` that communicates with the IPython :class:`~IPython.kernel.core.interpreter.Interpreter`. Using the :mod:`IPython.kernel.notification` module, an asynchronous wrapper on the :mod:`IPython.kernel.core.notification` module, Barry's frontend can register for notifications from the interpreter that are delivered asynchronously. Even if Barry's frontend is running on a separate process or even host from the Interpreter, the notifications are delivered, as if by dark and twisted magic. Just like Dwight's frontend, Barry's frontend can now recieve notifications of e.g. writing to stdout/stderr, opening/closing an external file, an exception in the executing code, etc. No newline at end of file
@@ -1,505 +1,560
1 1 # encoding: utf-8
2 2 # -*- test-case-name: IPython.frontend.cocoa.tests.test_cocoa_frontend -*-
3 3
4 4 """PyObjC classes to provide a Cocoa frontend to the
5 5 IPython.kernel.engineservice.IEngineBase.
6 6
7 7 To add an IPython interpreter to a cocoa app, instantiate an
8 8 IPythonCocoaController in a XIB and connect its textView outlet to an
9 9 NSTextView instance in your UI. That's it.
10 10
11 11 Author: Barry Wark
12 12 """
13 13
14 14 __docformat__ = "restructuredtext en"
15 15
16 16 #-----------------------------------------------------------------------------
17 17 # Copyright (C) 2008 The IPython Development Team
18 18 #
19 19 # Distributed under the terms of the BSD License. The full license is in
20 20 # the file COPYING, distributed as part of this software.
21 21 #-----------------------------------------------------------------------------
22 22
23 23 #-----------------------------------------------------------------------------
24 24 # Imports
25 25 #-----------------------------------------------------------------------------
26 26
27 27 import sys
28 28 import objc
29 29 import uuid
30 30
31 31 from Foundation import NSObject, NSMutableArray, NSMutableDictionary,\
32 32 NSLog, NSNotificationCenter, NSMakeRange,\
33 33 NSLocalizedString, NSIntersectionRange,\
34 34 NSString, NSAutoreleasePool
35 35
36 36 from AppKit import NSApplicationWillTerminateNotification, NSBeep,\
37 37 NSTextView, NSRulerView, NSVerticalRuler
38 38
39 39 from pprint import saferepr
40 40
41 41 import IPython
42 42 from IPython.kernel.engineservice import ThreadedEngineService
43 43 from IPython.frontend.frontendbase import AsyncFrontEndBase
44 44
45 45 from twisted.internet.threads import blockingCallFromThread
46 46 from twisted.python.failure import Failure
47 47
48 #------------------------------------------------------------------------------
48 #-----------------------------------------------------------------------------
49 49 # Classes to implement the Cocoa frontend
50 #------------------------------------------------------------------------------
50 #-----------------------------------------------------------------------------
51 51
52 52 # TODO:
53 53 # 1. use MultiEngineClient and out-of-process engine rather than
54 54 # ThreadedEngineService?
55 55 # 2. integrate Xgrid launching of engines
56 56
57 57 class AutoreleasePoolWrappedThreadedEngineService(ThreadedEngineService):
58 58 """Wrap all blocks in an NSAutoreleasePool"""
59 59
60 60 def wrapped_execute(self, msg, lines):
61 61 """wrapped_execute"""
62 62 try:
63 63 p = NSAutoreleasePool.alloc().init()
64 result = self.shell.execute(lines)
65 except Exception,e:
66 # This gives the following:
67 # et=exception class
68 # ev=exception class instance
69 # tb=traceback object
70 et,ev,tb = sys.exc_info()
71 # This call adds attributes to the exception value
72 et,ev,tb = self.shell.formatTraceback(et,ev,tb,msg)
73 # Add another attribute
74
75 # Create a new exception with the new attributes
76 e = et(ev._ipython_traceback_text)
77 e._ipython_engine_info = msg
78
79 # Re-raise
80 raise e
64 result = super(AutoreleasePoolWrappedThreadedEngineService,
65 self).wrapped_execute(msg, lines)
81 66 finally:
82 67 p.drain()
83 68
84 69 return result
85 70
86 def execute(self, lines):
87 # Only import this if we are going to use this class
88 from twisted.internet import threads
89 71
90 msg = {'engineid':self.id,
91 'method':'execute',
92 'args':[lines]}
93 72
94 d = threads.deferToThread(self.wrapped_execute, msg, lines)
95 d.addCallback(self.addIDToResult)
96 return d
73 class Cell(NSObject):
74 """
75 Representation of the prompts, input and output of a cell in the
76 frontend
77 """
78
79 blockNumber = objc.ivar().unsigned_long()
80 blockID = objc.ivar()
81 inputBlock = objc.ivar()
82 output = objc.ivar()
83
84
85
86 class CellBlock(object):
87 """
88 Storage for information about text ranges relating to a single cell
89 """
90
91
92 def __init__(self, inputPromptRange, inputRange=None, outputPromptRange=None,
93 outputRange=None):
94 super(CellBlock, self).__init__()
95 self.inputPromptRange = inputPromptRange
96 self.inputRange = inputRange
97 self.outputPromptRange = outputPromptRange
98 self.outputRange = outputRange
99
100 def update_ranges_for_insertion(self, text, textRange):
101 """Update ranges for text insertion at textRange"""
102
103 for r in [self.inputPromptRange,self.inputRange,
104 self.outputPromptRange, self.outputRange]:
105 if(r == None):
106 continue
107 intersection = NSIntersectionRange(r,textRange)
108 if(intersection.length == 0): #ranges don't intersect
109 if r.location >= textRange.location:
110 r.location += len(text)
111 else: #ranges intersect
112 if(r.location > textRange.location):
113 offset = len(text) - intersection.length
114 r.length -= offset
115 r.location += offset
116 elif(r.location == textRange.location):
117 r.length += len(text) - intersection.length
118 else:
119 r.length -= intersection.length
120
121
122 def update_ranges_for_deletion(self, textRange):
123 """Update ranges for text deletion at textRange"""
124
125 for r in [self.inputPromptRange,self.inputRange,
126 self.outputPromptRange, self.outputRange]:
127 if(r==None):
128 continue
129 intersection = NSIntersectionRange(r, textRange)
130 if(intersection.length == 0): #ranges don't intersect
131 if r.location >= textRange.location:
132 r.location -= textRange.length
133 else: #ranges intersect
134 if(r.location > textRange.location):
135 offset = intersection.length
136 r.length -= offset
137 r.location += offset
138 elif(r.location == textRange.location):
139 r.length += intersection.length
140 else:
141 r.length -= intersection.length
142
143 def __repr__(self):
144 return 'CellBlock('+ str((self.inputPromptRange,
145 self.inputRange,
146 self.outputPromptRange,
147 self.outputRange)) + ')'
148
149
97 150
98 151
99 152 class IPythonCocoaController(NSObject, AsyncFrontEndBase):
100 153 userNS = objc.ivar() #mirror of engine.user_ns (key=>str(value))
101 154 waitingForEngine = objc.ivar().bool()
102 155 textView = objc.IBOutlet()
103 156
104 157 def init(self):
105 158 self = super(IPythonCocoaController, self).init()
106 159 AsyncFrontEndBase.__init__(self,
107 160 engine=AutoreleasePoolWrappedThreadedEngineService())
108 161 if(self != None):
109 162 self._common_init()
110 163
111 164 return self
112 165
113 166 def _common_init(self):
114 167 """_common_init"""
115 168
116 169 self.userNS = NSMutableDictionary.dictionary()
117 170 self.waitingForEngine = False
118 171
119 172 self.lines = {}
120 173 self.tabSpaces = 4
121 174 self.tabUsesSpaces = True
122 175 self.currentBlockID = self.next_block_ID()
123 self.blockRanges = {} # blockID=>NSRange
176 self.blockRanges = {} # blockID=>CellBlock
124 177
125 178
126 179 def awakeFromNib(self):
127 180 """awakeFromNib"""
128 181
129 182 self._common_init()
130 183
131 184 # Start the IPython engine
132 185 self.engine.startService()
133 186 NSLog('IPython engine started')
134 187
135 188 # Register for app termination
136 189 nc = NSNotificationCenter.defaultCenter()
137 190 nc.addObserver_selector_name_object_(
138 191 self,
139 192 'appWillTerminate:',
140 193 NSApplicationWillTerminateNotification,
141 194 None)
142 195
143 196 self.textView.setDelegate_(self)
144 197 self.textView.enclosingScrollView().setHasVerticalRuler_(True)
145 198 r = NSRulerView.alloc().initWithScrollView_orientation_(
146 199 self.textView.enclosingScrollView(),
147 200 NSVerticalRuler)
148 201 self.verticalRulerView = r
149 202 self.verticalRulerView.setClientView_(self.textView)
150 203 self._start_cli_banner()
204 self.start_new_block()
151 205
152 206
153 207 def appWillTerminate_(self, notification):
154 208 """appWillTerminate"""
155 209
156 210 self.engine.stopService()
157 211
158 212
159 213 def complete(self, token):
160 214 """Complete token in engine's user_ns
161 215
162 216 Parameters
163 217 ----------
164 218 token : string
165 219
166 220 Result
167 221 ------
168 222 Deferred result of
169 223 IPython.kernel.engineservice.IEngineBase.complete
170 224 """
171 225
172 226 return self.engine.complete(token)
173 227
174 228
175 229 def execute(self, block, blockID=None):
176 230 self.waitingForEngine = True
177 231 self.willChangeValueForKey_('commandHistory')
178 232 d = super(IPythonCocoaController, self).execute(block,
179 233 blockID)
180 234 d.addBoth(self._engine_done)
181 235 d.addCallback(self._update_user_ns)
182 236
183 237 return d
184 238
185 239
186 240 def push_(self, namespace):
187 241 """Push dictionary of key=>values to python namespace"""
188 242
189 243 self.waitingForEngine = True
190 244 self.willChangeValueForKey_('commandHistory')
191 245 d = self.engine.push(namespace)
192 246 d.addBoth(self._engine_done)
193 247 d.addCallback(self._update_user_ns)
194 248
195 249
196 250 def pull_(self, keys):
197 251 """Pull keys from python namespace"""
198 252
199 253 self.waitingForEngine = True
200 254 result = blockingCallFromThread(self.engine.pull, keys)
201 255 self.waitingForEngine = False
202 256
203 257 @objc.signature('v@:@I')
204 258 def executeFileAtPath_encoding_(self, path, encoding):
205 259 """Execute file at path in an empty namespace. Update the engine
206 260 user_ns with the resulting locals."""
207 261
208 262 lines,err = NSString.stringWithContentsOfFile_encoding_error_(
209 263 path,
210 264 encoding,
211 265 None)
212 266 self.engine.execute(lines)
213 267
214 268
215 269 def _engine_done(self, x):
216 270 self.waitingForEngine = False
217 271 self.didChangeValueForKey_('commandHistory')
218 272 return x
219 273
220 274 def _update_user_ns(self, result):
221 275 """Update self.userNS from self.engine's namespace"""
222 276 d = self.engine.keys()
223 277 d.addCallback(self._get_engine_namespace_values_for_keys)
224 278
225 279 return result
226 280
227 281
228 282 def _get_engine_namespace_values_for_keys(self, keys):
229 283 d = self.engine.pull(keys)
230 284 d.addCallback(self._store_engine_namespace_values, keys=keys)
231 285
232 286
233 287 def _store_engine_namespace_values(self, values, keys=[]):
234 288 assert(len(values) == len(keys))
235 289 self.willChangeValueForKey_('userNS')
236 290 for (k,v) in zip(keys,values):
237 291 self.userNS[k] = saferepr(v)
238 292 self.didChangeValueForKey_('userNS')
239 293
240 294
241 295 def update_cell_prompt(self, result, blockID=None):
296 print self.blockRanges
242 297 if(isinstance(result, Failure)):
243 self.insert_text(self.input_prompt(),
244 textRange=NSMakeRange(self.blockRanges[blockID].location,0),
245 scrollToVisible=False
246 )
298 prompt = self.input_prompt()
299
247 300 else:
248 self.insert_text(self.input_prompt(number=result['number']),
249 textRange=NSMakeRange(self.blockRanges[blockID].location,0),
301 prompt = self.input_prompt(number=result['number'])
302
303 r = self.blockRanges[blockID].inputPromptRange
304 self.insert_text(prompt,
305 textRange=r,
250 306 scrollToVisible=False
251 307 )
252 308
253 309 return result
254 310
255 311
256 312 def render_result(self, result):
257 313 blockID = result['blockID']
258 inputRange = self.blockRanges[blockID]
314 inputRange = self.blockRanges[blockID].inputRange
259 315 del self.blockRanges[blockID]
260 316
261 317 #print inputRange,self.current_block_range()
262 318 self.insert_text('\n' +
263 319 self.output_prompt(number=result['number']) +
264 320 result.get('display',{}).get('pprint','') +
265 321 '\n\n',
266 322 textRange=NSMakeRange(inputRange.location+inputRange.length,
267 323 0))
268 324 return result
269 325
270 326
271 327 def render_error(self, failure):
328 print failure
329 blockID = failure.blockID
330 inputRange = self.blockRanges[blockID].inputRange
272 331 self.insert_text('\n' +
273 332 self.output_prompt() +
274 333 '\n' +
275 334 failure.getErrorMessage() +
276 '\n\n')
335 '\n\n',
336 textRange=NSMakeRange(inputRange.location +
337 inputRange.length,
338 0))
277 339 self.start_new_block()
278 340 return failure
279 341
280 342
281 343 def _start_cli_banner(self):
282 344 """Print banner"""
283 345
284 346 banner = """IPython1 %s -- An enhanced Interactive Python.""" % \
285 347 IPython.__version__
286 348
287 349 self.insert_text(banner + '\n\n')
288 350
289 351
290 352 def start_new_block(self):
291 353 """"""
292 354
293 355 self.currentBlockID = self.next_block_ID()
356 self.blockRanges[self.currentBlockID] = self.new_cell_block()
357 self.insert_text(self.input_prompt(),
358 textRange=self.current_block_range().inputPromptRange)
294 359
295 360
296 361
297 362 def next_block_ID(self):
298 363
299 364 return uuid.uuid4()
300 365
366 def new_cell_block(self):
367 """A new CellBlock at the end of self.textView.textStorage()"""
368
369 return CellBlock(NSMakeRange(self.textView.textStorage().length(),
370 0), #len(self.input_prompt())),
371 NSMakeRange(self.textView.textStorage().length(),# + len(self.input_prompt()),
372 0))
373
374
301 375 def current_block_range(self):
302 376 return self.blockRanges.get(self.currentBlockID,
303 NSMakeRange(self.textView.textStorage().length(),
304 0))
377 self.new_cell_block())
305 378
306 379 def current_block(self):
307 380 """The current block's text"""
308 381
309 return self.text_for_range(self.current_block_range())
382 return self.text_for_range(self.current_block_range().inputRange)
310 383
311 384 def text_for_range(self, textRange):
312 385 """text_for_range"""
313 386
314 387 ts = self.textView.textStorage()
315 388 return ts.string().substringWithRange_(textRange)
316 389
317 390 def current_line(self):
318 block = self.text_for_range(self.current_block_range())
391 block = self.text_for_range(self.current_block_range().inputRange)
319 392 block = block.split('\n')
320 393 return block[-1]
321 394
322 395
323 396 def insert_text(self, string=None, textRange=None, scrollToVisible=True):
324 397 """Insert text into textView at textRange, updating blockRanges
325 398 as necessary
326 399 """
327
328 400 if(textRange == None):
329 401 #range for end of text
330 402 textRange = NSMakeRange(self.textView.textStorage().length(), 0)
331 403
332 for r in self.blockRanges.itervalues():
333 intersection = NSIntersectionRange(r,textRange)
334 if(intersection.length == 0): #ranges don't intersect
335 if r.location >= textRange.location:
336 r.location += len(string)
337 else: #ranges intersect
338 if(r.location <= textRange.location):
339 assert(intersection.length == textRange.length)
340 r.length += textRange.length
341 else:
342 r.location += intersection.length
343 404
344 405 self.textView.replaceCharactersInRange_withString_(
345 406 textRange, string)
346 self.textView.setSelectedRange_(
347 NSMakeRange(textRange.location+len(string), 0))
407
408 for r in self.blockRanges.itervalues():
409 r.update_ranges_for_insertion(string, textRange)
410
411 self.textView.setSelectedRange_(textRange)
348 412 if(scrollToVisible):
349 413 self.textView.scrollRangeToVisible_(textRange)
350 414
351 415
352 416
353
354 417 def replace_current_block_with_string(self, textView, string):
355 418 textView.replaceCharactersInRange_withString_(
356 self.current_block_range(),
419 self.current_block_range().inputRange,
357 420 string)
358 self.current_block_range().length = len(string)
421 self.current_block_range().inputRange.length = len(string)
359 422 r = NSMakeRange(textView.textStorage().length(), 0)
360 423 textView.scrollRangeToVisible_(r)
361 424 textView.setSelectedRange_(r)
362 425
363 426
364 427 def current_indent_string(self):
365 428 """returns string for indent or None if no indent"""
366 429
367 430 return self._indent_for_block(self.current_block())
368 431
369 432
370 433 def _indent_for_block(self, block):
371 434 lines = block.split('\n')
372 435 if(len(lines) > 1):
373 436 currentIndent = len(lines[-1]) - len(lines[-1].lstrip())
374 437 if(currentIndent == 0):
375 438 currentIndent = self.tabSpaces
376 439
377 440 if(self.tabUsesSpaces):
378 441 result = ' ' * currentIndent
379 442 else:
380 443 result = '\t' * (currentIndent/self.tabSpaces)
381 444 else:
382 445 result = None
383 446
384 447 return result
385 448
386 449
387 450 # NSTextView delegate methods...
388 451 def textView_doCommandBySelector_(self, textView, selector):
389 452 assert(textView == self.textView)
390 453 NSLog("textView_doCommandBySelector_: "+selector)
391 454
392 455
393 456 if(selector == 'insertNewline:'):
394 457 indent = self.current_indent_string()
395 458 if(indent):
396 459 line = indent + self.current_line()
397 460 else:
398 461 line = self.current_line()
399 462
400 463 if(self.is_complete(self.current_block())):
401 464 self.execute(self.current_block(),
402 465 blockID=self.currentBlockID)
403 466 self.start_new_block()
404 467
405 468 return True
406 469
407 470 return False
408 471
409 472 elif(selector == 'moveUp:'):
410 473 prevBlock = self.get_history_previous(self.current_block())
411 474 if(prevBlock != None):
412 475 self.replace_current_block_with_string(textView, prevBlock)
413 476 else:
414 477 NSBeep()
415 478 return True
416 479
417 480 elif(selector == 'moveDown:'):
418 481 nextBlock = self.get_history_next()
419 482 if(nextBlock != None):
420 483 self.replace_current_block_with_string(textView, nextBlock)
421 484 else:
422 485 NSBeep()
423 486 return True
424 487
425 488 elif(selector == 'moveToBeginningOfParagraph:'):
426 489 textView.setSelectedRange_(NSMakeRange(
427 self.current_block_range().location,
490 self.current_block_range().inputRange.location,
428 491 0))
429 492 return True
430 493 elif(selector == 'moveToEndOfParagraph:'):
431 494 textView.setSelectedRange_(NSMakeRange(
432 self.current_block_range().location + \
433 self.current_block_range().length, 0))
495 self.current_block_range().inputRange.location + \
496 self.current_block_range().inputRange.length, 0))
434 497 return True
435 498 elif(selector == 'deleteToEndOfParagraph:'):
436 499 if(textView.selectedRange().location <= \
437 500 self.current_block_range().location):
438 # Intersect the selected range with the current line range
439 if(self.current_block_range().length < 0):
440 self.blockRanges[self.currentBlockID].length = 0
441
442 r = NSIntersectionRange(textView.rangesForUserTextChange()[0],
443 self.current_block_range())
444
445 if(r.length > 0): #no intersection
446 textView.setSelectedRange_(r)
501 raise NotImplemented()
447 502
448 503 return False # don't actually handle the delete
449 504
450 505 elif(selector == 'insertTab:'):
451 506 if(len(self.current_line().strip()) == 0): #only white space
452 507 return False
453 508 else:
454 509 self.textView.complete_(self)
455 510 return True
456 511
457 512 elif(selector == 'deleteBackward:'):
458 513 #if we're at the beginning of the current block, ignore
459 514 if(textView.selectedRange().location == \
460 self.current_block_range().location):
515 self.current_block_range().inputRange.location):
461 516 return True
462 517 else:
463 self.current_block_range().length-=1
518 for r in self.blockRanges.itervalues():
519 deleteRange = textView.selectedRange
520 if(deleteRange.length == 0):
521 deleteRange.location -= 1
522 deleteRange.length = 1
523 r.update_ranges_for_deletion(deleteRange)
464 524 return False
465 525 return False
466 526
467 527
468 528 def textView_shouldChangeTextInRanges_replacementStrings_(self,
469 529 textView, ranges, replacementStrings):
470 530 """
471 531 Delegate method for NSTextView.
472 532
473 533 Refuse change text in ranges not at end, but make those changes at
474 534 end.
475 535 """
476 536
477 537 assert(len(ranges) == len(replacementStrings))
478 538 allow = True
479 539 for r,s in zip(ranges, replacementStrings):
480 540 r = r.rangeValue()
481 541 if(textView.textStorage().length() > 0 and
482 r.location < self.current_block_range().location):
542 r.location < self.current_block_range().inputRange.location):
483 543 self.insert_text(s)
484 544 allow = False
485 545
486
487 self.blockRanges.setdefault(self.currentBlockID,
488 self.current_block_range()).length +=\
489 len(s)
490
491 546 return allow
492 547
493 548 def textView_completions_forPartialWordRange_indexOfSelectedItem_(self,
494 549 textView, words, charRange, index):
495 550 try:
496 551 ts = textView.textStorage()
497 552 token = ts.string().substringWithRange_(charRange)
498 553 completions = blockingCallFromThread(self.complete, token)
499 554 except:
500 555 completions = objc.nil
501 556 NSBeep()
502 557
503 558 return (completions,0)
504 559
505 560
This diff has been collapsed as it changes many lines, (1033 lines changed) Show them Hide them
@@ -1,3423 +1,3424
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
3 3 <data>
4 4 <int key="IBDocument.SystemTarget">1050</int>
5 5 <string key="IBDocument.SystemVersion">9D34</string>
6 6 <string key="IBDocument.InterfaceBuilderVersion">629</string>
7 7 <string key="IBDocument.AppKitVersion">949.33</string>
8 8 <string key="IBDocument.HIToolboxVersion">352.00</string>
9 9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10 10 <bool key="EncodedWithXMLCoder">YES</bool>
11 11 <integer value="416"/>
12 12 <integer value="29"/>
13 13 </object>
14 14 <object class="NSArray" key="IBDocument.PluginDependencies">
15 15 <bool key="EncodedWithXMLCoder">YES</bool>
16 16 <string id="885801228">com.apple.InterfaceBuilderKit</string>
17 17 <string id="113577022">com.apple.InterfaceBuilder.CocoaPlugin</string>
18 18 </object>
19 19 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
20 20 <bool key="EncodedWithXMLCoder">YES</bool>
21 21 <object class="NSCustomObject" id="1021">
22 22 <string key="NSClassName" id="190635311">NSApplication</string>
23 23 </object>
24 24 <object class="NSCustomObject" id="1014">
25 25 <string key="NSClassName">FirstResponder</string>
26 26 </object>
27 27 <object class="NSCustomObject" id="1050">
28 28 <reference key="NSClassName" ref="190635311"/>
29 29 </object>
30 30 <object class="NSMenu" id="649796088">
31 31 <string key="NSTitle">AMainMenu</string>
32 32 <object class="NSMutableArray" key="NSMenuItems">
33 33 <bool key="EncodedWithXMLCoder">YES</bool>
34 34 <object class="NSMenuItem" id="694149608">
35 35 <reference key="NSMenu" ref="649796088"/>
36 36 <string key="NSTitle" id="837240250">IPython1Sandbox</string>
37 37 <string key="NSKeyEquiv" id="255189770"/>
38 38 <int key="NSKeyEquivModMask">1048576</int>
39 39 <int key="NSMnemonicLoc">2147483647</int>
40 <object class="NSCustomResource" key="NSOnImage" id="985281305">
41 <string key="NSClassName" id="60114142">NSImage</string>
40 <object class="NSCustomResource" key="NSOnImage" id="271266416">
41 <string key="NSClassName" id="375865337">NSImage</string>
42 42 <string key="NSResourceName">NSMenuCheckmark</string>
43 43 </object>
44 <object class="NSCustomResource" key="NSMixedImage" id="351279908">
45 <reference key="NSClassName" ref="60114142"/>
44 <object class="NSCustomResource" key="NSMixedImage" id="508123839">
45 <reference key="NSClassName" ref="375865337"/>
46 46 <string key="NSResourceName">NSMenuMixedState</string>
47 47 </object>
48 48 <string key="NSAction">submenuAction:</string>
49 49 <object class="NSMenu" key="NSSubmenu" id="110575045">
50 50 <reference key="NSTitle" ref="837240250"/>
51 51 <object class="NSMutableArray" key="NSMenuItems">
52 52 <bool key="EncodedWithXMLCoder">YES</bool>
53 53 <object class="NSMenuItem" id="238522557">
54 54 <reference key="NSMenu" ref="110575045"/>
55 55 <string key="NSTitle">About IPython1Sandbox</string>
56 56 <reference key="NSKeyEquiv" ref="255189770"/>
57 57 <int key="NSMnemonicLoc">2147483647</int>
58 <reference key="NSOnImage" ref="985281305"/>
59 <reference key="NSMixedImage" ref="351279908"/>
58 <reference key="NSOnImage" ref="271266416"/>
59 <reference key="NSMixedImage" ref="508123839"/>
60 60 </object>
61 61 <object class="NSMenuItem" id="304266470">
62 62 <reference key="NSMenu" ref="110575045"/>
63 63 <bool key="NSIsDisabled">YES</bool>
64 64 <bool key="NSIsSeparator">YES</bool>
65 65 <reference key="NSTitle" ref="255189770"/>
66 66 <reference key="NSKeyEquiv" ref="255189770"/>
67 67 <int key="NSKeyEquivModMask">1048576</int>
68 68 <int key="NSMnemonicLoc">2147483647</int>
69 <reference key="NSOnImage" ref="985281305"/>
70 <reference key="NSMixedImage" ref="351279908"/>
69 <reference key="NSOnImage" ref="271266416"/>
70 <reference key="NSMixedImage" ref="508123839"/>
71 71 </object>
72 72 <object class="NSMenuItem" id="609285721">
73 73 <reference key="NSMenu" ref="110575045"/>
74 74 <string type="base64-UTF8" key="NSTitle">UHJlZmVyZW5jZXPigKY</string>
75 75 <string key="NSKeyEquiv">,</string>
76 76 <int key="NSKeyEquivModMask">1048576</int>
77 77 <int key="NSMnemonicLoc">2147483647</int>
78 <reference key="NSOnImage" ref="985281305"/>
79 <reference key="NSMixedImage" ref="351279908"/>
78 <reference key="NSOnImage" ref="271266416"/>
79 <reference key="NSMixedImage" ref="508123839"/>
80 80 </object>
81 81 <object class="NSMenuItem" id="481834944">
82 82 <reference key="NSMenu" ref="110575045"/>
83 83 <bool key="NSIsDisabled">YES</bool>
84 84 <bool key="NSIsSeparator">YES</bool>
85 85 <reference key="NSTitle" ref="255189770"/>
86 86 <reference key="NSKeyEquiv" ref="255189770"/>
87 87 <int key="NSKeyEquivModMask">1048576</int>
88 88 <int key="NSMnemonicLoc">2147483647</int>
89 <reference key="NSOnImage" ref="985281305"/>
90 <reference key="NSMixedImage" ref="351279908"/>
89 <reference key="NSOnImage" ref="271266416"/>
90 <reference key="NSMixedImage" ref="508123839"/>
91 91 </object>
92 92 <object class="NSMenuItem" id="1046388886">
93 93 <reference key="NSMenu" ref="110575045"/>
94 94 <string key="NSTitle" id="642338826">Services</string>
95 95 <reference key="NSKeyEquiv" ref="255189770"/>
96 96 <int key="NSKeyEquivModMask">1048576</int>
97 97 <int key="NSMnemonicLoc">2147483647</int>
98 <reference key="NSOnImage" ref="985281305"/>
99 <reference key="NSMixedImage" ref="351279908"/>
98 <reference key="NSOnImage" ref="271266416"/>
99 <reference key="NSMixedImage" ref="508123839"/>
100 100 <string key="NSAction">submenuAction:</string>
101 101 <object class="NSMenu" key="NSSubmenu" id="752062318">
102 102 <reference key="NSTitle" ref="642338826"/>
103 103 <object class="NSMutableArray" key="NSMenuItems">
104 104 <bool key="EncodedWithXMLCoder">YES</bool>
105 105 </object>
106 106 <string key="NSName">_NSServicesMenu</string>
107 107 </object>
108 108 </object>
109 109 <object class="NSMenuItem" id="646227648">
110 110 <reference key="NSMenu" ref="110575045"/>
111 111 <bool key="NSIsDisabled">YES</bool>
112 112 <bool key="NSIsSeparator">YES</bool>
113 113 <reference key="NSTitle" ref="255189770"/>
114 114 <reference key="NSKeyEquiv" ref="255189770"/>
115 115 <int key="NSKeyEquivModMask">1048576</int>
116 116 <int key="NSMnemonicLoc">2147483647</int>
117 <reference key="NSOnImage" ref="985281305"/>
118 <reference key="NSMixedImage" ref="351279908"/>
117 <reference key="NSOnImage" ref="271266416"/>
118 <reference key="NSMixedImage" ref="508123839"/>
119 119 </object>
120 120 <object class="NSMenuItem" id="755159360">
121 121 <reference key="NSMenu" ref="110575045"/>
122 122 <string key="NSTitle">Hide IPython1Sandbox</string>
123 123 <string key="NSKeyEquiv" id="940330891">h</string>
124 124 <int key="NSKeyEquivModMask">1048576</int>
125 125 <int key="NSMnemonicLoc">2147483647</int>
126 <reference key="NSOnImage" ref="985281305"/>
127 <reference key="NSMixedImage" ref="351279908"/>
126 <reference key="NSOnImage" ref="271266416"/>
127 <reference key="NSMixedImage" ref="508123839"/>
128 128 </object>
129 129 <object class="NSMenuItem" id="342932134">
130 130 <reference key="NSMenu" ref="110575045"/>
131 131 <string key="NSTitle">Hide Others</string>
132 132 <reference key="NSKeyEquiv" ref="940330891"/>
133 133 <int key="NSKeyEquivModMask">1572864</int>
134 134 <int key="NSMnemonicLoc">2147483647</int>
135 <reference key="NSOnImage" ref="985281305"/>
136 <reference key="NSMixedImage" ref="351279908"/>
135 <reference key="NSOnImage" ref="271266416"/>
136 <reference key="NSMixedImage" ref="508123839"/>
137 137 </object>
138 138 <object class="NSMenuItem" id="908899353">
139 139 <reference key="NSMenu" ref="110575045"/>
140 140 <string key="NSTitle">Show All</string>
141 141 <reference key="NSKeyEquiv" ref="255189770"/>
142 142 <int key="NSKeyEquivModMask">1048576</int>
143 143 <int key="NSMnemonicLoc">2147483647</int>
144 <reference key="NSOnImage" ref="985281305"/>
145 <reference key="NSMixedImage" ref="351279908"/>
144 <reference key="NSOnImage" ref="271266416"/>
145 <reference key="NSMixedImage" ref="508123839"/>
146 146 </object>
147 147 <object class="NSMenuItem" id="1056857174">
148 148 <reference key="NSMenu" ref="110575045"/>
149 149 <bool key="NSIsDisabled">YES</bool>
150 150 <bool key="NSIsSeparator">YES</bool>
151 151 <reference key="NSTitle" ref="255189770"/>
152 152 <reference key="NSKeyEquiv" ref="255189770"/>
153 153 <int key="NSKeyEquivModMask">1048576</int>
154 154 <int key="NSMnemonicLoc">2147483647</int>
155 <reference key="NSOnImage" ref="985281305"/>
156 <reference key="NSMixedImage" ref="351279908"/>
155 <reference key="NSOnImage" ref="271266416"/>
156 <reference key="NSMixedImage" ref="508123839"/>
157 157 </object>
158 158 <object class="NSMenuItem" id="632727374">
159 159 <reference key="NSMenu" ref="110575045"/>
160 160 <string key="NSTitle">Quit IPython1Sandbox</string>
161 161 <string key="NSKeyEquiv">q</string>
162 162 <int key="NSKeyEquivModMask">1048576</int>
163 163 <int key="NSMnemonicLoc">2147483647</int>
164 <reference key="NSOnImage" ref="985281305"/>
165 <reference key="NSMixedImage" ref="351279908"/>
164 <reference key="NSOnImage" ref="271266416"/>
165 <reference key="NSMixedImage" ref="508123839"/>
166 166 </object>
167 167 </object>
168 168 <string key="NSName">_NSAppleMenu</string>
169 169 </object>
170 170 </object>
171 171 <object class="NSMenuItem" id="379814623">
172 172 <reference key="NSMenu" ref="649796088"/>
173 173 <string key="NSTitle" id="881404960">File</string>
174 174 <reference key="NSKeyEquiv" ref="255189770"/>
175 175 <int key="NSKeyEquivModMask">1048576</int>
176 176 <int key="NSMnemonicLoc">2147483647</int>
177 <reference key="NSOnImage" ref="985281305"/>
178 <reference key="NSMixedImage" ref="351279908"/>
177 <reference key="NSOnImage" ref="271266416"/>
178 <reference key="NSMixedImage" ref="508123839"/>
179 179 <string key="NSAction">submenuAction:</string>
180 180 <object class="NSMenu" key="NSSubmenu" id="720053764">
181 181 <reference key="NSTitle" ref="881404960"/>
182 182 <object class="NSMutableArray" key="NSMenuItems">
183 183 <bool key="EncodedWithXMLCoder">YES</bool>
184 184 <object class="NSMenuItem" id="705341025">
185 185 <reference key="NSMenu" ref="720053764"/>
186 186 <string key="NSTitle">New</string>
187 187 <string key="NSKeyEquiv">n</string>
188 188 <int key="NSKeyEquivModMask">1048576</int>
189 189 <int key="NSMnemonicLoc">2147483647</int>
190 <reference key="NSOnImage" ref="985281305"/>
191 <reference key="NSMixedImage" ref="351279908"/>
190 <reference key="NSOnImage" ref="271266416"/>
191 <reference key="NSMixedImage" ref="508123839"/>
192 192 </object>
193 193 <object class="NSMenuItem" id="722745758">
194 194 <reference key="NSMenu" ref="720053764"/>
195 195 <string type="base64-UTF8" key="NSTitle">T3BlbuKApg</string>
196 196 <string key="NSKeyEquiv">o</string>
197 197 <int key="NSKeyEquivModMask">1048576</int>
198 198 <int key="NSMnemonicLoc">2147483647</int>
199 <reference key="NSOnImage" ref="985281305"/>
200 <reference key="NSMixedImage" ref="351279908"/>
199 <reference key="NSOnImage" ref="271266416"/>
200 <reference key="NSMixedImage" ref="508123839"/>
201 201 </object>
202 202 <object class="NSMenuItem" id="1025936716">
203 203 <reference key="NSMenu" ref="720053764"/>
204 204 <string key="NSTitle" id="975517829">Open Recent</string>
205 205 <reference key="NSKeyEquiv" ref="255189770"/>
206 206 <int key="NSKeyEquivModMask">1048576</int>
207 207 <int key="NSMnemonicLoc">2147483647</int>
208 <reference key="NSOnImage" ref="985281305"/>
209 <reference key="NSMixedImage" ref="351279908"/>
208 <reference key="NSOnImage" ref="271266416"/>
209 <reference key="NSMixedImage" ref="508123839"/>
210 210 <string key="NSAction">submenuAction:</string>
211 211 <object class="NSMenu" key="NSSubmenu" id="1065607017">
212 212 <reference key="NSTitle" ref="975517829"/>
213 213 <object class="NSMutableArray" key="NSMenuItems">
214 214 <bool key="EncodedWithXMLCoder">YES</bool>
215 215 <object class="NSMenuItem" id="759406840">
216 216 <reference key="NSMenu" ref="1065607017"/>
217 217 <string key="NSTitle">Clear Menu</string>
218 218 <reference key="NSKeyEquiv" ref="255189770"/>
219 219 <int key="NSKeyEquivModMask">1048576</int>
220 220 <int key="NSMnemonicLoc">2147483647</int>
221 <reference key="NSOnImage" ref="985281305"/>
222 <reference key="NSMixedImage" ref="351279908"/>
221 <reference key="NSOnImage" ref="271266416"/>
222 <reference key="NSMixedImage" ref="508123839"/>
223 223 </object>
224 224 </object>
225 225 <string key="NSName">_NSRecentDocumentsMenu</string>
226 226 </object>
227 227 </object>
228 228 <object class="NSMenuItem" id="425164168">
229 229 <reference key="NSMenu" ref="720053764"/>
230 230 <bool key="NSIsDisabled">YES</bool>
231 231 <bool key="NSIsSeparator">YES</bool>
232 232 <reference key="NSTitle" ref="255189770"/>
233 233 <reference key="NSKeyEquiv" ref="255189770"/>
234 234 <int key="NSKeyEquivModMask">1048576</int>
235 235 <int key="NSMnemonicLoc">2147483647</int>
236 <reference key="NSOnImage" ref="985281305"/>
237 <reference key="NSMixedImage" ref="351279908"/>
236 <reference key="NSOnImage" ref="271266416"/>
237 <reference key="NSMixedImage" ref="508123839"/>
238 238 </object>
239 239 <object class="NSMenuItem" id="776162233">
240 240 <reference key="NSMenu" ref="720053764"/>
241 241 <string key="NSTitle">Close</string>
242 242 <string key="NSKeyEquiv">w</string>
243 243 <int key="NSKeyEquivModMask">1048576</int>
244 244 <int key="NSMnemonicLoc">2147483647</int>
245 <reference key="NSOnImage" ref="985281305"/>
246 <reference key="NSMixedImage" ref="351279908"/>
245 <reference key="NSOnImage" ref="271266416"/>
246 <reference key="NSMixedImage" ref="508123839"/>
247 247 </object>
248 248 <object class="NSMenuItem" id="1023925487">
249 249 <reference key="NSMenu" ref="720053764"/>
250 250 <string key="NSTitle">Save</string>
251 251 <string key="NSKeyEquiv">s</string>
252 252 <int key="NSKeyEquivModMask">1048576</int>
253 253 <int key="NSMnemonicLoc">2147483647</int>
254 <reference key="NSOnImage" ref="985281305"/>
255 <reference key="NSMixedImage" ref="351279908"/>
254 <reference key="NSOnImage" ref="271266416"/>
255 <reference key="NSMixedImage" ref="508123839"/>
256 256 </object>
257 257 <object class="NSMenuItem" id="117038363">
258 258 <reference key="NSMenu" ref="720053764"/>
259 259 <string type="base64-UTF8" key="NSTitle">U2F2ZSBBc+KApg</string>
260 260 <string key="NSKeyEquiv">S</string>
261 261 <int key="NSKeyEquivModMask">1179648</int>
262 262 <int key="NSMnemonicLoc">2147483647</int>
263 <reference key="NSOnImage" ref="985281305"/>
264 <reference key="NSMixedImage" ref="351279908"/>
263 <reference key="NSOnImage" ref="271266416"/>
264 <reference key="NSMixedImage" ref="508123839"/>
265 265 </object>
266 266 <object class="NSMenuItem" id="579971712">
267 267 <reference key="NSMenu" ref="720053764"/>
268 268 <string key="NSTitle">Revert to Saved</string>
269 269 <reference key="NSKeyEquiv" ref="255189770"/>
270 270 <int key="NSMnemonicLoc">2147483647</int>
271 <reference key="NSOnImage" ref="985281305"/>
272 <reference key="NSMixedImage" ref="351279908"/>
271 <reference key="NSOnImage" ref="271266416"/>
272 <reference key="NSMixedImage" ref="508123839"/>
273 273 </object>
274 274 <object class="NSMenuItem" id="1010469920">
275 275 <reference key="NSMenu" ref="720053764"/>
276 276 <bool key="NSIsDisabled">YES</bool>
277 277 <bool key="NSIsSeparator">YES</bool>
278 278 <reference key="NSTitle" ref="255189770"/>
279 279 <reference key="NSKeyEquiv" ref="255189770"/>
280 280 <int key="NSKeyEquivModMask">1048576</int>
281 281 <int key="NSMnemonicLoc">2147483647</int>
282 <reference key="NSOnImage" ref="985281305"/>
283 <reference key="NSMixedImage" ref="351279908"/>
282 <reference key="NSOnImage" ref="271266416"/>
283 <reference key="NSMixedImage" ref="508123839"/>
284 284 </object>
285 285 <object class="NSMenuItem" id="294629803">
286 286 <reference key="NSMenu" ref="720053764"/>
287 287 <string key="NSTitle">Page Setup...</string>
288 288 <string key="NSKeyEquiv">P</string>
289 289 <int key="NSKeyEquivModMask">1179648</int>
290 290 <int key="NSMnemonicLoc">2147483647</int>
291 <reference key="NSOnImage" ref="985281305"/>
292 <reference key="NSMixedImage" ref="351279908"/>
291 <reference key="NSOnImage" ref="271266416"/>
292 <reference key="NSMixedImage" ref="508123839"/>
293 293 <reference key="NSToolTip" ref="255189770"/>
294 294 </object>
295 295 <object class="NSMenuItem" id="49223823">
296 296 <reference key="NSMenu" ref="720053764"/>
297 297 <string type="base64-UTF8" key="NSTitle">UHJpbnTigKY</string>
298 298 <string key="NSKeyEquiv">p</string>
299 299 <int key="NSKeyEquivModMask">1048576</int>
300 300 <int key="NSMnemonicLoc">2147483647</int>
301 <reference key="NSOnImage" ref="985281305"/>
302 <reference key="NSMixedImage" ref="351279908"/>
301 <reference key="NSOnImage" ref="271266416"/>
302 <reference key="NSMixedImage" ref="508123839"/>
303 303 </object>
304 304 </object>
305 305 </object>
306 306 </object>
307 307 <object class="NSMenuItem" id="952259628">
308 308 <reference key="NSMenu" ref="649796088"/>
309 309 <string key="NSTitle" id="1037326483">Edit</string>
310 310 <reference key="NSKeyEquiv" ref="255189770"/>
311 311 <int key="NSKeyEquivModMask">1048576</int>
312 312 <int key="NSMnemonicLoc">2147483647</int>
313 <reference key="NSOnImage" ref="985281305"/>
314 <reference key="NSMixedImage" ref="351279908"/>
313 <reference key="NSOnImage" ref="271266416"/>
314 <reference key="NSMixedImage" ref="508123839"/>
315 315 <string key="NSAction">submenuAction:</string>
316 316 <object class="NSMenu" key="NSSubmenu" id="789758025">
317 317 <reference key="NSTitle" ref="1037326483"/>
318 318 <object class="NSMutableArray" key="NSMenuItems">
319 319 <bool key="EncodedWithXMLCoder">YES</bool>
320 320 <object class="NSMenuItem" id="1058277027">
321 321 <reference key="NSMenu" ref="789758025"/>
322 322 <string key="NSTitle">Undo</string>
323 323 <string key="NSKeyEquiv">z</string>
324 324 <int key="NSKeyEquivModMask">1048576</int>
325 325 <int key="NSMnemonicLoc">2147483647</int>
326 <reference key="NSOnImage" ref="985281305"/>
327 <reference key="NSMixedImage" ref="351279908"/>
326 <reference key="NSOnImage" ref="271266416"/>
327 <reference key="NSMixedImage" ref="508123839"/>
328 328 </object>
329 329 <object class="NSMenuItem" id="790794224">
330 330 <reference key="NSMenu" ref="789758025"/>
331 331 <string key="NSTitle">Redo</string>
332 332 <string key="NSKeyEquiv">Z</string>
333 333 <int key="NSKeyEquivModMask">1179648</int>
334 334 <int key="NSMnemonicLoc">2147483647</int>
335 <reference key="NSOnImage" ref="985281305"/>
336 <reference key="NSMixedImage" ref="351279908"/>
335 <reference key="NSOnImage" ref="271266416"/>
336 <reference key="NSMixedImage" ref="508123839"/>
337 337 </object>
338 338 <object class="NSMenuItem" id="1040322652">
339 339 <reference key="NSMenu" ref="789758025"/>
340 340 <bool key="NSIsDisabled">YES</bool>
341 341 <bool key="NSIsSeparator">YES</bool>
342 342 <reference key="NSTitle" ref="255189770"/>
343 343 <reference key="NSKeyEquiv" ref="255189770"/>
344 344 <int key="NSKeyEquivModMask">1048576</int>
345 345 <int key="NSMnemonicLoc">2147483647</int>
346 <reference key="NSOnImage" ref="985281305"/>
347 <reference key="NSMixedImage" ref="351279908"/>
346 <reference key="NSOnImage" ref="271266416"/>
347 <reference key="NSMixedImage" ref="508123839"/>
348 348 </object>
349 349 <object class="NSMenuItem" id="296257095">
350 350 <reference key="NSMenu" ref="789758025"/>
351 351 <string key="NSTitle">Cut</string>
352 352 <string key="NSKeyEquiv">x</string>
353 353 <int key="NSKeyEquivModMask">1048576</int>
354 354 <int key="NSMnemonicLoc">2147483647</int>
355 <reference key="NSOnImage" ref="985281305"/>
356 <reference key="NSMixedImage" ref="351279908"/>
355 <reference key="NSOnImage" ref="271266416"/>
356 <reference key="NSMixedImage" ref="508123839"/>
357 357 </object>
358 358 <object class="NSMenuItem" id="860595796">
359 359 <reference key="NSMenu" ref="789758025"/>
360 360 <string key="NSTitle">Copy</string>
361 361 <string key="NSKeyEquiv">c</string>
362 362 <int key="NSKeyEquivModMask">1048576</int>
363 363 <int key="NSMnemonicLoc">2147483647</int>
364 <reference key="NSOnImage" ref="985281305"/>
365 <reference key="NSMixedImage" ref="351279908"/>
364 <reference key="NSOnImage" ref="271266416"/>
365 <reference key="NSMixedImage" ref="508123839"/>
366 366 </object>
367 367 <object class="NSMenuItem" id="29853731">
368 368 <reference key="NSMenu" ref="789758025"/>
369 369 <string key="NSTitle">Paste</string>
370 370 <string key="NSKeyEquiv">v</string>
371 371 <int key="NSKeyEquivModMask">1048576</int>
372 372 <int key="NSMnemonicLoc">2147483647</int>
373 <reference key="NSOnImage" ref="985281305"/>
374 <reference key="NSMixedImage" ref="351279908"/>
373 <reference key="NSOnImage" ref="271266416"/>
374 <reference key="NSMixedImage" ref="508123839"/>
375 375 </object>
376 376 <object class="NSMenuItem" id="437104165">
377 377 <reference key="NSMenu" ref="789758025"/>
378 378 <string key="NSTitle">Delete</string>
379 379 <reference key="NSKeyEquiv" ref="255189770"/>
380 380 <int key="NSKeyEquivModMask">1048576</int>
381 381 <int key="NSMnemonicLoc">2147483647</int>
382 <reference key="NSOnImage" ref="985281305"/>
383 <reference key="NSMixedImage" ref="351279908"/>
382 <reference key="NSOnImage" ref="271266416"/>
383 <reference key="NSMixedImage" ref="508123839"/>
384 384 </object>
385 385 <object class="NSMenuItem" id="583158037">
386 386 <reference key="NSMenu" ref="789758025"/>
387 387 <string key="NSTitle">Select All</string>
388 388 <string key="NSKeyEquiv">a</string>
389 389 <int key="NSKeyEquivModMask">1048576</int>
390 390 <int key="NSMnemonicLoc">2147483647</int>
391 <reference key="NSOnImage" ref="985281305"/>
392 <reference key="NSMixedImage" ref="351279908"/>
391 <reference key="NSOnImage" ref="271266416"/>
392 <reference key="NSMixedImage" ref="508123839"/>
393 393 </object>
394 394 <object class="NSMenuItem" id="212016141">
395 395 <reference key="NSMenu" ref="789758025"/>
396 396 <bool key="NSIsDisabled">YES</bool>
397 397 <bool key="NSIsSeparator">YES</bool>
398 398 <reference key="NSTitle" ref="255189770"/>
399 399 <reference key="NSKeyEquiv" ref="255189770"/>
400 400 <int key="NSKeyEquivModMask">1048576</int>
401 401 <int key="NSMnemonicLoc">2147483647</int>
402 <reference key="NSOnImage" ref="985281305"/>
403 <reference key="NSMixedImage" ref="351279908"/>
402 <reference key="NSOnImage" ref="271266416"/>
403 <reference key="NSMixedImage" ref="508123839"/>
404 404 </object>
405 405 <object class="NSMenuItem" id="892235320">
406 406 <reference key="NSMenu" ref="789758025"/>
407 407 <string key="NSTitle" id="688083180">Find</string>
408 408 <reference key="NSKeyEquiv" ref="255189770"/>
409 409 <int key="NSKeyEquivModMask">1048576</int>
410 410 <int key="NSMnemonicLoc">2147483647</int>
411 <reference key="NSOnImage" ref="985281305"/>
412 <reference key="NSMixedImage" ref="351279908"/>
411 <reference key="NSOnImage" ref="271266416"/>
412 <reference key="NSMixedImage" ref="508123839"/>
413 413 <string key="NSAction">submenuAction:</string>
414 414 <object class="NSMenu" key="NSSubmenu" id="963351320">
415 415 <reference key="NSTitle" ref="688083180"/>
416 416 <object class="NSMutableArray" key="NSMenuItems">
417 417 <bool key="EncodedWithXMLCoder">YES</bool>
418 418 <object class="NSMenuItem" id="447796847">
419 419 <reference key="NSMenu" ref="963351320"/>
420 420 <string type="base64-UTF8" key="NSTitle">RmluZOKApg</string>
421 421 <string key="NSKeyEquiv" id="469505129">f</string>
422 422 <int key="NSKeyEquivModMask">1048576</int>
423 423 <int key="NSMnemonicLoc">2147483647</int>
424 <reference key="NSOnImage" ref="985281305"/>
425 <reference key="NSMixedImage" ref="351279908"/>
424 <reference key="NSOnImage" ref="271266416"/>
425 <reference key="NSMixedImage" ref="508123839"/>
426 426 <int key="NSTag">1</int>
427 427 </object>
428 428 <object class="NSMenuItem" id="326711663">
429 429 <reference key="NSMenu" ref="963351320"/>
430 430 <string key="NSTitle">Find Next</string>
431 431 <string key="NSKeyEquiv" id="762398675">g</string>
432 432 <int key="NSKeyEquivModMask">1048576</int>
433 433 <int key="NSMnemonicLoc">2147483647</int>
434 <reference key="NSOnImage" ref="985281305"/>
435 <reference key="NSMixedImage" ref="351279908"/>
434 <reference key="NSOnImage" ref="271266416"/>
435 <reference key="NSMixedImage" ref="508123839"/>
436 436 <int key="NSTag">2</int>
437 437 </object>
438 438 <object class="NSMenuItem" id="270902937">
439 439 <reference key="NSMenu" ref="963351320"/>
440 440 <string key="NSTitle">Find Previous</string>
441 441 <string key="NSKeyEquiv" id="819654342">G</string>
442 442 <int key="NSKeyEquivModMask">1179648</int>
443 443 <int key="NSMnemonicLoc">2147483647</int>
444 <reference key="NSOnImage" ref="985281305"/>
445 <reference key="NSMixedImage" ref="351279908"/>
444 <reference key="NSOnImage" ref="271266416"/>
445 <reference key="NSMixedImage" ref="508123839"/>
446 446 <int key="NSTag">3</int>
447 447 </object>
448 448 <object class="NSMenuItem" id="159080638">
449 449 <reference key="NSMenu" ref="963351320"/>
450 450 <string key="NSTitle">Use Selection for Find</string>
451 451 <string key="NSKeyEquiv">e</string>
452 452 <int key="NSKeyEquivModMask">1048576</int>
453 453 <int key="NSMnemonicLoc">2147483647</int>
454 <reference key="NSOnImage" ref="985281305"/>
455 <reference key="NSMixedImage" ref="351279908"/>
454 <reference key="NSOnImage" ref="271266416"/>
455 <reference key="NSMixedImage" ref="508123839"/>
456 456 <int key="NSTag">7</int>
457 457 </object>
458 458 <object class="NSMenuItem" id="88285865">
459 459 <reference key="NSMenu" ref="963351320"/>
460 460 <string key="NSTitle">Jump to Selection</string>
461 461 <string key="NSKeyEquiv">j</string>
462 462 <int key="NSKeyEquivModMask">1048576</int>
463 463 <int key="NSMnemonicLoc">2147483647</int>
464 <reference key="NSOnImage" ref="985281305"/>
465 <reference key="NSMixedImage" ref="351279908"/>
464 <reference key="NSOnImage" ref="271266416"/>
465 <reference key="NSMixedImage" ref="508123839"/>
466 466 </object>
467 467 </object>
468 468 </object>
469 469 </object>
470 470 <object class="NSMenuItem" id="972420730">
471 471 <reference key="NSMenu" ref="789758025"/>
472 472 <string key="NSTitle" id="739167250">Spelling and Grammar</string>
473 473 <reference key="NSKeyEquiv" ref="255189770"/>
474 474 <int key="NSKeyEquivModMask">1048576</int>
475 475 <int key="NSMnemonicLoc">2147483647</int>
476 <reference key="NSOnImage" ref="985281305"/>
477 <reference key="NSMixedImage" ref="351279908"/>
476 <reference key="NSOnImage" ref="271266416"/>
477 <reference key="NSMixedImage" ref="508123839"/>
478 478 <string key="NSAction">submenuAction:</string>
479 479 <object class="NSMenu" key="NSSubmenu" id="769623530">
480 480 <reference key="NSTitle" ref="739167250"/>
481 481 <object class="NSMutableArray" key="NSMenuItems">
482 482 <bool key="EncodedWithXMLCoder">YES</bool>
483 483 <object class="NSMenuItem" id="679648819">
484 484 <reference key="NSMenu" ref="769623530"/>
485 485 <string type="base64-UTF8" key="NSTitle">U2hvdyBTcGVsbGluZ+KApg</string>
486 486 <string key="NSKeyEquiv">:</string>
487 487 <int key="NSKeyEquivModMask">1048576</int>
488 488 <int key="NSMnemonicLoc">2147483647</int>
489 <reference key="NSOnImage" ref="985281305"/>
490 <reference key="NSMixedImage" ref="351279908"/>
489 <reference key="NSOnImage" ref="271266416"/>
490 <reference key="NSMixedImage" ref="508123839"/>
491 491 </object>
492 492 <object class="NSMenuItem" id="96193923">
493 493 <reference key="NSMenu" ref="769623530"/>
494 494 <string key="NSTitle">Check Spelling</string>
495 495 <string key="NSKeyEquiv">;</string>
496 496 <int key="NSKeyEquivModMask">1048576</int>
497 497 <int key="NSMnemonicLoc">2147483647</int>
498 <reference key="NSOnImage" ref="985281305"/>
499 <reference key="NSMixedImage" ref="351279908"/>
498 <reference key="NSOnImage" ref="271266416"/>
499 <reference key="NSMixedImage" ref="508123839"/>
500 500 </object>
501 501 <object class="NSMenuItem" id="948374510">
502 502 <reference key="NSMenu" ref="769623530"/>
503 503 <string key="NSTitle">Check Spelling While Typing</string>
504 504 <reference key="NSKeyEquiv" ref="255189770"/>
505 505 <int key="NSKeyEquivModMask">1048576</int>
506 506 <int key="NSMnemonicLoc">2147483647</int>
507 <reference key="NSOnImage" ref="985281305"/>
508 <reference key="NSMixedImage" ref="351279908"/>
507 <reference key="NSOnImage" ref="271266416"/>
508 <reference key="NSMixedImage" ref="508123839"/>
509 509 </object>
510 510 <object class="NSMenuItem" id="967646866">
511 511 <reference key="NSMenu" ref="769623530"/>
512 512 <string key="NSTitle">Check Grammar With Spelling</string>
513 513 <reference key="NSKeyEquiv" ref="255189770"/>
514 514 <int key="NSKeyEquivModMask">1048576</int>
515 515 <int key="NSMnemonicLoc">2147483647</int>
516 <reference key="NSOnImage" ref="985281305"/>
517 <reference key="NSMixedImage" ref="351279908"/>
516 <reference key="NSOnImage" ref="271266416"/>
517 <reference key="NSMixedImage" ref="508123839"/>
518 518 </object>
519 519 </object>
520 520 </object>
521 521 </object>
522 522 <object class="NSMenuItem" id="507821607">
523 523 <reference key="NSMenu" ref="789758025"/>
524 524 <string key="NSTitle" id="904739598">Substitutions</string>
525 525 <reference key="NSKeyEquiv" ref="255189770"/>
526 526 <int key="NSKeyEquivModMask">1048576</int>
527 527 <int key="NSMnemonicLoc">2147483647</int>
528 <reference key="NSOnImage" ref="985281305"/>
529 <reference key="NSMixedImage" ref="351279908"/>
528 <reference key="NSOnImage" ref="271266416"/>
529 <reference key="NSMixedImage" ref="508123839"/>
530 530 <string key="NSAction">submenuAction:</string>
531 531 <object class="NSMenu" key="NSSubmenu" id="698887838">
532 532 <reference key="NSTitle" ref="904739598"/>
533 533 <object class="NSMutableArray" key="NSMenuItems">
534 534 <bool key="EncodedWithXMLCoder">YES</bool>
535 535 <object class="NSMenuItem" id="605118523">
536 536 <reference key="NSMenu" ref="698887838"/>
537 537 <string key="NSTitle">Smart Copy/Paste</string>
538 538 <reference key="NSKeyEquiv" ref="469505129"/>
539 539 <int key="NSKeyEquivModMask">1048576</int>
540 540 <int key="NSMnemonicLoc">2147483647</int>
541 <reference key="NSOnImage" ref="985281305"/>
542 <reference key="NSMixedImage" ref="351279908"/>
541 <reference key="NSOnImage" ref="271266416"/>
542 <reference key="NSMixedImage" ref="508123839"/>
543 543 <int key="NSTag">1</int>
544 544 </object>
545 545 <object class="NSMenuItem" id="197661976">
546 546 <reference key="NSMenu" ref="698887838"/>
547 547 <string key="NSTitle">Smart Quotes</string>
548 548 <reference key="NSKeyEquiv" ref="762398675"/>
549 549 <int key="NSKeyEquivModMask">1048576</int>
550 550 <int key="NSMnemonicLoc">2147483647</int>
551 <reference key="NSOnImage" ref="985281305"/>
552 <reference key="NSMixedImage" ref="351279908"/>
551 <reference key="NSOnImage" ref="271266416"/>
552 <reference key="NSMixedImage" ref="508123839"/>
553 553 <int key="NSTag">2</int>
554 554 </object>
555 555 <object class="NSMenuItem" id="708854459">
556 556 <reference key="NSMenu" ref="698887838"/>
557 557 <string key="NSTitle">Smart Links</string>
558 558 <reference key="NSKeyEquiv" ref="819654342"/>
559 559 <int key="NSKeyEquivModMask">1179648</int>
560 560 <int key="NSMnemonicLoc">2147483647</int>
561 <reference key="NSOnImage" ref="985281305"/>
562 <reference key="NSMixedImage" ref="351279908"/>
561 <reference key="NSOnImage" ref="271266416"/>
562 <reference key="NSMixedImage" ref="508123839"/>
563 563 <int key="NSTag">3</int>
564 564 </object>
565 565 </object>
566 566 </object>
567 567 </object>
568 568 <object class="NSMenuItem" id="676164635">
569 569 <reference key="NSMenu" ref="789758025"/>
570 570 <string key="NSTitle" id="812002426">Speech</string>
571 571 <reference key="NSKeyEquiv" ref="255189770"/>
572 572 <int key="NSKeyEquivModMask">1048576</int>
573 573 <int key="NSMnemonicLoc">2147483647</int>
574 <reference key="NSOnImage" ref="985281305"/>
575 <reference key="NSMixedImage" ref="351279908"/>
574 <reference key="NSOnImage" ref="271266416"/>
575 <reference key="NSMixedImage" ref="508123839"/>
576 576 <string key="NSAction">submenuAction:</string>
577 577 <object class="NSMenu" key="NSSubmenu" id="785027613">
578 578 <reference key="NSTitle" ref="812002426"/>
579 579 <object class="NSMutableArray" key="NSMenuItems">
580 580 <bool key="EncodedWithXMLCoder">YES</bool>
581 581 <object class="NSMenuItem" id="731782645">
582 582 <reference key="NSMenu" ref="785027613"/>
583 583 <string key="NSTitle">Start Speaking</string>
584 584 <reference key="NSKeyEquiv" ref="255189770"/>
585 585 <int key="NSKeyEquivModMask">1048576</int>
586 586 <int key="NSMnemonicLoc">2147483647</int>
587 <reference key="NSOnImage" ref="985281305"/>
588 <reference key="NSMixedImage" ref="351279908"/>
587 <reference key="NSOnImage" ref="271266416"/>
588 <reference key="NSMixedImage" ref="508123839"/>
589 589 </object>
590 590 <object class="NSMenuItem" id="680220178">
591 591 <reference key="NSMenu" ref="785027613"/>
592 592 <string key="NSTitle">Stop Speaking</string>
593 593 <reference key="NSKeyEquiv" ref="255189770"/>
594 594 <int key="NSKeyEquivModMask">1048576</int>
595 595 <int key="NSMnemonicLoc">2147483647</int>
596 <reference key="NSOnImage" ref="985281305"/>
597 <reference key="NSMixedImage" ref="351279908"/>
596 <reference key="NSOnImage" ref="271266416"/>
597 <reference key="NSMixedImage" ref="508123839"/>
598 598 </object>
599 599 </object>
600 600 </object>
601 601 </object>
602 602 </object>
603 603 </object>
604 604 </object>
605 605 <object class="NSMenuItem" id="626404410">
606 606 <reference key="NSMenu" ref="649796088"/>
607 607 <string key="NSTitle" id="241242548">Format</string>
608 608 <reference key="NSKeyEquiv" ref="255189770"/>
609 609 <int key="NSKeyEquivModMask">1048576</int>
610 610 <int key="NSMnemonicLoc">2147483647</int>
611 <reference key="NSOnImage" ref="985281305"/>
612 <reference key="NSMixedImage" ref="351279908"/>
611 <reference key="NSOnImage" ref="271266416"/>
612 <reference key="NSMixedImage" ref="508123839"/>
613 613 <string key="NSAction">submenuAction:</string>
614 614 <object class="NSMenu" key="NSSubmenu" id="502084290">
615 615 <reference key="NSTitle" ref="241242548"/>
616 616 <object class="NSMutableArray" key="NSMenuItems">
617 617 <bool key="EncodedWithXMLCoder">YES</bool>
618 618 <object class="NSMenuItem" id="519768076">
619 619 <reference key="NSMenu" ref="502084290"/>
620 620 <string key="NSTitle">Show Fonts</string>
621 621 <string key="NSKeyEquiv" id="806579634">t</string>
622 622 <int key="NSKeyEquivModMask">1048576</int>
623 623 <int key="NSMnemonicLoc">2147483647</int>
624 <reference key="NSOnImage" ref="985281305"/>
625 <reference key="NSMixedImage" ref="351279908"/>
624 <reference key="NSOnImage" ref="271266416"/>
625 <reference key="NSMixedImage" ref="508123839"/>
626 626 </object>
627 627 <object class="NSMenuItem" id="1028416764">
628 628 <reference key="NSMenu" ref="502084290"/>
629 629 <string key="NSTitle">Show Colors</string>
630 630 <string key="NSKeyEquiv">C</string>
631 631 <int key="NSKeyEquivModMask">1179648</int>
632 632 <int key="NSMnemonicLoc">2147483647</int>
633 <reference key="NSOnImage" ref="985281305"/>
634 <reference key="NSMixedImage" ref="351279908"/>
633 <reference key="NSOnImage" ref="271266416"/>
634 <reference key="NSMixedImage" ref="508123839"/>
635 635 </object>
636 636 </object>
637 637 </object>
638 638 </object>
639 639 <object class="NSMenuItem" id="586577488">
640 640 <reference key="NSMenu" ref="649796088"/>
641 641 <string key="NSTitle" id="809723865">View</string>
642 642 <reference key="NSKeyEquiv" ref="255189770"/>
643 643 <int key="NSKeyEquivModMask">1048576</int>
644 644 <int key="NSMnemonicLoc">2147483647</int>
645 <reference key="NSOnImage" ref="985281305"/>
646 <reference key="NSMixedImage" ref="351279908"/>
645 <reference key="NSOnImage" ref="271266416"/>
646 <reference key="NSMixedImage" ref="508123839"/>
647 647 <string key="NSAction">submenuAction:</string>
648 648 <object class="NSMenu" key="NSSubmenu" id="466310130">
649 649 <reference key="NSTitle" ref="809723865"/>
650 650 <object class="NSMutableArray" key="NSMenuItems">
651 651 <bool key="EncodedWithXMLCoder">YES</bool>
652 652 <object class="NSMenuItem" id="102151532">
653 653 <reference key="NSMenu" ref="466310130"/>
654 654 <string key="NSTitle">Show Toolbar</string>
655 655 <reference key="NSKeyEquiv" ref="806579634"/>
656 656 <int key="NSKeyEquivModMask">1572864</int>
657 657 <int key="NSMnemonicLoc">2147483647</int>
658 <reference key="NSOnImage" ref="985281305"/>
659 <reference key="NSMixedImage" ref="351279908"/>
658 <reference key="NSOnImage" ref="271266416"/>
659 <reference key="NSMixedImage" ref="508123839"/>
660 660 </object>
661 661 <object class="NSMenuItem" id="237841660">
662 662 <reference key="NSMenu" ref="466310130"/>
663 663 <string type="base64-UTF8" key="NSTitle">Q3VzdG9taXplIFRvb2xiYXLigKY</string>
664 664 <reference key="NSKeyEquiv" ref="255189770"/>
665 665 <int key="NSKeyEquivModMask">1048576</int>
666 666 <int key="NSMnemonicLoc">2147483647</int>
667 <reference key="NSOnImage" ref="985281305"/>
668 <reference key="NSMixedImage" ref="351279908"/>
667 <reference key="NSOnImage" ref="271266416"/>
668 <reference key="NSMixedImage" ref="508123839"/>
669 669 </object>
670 670 </object>
671 671 </object>
672 672 </object>
673 673 <object class="NSMenuItem" id="713487014">
674 674 <reference key="NSMenu" ref="649796088"/>
675 675 <string key="NSTitle" id="64165424">Window</string>
676 676 <reference key="NSKeyEquiv" ref="255189770"/>
677 677 <int key="NSKeyEquivModMask">1048576</int>
678 678 <int key="NSMnemonicLoc">2147483647</int>
679 <reference key="NSOnImage" ref="985281305"/>
680 <reference key="NSMixedImage" ref="351279908"/>
679 <reference key="NSOnImage" ref="271266416"/>
680 <reference key="NSMixedImage" ref="508123839"/>
681 681 <string key="NSAction">submenuAction:</string>
682 682 <object class="NSMenu" key="NSSubmenu" id="835318025">
683 683 <reference key="NSTitle" ref="64165424"/>
684 684 <object class="NSMutableArray" key="NSMenuItems">
685 685 <bool key="EncodedWithXMLCoder">YES</bool>
686 686 <object class="NSMenuItem" id="1011231497">
687 687 <reference key="NSMenu" ref="835318025"/>
688 688 <string key="NSTitle">Minimize</string>
689 689 <string key="NSKeyEquiv">m</string>
690 690 <int key="NSKeyEquivModMask">1048576</int>
691 691 <int key="NSMnemonicLoc">2147483647</int>
692 <reference key="NSOnImage" ref="985281305"/>
693 <reference key="NSMixedImage" ref="351279908"/>
692 <reference key="NSOnImage" ref="271266416"/>
693 <reference key="NSMixedImage" ref="508123839"/>
694 694 </object>
695 695 <object class="NSMenuItem" id="575023229">
696 696 <reference key="NSMenu" ref="835318025"/>
697 697 <string key="NSTitle">Zoom</string>
698 698 <reference key="NSKeyEquiv" ref="255189770"/>
699 699 <int key="NSKeyEquivModMask">1048576</int>
700 700 <int key="NSMnemonicLoc">2147483647</int>
701 <reference key="NSOnImage" ref="985281305"/>
702 <reference key="NSMixedImage" ref="351279908"/>
701 <reference key="NSOnImage" ref="271266416"/>
702 <reference key="NSMixedImage" ref="508123839"/>
703 703 </object>
704 704 <object class="NSMenuItem" id="299356726">
705 705 <reference key="NSMenu" ref="835318025"/>
706 706 <bool key="NSIsDisabled">YES</bool>
707 707 <bool key="NSIsSeparator">YES</bool>
708 708 <reference key="NSTitle" ref="255189770"/>
709 709 <reference key="NSKeyEquiv" ref="255189770"/>
710 710 <int key="NSKeyEquivModMask">1048576</int>
711 711 <int key="NSMnemonicLoc">2147483647</int>
712 <reference key="NSOnImage" ref="985281305"/>
713 <reference key="NSMixedImage" ref="351279908"/>
712 <reference key="NSOnImage" ref="271266416"/>
713 <reference key="NSMixedImage" ref="508123839"/>
714 714 </object>
715 715 <object class="NSMenuItem" id="625202149">
716 716 <reference key="NSMenu" ref="835318025"/>
717 717 <string key="NSTitle">Bring All to Front</string>
718 718 <reference key="NSKeyEquiv" ref="255189770"/>
719 719 <int key="NSKeyEquivModMask">1048576</int>
720 720 <int key="NSMnemonicLoc">2147483647</int>
721 <reference key="NSOnImage" ref="985281305"/>
722 <reference key="NSMixedImage" ref="351279908"/>
721 <reference key="NSOnImage" ref="271266416"/>
722 <reference key="NSMixedImage" ref="508123839"/>
723 723 </object>
724 724 </object>
725 725 <string key="NSName">_NSWindowsMenu</string>
726 726 </object>
727 727 </object>
728 728 <object class="NSMenuItem" id="391199113">
729 729 <reference key="NSMenu" ref="649796088"/>
730 730 <string key="NSTitle" id="461919786">Help</string>
731 731 <reference key="NSKeyEquiv" ref="255189770"/>
732 732 <int key="NSKeyEquivModMask">1048576</int>
733 733 <int key="NSMnemonicLoc">2147483647</int>
734 <reference key="NSOnImage" ref="985281305"/>
735 <reference key="NSMixedImage" ref="351279908"/>
734 <reference key="NSOnImage" ref="271266416"/>
735 <reference key="NSMixedImage" ref="508123839"/>
736 736 <string key="NSAction">submenuAction:</string>
737 737 <object class="NSMenu" key="NSSubmenu" id="374024848">
738 738 <reference key="NSTitle" ref="461919786"/>
739 739 <object class="NSMutableArray" key="NSMenuItems">
740 740 <bool key="EncodedWithXMLCoder">YES</bool>
741 741 <object class="NSMenuItem" id="238773614">
742 742 <reference key="NSMenu" ref="374024848"/>
743 743 <string key="NSTitle">IPython1Sandbox Help</string>
744 744 <string key="NSKeyEquiv">?</string>
745 745 <int key="NSKeyEquivModMask">1048576</int>
746 746 <int key="NSMnemonicLoc">2147483647</int>
747 <reference key="NSOnImage" ref="985281305"/>
748 <reference key="NSMixedImage" ref="351279908"/>
747 <reference key="NSOnImage" ref="271266416"/>
748 <reference key="NSMixedImage" ref="508123839"/>
749 749 </object>
750 750 </object>
751 751 </object>
752 752 </object>
753 753 </object>
754 754 <string key="NSName">_NSMainMenu</string>
755 755 </object>
756 756 <object class="NSWindowTemplate" id="972006081">
757 757 <int key="NSWindowStyleMask">15</int>
758 758 <int key="NSWindowBacking">2</int>
759 759 <string key="NSWindowRect">{{335, 413}, {725, 337}}</string>
760 760 <int key="NSWTFlags">1946157056</int>
761 761 <string key="NSWindowTitle">IPython1 (Cocoa)</string>
762 762 <string key="NSWindowClass">NSWindow</string>
763 763 <nil key="NSViewClass"/>
764 764 <object class="NSView" key="NSWindowView" id="439893737">
765 765 <reference key="NSNextResponder"/>
766 766 <int key="NSvFlags">256</int>
767 767 <object class="NSMutableArray" key="NSSubviews">
768 768 <bool key="EncodedWithXMLCoder">YES</bool>
769 769 <object class="NSSplitView" id="741760375">
770 770 <reference key="NSNextResponder" ref="439893737"/>
771 771 <int key="NSvFlags">274</int>
772 772 <object class="NSMutableArray" key="NSSubviews">
773 773 <bool key="EncodedWithXMLCoder">YES</bool>
774 774 <object class="NSBox" id="554641139">
775 775 <reference key="NSNextResponder" ref="741760375"/>
776 776 <int key="NSvFlags">22</int>
777 777 <object class="NSMutableArray" key="NSSubviews">
778 778 <bool key="EncodedWithXMLCoder">YES</bool>
779 779 <object class="NSView" id="597872307">
780 780 <reference key="NSNextResponder" ref="554641139"/>
781 781 <int key="NSvFlags">256</int>
782 782 <object class="NSMutableArray" key="NSSubviews">
783 783 <bool key="EncodedWithXMLCoder">YES</bool>
784 784 <object class="NSScrollView" id="188193463">
785 785 <reference key="NSNextResponder" ref="597872307"/>
786 786 <int key="NSvFlags">274</int>
787 787 <object class="NSMutableArray" key="NSSubviews">
788 788 <bool key="EncodedWithXMLCoder">YES</bool>
789 789 <object class="NSClipView" id="638544389">
790 790 <reference key="NSNextResponder" ref="188193463"/>
791 791 <int key="NSvFlags">2304</int>
792 792 <object class="NSMutableArray" key="NSSubviews">
793 793 <bool key="EncodedWithXMLCoder">YES</bool>
794 794 <object class="NSTextView" id="163417131">
795 795 <reference key="NSNextResponder" ref="638544389"/>
796 796 <int key="NSvFlags">2322</int>
797 797 <object class="NSMutableSet" key="NSDragTypes">
798 798 <bool key="EncodedWithXMLCoder">YES</bool>
799 799 <object class="NSMutableArray" key="set.sortedObjects">
800 800 <bool key="EncodedWithXMLCoder">YES</bool>
801 801 <string>Apple HTML pasteboard type</string>
802 802 <string>Apple PDF pasteboard type</string>
803 803 <string>Apple PICT pasteboard type</string>
804 804 <string>Apple PNG pasteboard type</string>
805 805 <string>Apple URL pasteboard type</string>
806 806 <string>CorePasteboardFlavorType 0x6D6F6F76</string>
807 807 <string>CorePasteboardFlavorType 0x75726C20</string>
808 808 <string>NSColor pasteboard type</string>
809 809 <string>NSFilenamesPboardType</string>
810 810 <string>NSStringPboardType</string>
811 811 <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
812 812 <string>NeXT RTFD pasteboard type</string>
813 813 <string>NeXT Rich Text Format v1.0 pasteboard type</string>
814 814 <string>NeXT TIFF v4.0 pasteboard type</string>
815 815 <string>NeXT font pasteboard type</string>
816 816 <string>NeXT ruler pasteboard type</string>
817 817 <string>WebURLsWithTitlesPboardType</string>
818 818 </object>
819 819 </object>
820 820 <string key="NSFrame">{{0, 38}, {433, 14}}</string>
821 821 <reference key="NSSuperview" ref="638544389"/>
822 822 <reference key="NSWindow"/>
823 823 <object class="NSTextContainer" key="NSTextContainer" id="662117317">
824 824 <object class="NSLayoutManager" key="NSLayoutManager">
825 825 <object class="NSTextStorage" key="NSTextStorage">
826 826 <object class="NSMutableString" key="NSString">
827 827 <characters key="NS.bytes"/>
828 828 </object>
829 829 <nil key="NSDelegate"/>
830 830 </object>
831 831 <object class="NSMutableArray" key="NSTextContainers">
832 832 <bool key="EncodedWithXMLCoder">YES</bool>
833 833 <reference ref="662117317"/>
834 834 </object>
835 835 <int key="NSLMFlags">6</int>
836 836 <nil key="NSDelegate"/>
837 837 </object>
838 838 <reference key="NSTextView" ref="163417131"/>
839 839 <double key="NSWidth">4.330000e+02</double>
840 840 <int key="NSTCFlags">1</int>
841 841 </object>
842 842 <object class="NSTextViewSharedData" key="NSSharedData">
843 843 <int key="NSFlags">346991</int>
844 844 <object class="NSColor" key="NSBackgroundColor">
845 845 <int key="NSColorSpace">2</int>
846 846 <bytes key="NSRGB">MSAwLjk1Mjk0MTI0IDAuODUwOTgwNDYAA</bytes>
847 847 </object>
848 848 <object class="NSColor" key="NSInsertionColor" id="555789289">
849 849 <int key="NSColorSpace">3</int>
850 850 <bytes key="NSWhite">MAA</bytes>
851 851 </object>
852 852 <object class="NSDictionary" key="NSSelectedAttributes">
853 853 <bool key="EncodedWithXMLCoder">YES</bool>
854 854 <object class="NSMutableArray" key="dict.sortedKeys">
855 855 <bool key="EncodedWithXMLCoder">YES</bool>
856 856 <string>NSBackgroundColor</string>
857 857 <string id="19777717">NSColor</string>
858 858 </object>
859 859 <object class="NSMutableArray" key="dict.values">
860 860 <bool key="EncodedWithXMLCoder">YES</bool>
861 861 <object class="NSColor">
862 862 <int key="NSColorSpace">6</int>
863 <string key="NSCatalogName" id="945274157">System</string>
863 <string key="NSCatalogName" id="484387293">System</string>
864 864 <string key="NSColorName">selectedTextBackgroundColor</string>
865 865 <object class="NSColor" key="NSColor" id="377165725">
866 866 <int key="NSColorSpace">3</int>
867 867 <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
868 868 </object>
869 869 </object>
870 870 <object class="NSColor">
871 871 <int key="NSColorSpace">6</int>
872 <reference key="NSCatalogName" ref="945274157"/>
872 <reference key="NSCatalogName" ref="484387293"/>
873 873 <string key="NSColorName">selectedTextColor</string>
874 874 <reference key="NSColor" ref="555789289"/>
875 875 </object>
876 876 </object>
877 877 </object>
878 878 <nil key="NSMarkedAttributes"/>
879 879 <object class="NSDictionary" key="NSLinkAttributes">
880 880 <bool key="EncodedWithXMLCoder">YES</bool>
881 881 <object class="NSMutableArray" key="dict.sortedKeys">
882 882 <bool key="EncodedWithXMLCoder">YES</bool>
883 883 <reference ref="19777717"/>
884 884 <string>NSUnderline</string>
885 885 </object>
886 886 <object class="NSMutableArray" key="dict.values">
887 887 <bool key="EncodedWithXMLCoder">YES</bool>
888 888 <object class="NSColor">
889 889 <int key="NSColorSpace">1</int>
890 890 <bytes key="NSRGB">MCAwIDEAA</bytes>
891 891 </object>
892 892 <integer value="1" id="9"/>
893 893 </object>
894 894 </object>
895 895 <nil key="NSDefaultParagraphStyle"/>
896 896 </object>
897 897 <int key="NSTVFlags">6</int>
898 898 <string key="NSMaxSize">{480, 1e+07}</string>
899 899 <string key="NSMinize">{84, 0}</string>
900 900 <nil key="NSDelegate"/>
901 901 </object>
902 902 </object>
903 903 <string key="NSFrame">{{1, 1}, {433, 231}}</string>
904 904 <string key="NSBounds">{{0, 38}, {433, 231}}</string>
905 905 <reference key="NSSuperview" ref="188193463"/>
906 906 <reference key="NSWindow"/>
907 907 <reference key="NSNextKeyView" ref="163417131"/>
908 908 <reference key="NSDocView" ref="163417131"/>
909 909 <object class="NSColor" key="NSBGColor" id="521347521">
910 910 <int key="NSColorSpace">3</int>
911 911 <bytes key="NSWhite">MQA</bytes>
912 912 </object>
913 913 <object class="NSCursor" key="NSCursor">
914 914 <string key="NSHotSpot">{4, -5}</string>
915 915 <int key="NSCursorType">1</int>
916 916 </object>
917 917 <int key="NScvFlags">4</int>
918 918 </object>
919 919 <object class="NSScroller" id="418410897">
920 920 <reference key="NSNextResponder" ref="188193463"/>
921 921 <int key="NSvFlags">-2147483392</int>
922 922 <string key="NSFrame">{{427, 1}, {15, 263}}</string>
923 923 <reference key="NSSuperview" ref="188193463"/>
924 924 <reference key="NSWindow"/>
925 925 <reference key="NSTarget" ref="188193463"/>
926 926 <string key="NSAction" id="688920982">_doScroller:</string>
927 927 <double key="NSPercent">3.389175e-01</double>
928 928 </object>
929 929 <object class="NSScroller" id="936733673">
930 930 <reference key="NSNextResponder" ref="188193463"/>
931 931 <int key="NSvFlags">256</int>
932 932 <string key="NSFrame">{{-100, -100}, {87, 18}}</string>
933 933 <reference key="NSSuperview" ref="188193463"/>
934 934 <reference key="NSWindow"/>
935 935 <int key="NSsFlags">1</int>
936 936 <reference key="NSTarget" ref="188193463"/>
937 937 <reference key="NSAction" ref="688920982"/>
938 938 <double key="NSCurValue">1.000000e+00</double>
939 939 <double key="NSPercent">9.456522e-01</double>
940 940 </object>
941 941 </object>
942 942 <string key="NSFrame">{{18, 14}, {435, 233}}</string>
943 943 <reference key="NSSuperview" ref="597872307"/>
944 944 <reference key="NSWindow"/>
945 945 <reference key="NSNextKeyView" ref="638544389"/>
946 946 <int key="NSsFlags">530</int>
947 947 <reference key="NSVScroller" ref="418410897"/>
948 948 <reference key="NSHScroller" ref="936733673"/>
949 949 <reference key="NSContentView" ref="638544389"/>
950 950 </object>
951 951 </object>
952 952 <string key="NSFrame">{{1, 1}, {471, 257}}</string>
953 953 <reference key="NSSuperview" ref="554641139"/>
954 954 <reference key="NSWindow"/>
955 955 </object>
956 956 </object>
957 957 <string key="NSFrameSize">{473, 273}</string>
958 958 <reference key="NSSuperview" ref="741760375"/>
959 959 <reference key="NSWindow"/>
960 960 <string key="NSOffsets" id="1055927954">{0, 0}</string>
961 961 <object class="NSTextFieldCell" key="NSTitleCell">
962 962 <int key="NSCellFlags">67239424</int>
963 963 <int key="NSCellFlags2">0</int>
964 964 <string key="NSContents">Console</string>
965 965 <object class="NSFont" key="NSSupport" id="26">
966 <string key="NSName" id="257617473">LucidaGrande</string>
966 <string key="NSName" id="378950370">LucidaGrande</string>
967 967 <double key="NSSize">1.100000e+01</double>
968 968 <int key="NSfFlags">3100</int>
969 969 </object>
970 970 <object class="NSColor" key="NSBackgroundColor" id="131515055">
971 971 <int key="NSColorSpace">6</int>
972 <reference key="NSCatalogName" ref="945274157"/>
972 <reference key="NSCatalogName" ref="484387293"/>
973 973 <string key="NSColorName">textBackgroundColor</string>
974 974 <reference key="NSColor" ref="521347521"/>
975 975 </object>
976 976 <object class="NSColor" key="NSTextColor">
977 977 <int key="NSColorSpace">3</int>
978 978 <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
979 979 </object>
980 980 </object>
981 981 <reference key="NSContentView" ref="597872307"/>
982 982 <int key="NSBorderType">1</int>
983 983 <int key="NSBoxType">0</int>
984 984 <int key="NSTitlePosition">2</int>
985 985 <bool key="NSTransparent">NO</bool>
986 986 </object>
987 987 <object class="NSBox" id="764100755">
988 988 <reference key="NSNextResponder" ref="741760375"/>
989 989 <int key="NSvFlags">51</int>
990 990 <object class="NSMutableArray" key="NSSubviews">
991 991 <bool key="EncodedWithXMLCoder">YES</bool>
992 992 <object class="NSView" id="581281551">
993 993 <reference key="NSNextResponder" ref="764100755"/>
994 994 <int key="NSvFlags">256</int>
995 995 <object class="NSMutableArray" key="NSSubviews">
996 996 <bool key="EncodedWithXMLCoder">YES</bool>
997 997 <object class="NSScrollView" id="516244966">
998 998 <reference key="NSNextResponder" ref="581281551"/>
999 999 <int key="NSvFlags">274</int>
1000 1000 <object class="NSMutableArray" key="NSSubviews">
1001 1001 <bool key="EncodedWithXMLCoder">YES</bool>
1002 1002 <object class="NSClipView" id="119083427">
1003 1003 <reference key="NSNextResponder" ref="516244966"/>
1004 1004 <int key="NSvFlags">2304</int>
1005 1005 <object class="NSMutableArray" key="NSSubviews">
1006 1006 <bool key="EncodedWithXMLCoder">YES</bool>
1007 1007 <object class="NSTableView" id="23853726">
1008 1008 <reference key="NSNextResponder" ref="119083427"/>
1009 1009 <int key="NSvFlags">256</int>
1010 1010 <string key="NSFrameSize">{156, 200}</string>
1011 1011 <reference key="NSSuperview" ref="119083427"/>
1012 1012 <reference key="NSWindow"/>
1013 1013 <bool key="NSEnabled">YES</bool>
1014 1014 <object class="NSTableHeaderView" key="NSHeaderView" id="1048357090">
1015 1015 <reference key="NSNextResponder" ref="746968320"/>
1016 1016 <int key="NSvFlags">256</int>
1017 1017 <string key="NSFrameSize">{156, 17}</string>
1018 1018 <reference key="NSSuperview" ref="746968320"/>
1019 1019 <reference key="NSWindow"/>
1020 1020 <reference key="NSTableView" ref="23853726"/>
1021 1021 </object>
1022 1022 <object class="_NSCornerView" key="NSCornerView" id="212282722">
1023 1023 <reference key="NSNextResponder" ref="516244966"/>
1024 1024 <int key="NSvFlags">256</int>
1025 1025 <string key="NSFrame">{{157, 0}, {16, 17}}</string>
1026 1026 <reference key="NSSuperview" ref="516244966"/>
1027 1027 <reference key="NSWindow"/>
1028 1028 </object>
1029 1029 <object class="NSMutableArray" key="NSTableColumns">
1030 1030 <bool key="EncodedWithXMLCoder">YES</bool>
1031 1031 <object class="NSTableColumn" id="920426212">
1032 1032 <double key="NSWidth">7.100000e+01</double>
1033 1033 <double key="NSMinWidth">4.000000e+01</double>
1034 1034 <double key="NSMaxWidth">1.000000e+03</double>
1035 1035 <object class="NSTableHeaderCell" key="NSHeaderCell">
1036 1036 <int key="NSCellFlags">75628032</int>
1037 1037 <int key="NSCellFlags2">0</int>
1038 1038 <string key="NSContents">Variable</string>
1039 1039 <reference key="NSSupport" ref="26"/>
1040 1040 <object class="NSColor" key="NSBackgroundColor" id="890615311">
1041 1041 <int key="NSColorSpace">3</int>
1042 1042 <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
1043 1043 </object>
1044 1044 <object class="NSColor" key="NSTextColor" id="866628999">
1045 1045 <int key="NSColorSpace">6</int>
1046 <reference key="NSCatalogName" ref="945274157"/>
1046 <reference key="NSCatalogName" ref="484387293"/>
1047 1047 <string key="NSColorName">headerTextColor</string>
1048 1048 <reference key="NSColor" ref="555789289"/>
1049 1049 </object>
1050 1050 </object>
1051 1051 <object class="NSTextFieldCell" key="NSDataCell" id="525071236">
1052 1052 <int key="NSCellFlags">337772096</int>
1053 1053 <int key="NSCellFlags2">2048</int>
1054 <string key="NSContents" id="590184478">Text Cell</string>
1054 <string key="NSContents" id="456204663">Text Cell</string>
1055 1055 <object class="NSFont" key="NSSupport" id="8196371">
1056 <reference key="NSName" ref="257617473"/>
1056 <reference key="NSName" ref="378950370"/>
1057 1057 <double key="NSSize">1.300000e+01</double>
1058 1058 <int key="NSfFlags">1044</int>
1059 1059 </object>
1060 1060 <reference key="NSControlView" ref="23853726"/>
1061 1061 <object class="NSColor" key="NSBackgroundColor" id="224028609">
1062 1062 <int key="NSColorSpace">6</int>
1063 <reference key="NSCatalogName" ref="945274157"/>
1063 <reference key="NSCatalogName" ref="484387293"/>
1064 1064 <string key="NSColorName">controlBackgroundColor</string>
1065 1065 <reference key="NSColor" ref="377165725"/>
1066 1066 </object>
1067 1067 <object class="NSColor" key="NSTextColor" id="205104690">
1068 1068 <int key="NSColorSpace">6</int>
1069 <reference key="NSCatalogName" ref="945274157"/>
1069 <reference key="NSCatalogName" ref="484387293"/>
1070 1070 <string key="NSColorName">controlTextColor</string>
1071 1071 <reference key="NSColor" ref="555789289"/>
1072 1072 </object>
1073 1073 </object>
1074 1074 <int key="NSResizingMask">3</int>
1075 1075 <bool key="NSIsResizeable">YES</bool>
1076 1076 <bool key="NSIsEditable">YES</bool>
1077 1077 <reference key="NSTableView" ref="23853726"/>
1078 1078 </object>
1079 1079 <object class="NSTableColumn" id="857054683">
1080 1080 <double key="NSWidth">7.900000e+01</double>
1081 1081 <double key="NSMinWidth">4.000000e+01</double>
1082 1082 <double key="NSMaxWidth">1.000000e+03</double>
1083 1083 <object class="NSTableHeaderCell" key="NSHeaderCell">
1084 1084 <int key="NSCellFlags">75628032</int>
1085 1085 <int key="NSCellFlags2">0</int>
1086 1086 <string key="NSContents">Value</string>
1087 1087 <reference key="NSSupport" ref="26"/>
1088 1088 <reference key="NSBackgroundColor" ref="890615311"/>
1089 1089 <reference key="NSTextColor" ref="866628999"/>
1090 1090 </object>
1091 1091 <object class="NSTextFieldCell" key="NSDataCell" id="377147224">
1092 1092 <int key="NSCellFlags">337772096</int>
1093 1093 <int key="NSCellFlags2">2048</int>
1094 <reference key="NSContents" ref="590184478"/>
1094 <reference key="NSContents" ref="456204663"/>
1095 1095 <reference key="NSSupport" ref="8196371"/>
1096 1096 <reference key="NSControlView" ref="23853726"/>
1097 1097 <reference key="NSBackgroundColor" ref="224028609"/>
1098 1098 <reference key="NSTextColor" ref="205104690"/>
1099 1099 </object>
1100 1100 <int key="NSResizingMask">3</int>
1101 1101 <bool key="NSIsResizeable">YES</bool>
1102 1102 <bool key="NSIsEditable">YES</bool>
1103 1103 <reference key="NSTableView" ref="23853726"/>
1104 1104 </object>
1105 1105 </object>
1106 1106 <double key="NSIntercellSpacingWidth">3.000000e+00</double>
1107 1107 <double key="NSIntercellSpacingHeight">2.000000e+00</double>
1108 1108 <reference key="NSBackgroundColor" ref="521347521"/>
1109 1109 <object class="NSColor" key="NSGridColor">
1110 1110 <int key="NSColorSpace">6</int>
1111 <reference key="NSCatalogName" ref="945274157"/>
1111 <reference key="NSCatalogName" ref="484387293"/>
1112 1112 <string key="NSColorName">gridColor</string>
1113 1113 <object class="NSColor" key="NSColor">
1114 1114 <int key="NSColorSpace">3</int>
1115 1115 <bytes key="NSWhite">MC41AA</bytes>
1116 1116 </object>
1117 1117 </object>
1118 1118 <double key="NSRowHeight">1.700000e+01</double>
1119 1119 <int key="NSTvFlags">-692060160</int>
1120 1120 <int key="NSGridStyleMask">1</int>
1121 1121 <int key="NSColumnAutoresizingStyle">4</int>
1122 1122 <int key="NSDraggingSourceMaskForLocal">15</int>
1123 1123 <int key="NSDraggingSourceMaskForNonLocal">0</int>
1124 1124 <bool key="NSAllowsTypeSelect">YES</bool>
1125 1125 </object>
1126 1126 </object>
1127 1127 <string key="NSFrame">{{1, 17}, {156, 200}}</string>
1128 1128 <reference key="NSSuperview" ref="516244966"/>
1129 1129 <reference key="NSWindow"/>
1130 1130 <reference key="NSNextKeyView" ref="23853726"/>
1131 1131 <reference key="NSDocView" ref="23853726"/>
1132 1132 <reference key="NSBGColor" ref="224028609"/>
1133 1133 <int key="NScvFlags">4</int>
1134 1134 </object>
1135 1135 <object class="NSScroller" id="512953560">
1136 1136 <reference key="NSNextResponder" ref="516244966"/>
1137 1137 <int key="NSvFlags">256</int>
1138 1138 <string key="NSFrame">{{157, 17}, {15, 200}}</string>
1139 1139 <reference key="NSSuperview" ref="516244966"/>
1140 1140 <reference key="NSWindow"/>
1141 1141 <reference key="NSTarget" ref="516244966"/>
1142 1142 <reference key="NSAction" ref="688920982"/>
1143 1143 <double key="NSPercent">9.961240e-01</double>
1144 1144 </object>
1145 1145 <object class="NSScroller" id="47103270">
1146 1146 <reference key="NSNextResponder" ref="516244966"/>
1147 1147 <int key="NSvFlags">256</int>
1148 1148 <string key="NSFrame">{{1, 217}, {156, 15}}</string>
1149 1149 <reference key="NSSuperview" ref="516244966"/>
1150 1150 <reference key="NSWindow"/>
1151 1151 <int key="NSsFlags">1</int>
1152 1152 <reference key="NSTarget" ref="516244966"/>
1153 1153 <reference key="NSAction" ref="688920982"/>
1154 1154 <double key="NSPercent">7.179487e-01</double>
1155 1155 </object>
1156 1156 <object class="NSClipView" id="746968320">
1157 1157 <reference key="NSNextResponder" ref="516244966"/>
1158 1158 <int key="NSvFlags">2304</int>
1159 1159 <object class="NSMutableArray" key="NSSubviews">
1160 1160 <bool key="EncodedWithXMLCoder">YES</bool>
1161 1161 <reference ref="1048357090"/>
1162 1162 </object>
1163 1163 <string key="NSFrame">{{1, 0}, {156, 17}}</string>
1164 1164 <reference key="NSSuperview" ref="516244966"/>
1165 1165 <reference key="NSWindow"/>
1166 1166 <reference key="NSNextKeyView" ref="1048357090"/>
1167 1167 <reference key="NSDocView" ref="1048357090"/>
1168 1168 <reference key="NSBGColor" ref="224028609"/>
1169 1169 <int key="NScvFlags">4</int>
1170 1170 </object>
1171 1171 <reference ref="212282722"/>
1172 1172 </object>
1173 1173 <string key="NSFrame">{{18, 14}, {173, 233}}</string>
1174 1174 <reference key="NSSuperview" ref="581281551"/>
1175 1175 <reference key="NSWindow"/>
1176 1176 <reference key="NSNextKeyView" ref="119083427"/>
1177 1177 <int key="NSsFlags">50</int>
1178 1178 <reference key="NSVScroller" ref="512953560"/>
1179 1179 <reference key="NSHScroller" ref="47103270"/>
1180 1180 <reference key="NSContentView" ref="119083427"/>
1181 1181 <reference key="NSHeaderClipView" ref="746968320"/>
1182 1182 <reference key="NSCornerView" ref="212282722"/>
1183 1183 <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
1184 1184 </object>
1185 1185 </object>
1186 1186 <string key="NSFrame">{{1, 1}, {209, 257}}</string>
1187 1187 <reference key="NSSuperview" ref="764100755"/>
1188 1188 <reference key="NSWindow"/>
1189 1189 </object>
1190 1190 </object>
1191 1191 <string key="NSFrame">{{474, 0}, {211, 273}}</string>
1192 1192 <reference key="NSSuperview" ref="741760375"/>
1193 1193 <reference key="NSWindow"/>
1194 1194 <reference key="NSOffsets" ref="1055927954"/>
1195 1195 <object class="NSTextFieldCell" key="NSTitleCell">
1196 1196 <int key="NSCellFlags">67239424</int>
1197 1197 <int key="NSCellFlags2">0</int>
1198 1198 <string key="NSContents">Workspace</string>
1199 1199 <reference key="NSSupport" ref="26"/>
1200 1200 <reference key="NSBackgroundColor" ref="131515055"/>
1201 1201 <object class="NSColor" key="NSTextColor">
1202 1202 <int key="NSColorSpace">3</int>
1203 1203 <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
1204 1204 </object>
1205 1205 </object>
1206 1206 <reference key="NSContentView" ref="581281551"/>
1207 1207 <int key="NSBorderType">1</int>
1208 1208 <int key="NSBoxType">0</int>
1209 1209 <int key="NSTitlePosition">2</int>
1210 1210 <bool key="NSTransparent">NO</bool>
1211 1211 </object>
1212 1212 </object>
1213 1213 <string key="NSFrame">{{20, 44}, {685, 273}}</string>
1214 1214 <reference key="NSSuperview" ref="439893737"/>
1215 1215 <reference key="NSWindow"/>
1216 1216 <bool key="NSIsVertical">YES</bool>
1217 1217 <int key="NSDividerStyle">2</int>
1218 1218 <string key="NSAutosaveName">ipython1_console_workspace_split</string>
1219 1219 </object>
1220 1220 <object class="NSProgressIndicator" id="74807016">
1221 1221 <reference key="NSNextResponder" ref="439893737"/>
1222 1222 <int key="NSvFlags">1313</int>
1223 1223 <object class="NSPSMatrix" key="NSDrawMatrix"/>
1224 1224 <string key="NSFrame">{{689, 20}, {16, 16}}</string>
1225 1225 <reference key="NSSuperview" ref="439893737"/>
1226 1226 <reference key="NSWindow"/>
1227 1227 <int key="NSpiFlags">28938</int>
1228 1228 <double key="NSMinValue">1.600000e+01</double>
1229 1229 <double key="NSMaxValue">1.000000e+02</double>
1230 1230 </object>
1231 1231 </object>
1232 1232 <string key="NSFrameSize">{725, 337}</string>
1233 1233 <reference key="NSSuperview"/>
1234 1234 <reference key="NSWindow"/>
1235 1235 </object>
1236 1236 <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
1237 1237 <string key="NSFrameAutosaveName">ipython1_sandbox</string>
1238 1238 </object>
1239 1239 <object class="NSCustomObject" id="610635028">
1240 1240 <string key="NSClassName" id="982950837">IPython1SandboxAppDelegate</string>
1241 1241 </object>
1242 1242 <object class="NSDictionaryController" id="808393665">
1243 1243 <object class="NSMutableArray" key="NSDeclaredKeys">
1244 1244 <bool key="EncodedWithXMLCoder">YES</bool>
1245 1245 <string>keys</string>
1246 1246 <string id="181461860">key</string>
1247 1247 <string id="276523235">value</string>
1248 1248 </object>
1249 1249 <bool key="NSEditable">YES</bool>
1250 1250 <bool key="NSAvoidsEmptySelection">YES</bool>
1251 1251 <bool key="NSPreservesSelection">YES</bool>
1252 1252 <bool key="NSSelectsInsertedObjects">YES</bool>
1253 1253 <bool key="NSFilterRestrictsInsertion">YES</bool>
1254 1254 <object class="NSArray" key="NSSortDescriptors">
1255 1255 <bool key="EncodedWithXMLCoder">YES</bool>
1256 1256 <object class="NSSortDescriptor">
1257 1257 <reference key="NSKey" ref="181461860"/>
1258 1258 <bool key="NSAscending">YES</bool>
1259 1259 <string key="NSSelector">compare:</string>
1260 1260 </object>
1261 1261 </object>
1262 1262 <bool key="NSClearsFilterPredicateOnInsertion">YES</bool>
1263 1263 <reference key="NSInitialKey" ref="181461860"/>
1264 1264 <reference key="NSInitialValue" ref="276523235"/>
1265 1265 </object>
1266 1266 <object class="NSCustomObject" id="631572152">
1267 1267 <string key="NSClassName" id="695797635">IPythonCocoaController</string>
1268 1268 </object>
1269 1269 </object>
1270 1270 <object class="IBObjectContainer" key="IBDocument.Objects">
1271 1271 <object class="NSMutableArray" key="connectionRecords">
1272 1272 <bool key="EncodedWithXMLCoder">YES</bool>
1273 1273 <object class="IBConnectionRecord">
1274 1274 <object class="IBActionConnection" key="connection">
1275 1275 <string key="label">performMiniaturize:</string>
1276 1276 <reference key="source" ref="1014"/>
1277 1277 <reference key="destination" ref="1011231497"/>
1278 1278 </object>
1279 1279 <int key="connectionID">37</int>
1280 1280 </object>
1281 1281 <object class="IBConnectionRecord">
1282 1282 <object class="IBActionConnection" key="connection">
1283 1283 <string key="label">arrangeInFront:</string>
1284 1284 <reference key="source" ref="1014"/>
1285 1285 <reference key="destination" ref="625202149"/>
1286 1286 </object>
1287 1287 <int key="connectionID">39</int>
1288 1288 </object>
1289 1289 <object class="IBConnectionRecord">
1290 1290 <object class="IBActionConnection" key="connection">
1291 1291 <string key="label">print:</string>
1292 1292 <reference key="source" ref="1014"/>
1293 1293 <reference key="destination" ref="49223823"/>
1294 1294 </object>
1295 1295 <int key="connectionID">86</int>
1296 1296 </object>
1297 1297 <object class="IBConnectionRecord">
1298 1298 <object class="IBActionConnection" key="connection">
1299 1299 <string key="label">runPageLayout:</string>
1300 1300 <reference key="source" ref="1014"/>
1301 1301 <reference key="destination" ref="294629803"/>
1302 1302 </object>
1303 1303 <int key="connectionID">87</int>
1304 1304 </object>
1305 1305 <object class="IBConnectionRecord">
1306 1306 <object class="IBActionConnection" key="connection">
1307 1307 <string key="label">clearRecentDocuments:</string>
1308 1308 <reference key="source" ref="1014"/>
1309 1309 <reference key="destination" ref="759406840"/>
1310 1310 </object>
1311 1311 <int key="connectionID">127</int>
1312 1312 </object>
1313 1313 <object class="IBConnectionRecord">
1314 1314 <object class="IBActionConnection" key="connection">
1315 1315 <string key="label">orderFrontStandardAboutPanel:</string>
1316 1316 <reference key="source" ref="1021"/>
1317 1317 <reference key="destination" ref="238522557"/>
1318 1318 </object>
1319 1319 <int key="connectionID">142</int>
1320 1320 </object>
1321 1321 <object class="IBConnectionRecord">
1322 1322 <object class="IBActionConnection" key="connection">
1323 1323 <string key="label">performClose:</string>
1324 1324 <reference key="source" ref="1014"/>
1325 1325 <reference key="destination" ref="776162233"/>
1326 1326 </object>
1327 1327 <int key="connectionID">193</int>
1328 1328 </object>
1329 1329 <object class="IBConnectionRecord">
1330 1330 <object class="IBActionConnection" key="connection">
1331 1331 <string key="label">toggleContinuousSpellChecking:</string>
1332 1332 <reference key="source" ref="1014"/>
1333 1333 <reference key="destination" ref="948374510"/>
1334 1334 </object>
1335 1335 <int key="connectionID">222</int>
1336 1336 </object>
1337 1337 <object class="IBConnectionRecord">
1338 1338 <object class="IBActionConnection" key="connection">
1339 1339 <string key="label">undo:</string>
1340 1340 <reference key="source" ref="1014"/>
1341 1341 <reference key="destination" ref="1058277027"/>
1342 1342 </object>
1343 1343 <int key="connectionID">223</int>
1344 1344 </object>
1345 1345 <object class="IBConnectionRecord">
1346 1346 <object class="IBActionConnection" key="connection">
1347 1347 <string key="label">copy:</string>
1348 1348 <reference key="source" ref="1014"/>
1349 1349 <reference key="destination" ref="860595796"/>
1350 1350 </object>
1351 1351 <int key="connectionID">224</int>
1352 1352 </object>
1353 1353 <object class="IBConnectionRecord">
1354 1354 <object class="IBActionConnection" key="connection">
1355 1355 <string key="label">checkSpelling:</string>
1356 1356 <reference key="source" ref="1014"/>
1357 1357 <reference key="destination" ref="96193923"/>
1358 1358 </object>
1359 1359 <int key="connectionID">225</int>
1360 1360 </object>
1361 1361 <object class="IBConnectionRecord">
1362 1362 <object class="IBActionConnection" key="connection">
1363 1363 <string key="label">paste:</string>
1364 1364 <reference key="source" ref="1014"/>
1365 1365 <reference key="destination" ref="29853731"/>
1366 1366 </object>
1367 1367 <int key="connectionID">226</int>
1368 1368 </object>
1369 1369 <object class="IBConnectionRecord">
1370 1370 <object class="IBActionConnection" key="connection">
1371 1371 <string key="label">stopSpeaking:</string>
1372 1372 <reference key="source" ref="1014"/>
1373 1373 <reference key="destination" ref="680220178"/>
1374 1374 </object>
1375 1375 <int key="connectionID">227</int>
1376 1376 </object>
1377 1377 <object class="IBConnectionRecord">
1378 1378 <object class="IBActionConnection" key="connection">
1379 1379 <string key="label">cut:</string>
1380 1380 <reference key="source" ref="1014"/>
1381 1381 <reference key="destination" ref="296257095"/>
1382 1382 </object>
1383 1383 <int key="connectionID">228</int>
1384 1384 </object>
1385 1385 <object class="IBConnectionRecord">
1386 1386 <object class="IBActionConnection" key="connection">
1387 1387 <string key="label">showGuessPanel:</string>
1388 1388 <reference key="source" ref="1014"/>
1389 1389 <reference key="destination" ref="679648819"/>
1390 1390 </object>
1391 1391 <int key="connectionID">230</int>
1392 1392 </object>
1393 1393 <object class="IBConnectionRecord">
1394 1394 <object class="IBActionConnection" key="connection">
1395 1395 <string key="label">redo:</string>
1396 1396 <reference key="source" ref="1014"/>
1397 1397 <reference key="destination" ref="790794224"/>
1398 1398 </object>
1399 1399 <int key="connectionID">231</int>
1400 1400 </object>
1401 1401 <object class="IBConnectionRecord">
1402 1402 <object class="IBActionConnection" key="connection">
1403 1403 <string key="label">selectAll:</string>
1404 1404 <reference key="source" ref="1014"/>
1405 1405 <reference key="destination" ref="583158037"/>
1406 1406 </object>
1407 1407 <int key="connectionID">232</int>
1408 1408 </object>
1409 1409 <object class="IBConnectionRecord">
1410 1410 <object class="IBActionConnection" key="connection">
1411 1411 <string key="label">startSpeaking:</string>
1412 1412 <reference key="source" ref="1014"/>
1413 1413 <reference key="destination" ref="731782645"/>
1414 1414 </object>
1415 1415 <int key="connectionID">233</int>
1416 1416 </object>
1417 1417 <object class="IBConnectionRecord">
1418 1418 <object class="IBActionConnection" key="connection">
1419 1419 <string key="label">delete:</string>
1420 1420 <reference key="source" ref="1014"/>
1421 1421 <reference key="destination" ref="437104165"/>
1422 1422 </object>
1423 1423 <int key="connectionID">235</int>
1424 1424 </object>
1425 1425 <object class="IBConnectionRecord">
1426 1426 <object class="IBActionConnection" key="connection">
1427 1427 <string key="label">performZoom:</string>
1428 1428 <reference key="source" ref="1014"/>
1429 1429 <reference key="destination" ref="575023229"/>
1430 1430 </object>
1431 1431 <int key="connectionID">240</int>
1432 1432 </object>
1433 1433 <object class="IBConnectionRecord">
1434 1434 <object class="IBActionConnection" key="connection">
1435 1435 <string key="label">performFindPanelAction:</string>
1436 1436 <reference key="source" ref="1014"/>
1437 1437 <reference key="destination" ref="447796847"/>
1438 1438 </object>
1439 1439 <int key="connectionID">241</int>
1440 1440 </object>
1441 1441 <object class="IBConnectionRecord">
1442 1442 <object class="IBActionConnection" key="connection">
1443 1443 <string key="label">centerSelectionInVisibleArea:</string>
1444 1444 <reference key="source" ref="1014"/>
1445 1445 <reference key="destination" ref="88285865"/>
1446 1446 </object>
1447 1447 <int key="connectionID">245</int>
1448 1448 </object>
1449 1449 <object class="IBConnectionRecord">
1450 1450 <object class="IBActionConnection" key="connection">
1451 1451 <string key="label">toggleGrammarChecking:</string>
1452 1452 <reference key="source" ref="1014"/>
1453 1453 <reference key="destination" ref="967646866"/>
1454 1454 </object>
1455 1455 <int key="connectionID">347</int>
1456 1456 </object>
1457 1457 <object class="IBConnectionRecord">
1458 1458 <object class="IBActionConnection" key="connection">
1459 1459 <string key="label">toggleSmartInsertDelete:</string>
1460 1460 <reference key="source" ref="1014"/>
1461 1461 <reference key="destination" ref="605118523"/>
1462 1462 </object>
1463 1463 <int key="connectionID">355</int>
1464 1464 </object>
1465 1465 <object class="IBConnectionRecord">
1466 1466 <object class="IBActionConnection" key="connection">
1467 1467 <string key="label">toggleAutomaticQuoteSubstitution:</string>
1468 1468 <reference key="source" ref="1014"/>
1469 1469 <reference key="destination" ref="197661976"/>
1470 1470 </object>
1471 1471 <int key="connectionID">356</int>
1472 1472 </object>
1473 1473 <object class="IBConnectionRecord">
1474 1474 <object class="IBActionConnection" key="connection">
1475 1475 <string key="label">toggleAutomaticLinkDetection:</string>
1476 1476 <reference key="source" ref="1014"/>
1477 1477 <reference key="destination" ref="708854459"/>
1478 1478 </object>
1479 1479 <int key="connectionID">357</int>
1480 1480 </object>
1481 1481 <object class="IBConnectionRecord">
1482 1482 <object class="IBActionConnection" key="connection">
1483 1483 <string key="label">showHelp:</string>
1484 1484 <reference key="source" ref="1014"/>
1485 1485 <reference key="destination" ref="238773614"/>
1486 1486 </object>
1487 1487 <int key="connectionID">360</int>
1488 1488 </object>
1489 1489 <object class="IBConnectionRecord">
1490 1490 <object class="IBActionConnection" key="connection">
1491 1491 <string key="label">orderFrontColorPanel:</string>
1492 1492 <reference key="source" ref="1014"/>
1493 1493 <reference key="destination" ref="1028416764"/>
1494 1494 </object>
1495 1495 <int key="connectionID">361</int>
1496 1496 </object>
1497 1497 <object class="IBConnectionRecord">
1498 1498 <object class="IBActionConnection" key="connection">
1499 1499 <string key="label">saveDocument:</string>
1500 1500 <reference key="source" ref="1014"/>
1501 1501 <reference key="destination" ref="1023925487"/>
1502 1502 </object>
1503 1503 <int key="connectionID">362</int>
1504 1504 </object>
1505 1505 <object class="IBConnectionRecord">
1506 1506 <object class="IBActionConnection" key="connection">
1507 1507 <string key="label">saveDocumentAs:</string>
1508 1508 <reference key="source" ref="1014"/>
1509 1509 <reference key="destination" ref="117038363"/>
1510 1510 </object>
1511 1511 <int key="connectionID">363</int>
1512 1512 </object>
1513 1513 <object class="IBConnectionRecord">
1514 1514 <object class="IBActionConnection" key="connection">
1515 1515 <string key="label">revertDocumentToSaved:</string>
1516 1516 <reference key="source" ref="1014"/>
1517 1517 <reference key="destination" ref="579971712"/>
1518 1518 </object>
1519 1519 <int key="connectionID">364</int>
1520 1520 </object>
1521 1521 <object class="IBConnectionRecord">
1522 1522 <object class="IBActionConnection" key="connection">
1523 1523 <string key="label">runToolbarCustomizationPalette:</string>
1524 1524 <reference key="source" ref="1014"/>
1525 1525 <reference key="destination" ref="237841660"/>
1526 1526 </object>
1527 1527 <int key="connectionID">365</int>
1528 1528 </object>
1529 1529 <object class="IBConnectionRecord">
1530 1530 <object class="IBActionConnection" key="connection">
1531 1531 <string key="label">toggleToolbarShown:</string>
1532 1532 <reference key="source" ref="1014"/>
1533 1533 <reference key="destination" ref="102151532"/>
1534 1534 </object>
1535 1535 <int key="connectionID">366</int>
1536 1536 </object>
1537 1537 <object class="IBConnectionRecord">
1538 1538 <object class="IBActionConnection" key="connection">
1539 1539 <string key="label">hide:</string>
1540 1540 <reference key="source" ref="1014"/>
1541 1541 <reference key="destination" ref="755159360"/>
1542 1542 </object>
1543 1543 <int key="connectionID">367</int>
1544 1544 </object>
1545 1545 <object class="IBConnectionRecord">
1546 1546 <object class="IBActionConnection" key="connection">
1547 1547 <string key="label">hideOtherApplications:</string>
1548 1548 <reference key="source" ref="1014"/>
1549 1549 <reference key="destination" ref="342932134"/>
1550 1550 </object>
1551 1551 <int key="connectionID">368</int>
1552 1552 </object>
1553 1553 <object class="IBConnectionRecord">
1554 1554 <object class="IBActionConnection" key="connection">
1555 1555 <string key="label">terminate:</string>
1556 1556 <reference key="source" ref="1014"/>
1557 1557 <reference key="destination" ref="632727374"/>
1558 1558 </object>
1559 1559 <int key="connectionID">369</int>
1560 1560 </object>
1561 1561 <object class="IBConnectionRecord">
1562 1562 <object class="IBActionConnection" key="connection">
1563 1563 <string key="label">unhideAllApplications:</string>
1564 1564 <reference key="source" ref="1014"/>
1565 1565 <reference key="destination" ref="908899353"/>
1566 1566 </object>
1567 1567 <int key="connectionID">370</int>
1568 1568 </object>
1569 1569 <object class="IBConnectionRecord">
1570 1570 <object class="IBOutletConnection" key="connection">
1571 1571 <string key="label" id="606168085">delegate</string>
1572 1572 <reference key="source" ref="1050"/>
1573 1573 <reference key="destination" ref="610635028"/>
1574 1574 </object>
1575 1575 <int key="connectionID">374</int>
1576 1576 </object>
1577 1577 <object class="IBConnectionRecord">
1578 1578 <object class="IBBindingConnection" key="connection">
1579 1579 <string key="label" id="187454546">contentDictionary: userNS</string>
1580 1580 <reference key="source" ref="808393665"/>
1581 1581 <reference key="destination" ref="631572152"/>
1582 1582 <object class="NSNibBindingConnector" key="connector">
1583 1583 <reference key="NSSource" ref="808393665"/>
1584 1584 <reference key="NSDestination" ref="631572152"/>
1585 1585 <reference key="NSLabel" ref="187454546"/>
1586 1586 <string key="NSBinding">contentDictionary</string>
1587 1587 <string key="NSKeyPath">userNS</string>
1588 1588 <int key="NSNibBindingConnectorVersion">2</int>
1589 1589 </object>
1590 1590 </object>
1591 1591 <int key="connectionID">424</int>
1592 1592 </object>
1593 1593 <object class="IBConnectionRecord">
1594 1594 <object class="IBBindingConnection" key="connection">
1595 1595 <string key="label" id="688370141">value: arrangedObjects.value</string>
1596 1596 <reference key="source" ref="857054683"/>
1597 1597 <reference key="destination" ref="808393665"/>
1598 1598 <object class="NSNibBindingConnector" key="connector">
1599 1599 <reference key="NSSource" ref="857054683"/>
1600 1600 <reference key="NSDestination" ref="808393665"/>
1601 1601 <reference key="NSLabel" ref="688370141"/>
1602 1602 <reference key="NSBinding" ref="276523235"/>
1603 1603 <string key="NSKeyPath">arrangedObjects.value</string>
1604 1604 <int key="NSNibBindingConnectorVersion">2</int>
1605 1605 </object>
1606 1606 </object>
1607 1607 <int key="connectionID">427</int>
1608 1608 </object>
1609 1609 <object class="IBConnectionRecord">
1610 1610 <object class="IBBindingConnection" key="connection">
1611 1611 <string key="label" id="764859820">value: arrangedObjects.key</string>
1612 1612 <reference key="source" ref="920426212"/>
1613 1613 <reference key="destination" ref="808393665"/>
1614 1614 <object class="NSNibBindingConnector" key="connector">
1615 1615 <reference key="NSSource" ref="920426212"/>
1616 1616 <reference key="NSDestination" ref="808393665"/>
1617 1617 <reference key="NSLabel" ref="764859820"/>
1618 1618 <reference key="NSBinding" ref="276523235"/>
1619 1619 <string key="NSKeyPath">arrangedObjects.key</string>
1620 1620 <int key="NSNibBindingConnectorVersion">2</int>
1621 1621 </object>
1622 1622 </object>
1623 1623 <int key="connectionID">428</int>
1624 1624 </object>
1625 1625 <object class="IBConnectionRecord">
1626 1626 <object class="IBOutletConnection" key="connection">
1627 1627 <reference key="label" ref="606168085"/>
1628 1628 <reference key="source" ref="972006081"/>
1629 1629 <reference key="destination" ref="631572152"/>
1630 1630 </object>
1631 1631 <int key="connectionID">429</int>
1632 1632 </object>
1633 1633 <object class="IBConnectionRecord">
1634 1634 <object class="IBBindingConnection" key="connection">
1635 1635 <string key="label" id="97087091">animate: waitingForEngine</string>
1636 1636 <reference key="source" ref="74807016"/>
1637 1637 <reference key="destination" ref="631572152"/>
1638 1638 <object class="NSNibBindingConnector" key="connector">
1639 1639 <reference key="NSSource" ref="74807016"/>
1640 1640 <reference key="NSDestination" ref="631572152"/>
1641 1641 <reference key="NSLabel" ref="97087091"/>
1642 1642 <string key="NSBinding">animate</string>
1643 1643 <string key="NSKeyPath">waitingForEngine</string>
1644 1644 <int key="NSNibBindingConnectorVersion">2</int>
1645 1645 </object>
1646 1646 </object>
1647 1647 <int key="connectionID">437</int>
1648 1648 </object>
1649 1649 <object class="IBConnectionRecord">
1650 1650 <object class="IBBindingConnection" key="connection">
1651 1651 <string key="label" id="289275654">filterPredicate: workspaceFilterPredicate</string>
1652 1652 <reference key="source" ref="808393665"/>
1653 1653 <reference key="destination" ref="610635028"/>
1654 1654 <object class="NSNibBindingConnector" key="connector">
1655 1655 <reference key="NSSource" ref="808393665"/>
1656 1656 <reference key="NSDestination" ref="610635028"/>
1657 1657 <reference key="NSLabel" ref="289275654"/>
1658 1658 <string key="NSBinding">filterPredicate</string>
1659 1659 <string key="NSKeyPath">workspaceFilterPredicate</string>
1660 1660 <int key="NSNibBindingConnectorVersion">2</int>
1661 1661 </object>
1662 1662 </object>
1663 1663 <int key="connectionID">440</int>
1664 1664 </object>
1665 1665 <object class="IBConnectionRecord">
1666 1666 <object class="IBOutletConnection" key="connection">
1667 1667 <string key="label">ipythonController</string>
1668 1668 <reference key="source" ref="610635028"/>
1669 1669 <reference key="destination" ref="631572152"/>
1670 1670 </object>
1671 1671 <int key="connectionID">441</int>
1672 1672 </object>
1673 1673 <object class="IBConnectionRecord">
1674 1674 <object class="IBOutletConnection" key="connection">
1675 1675 <string key="label" id="684042788">textView</string>
1676 1676 <reference key="source" ref="631572152"/>
1677 1677 <reference key="destination" ref="163417131"/>
1678 1678 </object>
1679 1679 <int key="connectionID">444</int>
1680 1680 </object>
1681 1681 <object class="IBConnectionRecord">
1682 1682 <object class="IBOutletConnection" key="connection">
1683 1683 <string key="label">initialFirstResponder</string>
1684 1684 <reference key="source" ref="972006081"/>
1685 1685 <reference key="destination" ref="163417131"/>
1686 1686 </object>
1687 1687 <int key="connectionID">445</int>
1688 1688 </object>
1689 1689 </object>
1690 1690 <object class="IBMutableOrderedSet" key="objectRecords">
1691 1691 <object class="NSArray" key="orderedObjects">
1692 1692 <bool key="EncodedWithXMLCoder">YES</bool>
1693 1693 <object class="IBObjectRecord">
1694 1694 <int key="objectID">0</int>
1695 1695 <object class="NSArray" key="object" id="1049">
1696 1696 <bool key="EncodedWithXMLCoder">YES</bool>
1697 1697 </object>
1698 1698 <reference key="children" ref="1048"/>
1699 1699 <nil key="parent"/>
1700 1700 </object>
1701 1701 <object class="IBObjectRecord">
1702 1702 <int key="objectID">-2</int>
1703 1703 <reference key="object" ref="1021"/>
1704 1704 <reference key="parent" ref="1049"/>
1705 1705 <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
1706 1706 </object>
1707 1707 <object class="IBObjectRecord">
1708 1708 <int key="objectID">-1</int>
1709 1709 <reference key="object" ref="1014"/>
1710 1710 <reference key="parent" ref="1049"/>
1711 1711 <string key="objectName">First Responder</string>
1712 1712 </object>
1713 1713 <object class="IBObjectRecord">
1714 1714 <int key="objectID">-3</int>
1715 1715 <reference key="object" ref="1050"/>
1716 1716 <reference key="parent" ref="1049"/>
1717 1717 <string key="objectName">Application</string>
1718 1718 </object>
1719 1719 <object class="IBObjectRecord">
1720 1720 <int key="objectID">29</int>
1721 1721 <reference key="object" ref="649796088"/>
1722 1722 <object class="NSMutableArray" key="children">
1723 1723 <bool key="EncodedWithXMLCoder">YES</bool>
1724 1724 <reference ref="713487014"/>
1725 1725 <reference ref="694149608"/>
1726 1726 <reference ref="391199113"/>
1727 1727 <reference ref="952259628"/>
1728 1728 <reference ref="379814623"/>
1729 1729 <reference ref="586577488"/>
1730 1730 <reference ref="626404410"/>
1731 1731 </object>
1732 1732 <reference key="parent" ref="1049"/>
1733 1733 <string key="objectName">MainMenu</string>
1734 1734 </object>
1735 1735 <object class="IBObjectRecord">
1736 1736 <int key="objectID">19</int>
1737 1737 <reference key="object" ref="713487014"/>
1738 1738 <object class="NSMutableArray" key="children">
1739 1739 <bool key="EncodedWithXMLCoder">YES</bool>
1740 1740 <reference ref="835318025"/>
1741 1741 </object>
1742 1742 <reference key="parent" ref="649796088"/>
1743 1743 </object>
1744 1744 <object class="IBObjectRecord">
1745 1745 <int key="objectID">56</int>
1746 1746 <reference key="object" ref="694149608"/>
1747 1747 <object class="NSMutableArray" key="children">
1748 1748 <bool key="EncodedWithXMLCoder">YES</bool>
1749 1749 <reference ref="110575045"/>
1750 1750 </object>
1751 1751 <reference key="parent" ref="649796088"/>
1752 1752 </object>
1753 1753 <object class="IBObjectRecord">
1754 1754 <int key="objectID">103</int>
1755 1755 <reference key="object" ref="391199113"/>
1756 1756 <object class="NSMutableArray" key="children">
1757 1757 <bool key="EncodedWithXMLCoder">YES</bool>
1758 1758 <reference ref="374024848"/>
1759 1759 </object>
1760 1760 <reference key="parent" ref="649796088"/>
1761 1761 <string key="objectName" id="508169456">1</string>
1762 1762 </object>
1763 1763 <object class="IBObjectRecord">
1764 1764 <int key="objectID">217</int>
1765 1765 <reference key="object" ref="952259628"/>
1766 1766 <object class="NSMutableArray" key="children">
1767 1767 <bool key="EncodedWithXMLCoder">YES</bool>
1768 1768 <reference ref="789758025"/>
1769 1769 </object>
1770 1770 <reference key="parent" ref="649796088"/>
1771 1771 </object>
1772 1772 <object class="IBObjectRecord">
1773 1773 <int key="objectID">83</int>
1774 1774 <reference key="object" ref="379814623"/>
1775 1775 <object class="NSMutableArray" key="children">
1776 1776 <bool key="EncodedWithXMLCoder">YES</bool>
1777 1777 <reference ref="720053764"/>
1778 1778 </object>
1779 1779 <reference key="parent" ref="649796088"/>
1780 1780 </object>
1781 1781 <object class="IBObjectRecord">
1782 1782 <int key="objectID">81</int>
1783 1783 <reference key="object" ref="720053764"/>
1784 1784 <object class="NSMutableArray" key="children">
1785 1785 <bool key="EncodedWithXMLCoder">YES</bool>
1786 1786 <reference ref="1023925487"/>
1787 1787 <reference ref="117038363"/>
1788 1788 <reference ref="49223823"/>
1789 1789 <reference ref="722745758"/>
1790 1790 <reference ref="705341025"/>
1791 1791 <reference ref="1025936716"/>
1792 1792 <reference ref="294629803"/>
1793 1793 <reference ref="776162233"/>
1794 1794 <reference ref="425164168"/>
1795 1795 <reference ref="579971712"/>
1796 1796 <reference ref="1010469920"/>
1797 1797 </object>
1798 1798 <reference key="parent" ref="379814623"/>
1799 1799 </object>
1800 1800 <object class="IBObjectRecord">
1801 1801 <int key="objectID">75</int>
1802 1802 <reference key="object" ref="1023925487"/>
1803 1803 <reference key="parent" ref="720053764"/>
1804 1804 <string key="objectName">3</string>
1805 1805 </object>
1806 1806 <object class="IBObjectRecord">
1807 1807 <int key="objectID">80</int>
1808 1808 <reference key="object" ref="117038363"/>
1809 1809 <reference key="parent" ref="720053764"/>
1810 1810 <string key="objectName">8</string>
1811 1811 </object>
1812 1812 <object class="IBObjectRecord">
1813 1813 <int key="objectID">78</int>
1814 1814 <reference key="object" ref="49223823"/>
1815 1815 <reference key="parent" ref="720053764"/>
1816 1816 <string key="objectName">6</string>
1817 1817 </object>
1818 1818 <object class="IBObjectRecord">
1819 1819 <int key="objectID">72</int>
1820 1820 <reference key="object" ref="722745758"/>
1821 1821 <reference key="parent" ref="720053764"/>
1822 1822 </object>
1823 1823 <object class="IBObjectRecord">
1824 1824 <int key="objectID">82</int>
1825 1825 <reference key="object" ref="705341025"/>
1826 1826 <reference key="parent" ref="720053764"/>
1827 1827 <string key="objectName">9</string>
1828 1828 </object>
1829 1829 <object class="IBObjectRecord">
1830 1830 <int key="objectID">124</int>
1831 1831 <reference key="object" ref="1025936716"/>
1832 1832 <object class="NSMutableArray" key="children">
1833 1833 <bool key="EncodedWithXMLCoder">YES</bool>
1834 1834 <reference ref="1065607017"/>
1835 1835 </object>
1836 1836 <reference key="parent" ref="720053764"/>
1837 1837 </object>
1838 1838 <object class="IBObjectRecord">
1839 1839 <int key="objectID">77</int>
1840 1840 <reference key="object" ref="294629803"/>
1841 1841 <reference key="parent" ref="720053764"/>
1842 1842 <string key="objectName">5</string>
1843 1843 </object>
1844 1844 <object class="IBObjectRecord">
1845 1845 <int key="objectID">73</int>
1846 1846 <reference key="object" ref="776162233"/>
1847 1847 <reference key="parent" ref="720053764"/>
1848 1848 <reference key="objectName" ref="508169456"/>
1849 1849 </object>
1850 1850 <object class="IBObjectRecord">
1851 1851 <int key="objectID">79</int>
1852 1852 <reference key="object" ref="425164168"/>
1853 1853 <reference key="parent" ref="720053764"/>
1854 1854 <string key="objectName">7</string>
1855 1855 </object>
1856 1856 <object class="IBObjectRecord">
1857 1857 <int key="objectID">112</int>
1858 1858 <reference key="object" ref="579971712"/>
1859 1859 <reference key="parent" ref="720053764"/>
1860 1860 <string key="objectName">10</string>
1861 1861 </object>
1862 1862 <object class="IBObjectRecord">
1863 1863 <int key="objectID">74</int>
1864 1864 <reference key="object" ref="1010469920"/>
1865 1865 <reference key="parent" ref="720053764"/>
1866 1866 <string key="objectName" id="464456376">2</string>
1867 1867 </object>
1868 1868 <object class="IBObjectRecord">
1869 1869 <int key="objectID">125</int>
1870 1870 <reference key="object" ref="1065607017"/>
1871 1871 <object class="NSMutableArray" key="children">
1872 1872 <bool key="EncodedWithXMLCoder">YES</bool>
1873 1873 <reference ref="759406840"/>
1874 1874 </object>
1875 1875 <reference key="parent" ref="1025936716"/>
1876 1876 </object>
1877 1877 <object class="IBObjectRecord">
1878 1878 <int key="objectID">126</int>
1879 1879 <reference key="object" ref="759406840"/>
1880 1880 <reference key="parent" ref="1065607017"/>
1881 1881 </object>
1882 1882 <object class="IBObjectRecord">
1883 1883 <int key="objectID">205</int>
1884 1884 <reference key="object" ref="789758025"/>
1885 1885 <object class="NSMutableArray" key="children">
1886 1886 <bool key="EncodedWithXMLCoder">YES</bool>
1887 1887 <reference ref="437104165"/>
1888 1888 <reference ref="583158037"/>
1889 1889 <reference ref="1058277027"/>
1890 1890 <reference ref="212016141"/>
1891 1891 <reference ref="296257095"/>
1892 1892 <reference ref="29853731"/>
1893 1893 <reference ref="860595796"/>
1894 1894 <reference ref="1040322652"/>
1895 1895 <reference ref="790794224"/>
1896 1896 <reference ref="892235320"/>
1897 1897 <reference ref="972420730"/>
1898 1898 <reference ref="676164635"/>
1899 1899 <reference ref="507821607"/>
1900 1900 </object>
1901 1901 <reference key="parent" ref="952259628"/>
1902 1902 </object>
1903 1903 <object class="IBObjectRecord">
1904 1904 <int key="objectID">202</int>
1905 1905 <reference key="object" ref="437104165"/>
1906 1906 <reference key="parent" ref="789758025"/>
1907 1907 </object>
1908 1908 <object class="IBObjectRecord">
1909 1909 <int key="objectID">198</int>
1910 1910 <reference key="object" ref="583158037"/>
1911 1911 <reference key="parent" ref="789758025"/>
1912 1912 </object>
1913 1913 <object class="IBObjectRecord">
1914 1914 <int key="objectID">207</int>
1915 1915 <reference key="object" ref="1058277027"/>
1916 1916 <reference key="parent" ref="789758025"/>
1917 1917 </object>
1918 1918 <object class="IBObjectRecord">
1919 1919 <int key="objectID">214</int>
1920 1920 <reference key="object" ref="212016141"/>
1921 1921 <reference key="parent" ref="789758025"/>
1922 1922 </object>
1923 1923 <object class="IBObjectRecord">
1924 1924 <int key="objectID">199</int>
1925 1925 <reference key="object" ref="296257095"/>
1926 1926 <reference key="parent" ref="789758025"/>
1927 1927 </object>
1928 1928 <object class="IBObjectRecord">
1929 1929 <int key="objectID">203</int>
1930 1930 <reference key="object" ref="29853731"/>
1931 1931 <reference key="parent" ref="789758025"/>
1932 1932 </object>
1933 1933 <object class="IBObjectRecord">
1934 1934 <int key="objectID">197</int>
1935 1935 <reference key="object" ref="860595796"/>
1936 1936 <reference key="parent" ref="789758025"/>
1937 1937 </object>
1938 1938 <object class="IBObjectRecord">
1939 1939 <int key="objectID">206</int>
1940 1940 <reference key="object" ref="1040322652"/>
1941 1941 <reference key="parent" ref="789758025"/>
1942 1942 </object>
1943 1943 <object class="IBObjectRecord">
1944 1944 <int key="objectID">215</int>
1945 1945 <reference key="object" ref="790794224"/>
1946 1946 <reference key="parent" ref="789758025"/>
1947 1947 </object>
1948 1948 <object class="IBObjectRecord">
1949 1949 <int key="objectID">218</int>
1950 1950 <reference key="object" ref="892235320"/>
1951 1951 <object class="NSMutableArray" key="children">
1952 1952 <bool key="EncodedWithXMLCoder">YES</bool>
1953 1953 <reference ref="963351320"/>
1954 1954 </object>
1955 1955 <reference key="parent" ref="789758025"/>
1956 1956 </object>
1957 1957 <object class="IBObjectRecord">
1958 1958 <int key="objectID">216</int>
1959 1959 <reference key="object" ref="972420730"/>
1960 1960 <object class="NSMutableArray" key="children">
1961 1961 <bool key="EncodedWithXMLCoder">YES</bool>
1962 1962 <reference ref="769623530"/>
1963 1963 </object>
1964 1964 <reference key="parent" ref="789758025"/>
1965 1965 </object>
1966 1966 <object class="IBObjectRecord">
1967 1967 <int key="objectID">200</int>
1968 1968 <reference key="object" ref="769623530"/>
1969 1969 <object class="NSMutableArray" key="children">
1970 1970 <bool key="EncodedWithXMLCoder">YES</bool>
1971 1971 <reference ref="948374510"/>
1972 1972 <reference ref="96193923"/>
1973 1973 <reference ref="679648819"/>
1974 1974 <reference ref="967646866"/>
1975 1975 </object>
1976 1976 <reference key="parent" ref="972420730"/>
1977 1977 </object>
1978 1978 <object class="IBObjectRecord">
1979 1979 <int key="objectID">219</int>
1980 1980 <reference key="object" ref="948374510"/>
1981 1981 <reference key="parent" ref="769623530"/>
1982 1982 </object>
1983 1983 <object class="IBObjectRecord">
1984 1984 <int key="objectID">201</int>
1985 1985 <reference key="object" ref="96193923"/>
1986 1986 <reference key="parent" ref="769623530"/>
1987 1987 </object>
1988 1988 <object class="IBObjectRecord">
1989 1989 <int key="objectID">204</int>
1990 1990 <reference key="object" ref="679648819"/>
1991 1991 <reference key="parent" ref="769623530"/>
1992 1992 </object>
1993 1993 <object class="IBObjectRecord">
1994 1994 <int key="objectID">220</int>
1995 1995 <reference key="object" ref="963351320"/>
1996 1996 <object class="NSMutableArray" key="children">
1997 1997 <bool key="EncodedWithXMLCoder">YES</bool>
1998 1998 <reference ref="270902937"/>
1999 1999 <reference ref="88285865"/>
2000 2000 <reference ref="159080638"/>
2001 2001 <reference ref="326711663"/>
2002 2002 <reference ref="447796847"/>
2003 2003 </object>
2004 2004 <reference key="parent" ref="892235320"/>
2005 2005 </object>
2006 2006 <object class="IBObjectRecord">
2007 2007 <int key="objectID">213</int>
2008 2008 <reference key="object" ref="270902937"/>
2009 2009 <reference key="parent" ref="963351320"/>
2010 2010 </object>
2011 2011 <object class="IBObjectRecord">
2012 2012 <int key="objectID">210</int>
2013 2013 <reference key="object" ref="88285865"/>
2014 2014 <reference key="parent" ref="963351320"/>
2015 2015 </object>
2016 2016 <object class="IBObjectRecord">
2017 2017 <int key="objectID">221</int>
2018 2018 <reference key="object" ref="159080638"/>
2019 2019 <reference key="parent" ref="963351320"/>
2020 2020 </object>
2021 2021 <object class="IBObjectRecord">
2022 2022 <int key="objectID">208</int>
2023 2023 <reference key="object" ref="326711663"/>
2024 2024 <reference key="parent" ref="963351320"/>
2025 2025 </object>
2026 2026 <object class="IBObjectRecord">
2027 2027 <int key="objectID">209</int>
2028 2028 <reference key="object" ref="447796847"/>
2029 2029 <reference key="parent" ref="963351320"/>
2030 2030 </object>
2031 2031 <object class="IBObjectRecord">
2032 2032 <int key="objectID">106</int>
2033 2033 <reference key="object" ref="374024848"/>
2034 2034 <object class="NSMutableArray" key="children">
2035 2035 <bool key="EncodedWithXMLCoder">YES</bool>
2036 2036 <reference ref="238773614"/>
2037 2037 </object>
2038 2038 <reference key="parent" ref="391199113"/>
2039 2039 <reference key="objectName" ref="464456376"/>
2040 2040 </object>
2041 2041 <object class="IBObjectRecord">
2042 2042 <int key="objectID">111</int>
2043 2043 <reference key="object" ref="238773614"/>
2044 2044 <reference key="parent" ref="374024848"/>
2045 2045 </object>
2046 2046 <object class="IBObjectRecord">
2047 2047 <int key="objectID">57</int>
2048 2048 <reference key="object" ref="110575045"/>
2049 2049 <object class="NSMutableArray" key="children">
2050 2050 <bool key="EncodedWithXMLCoder">YES</bool>
2051 2051 <reference ref="238522557"/>
2052 2052 <reference ref="755159360"/>
2053 2053 <reference ref="908899353"/>
2054 2054 <reference ref="632727374"/>
2055 2055 <reference ref="646227648"/>
2056 2056 <reference ref="609285721"/>
2057 2057 <reference ref="481834944"/>
2058 2058 <reference ref="304266470"/>
2059 2059 <reference ref="1046388886"/>
2060 2060 <reference ref="1056857174"/>
2061 2061 <reference ref="342932134"/>
2062 2062 </object>
2063 2063 <reference key="parent" ref="694149608"/>
2064 2064 </object>
2065 2065 <object class="IBObjectRecord">
2066 2066 <int key="objectID">58</int>
2067 2067 <reference key="object" ref="238522557"/>
2068 2068 <reference key="parent" ref="110575045"/>
2069 2069 </object>
2070 2070 <object class="IBObjectRecord">
2071 2071 <int key="objectID">134</int>
2072 2072 <reference key="object" ref="755159360"/>
2073 2073 <reference key="parent" ref="110575045"/>
2074 2074 </object>
2075 2075 <object class="IBObjectRecord">
2076 2076 <int key="objectID">150</int>
2077 2077 <reference key="object" ref="908899353"/>
2078 2078 <reference key="parent" ref="110575045"/>
2079 2079 </object>
2080 2080 <object class="IBObjectRecord">
2081 2081 <int key="objectID">136</int>
2082 2082 <reference key="object" ref="632727374"/>
2083 2083 <reference key="parent" ref="110575045"/>
2084 2084 <string key="objectName">1111</string>
2085 2085 </object>
2086 2086 <object class="IBObjectRecord">
2087 2087 <int key="objectID">144</int>
2088 2088 <reference key="object" ref="646227648"/>
2089 2089 <reference key="parent" ref="110575045"/>
2090 2090 </object>
2091 2091 <object class="IBObjectRecord">
2092 2092 <int key="objectID">129</int>
2093 2093 <reference key="object" ref="609285721"/>
2094 2094 <reference key="parent" ref="110575045"/>
2095 2095 <string key="objectName">121</string>
2096 2096 </object>
2097 2097 <object class="IBObjectRecord">
2098 2098 <int key="objectID">143</int>
2099 2099 <reference key="object" ref="481834944"/>
2100 2100 <reference key="parent" ref="110575045"/>
2101 2101 </object>
2102 2102 <object class="IBObjectRecord">
2103 2103 <int key="objectID">236</int>
2104 2104 <reference key="object" ref="304266470"/>
2105 2105 <reference key="parent" ref="110575045"/>
2106 2106 </object>
2107 2107 <object class="IBObjectRecord">
2108 2108 <int key="objectID">131</int>
2109 2109 <reference key="object" ref="1046388886"/>
2110 2110 <object class="NSMutableArray" key="children">
2111 2111 <bool key="EncodedWithXMLCoder">YES</bool>
2112 2112 <reference ref="752062318"/>
2113 2113 </object>
2114 2114 <reference key="parent" ref="110575045"/>
2115 2115 </object>
2116 2116 <object class="IBObjectRecord">
2117 2117 <int key="objectID">149</int>
2118 2118 <reference key="object" ref="1056857174"/>
2119 2119 <reference key="parent" ref="110575045"/>
2120 2120 </object>
2121 2121 <object class="IBObjectRecord">
2122 2122 <int key="objectID">145</int>
2123 2123 <reference key="object" ref="342932134"/>
2124 2124 <reference key="parent" ref="110575045"/>
2125 2125 </object>
2126 2126 <object class="IBObjectRecord">
2127 2127 <int key="objectID">130</int>
2128 2128 <reference key="object" ref="752062318"/>
2129 2129 <reference key="parent" ref="1046388886"/>
2130 2130 </object>
2131 2131 <object class="IBObjectRecord">
2132 2132 <int key="objectID">24</int>
2133 2133 <reference key="object" ref="835318025"/>
2134 2134 <object class="NSMutableArray" key="children">
2135 2135 <bool key="EncodedWithXMLCoder">YES</bool>
2136 2136 <reference ref="299356726"/>
2137 2137 <reference ref="625202149"/>
2138 2138 <reference ref="575023229"/>
2139 2139 <reference ref="1011231497"/>
2140 2140 </object>
2141 2141 <reference key="parent" ref="713487014"/>
2142 2142 </object>
2143 2143 <object class="IBObjectRecord">
2144 2144 <int key="objectID">92</int>
2145 2145 <reference key="object" ref="299356726"/>
2146 2146 <reference key="parent" ref="835318025"/>
2147 2147 </object>
2148 2148 <object class="IBObjectRecord">
2149 2149 <int key="objectID">5</int>
2150 2150 <reference key="object" ref="625202149"/>
2151 2151 <reference key="parent" ref="835318025"/>
2152 2152 </object>
2153 2153 <object class="IBObjectRecord">
2154 2154 <int key="objectID">239</int>
2155 2155 <reference key="object" ref="575023229"/>
2156 2156 <reference key="parent" ref="835318025"/>
2157 2157 </object>
2158 2158 <object class="IBObjectRecord">
2159 2159 <int key="objectID">23</int>
2160 2160 <reference key="object" ref="1011231497"/>
2161 2161 <reference key="parent" ref="835318025"/>
2162 2162 </object>
2163 2163 <object class="IBObjectRecord">
2164 2164 <int key="objectID">295</int>
2165 2165 <reference key="object" ref="586577488"/>
2166 2166 <object class="NSMutableArray" key="children">
2167 2167 <bool key="EncodedWithXMLCoder">YES</bool>
2168 2168 <reference ref="466310130"/>
2169 2169 </object>
2170 2170 <reference key="parent" ref="649796088"/>
2171 2171 </object>
2172 2172 <object class="IBObjectRecord">
2173 2173 <int key="objectID">296</int>
2174 2174 <reference key="object" ref="466310130"/>
2175 2175 <object class="NSMutableArray" key="children">
2176 2176 <bool key="EncodedWithXMLCoder">YES</bool>
2177 2177 <reference ref="102151532"/>
2178 2178 <reference ref="237841660"/>
2179 2179 </object>
2180 2180 <reference key="parent" ref="586577488"/>
2181 2181 </object>
2182 2182 <object class="IBObjectRecord">
2183 2183 <int key="objectID">297</int>
2184 2184 <reference key="object" ref="102151532"/>
2185 2185 <reference key="parent" ref="466310130"/>
2186 2186 </object>
2187 2187 <object class="IBObjectRecord">
2188 2188 <int key="objectID">298</int>
2189 2189 <reference key="object" ref="237841660"/>
2190 2190 <reference key="parent" ref="466310130"/>
2191 2191 </object>
2192 2192 <object class="IBObjectRecord">
2193 2193 <int key="objectID">299</int>
2194 2194 <reference key="object" ref="626404410"/>
2195 2195 <object class="NSMutableArray" key="children">
2196 2196 <bool key="EncodedWithXMLCoder">YES</bool>
2197 2197 <reference ref="502084290"/>
2198 2198 </object>
2199 2199 <reference key="parent" ref="649796088"/>
2200 2200 </object>
2201 2201 <object class="IBObjectRecord">
2202 2202 <int key="objectID">300</int>
2203 2203 <reference key="object" ref="502084290"/>
2204 2204 <object class="NSMutableArray" key="children">
2205 2205 <bool key="EncodedWithXMLCoder">YES</bool>
2206 2206 <reference ref="519768076"/>
2207 2207 <reference ref="1028416764"/>
2208 2208 </object>
2209 2209 <reference key="parent" ref="626404410"/>
2210 2210 </object>
2211 2211 <object class="IBObjectRecord">
2212 2212 <int key="objectID">344</int>
2213 2213 <reference key="object" ref="519768076"/>
2214 2214 <reference key="parent" ref="502084290"/>
2215 2215 </object>
2216 2216 <object class="IBObjectRecord">
2217 2217 <int key="objectID">345</int>
2218 2218 <reference key="object" ref="1028416764"/>
2219 2219 <reference key="parent" ref="502084290"/>
2220 2220 </object>
2221 2221 <object class="IBObjectRecord">
2222 2222 <int key="objectID">211</int>
2223 2223 <reference key="object" ref="676164635"/>
2224 2224 <object class="NSMutableArray" key="children">
2225 2225 <bool key="EncodedWithXMLCoder">YES</bool>
2226 2226 <reference ref="785027613"/>
2227 2227 </object>
2228 2228 <reference key="parent" ref="789758025"/>
2229 2229 </object>
2230 2230 <object class="IBObjectRecord">
2231 2231 <int key="objectID">212</int>
2232 2232 <reference key="object" ref="785027613"/>
2233 2233 <object class="NSMutableArray" key="children">
2234 2234 <bool key="EncodedWithXMLCoder">YES</bool>
2235 2235 <reference ref="680220178"/>
2236 2236 <reference ref="731782645"/>
2237 2237 </object>
2238 2238 <reference key="parent" ref="676164635"/>
2239 2239 </object>
2240 2240 <object class="IBObjectRecord">
2241 2241 <int key="objectID">195</int>
2242 2242 <reference key="object" ref="680220178"/>
2243 2243 <reference key="parent" ref="785027613"/>
2244 2244 </object>
2245 2245 <object class="IBObjectRecord">
2246 2246 <int key="objectID">196</int>
2247 2247 <reference key="object" ref="731782645"/>
2248 2248 <reference key="parent" ref="785027613"/>
2249 2249 </object>
2250 2250 <object class="IBObjectRecord">
2251 2251 <int key="objectID">346</int>
2252 2252 <reference key="object" ref="967646866"/>
2253 2253 <reference key="parent" ref="769623530"/>
2254 2254 </object>
2255 2255 <object class="IBObjectRecord">
2256 2256 <int key="objectID">348</int>
2257 2257 <reference key="object" ref="507821607"/>
2258 2258 <object class="NSMutableArray" key="children">
2259 2259 <bool key="EncodedWithXMLCoder">YES</bool>
2260 2260 <reference ref="698887838"/>
2261 2261 </object>
2262 2262 <reference key="parent" ref="789758025"/>
2263 2263 </object>
2264 2264 <object class="IBObjectRecord">
2265 2265 <int key="objectID">349</int>
2266 2266 <reference key="object" ref="698887838"/>
2267 2267 <object class="NSMutableArray" key="children">
2268 2268 <bool key="EncodedWithXMLCoder">YES</bool>
2269 2269 <reference ref="605118523"/>
2270 2270 <reference ref="197661976"/>
2271 2271 <reference ref="708854459"/>
2272 2272 </object>
2273 2273 <reference key="parent" ref="507821607"/>
2274 2274 </object>
2275 2275 <object class="IBObjectRecord">
2276 2276 <int key="objectID">350</int>
2277 2277 <reference key="object" ref="605118523"/>
2278 2278 <reference key="parent" ref="698887838"/>
2279 2279 </object>
2280 2280 <object class="IBObjectRecord">
2281 2281 <int key="objectID">351</int>
2282 2282 <reference key="object" ref="197661976"/>
2283 2283 <reference key="parent" ref="698887838"/>
2284 2284 </object>
2285 2285 <object class="IBObjectRecord">
2286 2286 <int key="objectID">354</int>
2287 2287 <reference key="object" ref="708854459"/>
2288 2288 <reference key="parent" ref="698887838"/>
2289 2289 </object>
2290 2290 <object class="IBObjectRecord">
2291 2291 <int key="objectID">371</int>
2292 2292 <reference key="object" ref="972006081"/>
2293 2293 <object class="NSMutableArray" key="children">
2294 2294 <bool key="EncodedWithXMLCoder">YES</bool>
2295 2295 <reference ref="439893737"/>
2296 2296 </object>
2297 2297 <reference key="parent" ref="1049"/>
2298 2298 </object>
2299 2299 <object class="IBObjectRecord">
2300 2300 <int key="objectID">372</int>
2301 2301 <reference key="object" ref="439893737"/>
2302 2302 <object class="NSMutableArray" key="children">
2303 2303 <bool key="EncodedWithXMLCoder">YES</bool>
2304 2304 <reference ref="741760375"/>
2305 2305 <reference ref="74807016"/>
2306 2306 </object>
2307 2307 <reference key="parent" ref="972006081"/>
2308 2308 </object>
2309 2309 <object class="IBObjectRecord">
2310 2310 <int key="objectID">373</int>
2311 2311 <reference key="object" ref="610635028"/>
2312 2312 <reference key="parent" ref="1049"/>
2313 2313 <reference key="objectName" ref="982950837"/>
2314 2314 </object>
2315 2315 <object class="IBObjectRecord">
2316 2316 <int key="objectID">385</int>
2317 2317 <reference key="object" ref="808393665"/>
2318 2318 <reference key="parent" ref="1049"/>
2319 2319 <string key="objectName">User Namespace Controller</string>
2320 2320 </object>
2321 2321 <object class="IBObjectRecord">
2322 2322 <int key="objectID">421</int>
2323 2323 <reference key="object" ref="741760375"/>
2324 2324 <object class="NSMutableArray" key="children">
2325 2325 <bool key="EncodedWithXMLCoder">YES</bool>
2326 2326 <reference ref="554641139"/>
2327 2327 <reference ref="764100755"/>
2328 2328 </object>
2329 2329 <reference key="parent" ref="439893737"/>
2330 2330 </object>
2331 2331 <object class="IBObjectRecord">
2332 2332 <int key="objectID">420</int>
2333 2333 <reference key="object" ref="554641139"/>
2334 2334 <object class="NSMutableArray" key="children">
2335 2335 <bool key="EncodedWithXMLCoder">YES</bool>
2336 2336 <reference ref="188193463"/>
2337 2337 </object>
2338 2338 <reference key="parent" ref="741760375"/>
2339 2339 </object>
2340 2340 <object class="IBObjectRecord">
2341 2341 <int key="objectID">416</int>
2342 2342 <reference key="object" ref="188193463"/>
2343 2343 <object class="NSMutableArray" key="children">
2344 2344 <bool key="EncodedWithXMLCoder">YES</bool>
2345 2345 <reference ref="418410897"/>
2346 2346 <reference ref="936733673"/>
2347 2347 <reference ref="163417131"/>
2348 2348 </object>
2349 2349 <reference key="parent" ref="554641139"/>
2350 2350 </object>
2351 2351 <object class="IBObjectRecord">
2352 2352 <int key="objectID">417</int>
2353 2353 <reference key="object" ref="418410897"/>
2354 2354 <reference key="parent" ref="188193463"/>
2355 2355 </object>
2356 2356 <object class="IBObjectRecord">
2357 2357 <int key="objectID">418</int>
2358 2358 <reference key="object" ref="936733673"/>
2359 2359 <reference key="parent" ref="188193463"/>
2360 2360 </object>
2361 2361 <object class="IBObjectRecord">
2362 2362 <int key="objectID">419</int>
2363 2363 <reference key="object" ref="163417131"/>
2364 2364 <reference key="parent" ref="188193463"/>
2365 2365 </object>
2366 2366 <object class="IBObjectRecord">
2367 2367 <int key="objectID">406</int>
2368 2368 <reference key="object" ref="764100755"/>
2369 2369 <object class="NSMutableArray" key="children">
2370 2370 <bool key="EncodedWithXMLCoder">YES</bool>
2371 2371 <reference ref="516244966"/>
2372 2372 </object>
2373 2373 <reference key="parent" ref="741760375"/>
2374 2374 </object>
2375 2375 <object class="IBObjectRecord">
2376 2376 <int key="objectID">407</int>
2377 2377 <reference key="object" ref="516244966"/>
2378 2378 <object class="NSMutableArray" key="children">
2379 2379 <bool key="EncodedWithXMLCoder">YES</bool>
2380 2380 <reference ref="23853726"/>
2381 2381 <reference ref="47103270"/>
2382 2382 <reference ref="512953560"/>
2383 2383 <reference ref="1048357090"/>
2384 2384 </object>
2385 2385 <reference key="parent" ref="764100755"/>
2386 2386 </object>
2387 2387 <object class="IBObjectRecord">
2388 2388 <int key="objectID">411</int>
2389 2389 <reference key="object" ref="23853726"/>
2390 2390 <object class="NSMutableArray" key="children">
2391 2391 <bool key="EncodedWithXMLCoder">YES</bool>
2392 2392 <reference ref="857054683"/>
2393 2393 <reference ref="920426212"/>
2394 2394 </object>
2395 2395 <reference key="parent" ref="516244966"/>
2396 2396 </object>
2397 2397 <object class="IBObjectRecord">
2398 2398 <int key="objectID">410</int>
2399 2399 <reference key="object" ref="47103270"/>
2400 2400 <reference key="parent" ref="516244966"/>
2401 2401 </object>
2402 2402 <object class="IBObjectRecord">
2403 2403 <int key="objectID">409</int>
2404 2404 <reference key="object" ref="512953560"/>
2405 2405 <reference key="parent" ref="516244966"/>
2406 2406 </object>
2407 2407 <object class="IBObjectRecord">
2408 2408 <int key="objectID">408</int>
2409 2409 <reference key="object" ref="1048357090"/>
2410 2410 <reference key="parent" ref="516244966"/>
2411 2411 </object>
2412 2412 <object class="IBObjectRecord">
2413 2413 <int key="objectID">413</int>
2414 2414 <reference key="object" ref="857054683"/>
2415 2415 <object class="NSMutableArray" key="children">
2416 2416 <bool key="EncodedWithXMLCoder">YES</bool>
2417 2417 <reference ref="377147224"/>
2418 2418 </object>
2419 2419 <reference key="parent" ref="23853726"/>
2420 2420 </object>
2421 2421 <object class="IBObjectRecord">
2422 2422 <int key="objectID">412</int>
2423 2423 <reference key="object" ref="920426212"/>
2424 2424 <object class="NSMutableArray" key="children">
2425 2425 <bool key="EncodedWithXMLCoder">YES</bool>
2426 2426 <reference ref="525071236"/>
2427 2427 </object>
2428 2428 <reference key="parent" ref="23853726"/>
2429 2429 </object>
2430 2430 <object class="IBObjectRecord">
2431 2431 <int key="objectID">415</int>
2432 2432 <reference key="object" ref="525071236"/>
2433 2433 <reference key="parent" ref="920426212"/>
2434 2434 </object>
2435 2435 <object class="IBObjectRecord">
2436 2436 <int key="objectID">414</int>
2437 2437 <reference key="object" ref="377147224"/>
2438 2438 <reference key="parent" ref="857054683"/>
2439 2439 </object>
2440 2440 <object class="IBObjectRecord">
2441 2441 <int key="objectID">422</int>
2442 2442 <reference key="object" ref="631572152"/>
2443 2443 <reference key="parent" ref="1049"/>
2444 2444 </object>
2445 2445 <object class="IBObjectRecord">
2446 2446 <int key="objectID">436</int>
2447 2447 <reference key="object" ref="74807016"/>
2448 2448 <reference key="parent" ref="439893737"/>
2449 2449 </object>
2450 2450 </object>
2451 2451 </object>
2452 2452 <object class="NSMutableDictionary" key="flattenedProperties">
2453 2453 <bool key="EncodedWithXMLCoder">YES</bool>
2454 2454 <object class="NSMutableArray" key="dict.sortedKeys">
2455 2455 <bool key="EncodedWithXMLCoder">YES</bool>
2456 2456 <string>-1.IBPluginDependency</string>
2457 2457 <string>-2.IBPluginDependency</string>
2458 2458 <string>-3.IBPluginDependency</string>
2459 2459 <string>103.IBPluginDependency</string>
2460 2460 <string>103.ImportedFromIB2</string>
2461 2461 <string>106.IBPluginDependency</string>
2462 2462 <string>106.ImportedFromIB2</string>
2463 2463 <string>106.editorWindowContentRectSynchronizationRect</string>
2464 2464 <string>111.IBPluginDependency</string>
2465 2465 <string>111.ImportedFromIB2</string>
2466 2466 <string>112.IBPluginDependency</string>
2467 2467 <string>112.ImportedFromIB2</string>
2468 2468 <string>124.IBPluginDependency</string>
2469 2469 <string>124.ImportedFromIB2</string>
2470 2470 <string>125.IBPluginDependency</string>
2471 2471 <string>125.ImportedFromIB2</string>
2472 2472 <string>125.editorWindowContentRectSynchronizationRect</string>
2473 2473 <string>126.IBPluginDependency</string>
2474 2474 <string>126.ImportedFromIB2</string>
2475 2475 <string>129.IBPluginDependency</string>
2476 2476 <string>129.ImportedFromIB2</string>
2477 2477 <string>130.IBPluginDependency</string>
2478 2478 <string>130.ImportedFromIB2</string>
2479 2479 <string>130.editorWindowContentRectSynchronizationRect</string>
2480 2480 <string>131.IBPluginDependency</string>
2481 2481 <string>131.ImportedFromIB2</string>
2482 2482 <string>134.IBPluginDependency</string>
2483 2483 <string>134.ImportedFromIB2</string>
2484 2484 <string>136.IBPluginDependency</string>
2485 2485 <string>136.ImportedFromIB2</string>
2486 2486 <string>143.IBPluginDependency</string>
2487 2487 <string>143.ImportedFromIB2</string>
2488 2488 <string>144.IBPluginDependency</string>
2489 2489 <string>144.ImportedFromIB2</string>
2490 2490 <string>145.IBPluginDependency</string>
2491 2491 <string>145.ImportedFromIB2</string>
2492 2492 <string>149.IBPluginDependency</string>
2493 2493 <string>149.ImportedFromIB2</string>
2494 2494 <string>150.IBPluginDependency</string>
2495 2495 <string>150.ImportedFromIB2</string>
2496 2496 <string>19.IBPluginDependency</string>
2497 2497 <string>19.ImportedFromIB2</string>
2498 2498 <string>195.IBPluginDependency</string>
2499 2499 <string>195.ImportedFromIB2</string>
2500 2500 <string>196.IBPluginDependency</string>
2501 2501 <string>196.ImportedFromIB2</string>
2502 2502 <string>197.IBPluginDependency</string>
2503 2503 <string>197.ImportedFromIB2</string>
2504 2504 <string>198.IBPluginDependency</string>
2505 2505 <string>198.ImportedFromIB2</string>
2506 2506 <string>199.IBPluginDependency</string>
2507 2507 <string>199.ImportedFromIB2</string>
2508 2508 <string>200.IBPluginDependency</string>
2509 2509 <string>200.ImportedFromIB2</string>
2510 2510 <string>200.editorWindowContentRectSynchronizationRect</string>
2511 2511 <string>201.IBPluginDependency</string>
2512 2512 <string>201.ImportedFromIB2</string>
2513 2513 <string>202.IBPluginDependency</string>
2514 2514 <string>202.ImportedFromIB2</string>
2515 2515 <string>203.IBPluginDependency</string>
2516 2516 <string>203.ImportedFromIB2</string>
2517 2517 <string>204.IBPluginDependency</string>
2518 2518 <string>204.ImportedFromIB2</string>
2519 2519 <string>205.IBPluginDependency</string>
2520 2520 <string>205.ImportedFromIB2</string>
2521 2521 <string>205.editorWindowContentRectSynchronizationRect</string>
2522 2522 <string>206.IBPluginDependency</string>
2523 2523 <string>206.ImportedFromIB2</string>
2524 2524 <string>207.IBPluginDependency</string>
2525 2525 <string>207.ImportedFromIB2</string>
2526 2526 <string>208.IBPluginDependency</string>
2527 2527 <string>208.ImportedFromIB2</string>
2528 2528 <string>209.IBPluginDependency</string>
2529 2529 <string>209.ImportedFromIB2</string>
2530 2530 <string>210.IBPluginDependency</string>
2531 2531 <string>210.ImportedFromIB2</string>
2532 2532 <string>211.IBPluginDependency</string>
2533 2533 <string>211.ImportedFromIB2</string>
2534 2534 <string>212.IBPluginDependency</string>
2535 2535 <string>212.ImportedFromIB2</string>
2536 2536 <string>212.editorWindowContentRectSynchronizationRect</string>
2537 2537 <string>213.IBPluginDependency</string>
2538 2538 <string>213.ImportedFromIB2</string>
2539 2539 <string>214.IBPluginDependency</string>
2540 2540 <string>214.ImportedFromIB2</string>
2541 2541 <string>215.IBPluginDependency</string>
2542 2542 <string>215.ImportedFromIB2</string>
2543 2543 <string>216.IBPluginDependency</string>
2544 2544 <string>216.ImportedFromIB2</string>
2545 2545 <string>217.IBPluginDependency</string>
2546 2546 <string>217.ImportedFromIB2</string>
2547 2547 <string>218.IBPluginDependency</string>
2548 2548 <string>218.ImportedFromIB2</string>
2549 2549 <string>219.IBPluginDependency</string>
2550 2550 <string>219.ImportedFromIB2</string>
2551 2551 <string>220.IBPluginDependency</string>
2552 2552 <string>220.ImportedFromIB2</string>
2553 2553 <string>220.editorWindowContentRectSynchronizationRect</string>
2554 2554 <string>221.IBPluginDependency</string>
2555 2555 <string>221.ImportedFromIB2</string>
2556 2556 <string>23.IBPluginDependency</string>
2557 2557 <string>23.ImportedFromIB2</string>
2558 2558 <string>236.IBPluginDependency</string>
2559 2559 <string>236.ImportedFromIB2</string>
2560 2560 <string>239.IBPluginDependency</string>
2561 2561 <string>239.ImportedFromIB2</string>
2562 2562 <string>24.IBPluginDependency</string>
2563 2563 <string>24.ImportedFromIB2</string>
2564 2564 <string>24.editorWindowContentRectSynchronizationRect</string>
2565 2565 <string>29.IBPluginDependency</string>
2566 2566 <string>29.ImportedFromIB2</string>
2567 2567 <string>29.WindowOrigin</string>
2568 2568 <string>29.editorWindowContentRectSynchronizationRect</string>
2569 2569 <string>295.IBPluginDependency</string>
2570 2570 <string>296.IBPluginDependency</string>
2571 2571 <string>296.editorWindowContentRectSynchronizationRect</string>
2572 2572 <string>297.IBPluginDependency</string>
2573 2573 <string>298.IBPluginDependency</string>
2574 2574 <string>299.IBPluginDependency</string>
2575 2575 <string>300.IBPluginDependency</string>
2576 2576 <string>300.editorWindowContentRectSynchronizationRect</string>
2577 2577 <string>344.IBPluginDependency</string>
2578 2578 <string>345.IBPluginDependency</string>
2579 2579 <string>346.IBPluginDependency</string>
2580 2580 <string>346.ImportedFromIB2</string>
2581 2581 <string>348.IBPluginDependency</string>
2582 2582 <string>348.ImportedFromIB2</string>
2583 2583 <string>349.IBPluginDependency</string>
2584 2584 <string>349.ImportedFromIB2</string>
2585 2585 <string>349.editorWindowContentRectSynchronizationRect</string>
2586 2586 <string>350.IBPluginDependency</string>
2587 2587 <string>350.ImportedFromIB2</string>
2588 2588 <string>351.IBPluginDependency</string>
2589 2589 <string>351.ImportedFromIB2</string>
2590 2590 <string>354.IBPluginDependency</string>
2591 2591 <string>354.ImportedFromIB2</string>
2592 2592 <string>371.IBPluginDependency</string>
2593 2593 <string>371.IBViewEditorWindowController.showingLayoutRectangles</string>
2594 2594 <string>371.IBWindowTemplateEditedContentRect</string>
2595 2595 <string>371.NSWindowTemplate.visibleAtLaunch</string>
2596 2596 <string>371.editorWindowContentRectSynchronizationRect</string>
2597 2597 <string>372.IBPluginDependency</string>
2598 2598 <string>373.IBPluginDependency</string>
2599 2599 <string>385.IBPluginDependency</string>
2600 2600 <string>407.IBPluginDependency</string>
2601 2601 <string>409.IBPluginDependency</string>
2602 2602 <string>410.IBPluginDependency</string>
2603 2603 <string>411.IBPluginDependency</string>
2604 2604 <string>412.IBPluginDependency</string>
2605 2605 <string>413.IBPluginDependency</string>
2606 2606 <string>414.IBPluginDependency</string>
2607 2607 <string>415.IBPluginDependency</string>
2608 2608 <string>416.IBPluginDependency</string>
2609 2609 <string>417.IBPluginDependency</string>
2610 2610 <string>418.IBPluginDependency</string>
2611 2611 <string>419.IBAttributePlaceholdersKey</string>
2612 2612 <string>419.IBPluginDependency</string>
2613 2613 <string>422.IBPluginDependency</string>
2614 2614 <string>436.IBPluginDependency</string>
2615 2615 <string>5.IBPluginDependency</string>
2616 2616 <string>5.ImportedFromIB2</string>
2617 2617 <string>56.IBPluginDependency</string>
2618 2618 <string>56.ImportedFromIB2</string>
2619 2619 <string>57.IBPluginDependency</string>
2620 2620 <string>57.ImportedFromIB2</string>
2621 2621 <string>57.editorWindowContentRectSynchronizationRect</string>
2622 2622 <string>58.IBPluginDependency</string>
2623 2623 <string>58.ImportedFromIB2</string>
2624 2624 <string>72.IBPluginDependency</string>
2625 2625 <string>72.ImportedFromIB2</string>
2626 2626 <string>73.IBPluginDependency</string>
2627 2627 <string>73.ImportedFromIB2</string>
2628 2628 <string>74.IBPluginDependency</string>
2629 2629 <string>74.ImportedFromIB2</string>
2630 2630 <string>75.IBPluginDependency</string>
2631 2631 <string>75.ImportedFromIB2</string>
2632 2632 <string>77.IBPluginDependency</string>
2633 2633 <string>77.ImportedFromIB2</string>
2634 2634 <string>78.IBPluginDependency</string>
2635 2635 <string>78.ImportedFromIB2</string>
2636 2636 <string>79.IBPluginDependency</string>
2637 2637 <string>79.ImportedFromIB2</string>
2638 2638 <string>80.IBPluginDependency</string>
2639 2639 <string>80.ImportedFromIB2</string>
2640 2640 <string>81.IBPluginDependency</string>
2641 2641 <string>81.ImportedFromIB2</string>
2642 2642 <string>81.editorWindowContentRectSynchronizationRect</string>
2643 2643 <string>82.IBPluginDependency</string>
2644 2644 <string>82.ImportedFromIB2</string>
2645 2645 <string>83.IBPluginDependency</string>
2646 2646 <string>83.ImportedFromIB2</string>
2647 2647 <string>92.IBPluginDependency</string>
2648 2648 <string>92.ImportedFromIB2</string>
2649 2649 </object>
2650 2650 <object class="NSMutableArray" key="dict.values">
2651 2651 <bool key="EncodedWithXMLCoder">YES</bool>
2652 2652 <reference ref="113577022"/>
2653 2653 <reference ref="885801228"/>
2654 2654 <reference ref="885801228"/>
2655 2655 <reference ref="113577022"/>
2656 2656 <reference ref="9"/>
2657 2657 <reference ref="113577022"/>
2658 2658 <reference ref="9"/>
2659 2659 <string>{{596, 852}, {216, 23}}</string>
2660 2660 <reference ref="113577022"/>
2661 2661 <reference ref="9"/>
2662 2662 <reference ref="113577022"/>
2663 2663 <reference ref="9"/>
2664 2664 <reference ref="113577022"/>
2665 2665 <reference ref="9"/>
2666 2666 <reference ref="113577022"/>
2667 2667 <reference ref="9"/>
2668 2668 <string>{{522, 812}, {146, 23}}</string>
2669 2669 <reference ref="113577022"/>
2670 2670 <reference ref="9"/>
2671 2671 <reference ref="113577022"/>
2672 2672 <reference ref="9"/>
2673 2673 <reference ref="113577022"/>
2674 2674 <reference ref="9"/>
2675 2675 <string>{{436, 809}, {64, 6}}</string>
2676 2676 <reference ref="113577022"/>
2677 2677 <reference ref="9"/>
2678 2678 <reference ref="113577022"/>
2679 2679 <reference ref="9"/>
2680 2680 <reference ref="113577022"/>
2681 2681 <reference ref="9"/>
2682 2682 <reference ref="113577022"/>
2683 2683 <reference ref="9"/>
2684 2684 <reference ref="113577022"/>
2685 2685 <reference ref="9"/>
2686 2686 <reference ref="113577022"/>
2687 2687 <reference ref="9"/>
2688 2688 <reference ref="113577022"/>
2689 2689 <reference ref="9"/>
2690 2690 <reference ref="113577022"/>
2691 2691 <reference ref="9"/>
2692 2692 <reference ref="113577022"/>
2693 2693 <reference ref="9"/>
2694 2694 <reference ref="113577022"/>
2695 2695 <reference ref="9"/>
2696 2696 <reference ref="113577022"/>
2697 2697 <reference ref="9"/>
2698 2698 <reference ref="113577022"/>
2699 2699 <reference ref="9"/>
2700 2700 <reference ref="113577022"/>
2701 2701 <reference ref="9"/>
2702 2702 <reference ref="113577022"/>
2703 2703 <reference ref="9"/>
2704 2704 <reference ref="113577022"/>
2705 2705 <reference ref="9"/>
2706 2706 <string>{{608, 612}, {275, 83}}</string>
2707 2707 <reference ref="113577022"/>
2708 2708 <reference ref="9"/>
2709 2709 <reference ref="113577022"/>
2710 2710 <reference ref="9"/>
2711 2711 <reference ref="113577022"/>
2712 2712 <reference ref="9"/>
2713 2713 <reference ref="113577022"/>
2714 2714 <reference ref="9"/>
2715 2715 <reference ref="113577022"/>
2716 2716 <reference ref="9"/>
2717 2717 <string>{{365, 632}, {243, 243}}</string>
2718 2718 <reference ref="113577022"/>
2719 2719 <reference ref="9"/>
2720 2720 <reference ref="113577022"/>
2721 2721 <reference ref="9"/>
2722 2722 <reference ref="113577022"/>
2723 2723 <reference ref="9"/>
2724 2724 <reference ref="113577022"/>
2725 2725 <reference ref="9"/>
2726 2726 <reference ref="113577022"/>
2727 2727 <reference ref="9"/>
2728 2728 <reference ref="113577022"/>
2729 2729 <reference ref="9"/>
2730 2730 <reference ref="113577022"/>
2731 2731 <reference ref="9"/>
2732 2732 <string>{{608, 612}, {167, 43}}</string>
2733 2733 <reference ref="113577022"/>
2734 2734 <reference ref="9"/>
2735 2735 <reference ref="113577022"/>
2736 2736 <reference ref="9"/>
2737 2737 <reference ref="113577022"/>
2738 2738 <reference ref="9"/>
2739 2739 <reference ref="113577022"/>
2740 2740 <reference ref="9"/>
2741 2741 <reference ref="113577022"/>
2742 2742 <reference ref="9"/>
2743 2743 <reference ref="113577022"/>
2744 2744 <reference ref="9"/>
2745 2745 <reference ref="113577022"/>
2746 2746 <reference ref="9"/>
2747 2747 <reference ref="113577022"/>
2748 2748 <reference ref="9"/>
2749 2749 <string>{{608, 612}, {241, 103}}</string>
2750 2750 <reference ref="113577022"/>
2751 2751 <reference ref="9"/>
2752 2752 <reference ref="113577022"/>
2753 2753 <reference ref="9"/>
2754 2754 <reference ref="113577022"/>
2755 2755 <reference ref="9"/>
2756 2756 <reference ref="113577022"/>
2757 2757 <reference ref="9"/>
2758 2758 <reference ref="113577022"/>
2759 2759 <reference ref="9"/>
2760 2760 <string>{{525, 802}, {197, 73}}</string>
2761 2761 <reference ref="113577022"/>
2762 2762 <reference ref="9"/>
2763 2763 <string>{74, 862}</string>
2764 2764 <string>{{11, 736}, {489, 20}}</string>
2765 2765 <reference ref="113577022"/>
2766 2766 <reference ref="113577022"/>
2767 2767 <string>{{475, 832}, {234, 43}}</string>
2768 2768 <reference ref="113577022"/>
2769 2769 <reference ref="113577022"/>
2770 2770 <reference ref="113577022"/>
2771 2771 <reference ref="113577022"/>
2772 2772 <string>{{409, 832}, {176, 43}}</string>
2773 2773 <reference ref="113577022"/>
2774 2774 <reference ref="113577022"/>
2775 2775 <reference ref="113577022"/>
2776 2776 <reference ref="9"/>
2777 2777 <reference ref="113577022"/>
2778 2778 <reference ref="9"/>
2779 2779 <reference ref="113577022"/>
2780 2780 <reference ref="9"/>
2781 2781 <string>{{608, 612}, {215, 63}}</string>
2782 2782 <reference ref="113577022"/>
2783 2783 <reference ref="9"/>
2784 2784 <reference ref="113577022"/>
2785 2785 <reference ref="9"/>
2786 2786 <reference ref="113577022"/>
2787 2787 <reference ref="9"/>
2788 2788 <reference ref="113577022"/>
2789 2789 <integer value="0"/>
2790 <string>{{108, 368}, {725, 337}}</string>
2790 <string>{{27, 368}, {725, 337}}</string>
2791 2791 <reference ref="9"/>
2792 <string>{{108, 368}, {725, 337}}</string>
2792 <string>{{27, 368}, {725, 337}}</string>
2793 2793 <reference ref="113577022"/>
2794 2794 <reference ref="113577022"/>
2795 2795 <reference ref="113577022"/>
2796 2796 <reference ref="113577022"/>
2797 2797 <reference ref="113577022"/>
2798 2798 <reference ref="113577022"/>
2799 2799 <reference ref="113577022"/>
2800 2800 <reference ref="113577022"/>
2801 2801 <reference ref="113577022"/>
2802 2802 <reference ref="113577022"/>
2803 2803 <reference ref="113577022"/>
2804 2804 <reference ref="113577022"/>
2805 2805 <reference ref="113577022"/>
2806 2806 <reference ref="113577022"/>
2807 2807 <object class="NSMutableDictionary">
2808 2808 <bool key="EncodedWithXMLCoder">YES</bool>
2809 2809 <object class="NSArray" key="dict.sortedKeys">
2810 2810 <bool key="EncodedWithXMLCoder">YES</bool>
2811 2811 </object>
2812 2812 <object class="NSMutableArray" key="dict.values">
2813 2813 <bool key="EncodedWithXMLCoder">YES</bool>
2814 2814 </object>
2815 2815 </object>
2816 2816 <reference ref="113577022"/>
2817 2817 <reference ref="113577022"/>
2818 2818 <reference ref="113577022"/>
2819 2819 <reference ref="113577022"/>
2820 2820 <reference ref="9"/>
2821 2821 <reference ref="113577022"/>
2822 2822 <reference ref="9"/>
2823 2823 <reference ref="113577022"/>
2824 2824 <reference ref="9"/>
2825 2825 <string>{{23, 794}, {245, 183}}</string>
2826 2826 <reference ref="113577022"/>
2827 2827 <reference ref="9"/>
2828 2828 <reference ref="113577022"/>
2829 2829 <reference ref="9"/>
2830 2830 <reference ref="113577022"/>
2831 2831 <reference ref="9"/>
2832 2832 <reference ref="113577022"/>
2833 2833 <reference ref="9"/>
2834 2834 <reference ref="113577022"/>
2835 2835 <reference ref="9"/>
2836 2836 <reference ref="113577022"/>
2837 2837 <reference ref="9"/>
2838 2838 <reference ref="113577022"/>
2839 2839 <reference ref="9"/>
2840 2840 <reference ref="113577022"/>
2841 2841 <reference ref="9"/>
2842 2842 <reference ref="113577022"/>
2843 2843 <reference ref="9"/>
2844 2844 <reference ref="113577022"/>
2845 2845 <reference ref="9"/>
2846 2846 <string>{{323, 672}, {199, 203}}</string>
2847 2847 <reference ref="113577022"/>
2848 2848 <reference ref="9"/>
2849 2849 <reference ref="113577022"/>
2850 2850 <reference ref="9"/>
2851 2851 <reference ref="113577022"/>
2852 2852 <reference ref="9"/>
2853 2853 </object>
2854 2854 </object>
2855 2855 <object class="NSMutableDictionary" key="unlocalizedProperties">
2856 2856 <bool key="EncodedWithXMLCoder">YES</bool>
2857 2857 <object class="NSArray" key="dict.sortedKeys">
2858 2858 <bool key="EncodedWithXMLCoder">YES</bool>
2859 2859 </object>
2860 2860 <object class="NSMutableArray" key="dict.values">
2861 2861 <bool key="EncodedWithXMLCoder">YES</bool>
2862 2862 </object>
2863 2863 </object>
2864 2864 <nil key="activeLocalization"/>
2865 2865 <object class="NSMutableDictionary" key="localizations">
2866 2866 <bool key="EncodedWithXMLCoder">YES</bool>
2867 2867 <object class="NSArray" key="dict.sortedKeys">
2868 2868 <bool key="EncodedWithXMLCoder">YES</bool>
2869 2869 </object>
2870 2870 <object class="NSMutableArray" key="dict.values">
2871 2871 <bool key="EncodedWithXMLCoder">YES</bool>
2872 2872 </object>
2873 2873 </object>
2874 2874 <nil key="sourceID"/>
2875 2875 <int key="maxID">445</int>
2876 2876 </object>
2877 2877 <object class="IBClassDescriber" key="IBDocument.Classes">
2878 2878 <object class="NSMutableArray" key="referencedPartialClassDescriptions">
2879 2879 <bool key="EncodedWithXMLCoder">YES</bool>
2880 2880 <object class="IBPartialClassDescription">
2881 <string key="className">IPython1SandboxAppDelegate</string>
2882 <string key="superclassName">NSObject</string>
2881 <reference key="className" ref="695797635"/>
2882 <nil key="superclassName"/>
2883 2883 <object class="NSMutableDictionary" key="actions">
2884 2884 <bool key="EncodedWithXMLCoder">YES</bool>
2885 2885 <object class="NSArray" key="dict.sortedKeys">
2886 2886 <bool key="EncodedWithXMLCoder">YES</bool>
2887 2887 </object>
2888 2888 <object class="NSMutableArray" key="dict.values">
2889 2889 <bool key="EncodedWithXMLCoder">YES</bool>
2890 2890 </object>
2891 2891 </object>
2892 2892 <object class="NSMutableDictionary" key="outlets">
2893 <string key="NS.key.0">ipythonController</string>
2894 <string key="NS.object.0">id</string>
2893 <reference key="NS.key.0" ref="684042788"/>
2894 <string key="NS.object.0">NSTextView</string>
2895 2895 </object>
2896 2896 <object class="IBClassDescriptionSource" key="sourceIdentifier">
2897 <string key="majorKey">IBProjectSource</string>
2898 <string key="minorKey">IPython1SandboxAppDelegate.py</string>
2897 <string key="majorKey">IBUserSource</string>
2898 <reference key="minorKey" ref="255189770"/>
2899 2899 </object>
2900 2900 </object>
2901 2901 <object class="IBPartialClassDescription">
2902 <reference key="className" ref="695797635"/>
2903 <nil key="superclassName"/>
2902 <string key="className">IPython1SandboxAppDelegate</string>
2903 <string key="superclassName">NSObject</string>
2904 2904 <object class="NSMutableDictionary" key="actions">
2905 2905 <bool key="EncodedWithXMLCoder">YES</bool>
2906 2906 <object class="NSArray" key="dict.sortedKeys">
2907 2907 <bool key="EncodedWithXMLCoder">YES</bool>
2908 2908 </object>
2909 2909 <object class="NSMutableArray" key="dict.values">
2910 2910 <bool key="EncodedWithXMLCoder">YES</bool>
2911 2911 </object>
2912 2912 </object>
2913 2913 <object class="NSMutableDictionary" key="outlets">
2914 <reference key="NS.key.0" ref="684042788"/>
2915 <string key="NS.object.0">NSTextView</string>
2914 <string key="NS.key.0">ipythonController</string>
2915 <string key="NS.object.0">id</string>
2916 2916 </object>
2917 2917 <object class="IBClassDescriptionSource" key="sourceIdentifier">
2918 <string key="majorKey">IBUserSource</string>
2919 <reference key="minorKey" ref="255189770"/>
2918 <string key="majorKey">IBProjectSource</string>
2919 <string key="minorKey">IPython1SandboxAppDelegate.py</string>
2920 2920 </object>
2921 2921 </object>
2922 2922 </object>
2923 2923 </object>
2924 2924 <int key="IBDocument.localizationMode">0</int>
2925 2925 <string key="IBDocument.LastKnownRelativeProjectPath">../../IPython1Sandbox.xcodeproj</string>
2926 2926 <int key="IBDocument.defaultPropertyAccessControl">3</int>
2927 2927 <object class="NSMutableData" key="IBDocument.RunnableNib">
2928 2928 <bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
2929 2929 AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEC/gALAAwAMQA1ADYAPAA9
2930 2930 AEIAWABZAFoAWwALAGgAbQB7AIAAlQCZAKAApAC0ALoAzQDRAOYA+gD7APwA/QD+AP8BAAEBAQIBAwEE
2931 2931 AQUBBgEHAQgBCQEKAQsBDwEQARkBIQEmASoBLQExATUBOQE7AT0BTQFSAVUBWgFBAVQBYwFqAWsBbAFv
2932 2932 AXQBdQF4AYAAkAGBAYQBhwGIAYkBjgGPAZABkwGYAZkBmwGeAasBrAGtAbEBvAG9Ab4BwQHCAcQBxQHG
2933 2933 AdIB0wHbAdwB3wHkAeUB6AHtAfAB/AIAAgcCCwIdAiUCLwIzAlECUgJaAmQCZQJoAm4CbwJyAncCiAKP
2934 2934 ApACkwKYApkCnAKmAqcCrAKxArICtwK4ArsCwwLJAsoC0QLWAtcC2gLcAt0C5gLnAvAC8QL1AvYC9wL4
2935 AvkC/wMAAwIDAwMEAwcDFgMYAxsDHAMfAAsDIAMhAyIDJQNXA10DbgNzA3QDdQN6A3sDfAN/A4MDhAOH
2936 A4gDjAOQA5cDmwOcA50DngOiA6kDqgOrA6wDsAO3A7sDvAO9A74DwgPJA80DzgPPA9AD1APcA90D3gPf
2937 A+MD6wPwA/ED8gPzA/cD/gQCBAMEBAQFBAkEEAQRBBIEEwQXBB4EHwQgBCQEKwQvASkEMAQxBDcEOgQ7
2938 BDwEPwRDBEoESwRMBFAEVwRcBF0EXgRfBGMEagRrBGwEcAR3BHgEeQR9BIQEhQSGBIcEjASTBJQElQSZ
2939 BKAEpASlBKYEpwSrBLIEswS0BLUEuQTABMEEwgTGBM0EzgTPBNME2gTbBNwE3QThBOgE6QTqBOsE7wT2
2940 BPcE+AT5BP0FBAUFBQYFBwUMBQ8FEAURBRUFHAUdBR4FIgUpBSoFKwUsBTAFNwU7BTwFPQU+BUMFRgVK
2941 BVEFUgVTBVcFXgViBWMFZAVlBWkFcAV1BXYFdwV7BYIFgwWEBYgFjwWQBZEFkgWXBZgFnQWeBaIFqwWs
2942 Ba0FrgWyBbkFugW7BbwFwAXHBcgFyQXNBdQF1QXWBeAF9gX8Bf0F/gX/BgMGCwYMBg8GEQYXBhgGGQYc
2943 BiMGJAYlBiYGLQYuBi8GNgY3BjgGOQZABkEGQgZDBq0Gtwa4BrkGvgbABskGuAbKBs4GzwbYBrgG2Qbf
2944 BuQG5QbvBvgGuAb5BwcHEgcZBxoHGwckBy0GuAcuBzMHNgc3B0AHSQdKB1MGuAdUB2IHaQdqB2sHcgdz
2945 B3QHfQeGB48GuAeQB6AHqQeyB7sGuAe8B8QHywfMB9MH1AfcB90H3gfnBrgH6AfvB/gGuAf5B/4IBQgG
2946 CA8GuAgQCBUIHga4CB8IJggvCDAIOQa4CDoIPgg/CKkJFAl/CYAJgQmCCYMJhAmFCYYJhwmICYkJigmL
2935 AvkC/wMAAwIDAwMEAwcDFgMYAxsDHAMfAAsDIAMhAyIDJQNXA10DbQNzASkDdAN5A3oDewN+A4IDgwOG
2936 A4cDiwOPA5YDmgObA5wDnQOhA6gDrAOtA64DrwOzA7wDwAPBA8IDwwPHA84D0gPTA9QD1QPZA+AD5APl
2937 A+YD6gPxA/UD9gP3A/gD/AQDBAQEBQQJBBAEEQQSBBMEFwQeBB8EIAQkBCsELwQwBDEENQQ9BD4EPwRA
2938 BEQESwRMBE0ETgRUBFcEWgRbBFwEXwRjBGoEawRsBG0EcgR1BHYEdwR7BIIEgwSEBIUEiQSQBJUElgSX
2939 BJgEnASjBKQEpQSmBKoEsQSyBLMEtAS4BL8EwwTEBMUExgTKBNEE0gTTBNQE2ATfBOAE4QTiBOYE7QTx
2940 BPIE8wT0BPgE/wUABQEFBgUNBQ4FDwUTBRwFHQUeBR8FJAUoBS8FMAUxBTIFNwU4BTwFQwVEBUUFRgVK
2941 BVEFVgVXBVgFXAVjBWQFZQVpBXAFcQVyBXcFeAV8BYMFhAWFBYkFkAWRBZIFlgWdBZ4FnwWjBaoFqwWs
2942 BbAFtwW4BbkFugW+BcUFxgXHBcgFzAXTBdQF1QXWBeAF9gX8Bf0F/gX/BgMGCwYMBg8GEQYXBhgGGQYa
2943 Bh0GJAYlBiYGJwYuBi8GMAY3BjgGOQZABkEGQgZDBq0GuAbCBscGyAbJBs4G1QbWBtgG2QbdBt4GyAbn
2944 BvAGyAbxBvgHAQbIBwIHEgcbByQHLQbIBy4HNgc9Bz4HRQdGB04HTwdQB1kGyAdaB2AHaQbIB2oHbwdw
2945 B3oHgwbIB4QHkgebB6IHowekB60HtgbIB7cHvAe/B8AHyQfKB9MGyAfUB+IH6QfqB+sH8gfzB/QH/QgG
2946 CA8GyAgQCBUIHgbICB8IJggvCDAIOQbICDoIPgg/CKkJFAl/CYAJgQmCCYMJhAmFCYYJhwmICYkJigmL
2947 2947 CYwJjQmOCY8JkAmRCZIJkwmUCZUJlgmXCZgJmQmaCZsJnAmdCZ4JnwmgCaEJogmjCaQJpQmmCacJqAmp
2948 2948 CaoJqwmsCa0JrgmvCbAJsQmyCbMJtAm1CbYJtwm4CbkJugm7CbwJvQm+Cb8JwAnBCcIJwwnECcUJxgnH
2949 2949 CcgJyQnKCcsJzAnNCc4JzwnQCdEJ0gnTCdQJ1QnWCdcJ2AnZCdoJ2wncCd0J3gnfCeAJ4QniCeMJ5Anl
2950 2950 CeYJ6QnsCoYLIAshCyILIwskCyULJgsnCygLKQsqCysLLAstCy4LLwswCzELMgszCzQLNQs2CzcLOAs5
2951 2951 CzoLOws8Cz0LPgs/C0ALQQtCC0MLRAtFC0YLRwtIC0kLSgtLC0wLTQtOC08LUAtRC1ILUwtUC1ULVgtX
2952 2952 C1gLWQtaC1sLXAtdC14LXwtgC2ELYgtjC2QLZQtmC2cLaAtpC2oLawtsC20LbgtvC3ALcQtyC3MLdAt1
2953 2953 C3YLdwt4C3kLegt7C3wLfQt+C38LgAuBC4ILgwuEC4ULhguHC4gLiQuKC4sLjAuNC44LjwuQC5ELkguT
2954 2954 C5QLlQuWC5cLmAuZC5oLmwucC50LngufC6ALoQuiC6MLpAulC6YLpwuoC6kLqgurC6wLrQuuC68LsAux
2955 2955 C7ILswu0C7ULtgu3C7oLvQvAVSRudWxs3xASAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwA
2956 2956 HQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwVk5TUm9vdFYkY2xhc3NdTlNPYmpl
2957 2957 Y3RzS2V5c18QD05TQ2xhc3Nlc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eU9pZHNWYWx1ZXNdTlNDb25u
2958 2958 ZWN0aW9uc1tOU05hbWVzS2V5c1tOU0ZyYW1ld29ya11OU0NsYXNzZXNLZXlzWk5TT2lkc0tleXNdTlNO
2959 2959 YW1lc1ZhbHVlc18QGU5TQWNjZXNzaWJpbGl0eUNvbm5lY3RvcnNdTlNGb250TWFuYWdlcl8QEE5TVmlz
2960 2960 aWJsZVdpbmRvd3NfEA9OU09iamVjdHNWYWx1ZXNfEBdOU0FjY2Vzc2liaWxpdHlPaWRzS2V5c1lOU05l
2961 2961 eHRPaWRcTlNPaWRzVmFsdWVzgAKBAv2BAZuBAmCBAvyArYEB9oAFgQJfgQJhgQH3gQL6gACABoEB9YEC
2962 2962 +xEBv4ECYtIADgAyADMANFtOU0NsYXNzTmFtZYAEgANdTlNBcHBsaWNhdGlvbtIANwA4ADkAOlgkY2xh
2963 2963 c3Nlc1okY2xhc3NuYW1logA6ADteTlNDdXN0b21PYmplY3RYTlNPYmplY3RfEBBJQkNvY29hRnJhbWV3
2964 2964 b3Jr0gAOAD4APwBAWk5TLm9iamVjdHOAK6EAQYAH2wBDAA4ARABFAEYARwBIAEkASgBLAEwATQBOAE8A
2965 2965 UABRAFIAUwBUAFUAVgArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RfEBNOU0ZyYW1lQXV0b3NhdmVO
2966 2966 YW1lXU5TV2luZG93VGl0bGVZTlNXVEZsYWdzXU5TV2luZG93Q2xhc3NcTlNXaW5kb3dSZWN0XxAPTlNX
2967 2967 aW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tbTlNWaWV3Q2xhc3OAC4CsgKqAq4AJEnQAAACA
2968 2968 CoAIEAIQD4AAXxAYe3szMzUsIDQxM30sIHs3MjUsIDMzN319XxAQSVB5dGhvbjEgKENvY29hKVhOU1dp
2969 2969 bmRvd9cAXAAOAF0AXgBfAFoAYABhAGIAYwBkAGUAYQBnXxAPTlNOZXh0UmVzcG9uZGVyWk5TU3Vidmll
2970 2970 d3NYTlN2RmxhZ3NbTlNGcmFtZVNpemVbTlNTdXBlcnZpZXeADIBdgA0RAQCAqIAMgKnSAA4APgBpAGqA
2971 2971 NKIAawBsgA6Ao9oAXAAOAG4AXQBeAG8AcABaAGAAcQBNAHMAdAB1AHYAdwBVAGEATQB6V05TRnJhbWVe
2972 2972 TlNBdXRvc2F2ZU5hbWVeTlNEaXZpZGVyU3R5bGVcTlNJc1ZlcnRpY2FsgAuAooCggA8RARKAoYAMgAsJ
2973 2973 0gAOAD4AaQB9gDSiAH4Af4AQgGreAFwAgQAOAIIAgwBdAF4AXwCEAFoAhQCGAGAAhwBrAIkAigCLAIwA
2974 2974 jQCOAI8AkABhAJIAVQBrAJRZTlNCb3hUeXBlW05TVGl0bGVDZWxsXU5TVHJhbnNwYXJlbnRcTlNCb3Jk
2975 2975 ZXJUeXBlWU5TT2Zmc2V0c18QD05TVGl0bGVQb3NpdGlvbl1OU0NvbnRlbnRWaWV3gA4QAIBpgGAIgBEQ
2976 2976 FoBeEAGADIBfgA6AEtIADgA+AGkAl4A0oQCUgBLXAFwADgBuAF0AXgBaAGAAfgBiAJwAnQBkAGEAfoAQ
2977 2977 gF2AXIATgAyAENIADgA+AGkAooA0oQCjgBTcAFwApQAOAG4ApgBdAF4AWgBgAKcAqACHAJQAqgCrAKwA
2978 2978 rQCuAHYAYQCUALEAsgCyW05TSFNjcm9sbGVyWE5Tc0ZsYWdzW05TVlNjcm9sbGVyXU5TTmV4dEtleVZp
2979 2979 ZXeAEoBYgFuAWhECEoAVgAyAEoBUgBaAFtIADgA+AGkAtoA0owCyALEAqoAWgFSAWN0AXAAOAG4AuwC8
2980 2980 AL0AXQBeAL4AWgC/AGAAqACjAMEAwgDDAMQAxQDGAMcAyABhAMoAowDIWE5TQm91bmRzWE5TQ3Vyc29y
2981 2981 WU5TY3ZGbGFnc1lOU0RvY1ZpZXdZTlNCR0NvbG9ygBSAU4BNgE6AUBAEgBcRCQCAGIAMgE+AFIAY0gAO
2982 2982 AD4AaQDPgDShAMiAGN0AXAAOAG4A0gDTANQA1QBeANYAWgDXAGAA2ACyANoA2wDcAN0A3gDfAOAA4QBh
2983 2983 AOMAsgArXxAPTlNUZXh0Q29udGFpbmVyWU5TVFZGbGFnc1xOU1NoYXJlZERhdGFbTlNEcmFnVHlwZXNZ
2984 2984 TlNNYXhTaXplWE5TTWluaXplWk5TRGVsZWdhdGWAFoBMgCyALRAGgDeAGREJEoBKgAyAS4AWgADSAA4A
2985 2985 PgA/AOiAK68QEQDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APmAGoAbgByAHYAegB+AIIAh
2986 2986 gCKAI4AkgCWAJoAngCiAKYAqXxAZTmVYVCBSVEZEIHBhc3RlYm9hcmQgdHlwZV8QEk5TU3RyaW5nUGJv
2987 2987 YXJkVHlwZV8QGk5lWFQgcnVsZXIgcGFzdGVib2FyZCB0eXBlXxAeTmVYVCBUSUZGIHY0LjAgcGFzdGVi
2988 2988 b2FyZCB0eXBlXxAZQXBwbGUgVVJMIHBhc3RlYm9hcmQgdHlwZV8QI0NvcmVQYXN0ZWJvYXJkRmxhdm9y
2989 2989 VHlwZSAweDZENkY2Rjc2XxAjQ29yZVBhc3RlYm9hcmRGbGF2b3JUeXBlIDB4NzU3MjZDMjBfEBtXZWJV
2990 2990 UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVfEBlBcHBsZSBQREYgcGFzdGVib2FyZCB0eXBlXxAZQXBwbGUg
2991 2991 UE5HIHBhc3RlYm9hcmQgdHlwZV8QGkFwcGxlIEhUTUwgcGFzdGVib2FyZCB0eXBlXxAVTlNGaWxlbmFt
2992 2992 ZXNQYm9hcmRUeXBlXxAXTlNDb2xvciBwYXN0ZWJvYXJkIHR5cGVfEDFOZVhUIEVuY2Fwc3VsYXRlZCBQ
2993 2993 b3N0U2NyaXB0IHYxLjIgcGFzdGVib2FyZCB0eXBlXxAaQXBwbGUgUElDVCBwYXN0ZWJvYXJkIHR5cGVf
2994 2994 EBlOZVhUIGZvbnQgcGFzdGVib2FyZCB0eXBlXxAqTmVYVCBSaWNoIFRleHQgRm9ybWF0IHYxLjAgcGFz
2995 2995 dGVib2FyZCB0eXBl0gA3ADgBDAENowENAQ4AO1xOU011dGFibGVTZXRVTlNTZXRfEBR7ezAsIDM4fSwg
2996 2996 ezQzMywgMTR9fdUBEQAOARIBEwEUAJABFQDIARcBGFlOU1RDRmxhZ3NaTlNUZXh0Vmlld1dOU1dpZHRo
2997 2997 XxAPTlNMYXlvdXRNYW5hZ2VygDaAGCNAexAAAAAAAIAu1QAOARoBGwEcANgBHQEeAR8A3QArXxAQTlNU
2998 2998 ZXh0Q29udGFpbmVyc11OU1RleHRTdG9yYWdlWU5TTE1GbGFnc4A1gDOAL4AA0wAOASIA2AEjASQAK1hO
2999 2999 U1N0cmluZ4AygDCAANIADgEnASgBKVlOUy5zdHJpbmeAMVDSADcAOAErASyjASwBIgA7XxAPTlNNdXRh
3000 3000 YmxlU3RyaW5n0gA3ADgBLgEbpAEbAS8BMAA7XxAZTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZ18QEk5T
3001 3001 QXR0cmlidXRlZFN0cmluZ9IADgA+AGkBM4A0oQDcgC3SADcAOAE2ATejATcBOAA7Xk5TTXV0YWJsZUFy
3002 3002 cmF5V05TQXJyYXnSADcAOAE6ARSiARQAO9IANwA4ATwA0qIA0gA72AAOAT4BPwFAAUEBQgFDAUQBRQFG
3003 3003 ACsBSAFJAUoAKwFMV05TRmxhZ3NfEBdOU0RlZmF1bHRQYXJhZ3JhcGhTdHlsZV8QEE5TSW5zZXJ0aW9u
3004 3004 Q29sb3JfEBFOU0JhY2tncm91bmRDb2xvcl8QFE5TU2VsZWN0ZWRBdHRyaWJ1dGVzXxASTlNNYXJrZWRB
3005 3005 dHRyaWJ1dGVzXxAQTlNMaW5rQXR0cmlidXRlc4BJEgAFS2+AAIA6gDiAO4AAgEXTAA4BTgFPAVAAVQFR
3006 3006 XE5TQ29sb3JTcGFjZVVOU1JHQoA5TxAYMSAwLjk1Mjk0MTI0IDAuODUwOTgwNDYA0gA3ADgBUwFUogFU
3007 3007 ADtXTlNDb2xvctMADgFOAVYBUAFYAVlXTlNXaGl0ZYA5EANCMADTAA4BWwA+AVwBXQFgV05TLmtleXOA
3008 3008 RKIBXgFfgDyAPaIBYQFigD6AQtUADgFUAU4BZAFlAVABZwDdAWgBaVtOU0NvbG9yTmFtZV1OU0NhdGFs
3009 3009 b2dOYW1lgDmAQYBAgD9WU3lzdGVtXxAbc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9y0wAOAU4BVgFQ
3010 3010 AVgBboA5SzAuNjY2NjY2NjkA1QAOAVQBTgFkAWUBUAFIAN0BcgFpgDmAOoBDgD9fEBFzZWxlY3RlZFRl
3011 3011 eHRDb2xvctIANwA4AXYBd6IBdwA7XE5TRGljdGlvbmFyedMADgFbAD4BXAF6AX2ARKIBewFfgEaAPaIB
3012 3012 fgF/gEeASFtOU1VuZGVybGluZdMADgFOAU8BUACQAYOAOUYwIDAgMQDSADcAOAGFAYaiAYYAO18QFE5T
3013 3013 VGV4dFZpZXdTaGFyZWREYXRhXHs0ODAsIDFlKzA3fVd7ODQsIDB90gA3ADgBigESpQESAYsBjAGNADtW
3014 3014 TlNUZXh0Vk5TVmlld1tOU1Jlc3BvbmRlcl8QFHt7MSwgMX0sIHs0MzMsIDIzMX19XxAVe3swLCAzOH0s
3015 3015 IHs0MzMsIDIzMX190wAOAU4BVgFQAVgBkoA5QjEA0wAOAZQBlQGWAZcAkFlOU0hvdFNwb3RcTlNDdXJz
3016 3016 b3JUeXBlgFKAUVd7NCwgLTV90gA3ADgBmgC8ogC8ADvSADcAOAGcAZ2kAZ0BjAGNADtaTlNDbGlwVmll
3017 3017 d9kAXAGfAA4AbgBeAFoBoABgAaEAowCjAaQBpQGmAGEBqACjAapYTlNUYXJnZXRYTlNBY3Rpb25ZTlNQ
3018 3018 ZXJjZW50gBSAFIBXgFUT/////4AAAQCADIBWgBQjP9Ww0wAAAABfEBV7ezQyNywgMX0sIHsxNSwgMjYz
3019 3019 fX1cX2RvU2Nyb2xsZXI60gA3ADgBrgGvpQGvAbABjAGNADtaTlNTY3JvbGxlcllOU0NvbnRyb2zbAFwB
3020 3020 nwAOAG4ApgBeAFoBoABgAbIBoQCjAKMBpAG2AJAAZABhAagAowG6AbtaTlNDdXJWYWx1ZYAUgBSAV4BZ
3021 3021 gAyAVoAUIz/wAAAAAAAAIz/uQshgAAAAXxAYe3stMTAwLCAtMTAwfSwgezg3LCAxOH19XxAWe3sxOCwg
3022 3022 MTR9LCB7NDM1LCAyMzN9fdIANwA4Ab8BwKQBwAGMAY0AO1xOU1Njcm9sbFZpZXdfEBR7ezEsIDF9LCB7
3023 3023 NDcxLCAyNTd9fdIANwA4AcMBjKMBjAGNADtaezQ3MywgMjczfVZ7MCwgMH3XAccADgFBAcgByQHKAcsB
3024 3024 zAHNAc4BzwHQAIkB0VtOU0NlbGxGbGFnc1pOU0NvbnRlbnRzWU5TU3VwcG9ydFxOU0NlbGxGbGFnczJb
3025 3025 TlNUZXh0Q29sb3ISBAH+AIBogGWAYYBigGdXQ29uc29sZdQADgHUAdUB1gHXAdgB2QHaVk5TU2l6ZVZO
3026 3026 U05hbWVYTlNmRmxhZ3OAZCNAJgAAAAAAAIBjEQwcXEx1Y2lkYUdyYW5kZdIANwA4Ad0B3qIB3gA7Vk5T
3027 3027 Rm9udNUADgFUAU4BZAFlAVAAygDdAeIBaYA5gE+AZoA/XxATdGV4dEJhY2tncm91bmRDb2xvctMADgFO
3028 3028 AVYBUAFYAeeAOU0wIDAuODAwMDAwMDEA0gA3ADgB6QHqpAHqAesB7AA7XxAPTlNUZXh0RmllbGRDZWxs
3029 3029 XE5TQWN0aW9uQ2VsbFZOU0NlbGzSADcAOAHuAe+kAe8BjAGNADtVTlNCb3jeAFwAgQAOAIIAbgCDAF0A
3030 3030 XgCEAFoAhQCGAGAAhwBrAIkAigHzAfQAjAH2AfcAkABhAJIAVQBrAfuADoBpgJ2AnAiAaxAzgAyAX4AO
3031 3031 gGzSAA4APgBpAf6ANKEB+4Bs1wBcAA4AbgBdAF4AWgBgAH8AYgIDAgQAZABhAH+AaoBdgJuAbYAMgGrS
3032 3032 AA4APgBpAgmANKECCoBu3xAPAFwApQAOAG4ApgIMAg0AXQIOAF4AWgBgAKcAqACHAfsCEACrAhICEwIU
3033 3033 AhUCFgIXAHYAYQH7AhoCGwIbXE5TQ29ybmVyVmlld18QEE5TSGVhZGVyQ2xpcFZpZXdcTlNTY3JvbGxB
3034 3034 bXRzgGyAloBbgJoQMoB4gHWAb08QEEEgAABBIAAAQZgAAEGYAACADIBsgJSAcIBw0gAOAD4AaQIfgDSl
3035 3035 AhsCGgIQAhUCFIBwgJSAloB1gHjbAFwADgBuAL0AXQBeAL4AWgC/AGAAqAIKAMECKADFAikAxwIqAGEC
3036 3036 LAIKAiqAboBTgJOAcYBygAyAhoBugHLSAA4APgBpAjGANKECKoBy3xAVAFwCNAAOAjUCNgFBAjcCDAI4
3037 3037 AjkCOgBeAF8COwBaAjwCPQBgAj4CPwJAAhsAiQJCAkMCRADKAHoCFAJIAMUCSQBkAkoAegBhAk0AkAIb
3038 3038 Ak8AVgJQXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2NhbFlOU1R2RmxhZ3NcTlNIZWFkZXJW
3039 3039 aWV3XxASTlNBbGxvd3NUeXBlU2VsZWN0XxAXTlNJbnRlcmNlbGxTcGFjaW5nV2lkdGhfEBlOU0NvbHVt
3040 3040 bkF1dG9yZXNpemluZ1N0eWxlXxAYTlNJbnRlcmNlbGxTcGFjaW5nSGVpZ2h0WU5TRW5hYmxlZFtOU0dy
3041 3041 aWRDb2xvcl8QD05TR3JpZFN0eWxlTWFza15OU1RhYmxlQ29sdW1uc18QHE5TRHJhZ2dpbmdTb3VyY2VN
3042 3042 YXNrRm9yTG9jYWxbTlNSb3dIZWlnaHSAcICSE//////WwAAAgHSATwmAeCNACAAAAAAAACNAAAAAAAAA
3043 3043 AIBzCYAMgI+AcIB7I0AxAAAAAAAAWnsxNTYsIDIwMH3XAFwADgBeAF8AWgBgAlMCFQJVAGQCVgBhAhUC
3044 3044 KltOU1RhYmxlVmlld4B1gHeAdoAMgHWActsAXAAOAG4AvQBdAF4AvgBaAL8AYACoAgoAwQJdAMUCXgDH
3045 3045 AkQAYQIsAgoCRIBugFOAmYCYgHSADICGgG6AdFl7MTU2LCAxN33SADcAOAJmAmekAmcBjAGNADtfEBFO
3046 3046 U1RhYmxlSGVhZGVyVmlld9YAXAAOAG4AXgBaAGACCgJqAmsAZABhAgqAboB6gHmADIBuXxAUe3sxNTcs
3047 3047 IDB9LCB7MTYsIDE3fX3SADcAOAJwAnGkAnEBjAGNADtdX05TQ29ybmVyVmlld9IADgA+AGkCdIA0ogJ1
3048 3048 AnaAfICL2gJ4AA4CeQETAnoCewJ8An0CfgJTAHoCgAKBAoICgwFYAoQChQB6AipeTlNJc1Jlc2l6ZWFi
3049 3049 bGVcTlNIZWFkZXJDZWxsWk5TRGF0YUNlbGxeTlNSZXNpemluZ01hc2taTlNNaW5XaWR0aFpOU01heFdp
3050 3050 ZHRoXE5TSXNFZGl0YWJsZQmAioB9I0BRwAAAAAAAgIMjQEQAAAAAAAAjQI9AAAAAAAAJgHLXAccADgFB
3051 3051 AcgByQHKAcsCiQKKAosCjAHQAIkCjhIEgf4AgIKAf4B+gGKAgFhWYXJpYWJsZdMADgFOAVYBUAFYApKA
3052 3052 OUswLjMzMzMzMjk5ANUADgFUAU4BZAFlAVABSADdApYBaYA5gDqAgYA/XxAPaGVhZGVyVGV4dENvbG9y
3053 3053 0gA3ADgCmgKbpQKbAeoB6wHsADtfEBFOU1RhYmxlSGVhZGVyQ2VsbNgBxwAOAUEByAHJAp0BygHLAp4B
3054 3054 zQIsAqECogIqAqQCpV1OU0NvbnRyb2xWaWV3EhQh/kCAaICGgISAhYByEQgAgIhZVGV4dCBDZWxs1AAO
3055 3055 AdQB1QHWAdcCqQHZAquAZCNAKgAAAAAAAIBjEQQU1QAOAVQBTgFkAWUBUAFnAN0CrwFpgDmAQYCHgD9f
3056 3056 EBZjb250cm9sQmFja2dyb3VuZENvbG9y1QAOAVQBTgFkAWUBUAFIAN0CtQFpgDmAOoCJgD9fEBBjb250
3057 3057 cm9sVGV4dENvbG9y0gA3ADgCuQK6ogK6ADtdTlNUYWJsZUNvbHVtbtoCeAAOAnkBEwJ6AnsCfAJ9An4C
3058 3058 UwB6AoACvgK/AsABWAKEAoUAegIqCYCKgIwjQFPAAAAAAACAjgmActcBxwAOAUEByAHJAcoBywKJAooC
3059 3059 iwLGAdAAiQKOgIKAf4CNgGKAgFVWYWx1ZdgBxwAOAUEByAHJAp0BygHLAp4BzQIsAqECogIqAqQCpYBo
3060 3060 gIaAhICFgHKAiNUADgFUAU4BZAFlAVAC0wDdAtQBaYA5gJGAkIA/WWdyaWRDb2xvctMADgFOAVYBUAFY
3061 3061 AtmAOUQwLjUA0gA3ADgC2wJTpQJTAbABjAGNADtfEBV7ezEsIDE3fSwgezE1NiwgMjAwfX3ZAFwBnwAO
3062 3062 AG4AXgBaAaAAYAGhAgoCCgGkAuEAZABhAagCCgLlgG6AboBXgJWADIBWgG4jP+/gP4AAAABfEBZ7ezE1
3063 3063 NywgMTd9LCB7MTUsIDIwMH192gBcAZ8ADgBuAKYAXgBaAaAAYAGhAgoCCgGkAusAkABkAGEBqAIKAu+A
3064 3064 boBugFeAl4AMgFaAbiM/5vlvoAAAAF8QFXt7MSwgMjE3fSwgezE1NiwgMTV9fdIADgA+AGkC84A0oQJE
3065 3065 gHRfEBN7ezEsIDB9LCB7MTU2LCAxN319XxAWe3sxOCwgMTR9LCB7MTczLCAyMzN9fV8QFHt7MSwgMX0s
3066 3066 IHsyMDksIDI1N319XxAWe3s0NzQsIDB9LCB7MjExLCAyNzN9fdcBxwAOAUEByAHJAcoBywHMAc0BzgL8
3067 3067 AdAAiQL+gGiAZYCegGKAn1lXb3Jrc3BhY2XTAA4BTgFWAVABWAHngDlfEBZ7ezIwLCA0NH0sIHs2ODUs
3068 3068 IDI3M319XxAgaXB5dGhvbjFfY29uc29sZV93b3Jrc3BhY2Vfc3BsaXTSADcAOAMFAwakAwYBjAGNADtb
3069 3069 TlNTcGxpdFZpZXfaAFwADgBuAwgDCQBeAFoDCgBgAwsATQMNAw4DDwMQAxEAYQMTAE0DFVpOU01heFZh
3070 3070 bHVlWk5TTWluVmFsdWVZTlNwaUZsYWdzXE5TRHJhd01hdHJpeIALgKeApiNAWQAAAAAAACNAMAAAAAAA
3071 3071 ABEFIYAMEXEKgAuApNEADgMXgKXSADcAOAMZAxqiAxoAO1pOU1BTTWF0cml4XxAVe3s2ODksIDIwfSwg
3072 3072 ezE2LCAxNn190gA3ADgDHQMepAMeAYwBjQA7XxATTlNQcm9ncmVzc0luZGljYXRvclp7NzI1LCAzMzd9
3073 3073 XxAVe3swLCAwfSwgezEyODAsIDc3OH19XxAQaXB5dGhvbjFfc2FuZGJveNIANwA4AyMDJKIDJAA7XxAQ
3074 3074 TlNXaW5kb3dUZW1wbGF0ZdIADgA+AGkDJ4A0rxAvAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2
3075 3075 AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNU
3076 A1UDVoCugLyAwoDHgM2A04DYgN6A5IDpgO2A84D4gPyBAQKBAQaBAQqBAQ+BAROBARmBAR6BASKBASaB
3077 ASuBATCBATWBATqBAT6BAUKBAUeBAU2BAU+BAVOBAVmBAV6BAWKBAWeBAWmBAWuBAXCBAXWBAXmBAX2B
3078 AYyBAZCBAZOBAZfTAA4DWANZA1oDWwNcWE5TU291cmNlV05TTGFiZWyAu4CvgLrZAA4DXgNfA2ADYQNi
3079 A2MDZANlA2YDZwNoA2kDagNrA2wDbQBVV05TVGl0bGVfEBFOU0tleUVxdWl2TW9kTWFza1pOU0tleUVx
3080 dWl2XU5TTW5lbW9uaWNMb2NZTlNPbkltYWdlXE5TTWl4ZWRJbWFnZVZOU01lbnVVTlNUYWeAuYCxEgAQ
3081 AACAshJ/////gLOAt4Cw0wAOA14DbwNwA3EDcltOU01lbnVJdGVtc4EBoIEBp4EBqVxTbWFydCBRdW90
3082 ZXNRZ9MADgAyA3YDdwN4A3leTlNSZXNvdXJjZU5hbWWAtoC0gLVXTlNJbWFnZV8QD05TTWVudUNoZWNr
3083 bWFya9IANwA4A30DfqIDfgA7XxAQTlNDdXN0b21SZXNvdXJjZdMADgAyA3YDdwN4A4KAtoC0gLhfEBBO
3084 U01lbnVNaXhlZFN0YXRl0gA3ADgDhQOGogOGADtaTlNNZW51SXRlbV8QIXRvZ2dsZUF1dG9tYXRpY1F1
3085 b3RlU3Vic3RpdHV0aW9uOtIANwA4A4kDiqMDigOLADtfEBVOU05pYkNvbnRyb2xDb25uZWN0b3JeTlNO
3086 aWJDb25uZWN0b3LTAA4DWANZA1oDjgOPgLuAvYDB2AAOA14DXwNgA2EDYgNjA2QDZgOSA2gDkwNqA2sD
3087 bAOWgLmAv4DAgLOAt4C+0wAOA14DbwNwA5kDmoEBoIEB0oEB1F8QEUp1bXAgdG8gU2VsZWN0aW9uUWpf
3088 EB1jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOtMADgNYA1kDWgOgA6GAu4DDgMbZAA4DXgNfA2AD
3089 YQNiA2MDZANlA2YDpANoA6UDagNrA2wDbQCQgLmAxIDFgLOAt4CwXxAQU21hcnQgQ29weS9QYXN0ZVFm
3090 XxAYdG9nZ2xlU21hcnRJbnNlcnREZWxldGU60wAOA1gDWQNaA64Dr4C7gMiAzNgADgNeA18DYANhA2ID
3091 YwNkA2YDsgNoA7MDagNrA2wDtoC5gMqAy4CzgLeAydMADgNeA28DcAO5A7qBAaCBAcCBAcJUU2F2ZVFz
3092 XXNhdmVEb2N1bWVudDrTAA4DWANZA1oDwAPBgLuAzoDS2AAOA14DXwNgA2EDYgNjA2QDZgPEA2gDxQNq
3093 A2sDbAPIgLmA0IDRgLOAt4DP0wAOA14DbwNwA8sDzIEBoIEBzIEBzlRVbmRvUXpVdW5kbzrTAA4DWANZ
3094 A1oD0gPTgLuA1IDX2AAOA14DXwNgA2EDYgNjA2QDZgPWA9cD2ANqA2sDbAPIgLmA1RIAEgAAgNaAs4C3
3095 gM9UUmVkb1FaVXJlZG860wAOA1gDWQNaA+ED4oC7gNmA3dgADgNeA18DYANhA2IDYwNkA2YD5QPmA+cD
3096 agNrA2wD6oC5gNsSABgAAIDcgLOAt4Da1AAOA14B1QNvA3AD7QPuA++BAaCBAa6BAb6BAbBbSGlkZSBP
3097 dGhlcnNRaF8QFmhpZGVPdGhlckFwcGxpY2F0aW9uczrTAA4DWANZA1oD9QP2gLuA34Dj2AAOA14DXwNg
3098 A2EDYgNjA2QDZgP5A9cD+gNqA2sDbAP9gLmA4YDigLOAt4Dg0wAOA14DbwNwBAAEAYEBoIEB4YEB41tT
3099 aG93IENvbG9yc1FDXxAVb3JkZXJGcm9udENvbG9yUGFuZWw60wAOA1gDWQNaBAcECIC7gOWA6NgADgNe
3100 A18DYANhA2IDYwNkA2YECwNoBAwDagNrA2wDyIC5gOaA54CzgLeAz1VQYXN0ZVF2VnBhc3RlOtMADgNY
3101 A1kDWgQVBBaAu4DqgOzZAA4DXgNfA2ADYQNiA2MDZANlA2YEGQNoA6UDagNrA2wDlgCQgLmA64DFgLOA
3102 t4C+ZQBGAGkAbgBkICZfEBdwZXJmb3JtRmluZFBhbmVsQWN0aW9uOtMADgNYA1kDWgQiBCOAu4DugPLY
3103 AA4DXgNfA2ADYQNiA2MDZANmBCYDaAQnA2oDawNsBCqAuYDwgPGAs4C3gO/TAA4DXgNvA3AELQQugQGg
3104 gQGdgQGfXVN0b3AgU3BlYWtpbmddc3RvcFNwZWFraW5nOtQADgQyA1gDWQQzBDQAQQQ2XU5TRGVzdGlu
3105 YXRpb26A94D0gAeA9tIADgAyADMEOYAEgPVfEBZJUHl0aG9uQ29jb2FDb250cm9sbGVyWGRlbGVnYXRl
3106 0gA3ADgEPQQ+owQ+A4sAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9y0wAOA1gDWQNaBEEEQoC7gPmA+9gA
3107 DgNeA18DYANhA2IDYwNkA2YERQNoBCcDagNrA2wDyIC5gPqA8YCzgLeAz1ZEZWxldGVXZGVsZXRlOtMA
3108 DgNYA1kDWgROBE+Au4D9gQEB2AAOA14DXwNgA2EDYgNjA2QDZgRSA2gEUwNqA2sDbARWgLmA/4EBAICz
3109 gLeA/tQADgNeAdUDbwNwBFkEWgRbgQGggQHrgQHvgQHtWE1pbmltaXplUW1fEBNwZXJmb3JtTWluaWF0
3110 dXJpemU60wAOA1gDWQNaBGEEYoC7gQEDgQEF2AAOA14DXwNgA2EDYgNjA2QDZgRlA2gEJwNqA2sDbARW
3111 gLmBAQSA8YCzgLeA/l8QEkJyaW5nIEFsbCB0byBGcm9udF8QD2FycmFuZ2VJbkZyb250OtMADgNYA1kD
3112 WgRuBG+Au4EBB4EBCdgADgNeA18DYANhA2IDYwNkA2YEcgNoBCcDagNrA2wD6oC5gQEIgPGAs4C3gNpY
3113 U2hvdyBBbGxfEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM60wAOA1gDWQNaBHsEfIC7gQELgQEO2AAOA14D
3114 XwNgA2EDYgNjA2QDZgR/A2gEgANqA2sDbAO2gLmBAQyBAQ2As4C3gMlVQ2xvc2VRd11wZXJmb3JtQ2xv
3115 c2U61AAOBDIDWANZA1oAHwSKBIuAu4ACgQEQgQES1wAOA14DYANhA2IDYwNkA2YEjgQnA2oDawNsA+qA
3116 uYEBEYDxgLOAt4DaXxAVQWJvdXQgSVB5dGhvbjFTYW5kYm94XxAdb3JkZXJGcm9udFN0YW5kYXJkQWJv
3117 dXRQYW5lbDrTAA4DWANZA1oElwSYgLuBARSBARjYAA4DXgNfA2ADYQNiA2MDZANmBJsDaAScA2oDawNs
3118 BJ+AuYEBFoEBF4CzgLeBARXTAA4DXgNvA3AEogSjgQGggQHdgQHfXkNoZWNrIFNwZWxsaW5nUTteY2hl
3119 Y2tTcGVsbGluZzrTAA4DWANZA1oEqQSqgLuBARqBAR3YAA4DXgNfA2ADYQNiA2MDZANmBK0DaASuA2oD
3120 awNsA8iAuYEBG4EBHICzgLeAz1pTZWxlY3QgQWxsUWFac2VsZWN0QWxsOtMADgNYA1kDWgS3BLiAu4EB
3121 H4EBIdgADgNeA18DYANhA2IDYwNkA2YEuwNoA+cDagNrA2wD6oC5gQEggNyAs4C3gNpfEBRIaWRlIElQ
3122 eXRob24xU2FuZGJveFVoaWRlOtMADgNYA1kDWgTEBMWAu4EBI4EBJdgADgNeA18DYANhA2IDYwNkA2YE
3123 yANoBCcDagNrA2wEn4C5gQEkgPGAs4C3gQEVXxAbQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nXxAe
3124 dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmc60wAOA1gDWQNaBNEE0oC7gQEngQEq2AAOA14DXwNg
3125 A2EDYgNjA2QDZgTVA2gE1gNqA2sDbAO2gLmBASiBASmAs4C3gMlmAFAAcgBpAG4AdCAmUXBWcHJpbnQ6
3126 0wAOA1gDWQNaBN8E4IC7gQEsgQEv2AAOA14DXwNgA2EDYgNjA2QDZgTjA9cE5ANqA2sDbAO2gLmBAS2B
3127 AS6As4C3gMloAFMAYQB2AGUAIABBAHMgJlFTXxAPc2F2ZURvY3VtZW50QXM60wAOA1gDWQNaBO0E7oC7
3128 gQExgQE02AAOA14DXwNgA2EDYgNjA2QDZgTxA2gE8gNqA2sDbAPqgLmBATKBATOAs4C3gNpfEBRRdWl0
3129 IElQeXRob24xU2FuZGJveFFxWnRlcm1pbmF0ZTrTAA4DWANZA1oE+wT8gLuBATaBATnZAA4DXgNfA2AD
3130 YQNiA2MDZANlA2YE/wPXBQADagNrA2wDbQFYgLmBATeBATiAs4C3gLBbU21hcnQgTGlua3NRR18QHXRv
3131 Z2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb2461AAOBDIDWANZBDMENAUKBQuA94D0gQE7gQE90gAOADIA
3132 MwUOgASBATxfEBpJUHl0aG9uMVNhbmRib3hBcHBEZWxlZ2F0ZV8QEWlweXRob25Db250cm9sbGVy0wAO
3133 A1gDWQNaBRMFFIC7gQE/gQFB2AAOA14DXwNgA2EDYgNjA2QDZgUXA2gEJwNqA2sDbARWgLmBAUCA8YCz
3134 gLeA/lRab29tXHBlcmZvcm1ab29tOtMADgNYA1kDWgUgBSGAu4EBQ4EBRtgADgNeA18DYANhA2IDYwNk
3135 A2YFJANoBSUDagNrA2wDyIC5gQFEgQFFgLOAt4DPVENvcHlRY1Vjb3B5OtMADgNYA1kDWgUuBS+Au4EB
3136 SIEBTNgADgNeA18DYANhA2IDYwNkA2YFMgPmBTMDagNrA2wFNoC5gQFKgQFLgLOAt4EBSdMADgNeA28D
3137 cAU5BTqBAaCBAeeBAelcU2hvdyBUb29sYmFyUXRfEBN0b2dnbGVUb29sYmFyU2hvd2461AAOBDIDWANZ
3138 BDMFCgVBBDaA94EBO4EBToD20gAOADIAMwA0gASAA9MADgNYA1kDWgVIBUmAu4EBUIEBUtgADgNeA18D
3139 YANhA2IDYwNkA2YFTANoBCcDagNrA2wEKoC5gQFRgPGAs4C3gO9eU3RhcnQgU3BlYWtpbmdec3RhcnRT
3140 cGVha2luZzrTAA4DWANZA1oFVQVWgLuBAVSBAVjYAA4DXgNfA2ADYQNiA2MDZANmBVkDaAVaA2oDawNs
3141 BV2AuYEBVoEBV4CzgLeBAVXTAA4DXgNvA3AFYAVhgQGggQHxgQHzXxAUSVB5dGhvbjFTYW5kYm94IEhl
3142 bHBRP1lzaG93SGVscDrTAA4DWANZA1oFZwVogLuBAVqBAV3YAA4DXgNfA2ADYQNiA2MDZANmBWsDaAQn
3143 A2oDawNsBW+AuYEBXIDxgLOAt4EBW9QADgNeAdUDbwNwBXIFcwV0gQGggQGigQGlgQGkWkNsZWFyIE1l
3144 bnVfEBVjbGVhclJlY2VudERvY3VtZW50czrTAA4DWANZA1oFeQV6gLuBAV+BAWHYAA4DXgNfA2ADYQNi
3145 A2MDZANmBX0DaAQnA2oDawNsBTaAuYEBYIDxgLOAt4EBSW8QEgBDAHUAcwB0AG8AbQBpAHoAZQAgAFQA
3146 bwBvAGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4DWANZA1oFhgWH
3147 gLuBAWOBAWbYAA4DXgNfA2ADYQNiA2MDZANmBYoDaAWLA2oDawNsA8iAuYEBZIEBZYCzgLeAz1NDdXRR
3148 eFRjdXQ61AAOBDIDWANZBDMAyAQ0BZaA94AYgPSBAWhYdGV4dFZpZXfUAA4EMgNYA1kEMwDIAEEFnID3
3149 gBiAB4EBal8QFWluaXRpYWxGaXJzdFJlc3BvbmRlctMADgNYA1kDWgWgBaGAu4EBbIEBb9kADgWjA14D
3150 XwNgA2EDYgNjA2QDZgQnBaYD1wWnA2oDawNsA7ZZTlNUb29sVGlwgLmA8YEBbYEBboCzgLeAyV1QYWdl
3151 IFNldHVwLi4uUVBecnVuUGFnZUxheW91dDrTAA4DWANZA1oFsAWxgLuBAXGBAXTYAA4DXgNfA2ADYQNi
3152 A2MDZANmBbQDaAW1A2oDawNsBJ+AuYEBcoEBc4CzgLeBARVuAFMAaABvAHcAIABTAHAAZQBsAGwAaQBu
3153 AGcgJlE6XxAPc2hvd0d1ZXNzUGFuZWw60wAOA1gDWQNaBb4Fv4C7gQF2gQF41wAOA14DYANhA2IDYwNk
3154 A2YFwgQnA2oDawNsA7aAuYEBd4DxgLOAt4DJXxAPUmV2ZXJ0IHRvIFNhdmVkXxAWcmV2ZXJ0RG9jdW1l
3155 bnRUb1NhdmVkOtMADgNYA1kDWgXLBcyAu4EBeoEBfNgADgNeA18DYANhA2IDYwNkA2YFzwNoBCcDagNr
3156 A2wEn4C5gQF7gPGAs4C3gQEVXxAbQ2hlY2sgR3JhbW1hciBXaXRoIFNwZWxsaW5nXxAWdG9nZ2xlR3Jh
3157 bW1hckNoZWNraW5nOtcADgQyBdcF2ANYA1kF2QXaBdsF3AXdAnUF3wBVWU5TS2V5UGF0aFlOU0JpbmRp
3158 bmdfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJzaW9ugQGLgQF+gQGKgQGCgHyBAYnbBeEADgXiBeMF
3159 5AXlBeYF5wXoBekF6gB6BewAegXuAHoF8AXdAHoAegB6BfVfEBpOU0ZpbHRlclJlc3RyaWN0c0luc2Vy
3160 dGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uXE5TSW5pdGlhbEtleVpOU0VkaXRhYmxlXk5TRGVjbGFy
3161 ZWRLZXlzXk5TSW5pdGlhbFZhbHVlXxAiTlNDbGVhcnNGaWx0ZXJQcmVkaWNhdGVPbkluc2VydGlvbl8Q
3162 GE5TU2VsZWN0c0luc2VydGVkT2JqZWN0c18QFk5TQXZvaWRzRW1wdHlTZWxlY3Rpb25fEBFOU1NvcnRE
3163 ZXNjcmlwdG9ycwmBAYgJgQGBCYEBf4EBggkJCYEBg9IADgA+AGkF+IA0owX5Be4F3YEBgIEBgYEBglRr
3164 ZXlzU2tleVV2YWx1ZdIADgA+BgAGAYEBh6EGAoEBhNQADgYEBgUGBgYHBe4GCQB6VU5TS2V5Wk5TU2Vs
3165 ZWN0b3JbTlNBc2NlbmRpbmeBAYaBAYGBAYUJWGNvbXBhcmU60gA3ADgGDQYOogYOADtfEBBOU1NvcnRE
3166 ZXNjcmlwdG9y0gA3ADgGEAE4ogE4ADvSADcAOAYSBhOlBhMGFAYVBhYAO18QFk5TRGljdGlvbmFyeUNv
3167 bnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlcl8QEk5TT2JqZWN0Q29udHJvbGxlclxOU0NvbnRyb2xs
3168 ZXJfEBp2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmtleV8QE2FycmFuZ2VkT2JqZWN0cy5rZXnSADcAOAYa
3169 BhujBhsDiwA7XxAVTlNOaWJCaW5kaW5nQ29ubmVjdG9y1wAOBDIF1wXYA1gDWQXZBdoENAYfBiAF2wYi
3170 AFWBAYuA9IEBj4EBjoEBfoEBjV8QGWNvbnRlbnREaWN0aW9uYXJ5OiB1c2VyTlNfEBFjb250ZW50RGlj
3171 dGlvbmFyeVZ1c2VyTlPXAA4EMgXXBdgDWANZBdkF2gXbBikF3QJ2BiwAVYEBi4EBfoEBkoEBgoCLgQGR
3172 XxAcdmFsdWU6IGFycmFuZ2VkT2JqZWN0cy52YWx1ZV8QFWFycmFuZ2VkT2JqZWN0cy52YWx1ZdcADgQy
3173 BdcF2ANYA1kF2QXaBQoGMgYzBdsGNQBVgQGLgQE7gQGWgQGVgQF+gQGUXxApZmlsdGVyUHJlZGljYXRl
3174 OiB3b3Jrc3BhY2VGaWx0ZXJQcmVkaWNhdGVfEA9maWx0ZXJQcmVkaWNhdGVfEBh3b3Jrc3BhY2VGaWx0
3175 ZXJQcmVkaWNhdGXXAA4EMgXXBdgDWANZBdkF2gQ0BjwGPQBsBj8AVYEBi4D0gQGagQGZgKOBAZhfEBlh
3176 bmltYXRlOiB3YWl0aW5nRm9yRW5naW5lV2FuaW1hdGVfEBB3YWl0aW5nRm9yRW5naW5l0gAOAD4GAAZF
3177 gQGHrxBnA1sGRwTfAkQCdQZLBIoEQQUgBW8GUATRBbAFywZUBFYFLgZXBYYGWQIKA20GXATtBl4GXwS3
3178 BmEGYgBNBdsAawVVBHsFoAZpBmoAyAUKBGEGbgSpBnAAbAZyBBUD9QIaA8gAfwPqAnYEIgZ7BJcGfQOO
3179 Bn8GgAV5AioGgwSfAhAETgPSBogEBwCqBb4D4QaNBo4D/QLAA64AfgaTBG4FEwTEAKMFXQT7BpoGmwOg
3180 BTYDlgafBWcEKgPABDQFQQKDAEEAsQaoBqkFSAO2BqyAr4EBnIEBLIB0gHyBAaGBARCA+YEBQ4EBW4EB
3181 poEBJ4EBcYEBeoEBqoD+gQFIgQHDgQFjgQHwgG6AsIEB2YEBMYEBv4EBz4EBH4EB5oEB5IALgQF+gA6B
3182 AVSBAQuBAWyBAbaBAbWAGIEBO4EBA4EB6oEBGoEBxoCjgQG9gOqA34CUgM+AaoDagIuA7oEBrYEBFIEB
3183 y4C9gQHQgQHugQFfgHKBAbGBARWAloD9gNSBAdGA5YBYgQF2gNmBAdeBAbyA4ICOgMiAEIEB1YEBB4EB
3184 P4EBI4AUgQFVgQE2gQHcgQGygMOBAUmAvoEB4IEBWoDvgM6A9IEBToCDgAeAVIEBuYEByoEBUIDJgQHJ
3185 2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YEKgQtA2gEJwNqA2sDbAPIBrZZTlNTdWJtZW51gLmA74EBnYDx
3186 gLOAt4DPgQGeVlNwZWVjaF5zdWJtZW51QWN0aW9uOtIADgA+AGkGu4A0ogVIBCKBAVCA7tIANwA4Br8D
3187 ZKIDZAA72gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YFbwVyA2gEJwNqA2sDbAO2BsiAuYEBW4EBooDxgLOA
3188 t4DJgQGjW09wZW4gUmVjZW500gAOAD4AaQbMgDShBWeBAVpfEBZfTlNSZWNlbnREb2N1bWVudHNNZW51
3189 2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YDbQNxA2gEJwNqA2sDbAPIBteAuYCwgQGngPGAs4C3gM+BAahd
3190 U3Vic3RpdHV0aW9uc9IADgA+AGkG24A0owOgA1sE+4DDgK+BATbUAA4DXgHVA28DcAbhBuIG44EBoIEB
3191 q4EB9IEBrFlBTWFpbk1lbnXSAA4APgBpBueANKcGewZeBn0GnwZhBm4GWYEBrYEBv4EBy4EB4IEB5oEB
3192 6oEB8NoADgauA14DXwNgA2EDYgNjA2QBoANmA+oD7QNoBCcDagNrA2wGVAb3gLmA2oEBroDxgLOAt4EB
3193 qoEBr18QD0lQeXRob24xU2FuZGJveNIADgA+AGkG+4A0qwSKBoMGmwZqBmkGjgS3A+EEbgZyBO2BARCB
3194 AbGBAbKBAbWBAbaBAbyBAR+A2YEBB4EBvYEBMdoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcA
3195 egNqA2sDbAPqXU5TSXNTZXBhcmF0b3JcTlNJc0Rpc2FibGVkgLmA8QmA8QmAs4C3gNrYAA4DXgNfA2AD
3196 YQNiA2MDZANmBxQDaAcVA2oDawNsA+qAuYEBs4EBtICzgLeA2mwAUAByAGUAZgBlAHIAZQBuAGMAZQBz
3197 ICZRLNoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sDbAPqgLmA8QmA8QmAs4C3gNra
3198 AA4GrgNeA18DYANhA2IDYwNkAaADZgaoBycDaAQnA2oDawNsA+oHLIC5gQG5gQG3gPGAs4C3gNqBAbhY
3199 U2VydmljZXPUAA4DXgHVA28DcAcnBzEHMoEBoIEBt4EBu4EButIADgA+AGkHNYA0oF8QD19OU1NlcnZp
3200 Y2VzTWVuddoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sDbAPqgLmA8QmA8QmAs4C3
3201 gNraAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wD6oC5gPEJgPEJgLOAt4DaXF9O
3202 U0FwcGxlTWVuddoADgauA14DXwNgA2EDYgNjA2QBoANmA7YDuQNoBCcDagNrA2wGVAdSgLmAyYEBwIDx
3203 gLOAt4EBqoEBwVRGaWxl0gAOAD4AaQdWgDSrBlcGcAZLBqwEewOuBN8FvgapBaAE0YEBw4EBxoEBoYEB
3204 yYEBC4DIgQEsgQF2gQHKgQFsgQEn2AAOA14DXwNgA2EDYgNjA2QDZgdkA2gHZQNqA2sDbAO2gLmBAcSB
3205 AcWAs4C3gMlTTmV3UW7YAA4DXgNfA2ADYQNiA2MDZANmB20DaAduA2oDawNsA7aAuYEBx4EByICzgLeA
3206 yWUATwBwAGUAbiAmUW/aAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wDtoC5gPEJ
3207 gPEJgLOAt4DJ2gAOA14DXwcIA2AHCQNhA2IDYwNkA2YEJwNoAHoEJwB6A2oDawNsA7aAuYDxCYDxCYCz
3208 gLeAydoADgauA14DXwNgA2EDYgNjA2QBoANmA8gDywNoBCcDagNrA2wGVAeOgLmAz4EBzIDxgLOAt4EB
3209 qoEBzVRFZGl00gAOAD4AaQeSgDStA8AD0gZfBYYFIAQHBEEEqQZ/BogGmgZQBkeAzoDUgQHPgQFjgQFD
3210 gOWA+YEBGoEB0IEB0YEB3IEBpoEBnNoADgNeA18HCANgBwkDYQNiA2MDZANmBCcDaAB6BCcAegNqA2sD
3211 bAPIgLmA8QmA8QmAs4C3gM/aAA4DXgNfBwgDYAcJA2EDYgNjA2QDZgQnA2gAegQnAHoDagNrA2wDyIC5
3212 gPEJgPEJgLOAt4DP2gAOBq4DXgNfA2ADYQNiA2MDZAGgA2YDlgOZA2gEJwNqA2sDbAPIB7qAuYC+gQHS
3213 gPGAs4C3gM+BAdNURmluZNIADgA+AGkHvoA0pQQVBpMGjQZcA46A6oEB1YEB14EB2YC92QAOA14DXwNg
3214 A2EDYgNjA2QDZQNmB8YDaANpA2oDawNsA5YAVYC5gQHWgLKAs4C3gL5ZRmluZCBOZXh02QAOA14DXwNg
3215 A2EDYgNjA2QDZQNmB84D1wUAA2oDawNsA5YBWIC5gQHYgQE4gLOAt4C+XUZpbmQgUHJldmlvdXPZAA4D
3216 XgNfA2ADYQNiA2MDZANlA2YH1gNoB9cDagNrA2wDlgfbgLmBAdqBAduAs4C3gL4QB18QFlVzZSBTZWxl
3217 Y3Rpb24gZm9yIEZpbmRRZdoADgauA14DXwNgA2EDYgNjA2QBoANmBJ8EogNoBCcDagNrA2wDyAfmgLmB
3218 ARWBAd2A8YCzgLeAz4EB3l8QFFNwZWxsaW5nIGFuZCBHcmFtbWFy0gAOAD4AaQfqgDSkBbAElwTEBcuB
3219 AXGBARSBASOBAXraAA4GrgNeA18DYANhA2IDYwNkAaADZgP9BAADaAQnA2oDawNsBlQH94C5gOCBAeGA
3220 8YCzgLeBAaqBAeJWRm9ybWF00gAOAD4AaQf7gDSiBmID9YEB5IDf2AAOA14DXwNgA2EDYgNjA2QDZggA
3221 A2gFMwNqA2sDbAP9gLmBAeWBAUuAs4C3gOBaU2hvdyBGb250c9oADgauA14DXwNgA2EDYgNjA2QBoANm
3222 BTYFOQNoBCcDagNrA2wGVAgOgLmBAUmBAeeA8YCzgLeBAaqBAehUVmlld9IADgA+AGkIEoA0ogUuBXmB
3223 AUiBAV/aAA4GrgNeA18DYANhA2IDYwNkAaADZgRWBFkDaAQnA2oDawNsBlQIHYC5gP6BAeuA8YCzgLeB
3224 AaqBAexWV2luZG930gAOAD4AaQghgDSkBE4FEwaABGGA/YEBP4EB7oEBA9oADgNeA18HCANgBwkDYQNi
3225 A2MDZANmBCcDaAB6BCcAegNqA2sDbARWgLmA8QmA8QmAs4C3gP5eX05TV2luZG93c01lbnXaAA4GrgNe
3226 A18DYANhA2IDYwNkAaADZgVdBWADaAQnA2oDawNsBlQIOIC5gQFVgQHxgPGAs4C3gQGqgQHyVEhlbHDS
3227 AA4APgBpCDyANKEFVYEBVFtfTlNNYWluTWVuddIADgA+BgAIQYEBh68QZwNtA8gDtgIKAioDtgPqA8gD
3228 yAZLA8gDtgSfBJ8AHwZuBTYDtgPIBlQAfwZQA5YD6gZUA8gD6gZUA/0AQQAfAE0FXQO2A7YD6gPqAKMA
3229 HwRWBlQDyAO2AE0D6gOWA/0CCgZ9AGsGewIqBCoGVASfBlQDlgPIBFYFNgIKA+oGmgIKBFYDyAPIA8gA
3230 owO2A+oDlgPqBp8CdgO2AGsDlgPqBFYEnwB+BlkDbQPIA+oDbQZhBogGVAVvBkcDyAAfAB8CdQAfAKMG
3231 aQO2BCoGXgO2gLCAz4DJgG6AcoDJgNqAz4DPgQGhgM+AyYEBFYEBFYACgQHqgQFJgMmAz4EBqoBqgQGm
3232 gL6A2oEBqoDPgNqBAaqA4IAHgAKAC4EBVYDJgMmA2oDagBSAAoD+gQGqgM+AyYALgNqAvoDggG6BAcuA
3233 DoEBrYBygO+BAaqBARWBAaqAvoDPgP6BAUmAboDagQHcgG6A/oDPgM+Az4AUgMmA2oC+gNqBAeCAi4DJ
3234 gA6AvoDagP6BARWAEIEB8ICwgM+A2oCwgQHmgQHRgQGqgQFbgQGcgM+AAoACgHyAAoAUgQG2gMmA74EB
3235 v4DJ0gAOAD4GAAirgQGHrxBoA1sGRwTfAkQCdQZLBIoEQQUgBW8E0QZQBbAFywUuBlQEVgZXBYYGWQIK
3236 A20GXATtBl4GXwS3BmEGYgBNBdsAawVVBHsFoAZpBmoAyAUKBGEGbgZwBKkAbAZyBBUD9QIaA8gD6gB/
3237 BCICdgZ7BJcGfQOOBn8GgAV5AioGgwSfAhAETgPSBogEBwCqBb4D4QaNBo4D/QLAA64AfgaTBG4FEwTE
3238 AKMFXQT7AB8GmgabBTYDoAafA5YFZwQqBDQDwAVBAoMAQQCxBqkGqAVIA7YGrICvgQGcgQEsgHSAfIEB
3239 oYEBEID5gQFDgQFbgQEngQGmgQFxgQF6gQFIgQGqgP6BAcOBAWOBAfCAboCwgQHZgQExgQG/gQHPgQEf
3240 gQHmgQHkgAuBAX6ADoEBVIEBC4EBbIEBtoEBtYAYgQE7gQEDgQHqgQHGgQEagKOBAb2A6oDfgJSAz4Da
3241 gGqA7oCLgQGtgQEUgQHLgL2BAdCBAe6BAV+AcoEBsYEBFYCWgP2A1IEB0YDlgFiBAXaA2YEB14EBvIDg
3242 gI6AyIAQgQHVgQEHgQE/gQEjgBSBAVWBATaAAoEB3IEBsoEBSYDDgQHggL6BAVqA74D0gM6BAU6Ag4AH
3243 gFSBAcqBAbmBAVCAyYEBydIADgA+BgAJFoEBh68QaAkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJ
3244 JQkmCScJKAkpCSoJKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwFDgk+CT8JQAlBCUIJ
3245 QwlECUUJRglHCUgJSQlKCUsJTAlNCU4JTwlQCVEJUglTCVQJVQlWCVcJWAlZCVoJWwlcCV0JXglfCWAJ
3246 YQliCWMJZAllCWYJZwloCWkJaglrCWwJbQluCW8JcAlxCXIJcwl0CXUJdgl3CXgJeQl6CXsJfAl9CX6B
3247 AfiBAfmBAfqBAfuBAfyBAf2BAf6BAf+BAgCBAgGBAgKBAgOBAgSBAgWBAgaBAgeBAgiBAgmBAgqBAguB
3248 AgyBAg2BAg6BAg+BAhCBAhGBAhKBAhOBAhSBAhWBAhaBAheBAhiBAhmBAhqBAhuBAhyBAh2BATyBAh6B
3249 Ah+BAiCBAiGBAiKBAiOBAiSBAiWBAiaBAieBAiiBAimBAiqBAiuBAiyBAi2BAi6BAi+BAjCBAjGBAjKB
3250 AjOBAjSBAjWBAjaBAjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKBAkOBAkSBAkWBAkaB
3251 AkeBAkiBAkmBAkqBAkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaBAleBAliBAlmBAlqB
3252 AluBAlyBAl2BAl5fEBhNZW51IEl0ZW0gKFNtYXJ0IFF1b3RlcylfEBJNZW51IEl0ZW0gKFNwZWVjaClR
3253 OF8QEVRhYmxlIEhlYWRlciBWaWV3XxAXVGFibGUgQ29sdW1uIChWYXJpYWJsZSlfEBdNZW51IEl0ZW0g
3254 KE9wZW4gUmVjZW50KV8QIU1lbnUgSXRlbSAoQWJvdXQgSVB5dGhvbjFTYW5kYm94KV8QEk1lbnUgSXRl
3255 bSAoRGVsZXRlKV8QEE1lbnUgSXRlbSAoQ29weSlfEBJNZW51IChPcGVuIFJlY2VudClRNl8QGU1lbnUg
3256 SXRlbSAoU3Vic3RpdHV0aW9ucylvEBoATQBlAG4AdQAgAEkAdABlAG0AIAAoAFMAaABvAHcAIABTAHAA
3257 ZQBsAGwAaQBuAGcgJgApXxAnTWVudSBJdGVtIChDaGVjayBHcmFtbWFyIFdpdGggU3BlbGxpbmcpXxAY
3258 TWVudSBJdGVtIChTaG93IFRvb2xiYXIpWE1haW5NZW51XU1lbnUgKFdpbmRvdylROV8QD01lbnUgSXRl
3259 bSAoQ3V0KVExW1Njcm9sbCBWaWV3XxAUTWVudSAoU3Vic3RpdHV0aW9ucylfECJNZW51IEl0ZW0gKFVz
3260 ZSBTZWxlY3Rpb24gZm9yIEZpbmQpVDExMTFfEBBNZW51IEl0ZW0gKEZpbGUpW1NlcGFyYXRvci01XxAg
3261 TWVudSBJdGVtIChIaWRlIElQeXRob24xU2FuZGJveClfEBBNZW51IEl0ZW0gKFZpZXcpXxAWTWVudSBJ
3262 dGVtIChTaG93IEZvbnRzKVxDb250ZW50IFZpZXdfEBlVc2VyIE5hbWVzcGFjZSBDb250cm9sbGVyWlNw
3263 bGl0IFZpZXdfECBNZW51IEl0ZW0gKElQeXRob24xU2FuZGJveCBIZWxwKVMxLTFRNV8QFE1lbnUgSXRl
3264 bSAoU2VydmljZXMpW1NlcGFyYXRvci0xWVRleHQgVmlld18QHk1lbnUgSXRlbSAoQnJpbmcgQWxsIHRv
3265 IEZyb250KV8QEk1lbnUgSXRlbSAoV2luZG93KW8QEQBNAGUAbgB1ACAASQB0AGUAbQAgACgATwBwAGUA
3266 biAmAClfEBZNZW51IEl0ZW0gKFNlbGVjdCBBbGwpXEFzeW5jIEFycm93c1tTZXBhcmF0b3ItMm8QEQBN
3267 AGUAbgB1ACAASQB0AGUAbQAgACgARgBpAG4AZCAmAClfEBdNZW51IEl0ZW0gKFNob3cgQ29sb3JzKV8Q
3268 EVZlcnRpY2FsIFNjcm9sbGVyW01lbnUgKEVkaXQpXxAWTWVudSAoSVB5dGhvbjFTYW5kYm94KV8QD0Jv
3269 eCAoV29ya3NwYWNlKV8QGU1lbnUgSXRlbSAoU3RvcCBTcGVha2luZylfEBRUYWJsZSBDb2x1bW4gKFZh
3270 bHVlKV8QG01lbnUgSXRlbSAoSVB5dGhvbjFTYW5kYm94KV8QGk1lbnUgSXRlbSAoQ2hlY2sgU3BlbGxp
3271 bmcpXxAQTWVudSBJdGVtIChFZGl0KV8QHU1lbnUgSXRlbSAoSnVtcCB0byBTZWxlY3Rpb24pW1NlcGFy
3272 YXRvci02WVNlcGFyYXRvcm8QHgBNAGUAbgB1ACAASQB0AGUAbQAgACgAQwB1AHMAdABvAG0AaQB6AGUA
3273 IABUAG8AbwBsAGIAYQByICYAKV8QHFRhYmxlIFZpZXcgKFZhcmlhYmxlLCBWYWx1ZSlbU2VwYXJhdG9y
3274 LTNfEBtNZW51IChTcGVsbGluZyBhbmQgR3JhbW1hcilfEBNIb3Jpem9udGFsIFNjcm9sbGVyXxAUTWVu
3275 dSBJdGVtIChNaW5pbWl6ZSlfEBBNZW51IEl0ZW0gKFJlZG8pXxAQTWVudSBJdGVtIChGaW5kKV8QEU1l
3276 bnUgSXRlbSAoUGFzdGUpXxAVSG9yaXpvbnRhbCBTY3JvbGxlci0xUjEwXxAXTWVudSBJdGVtIChIaWRl
3277 IE90aGVycylfEBlNZW51IEl0ZW0gKEZpbmQgUHJldmlvdXMpW1NlcGFyYXRvci00XU1lbnUgKEZvcm1h
3278 dClfEB1UZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbCktMVEzXUJveCAoQ29uc29sZSlfEBVNZW51IEl0
3279 ZW0gKEZpbmQgTmV4dClfEBRNZW51IEl0ZW0gKFNob3cgQWxsKV8QEE1lbnUgSXRlbSAoWm9vbSlfECdN
3280 ZW51IEl0ZW0gKENoZWNrIFNwZWxsaW5nIFdoaWxlIFR5cGluZyldU2Nyb2xsIFZpZXctMVEyXxAXTWVu
3281 dSBJdGVtIChTbWFydCBMaW5rcylcRmlsZSdzIE93bmVyXxAgTWVudSBJdGVtIChTcGVsbGluZyBhbmQg
3282 R3JhbW1hcilTMTIxW01lbnUgKFZpZXcpXxAcTWVudSBJdGVtIChTbWFydCBDb3B5L1Bhc3RlKV8QEk1l
3283 bnUgSXRlbSAoRm9ybWF0KVtNZW51IChGaW5kKV8QFk1lbnUgSXRlbSAoQ2xlYXIgTWVudSldTWVudSAo
3284 U3BlZWNoKV8QF1B5dGhvbiBDb2NvYSBDb250cm9sbGVyXxAQTWVudSBJdGVtIChVbmRvKVtBcHBsaWNh
3285 dGlvbl8QG1RleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKV8QGVdpbmRvdyAoSVB5dGhvbjEgKENvY29h
3286 KSlfEBNWZXJ0aWNhbCBTY3JvbGxlci0xUzItMV8QD01lbnUgKFNlcnZpY2VzKV8QGk1lbnUgSXRlbSAo
3287 U3RhcnQgU3BlYWtpbmcpW01lbnUgKEZpbGUpUTfSAA4APgYACeiBAYeg0gAOAD4GAAnrgQGHoNIADgA+
3288 BgAJ7oEBh68QlwNUA1sGRwNBA0kE3wJEAnUGSwSKBEEFIAVvA0IGUATRA0QDMgNOBbADMQNRA0sFywM+
3289 AzoGVARWBS4GVwNNBYYGWQMwAgoDbQZcBO0GXgZfAzkDOAS3AywDTAZhBmIDLwBNBdsDQAM0AGsFVQR7
3290 BaAGaQZqAMgDKwUKBGEGbgSpBnAAbANHBnIEFQP1AhoDyAB/A+oCdgQiAz8GewSXBn0DjgZ/A0oDVgaA
3291 A1UFeQIqA0MGgwSfAhADKgROA9IGiAQHAKoDOwNIBb4D4QaNAzYDPAaOA0UD/QMoAsADrgMzAH4GkwRu
3292 BRMExACjA1IDKQVdBPsAHwaaBpsDoAU2A5YGnwMuBWcDUAQqA8AENANGBUEDNQKDA08AQQCxBqgGqQM3
3293 Az0DUwMtBUgDtgasgQGQgK+BAZyBATWBAVmBASyAdIB8gQGhgQEQgPmBAUOBAVuBATqBAaaBASeBAUKA
3294 7YEBa4EBcYDpgQF5gQFigQF6gQEmgQETgQGqgP6BAUiBAcOBAWmBAWOBAfCA5IBugLCBAdmBATGBAb+B
3295 Ac+BAQ+BAQqBAR+AzYEBZ4EB5oEB5IDegAuBAX6BATCA+IAOgQFUgQELgQFsgQG2gQG1gBiAx4EBO4EB
3296 A4EB6oEBGoEBxoCjgQFPgQG9gOqA34CUgM+AaoDagIuA7oEBK4EBrYEBFIEBy4C9gQHQgQFegQGXgQHu
3297 gQGTgQFfgHKBAT6BAbGBARWAloDCgP2A1IEB0YDlgFiBARmBAVOBAXaA2YEB14EBAoEBHoEBvIEBR4Dg
3298 gK6AjoDIgPOAEIEB1YEBB4EBP4EBI4AUgQF9gLyBAVWBATaAAoEB3IEBsoDDgQFJgL6BAeCA2IEBWoEB
3299 dYDvgM6A9IEBTYEBToD8gIOBAXCAB4BUgQG5gQHKgQEGgQEigQGMgNOBAVCAyYEBydIADgA+BgAKiIEB
3300 h68QlwqJCooKiwqMCo0KjgqPCpAKkQqSCpMKlAqVCpYKlwqYCpkKmgqbCpwKnQqeCp8KoAqhCqIKowqk
3301 CqUKpgqnCqgKqQqqCqsKrAqtCq4KrwqwCrEKsgqzCrQKtQq2CrcKuAq5CroKuwq8Cr0Kvgq/CsAKwQrC
3302 CsMKxArFCsYKxwrICskKygrLCswKzQrOCs8K0ArRCtIK0wrUCtUK1grXCtgK2QraCtsK3ArdCt4K3wrg
3303 CuEK4grjCuQK5QrmCucK6ArpCuoK6wrsCu0K7grvCvAK8QryCvMK9Ar1CvYK9wr4CvkK+gr7CvwK/Qr+
3304 Cv8LAAsBCwILAwsECwULBgsHCwgLCQsKCwsLDAsNCw4LDwsQCxELEgsTCxQLFQsWCxcLGAsZCxoLGwsc
3305 Cx0LHgsfgQJjgQJkgQJlgQJmgQJngQJogQJpgQJqgQJrgQJsgQJtgQJugQJvgQJwgQJxgQJygQJzgQJ0
3306 gQJ1gQJ2gQJ3gQJ4gQJ5gQJ6gQJ7gQJ8gQJ9gQJ+gQJ/gQKAgQKBgQKCgQKDgQKEgQKFgQKGgQKHgQKI
3307 gQKJgQKKgQKLgQKMgQKNgQKOgQKPgQKQgQKRgQKSgQKTgQKUgQKVgQKWgQKXgQKYgQKZgQKagQKbgQKc
3308 gQKdgQKegQKfgQKggQKhgQKigQKjgQKkgQKlgQKmgQKngQKogQKpgQKqgQKrgQKsgQKtgQKugQKvgQKw
3309 gQKxgQKygQKzgQK0gQK1gQK2gQK3gQK4gQK5gQK6gQK7gQK8gQK9gQK+gQK/gQLAgQLBgQLCgQLDgQLE
3310 gQLFgQLGgQLHgQLIgQLJgQLKgQLLgQLMgQLNgQLOgQLPgQLQgQLRgQLSgQLTgQLUgQLVgQLWgQLXgQLY
3311 gQLZgQLagQLbgQLcgQLdgQLegQLfgQLggQLhgQLigQLjgQLkgQLlgQLmgQLngQLogQLpgQLqgQLrgQLs
3312 gQLtgQLugQLvgQLwgQLxgQLygQLzgQL0gQL1gQL2gQL3gQL4gQL5EQGrEQFfENMRAWUQfxBQEQGYEQGc
3313 EHwQOhDKEMUQfREBuREBXBBOEOAQ4xBXEMwQ8REBWxDkEQFaEFYQ4RAdEBgRASkQUhEBvRDHEGcQ4hEB
3314 lxEBXRDdEIgQUxDOEI4QwRCGEN8RAbwRAScRAVgRAWkRAXQRAYERAXEQ6xEBpRBvEEkQTRCDEI8RAaMR
3315 AWoRAXUQBRATEMYQSBEBtBDpEJUQ0REBWREBmRDNEQGWEDkRAZ0QwxEBaxA4EMkQ2RDSENYRAW0RAbUQ
3316 XBEBuBEBKhEBmxDwEOwQyBEBmhEBYxAXENcQ2hDLEQGiEOgRAWgQcBCRENUQJxEBbxCQEQFuEQEsEQFk
3317 EQGeEEsRAa0RAaQQ0BCWEO8Q2xEBoBEBrBD1EGoRAWIRAb4Q2BCBEQFeEQEoENwRASsRAXAQfhEBbBDU
3318 EM8RAaYRAXYT//////////0QJREBnxDmEQFzEQGhEIIQShEBchDeEQGoEOcQxBBREE/SAA4APgBpC7mA
3319 NKDSAA4APgYAC7yBAYeg0gAOAD4GAAu/gQGHoNIANwA4C8ELwqILwgA7Xk5TSUJPYmplY3REYXRhAAgA
3320 GQAiACcAMQA6AD8ARABSAFQAZgZmBmwGtwa+BsUG0wblBwEHDwcbBycHNQdAB04Hagd4B4sHnQe3B8EH
3321 zgfQB9MH1gfZB9wH3gfhB+MH5gfpB+wH7wfxB/MH9gf5B/wH/wgICBQIFggYCCYILwg4CEMISAhXCGAI
3322 cwh8CIcIiQiMCI4IuwjICNUI6wj5CQMJEQkeCTAJRAlQCVIJVAlWCVgJWglfCWEJYwllCWcJaQmECZcJ
3323 oAm9Cc8J2gnjCe8J+wn9Cf8KAQoECgYKCAoKChMKFQoaChwKHgpHCk8KXgptCnoKfAp+CoAKggqFCocK
3324 iQqLCowKlQqXCpwKngqgCtkK4wrvCv0LCgsUCyYLNAs2CzgLOgs8Cz0LPwtBC0MLRQtHC0kLSwtNC1YL
3325 WAtbC10Legt8C34LgAuCC4QLhguPC5ELlAuWC8cL0wvcC+gL9gv4C/oL/Av+DAEMAwwFDAcMCQwLDA0M
3326 FgwYDB8MIQwjDCUMWgxjDGwMdgyADIoMjAyODJAMkgyUDJYMmAybDJ0MnwyhDKMMpQyuDLAMswy1DOoM
3327 /A0GDRMNHw0pDTINPQ0/DUENQw1FDUcNSQ1LDU4NUA1SDVQNVg1YDWENYw2IDYoNjA2ODZANkg2UDZYN
3328 mA2aDZwNng2gDaINpA2mDagNqg3GDdsN+A4ZDjUOWw6BDp8Ouw7XDvQPDA8mD1oPdw+TD8APyQ/QD90P
3329 4w/6EA8QGRAkECwQPhBAEEIQSxBNEGIQdRCDEI0QjxCREJMQlRCiEKsQrRCvELEQuhDEEMYQxxDQENcQ
3330 6RDyEPsRFxEsETURNxE6ETwRRRFMEVsRYxFsEXERehF/EaARqBHCEdUR6RIAEhUSKBIqEi8SMRIzEjUS
3331 NxI5EjsSSBJVElsSXRJ4EoEShhKOEpsSoxKlEqcSqhK3Er8SwRLGEsgSyhLPEtES0xLoEvQTAhMEEwYT
3332 CBMKExETLxM8Ez4TShNfE2ETYxNlE2cTexOEE4kTlhOjE6UTqhOsE64TsxO1E7cTwxPQE9IT2RPiE+cT
3333 /hQLFBMUHBQnFC4UNRRBFFgUcBR9FH8UghSPFJkUphSoFKoUshS7FMAUyRTSFN0VAhULFRQVHhUgFSIV
3334 JBUmFS8VMRUzFTUVPhVWFWMVbBV3FYIVjBW5FcQVxhXIFcoVzBXOFdAV0hXbFeQV/xYYFiEWKhY3Fk4W
3335 VxZeFmkWcBaNFpkWpBauFrsWxxbMFs4W0BbSFtQW1hbeFu8W9hb9FwYXCBcRFxMXFhcjFywXMRc4F00X
3336 TxdRF1MXVRdrF3gXeheIF5EXmhesF7kXwBfJF9IX2BgRGBMYFRgXGBkYGhgcGB4YIBgiGCQYJhgvGDEY
3337 NBg2GFMYVRhXGFkYWxhdGF8YaBhqGG0YbxiuGLsYzhjbGN0Y3xjhGOMY5RjnGOkY6xj+GQAZAhkEGQYZ
3338 CBkRGRMZHhkgGSIZJBkmGSgZVRlXGVkZWxldGV8ZYRljGWUZZxlwGXIZdRl3Gc4Z8Bn6GgcaHBo2GlIa
3339 bRp3GoMalRqkGsMazxrRGtMa3BreGuAa4RrjGuwa9Rr3Gvga+hr8Gv4bABsJGxQbMRs9Gz8bQRtDG0Ub
3340 RxtJG3YbeBt6G3wbfhuAG4IbhBuGG4gbkhubG6QbuBvRG9Mb1RvXG9kb2xvyG/scBBwSHBscHRwiHCQc
3341 JhxPHF4caxx2HIUckBybHKgcqRyrHK0cthy4HMEcyhzLHM0c6hzvHPEc8xz1HPcc+R0CHQ8dER0dHTId
3342 NB02HTgdOh1MHVUdYB10HZUdox2oHaodrB2uHbAdsh21HbcdwR3SHdQd3R3fHeId9x35Hfsd/R3/Hhge
3343 LR4vHjEeMx41HkgeUR5WHmQejR6OHpAekh6bHp0enh6gHr0evx7BHsMexR7HHs0e7h7wHvIe9B72Hvge
3344 +h8PHxEfEx8VHxcfIR8uHzAfNR8+H0kfYR+GH4gfih+MH44fkB+SH5QfnR+2H98f4R/jH+Uf5x/pH+sf
3345 7R/2IA4gFyAZIBwgHiA0IE0gZCB9IJognCCeIKAgoiCkIK4guyC9INYg+SECIQshFyFAIUshViFgIW0h
3346 byFxIXMhfCGFIYghiiGNIY8hkSGWIZghoSGmIbEhySHSIdsh8SH8IhQiJyIwIjUiSCJRIlMitCK2Irgi
3347 uiK8Ir4iwCLCIsQixiLIIsoizCLOItAi0yLWItki3CLfIuIi5SLoIusi7iLxIvQi9yL6Iv0jACMDIwYj
3348 CSMMIw8jEiMVIxgjGyMeIyEjJCMnIyojLSMwIzMjQCNJI1EjUyNVI1cjfCOEI5gjoyOxI7sjyCPPI9Uj
3349 1yPZI94j4CPlI+cj6SPrI/gkBCQHJAokDSQaJBwkKSQ4JDokPCQ+JEYkWCRhJGYkeSSGJIgkiiSMJJ8k
3350 qCStJLgk3CTlJOwlBCUTJSAlIiUkJSYlRyVJJUslTSVPJVElUyVgJWMlZiVpJX0lfyWfJawlriWwJbIl
3351 1yXZJdsl3SXfJeEl4yX2JfgmEyYgJiImJCYmJkcmSSZLJk0mTyZRJlMmYCZjJmYmaSZuJnAmfiaLJo0m
3352 jyaRJrImtCa2Jrgmuia8Jr4myybOJtEm1CbZJtsm4SbuJvAm8ib0JxUnFycZJx4nICciJyQnJicrJy0n
3353 MydAJ0InRCdGJ2cnaSdrJ3Ancid0J3YneCeJJ4wnjyeSJ5UnoSejJ7wnySfLJ80nzyfwJ/In9Cf2J/gn
3354 +if8KAkoDCgPKBIoHiggKDgoRShHKEkoSyhsKG4ocChyKHQodih4KH4ogCiHKJQoliiYKJoovyjBKMMo
3355 xSjHKMkoyyjWKPAo/Sj/KQEpAykkKSYpKCkqKSwpLikwKT0pQClDKUYpVCliKXMpgSmDKYUphymJKZIp
3356 lCmWKa8puCnBKcgp3ynsKe4p8CnyKhMqFSoXKhkqGyodKh8qJiouKjsqPSo/KkIqYyplKmcqaipsKm4q
3357 cCqBKoQqhyqKKo0qliqYKq4quyq9KsAqwyrkKuYq6SrrKu0q7yrxKwYrGCslKycrKistK04rUCtTK1Ur
3358 VytZK1srZCt9K4orjCuPK5Irsyu1K7gruyu9K78rwSvHK8kr1yvoK+or7CvvK/IsDywRLBQsFiwYLBos
3359 HCw0LFQsYSxjLGYsaSyKLIwsjyySLJQsliyZLKYsqSysLK8svizALM8s3CzeLOEs5C0FLQctCi0NLQ8t
3360 ES0TLR4tIC0rLTgtOi09LUAtYS1jLWYtaC1qLWwtbi2FLYstmC2aLZ0toC3BLcMtxi3ILcotzC3PLe0u
3361 Di4bLh0uIC4jLkQuRi5JLkwuTi5QLlIuXy5hLmgudS53LnoufS6eLqAuoy6mLqguqi6sLr0uvy7RLt4u
3362 4C7jLuYvBy8JLwwvDy8RLxMvFS8sLy4vOS9GL0gvSy9OL3MvdS94L3svfS9/L4EvjS+PL68vwC/CL8Qv
3363 xy/KL9Mv1S/YL/UwCTAWMBgwGzAeMD8wQTBEMEYwSDBKMEwwUTBeMGswbTBwMHMwlDCWMJkwnDCeMKAw
3364 ojCnMKkwrzC8ML4wwTDEMOUw5zDqMO0w7zDxMPQxATEEMQcxCjEXMRkxLzFAMUIxRTFIMUoxUzFVMVcx
3365 ZDFmMWkxbDGNMY8xkjGUMZYxmDGaMakxuDHFMccxyjHNMe4x8DHzMfYx+DH6Mf0yCjINMhAyEzIqMiwy
3366 NjJDMkUySDJLMmwybjJxMnMydTJ3MnoyizKOMpEylDKXMqIyujLHMskyzDLPMvAy8jL1Mvcy+TL7Mv4z
3367 JTNHM1QzVjNZM1wzfTN/M4IzhTOHM4kzizOPM5EzljOnM6kzqzOtM7AzuTPKM8wzzjPQM9Mz6zP4M/oz
3368 /TQANCU0LzQxNDM0NjQ5NDs0PTQ/NE00TzReNGs0bTRwNHM0lDSWNJk0nDSeNKA0ozTANMI01DThNOM0
3369 5jTpNQY1CDULNQ01DzURNRM1JTU+NUs1TTVQNVM1dDV2NXk1ezV9NX81gjWgNbk11jXgNeo2CTYMNg82
3370 EjYVNhc2GjZHNmQ2ezaINpM2ojaxNtY28TcKNx43HzciNyM3JjcnNyo3LTcuNy83MDczNzw3PjdFN0g3
3371 SzdON1M3VzddN2Y3aTdsN283gDeGN5E3nTegN6M3pjenN7A3uTe+N9E32jffN+g38zgMOCA4NThCOF84
3372 dTh+OIU4nTi6OL04vzjCOMU4yDjLOOc4+zkCOR85IjklOSg5KzktOTA5TzlnOYQ5hzmKOY05kDmTOZY5
3373 wjnUOe86DDoPOhE6FDoXOhk6HDo4OkA6UzpcOl87MDsyOzU7ODs6Ozw7PztCO0Q7RztKO007UDtTO1Y7
3374 WTtbO147YTtkO2c7aTtrO247cTt0O3c7ejt9O4A7gjuFO4c7ijuNO5A7kzuWO5g7mzueO6E7pDunO6k7
3375 rDuuO7A7sju0O7Y7uDu6O7w7vzvCO8U7xzvKO8070DvSO9U72DvaO9w73jvhO+M75TvoO+o77TvwO/I7
3376 9Dv2O/g7+zv+PAE8BDwGPAk8DDwPPBI8FDwXPBk8HDwfPCE8IzwlPCg8KjwsPC48MTw0PDc8OTw8PGU8
3377 bzxxPHM8djx4PHo8fDx+PIE8iDyXPKA8ojynPKo8rDy1PLo84zzlPOg86zztPO888TzzPPY9Aj0LPQ09
3378 ED0TPSw9VT1XPVk9XD1ePWA9Yj1kPWc9dT1+PYA9hz2JPYs9jj2fPaI9pT2oPas9tT2+PcA9zz3SPdU9
3379 2D3bPd494T3kPg0+Dz4RPhQ+Fj4YPho+HT4gPjI+Oz49PlQ+Vz5aPl0+YD5jPmY+aT5rPm4+cT50Pp0+
3380 qz64Pro+vD69Pr8+wD7CPsQ+xj7nPuk+7D7vPvE+8z71Pw4/ED85Pzs/PT8+P0A/QT9DP0U/Rz9wP3I/
3381 dT94P3o/fD9+P4A/gz+MP50/oD+jP6Y/qT+yP7Q/tT/HP/A/8j/0P/U/9z/4P/o//D/+QCdAKUArQCxA
3382 LkAvQDFAM0A1QEJAa0BtQG9AckB0QHZAeEB7QH5Ag0CMQI5ApUCoQKtArkCxQLRAtkC5QLxAv0DCQMVA
3383 5kDoQOtA7kDwQPJA9ED4QPpBG0EdQSBBI0ElQSdBKUE0QTZBX0FhQWNBZEFmQWdBaUFrQW1BlkGYQZpB
3384 m0GdQZ5BoEGiQaRBzUHPQdFB1EHWQdhB2kHdQeBB5UHuQfBCC0INQg9CEkIVQhhCGkIcQh9CIkIlQihC
3385 K0IuQldCWUJbQlxCXkJfQmFCY0JlQo5CkEKSQpNClUKWQphCmkKcQsVCx0LJQsxCzkLQQtJC1ELXQtxC
3386 5ULnQvJC9EL3QvpC/UL/QyRDJkMpQytDLUMvQzFDO0NgQ2JDZUNoQ2pDbENuQ3xDoUOjQ6ZDqUOrQ61D
3387 r0OxQ8pDzEP1Q/dD+kP9Q/9EAUQDRAVECEQfRChEKkQzRDZEOUQ8RD9EaERqRGxEb0RxRHNEdUR4RHtE
3388 gkSLRI1EkkSVRJdEuES6RL1EwETCRMRExkTRRPpE/ET/RQJFBEUGRQhFC0UORRNFHEUeRSNFJkUpRVJF
3389 VEVWRVlFW0VdRV9FYkVlRWxFdUV3RYBFgkWFRYhFi0W0RbZFuEW5RbtFvEW+RcBFwkXRRfpF/EX/RgJG
3390 BEYGRghGC0YORhNGHEYeRiFGJEYwRjlGPEcNRw9HEUcTRxVHF0cZRxtHHUcfRyJHJEcmRylHLEcuRzFH
3391 NEc2RzhHO0c9R0BHQkdER0dHSUdLR05HUEdSR1RHVkdZR1tHXUdfR2FHY0dlR2dHakdsR25HcEdyR3RH
3392 dkd4R3tHfUeAR4JHhEeHR4pHjUePR5FHk0eWR5hHmkedR59HoUejR6VHp0epR6tHrUevR7FHtEe2R7hH
3393 uke8R75HwEfDR8VHyEfKR8xHzkfQR9NH1kfZR9xH30fhR+NH5UfnR+lH60fuR/BH8kf1R/dIAEgDSNZI
3394 2EjbSN5I4EjiSOVI6EjqSO1I8EjzSPZI+Uj8SP9JAkkESQdJCkkNSQ9JEUkUSRdJGkkdSSBJI0kmSShJ
3395 K0ktSTBJM0k2STlJPEk+SUFJRElHSUpJTUlPSVJJVElWSVhJWklcSV5JYEliSWVJaElrSW1JcElzSXZJ
3396 eEl7SX5JgEmCSYRJh0mJSYtJjkmQSZNJlkmYSZpJnEmeSaFJpEmnSapJrEmvSbJJtEm3SbpJvUm/ScJJ
3397 xEnHSclJy0nNSdBJ0knUSdZJ2UncSd9J4UnkSe1J8ErDSsZKyUrMSs9K0krVSthK20reSuFK5ErnSupK
3398 7UrwSvNK9kr5SvxK/0sCSwVLCEsLSw5LEUsUSxdLGksdSyBLI0smSylLLEsvSzJLNUs4SztLPktBS0RL
3399 R0tKS01LUEtTS1ZLWUtcS19LYktlS2hLa0tuS3FLdEt3S3pLfUuAS4NLhkuJS4xLj0uSS5VLmEubS55L
3400 oUukS6dLqkutS7BLs0u2S7lLvEu/S8JLxUvIS8tLzkvRS9RL10vaS91L4EvjS+ZL6UvsS+9L8kv1S/hL
3401 +0wWTCtMLUxBTFtMdUyZTK5MwUzWTNhM9E0rTVVNcE15TYdNiU2bTZ1NqU3ATeVN6k39TglOLE4/TlhO
3402 ZU6BToxOr06zTrVOzE7YTuJPA08YTz1PVk9jT29PlE+uT8JPzk/nT/lQFVAsUEpQZ1B6UJpQplCwUO9R
3403 DlEaUThRTlFlUXhRi1GfUbdRulHUUfBR/FIKUipSLFI6UlJSaVJ8UqZStFK2UtBS3VMAUwRTEFMvU0RT
3404 UFNpU3dTkVOkU7BTzlPqVABUBFQWVDNUP1RBVEpUTVROVFdUWlRbVGRUZ1WYVZtVnVWgVaNVplWpVatV
3405 rVWwVbNVtVW4VbtVvlXBVcRVx1XJVcxVz1XRVdRV11XaVd1V4FXjVeVV6FXrVe5V8VX0VfZV+FX6Vf1W
3406 AFYDVgZWCVYMVg9WEVYUVhdWGlYcVh5WIVYkViZWKFYrVi5WMVY0VjdWOVY7Vj5WQVZEVkdWSlZMVk9W
3407 UlZUVlZWWFZaVlxWXlZgVmJWZVZoVmtWblZwVnNWdlZ5VnxWf1aCVoRWh1aKVo1Wj1aRVpNWlVaYVppW
3408 nFafVqJWpVanVqpWrVawVrNWtla4VrpWvFa+VsBWwlbFVshWy1bOVtBW01bVVthW21bdVuBW41blVuhW
3409 6lbtVu9W8lb1VvdW+Vb7Vv5XAVcDVwVXCFcKVwxXD1cSVxVXGFcbVx1XIFciVyVXLlcxWGJYZVhoWGtY
3410 blhxWHRYd1h6WH1YgFiDWIZYiViMWI9YkliVWJhYm1ieWKFYpFinWKpYrViwWLNYtli5WLxYv1jCWMVY
3411 yFjLWM5Y0VjUWNdY2ljdWOBY41jmWOlY7FjvWPJY9Vj4WPtY/lkBWQRZB1kKWQ1ZEFkTWRZZGVkcWR9Z
3412 IlklWShZK1kuWTFZNFk3WTpZPVlAWUNZRllJWUxZT1lSWVVZWFlbWV5ZYVlkWWdZalltWXBZc1l2WXlZ
3413 fFl/WYJZhVmIWYtZjlmRWZRZl1maWZ1ZoFmjWaZZqVmsWa9Zslm1WbhZu1m+WcFZxFnHWcpZzVnQWdNZ
3414 1lnZWdxZ31niWeVZ6FnrWe5Z8Vn0WfdZ+ln9WgBaA1oGWglaDFoPWhJaFVoYWhtaHlohWiRaJ1oqWi1a
3415 L1oyWjRaNlo5WjxaPlpAWkJaRFpGWklaTFpOWlBaUlpUWlZaWFpbWl1aYFpiWmRaZlpoWmtabVpwWnJa
3416 dFp2WnlafFp+WoBaglqEWoZaiFqKWoxaj1qSWpVamFqbWp5aoVqjWqZaqFqqWqxarlqwWrNatlq5Wrta
3417 vVq/WsFaxFrGWshaylrNWtBa0lrVWtda2lrcWt9a4VrjWuVa51rpWuxa71rxWvRa91r6Wvxa/lsAWwNb
3418 BlsIWwpbDFsOWxFbE1sWWxhbGlscWx5bIVsjWyZbKVssWy9bMVs0WzdbOVs7Wz1bP1tCW0VbR1tJW0xb
3419 T1tRW1NbVltZW1tbXlthW2NbZltoW2pbbVtwW3lbe1t+W4Bbg1uGW4hbiluNW49bkluUW5ZbmFuaW6Nb
3420 pVumW69bsluzW7xbv1vAW8lbzgAAAAAAAAICAAAAAAAAC8MAAAAAAAAAAAAAAAAAAFvdA</bytes>
3076 A1UDVoCugLyAwoDIgM6A1IDZgN+A44DogOyA8YD2gPuBAQGBAQaBAQqBAQ+BARWBARqBAR+BASWBASqB
3077 AS+BATWBATmBAT2BAUKBAUOBAUiBAUqBAU+BAVSBAViBAVyBAV6BAWKBAWaBAWqBAW6BAXOBAXiBAX2B
3078 AY2BAZGBAZSBAZfTAA4DWANZA1oDWwNcWE5TU291cmNlV05TTGFiZWyAu4CvgLrYAA4DXgNfA2ADYQNi
3079 A2MDZANlA2YDZwNoA2kDagNrA2xXTlNUaXRsZV8QEU5TS2V5RXF1aXZNb2RNYXNrWk5TS2V5RXF1aXZd
3080 TlNNbmVtb25pY0xvY1lOU09uSW1hZ2VcTlNNaXhlZEltYWdlVk5TTWVudYC5gLESABAAAICyEn////+A
3081 s4C3gLDUAA4DXgHVA24DbwNwA3EDcltOU01lbnVJdGVtc4EBpIEByoEB2YEBzFhTaG93IEFsbNMADgAy
3082 A3UDdgN3A3heTlNSZXNvdXJjZU5hbWWAtoC0gLVXTlNJbWFnZV8QD05TTWVudUNoZWNrbWFya9IANwA4
3083 A3wDfaIDfQA7XxAQTlNDdXN0b21SZXNvdXJjZdMADgAyA3UDdgN3A4GAtoC0gLhfEBBOU01lbnVNaXhl
3084 ZFN0YXRl0gA3ADgDhAOFogOFADtaTlNNZW51SXRlbV8QFnVuaGlkZUFsbEFwcGxpY2F0aW9uczrSADcA
3085 OAOIA4mjA4kDigA7XxAVTlNOaWJDb250cm9sQ29ubmVjdG9yXk5TTmliQ29ubmVjdG9y0wAOA1gDWQNa
3086 A40DjoC7gL2AwdgADgNeA18DYANhA2IDYwNkA2UDkQNnA5IDaQNqA2sDlYC5gL+AwICzgLeAvtMADgNe
3087 A24DbwOYA5mBAaSBAauBAa1eQ2hlY2sgU3BlbGxpbmdRO15jaGVja1NwZWxsaW5nOtMADgNYA1kDWgOf
3088 A6CAu4DDgMfYAA4DXgNfA2ADYQNiA2MDZANlA6MDZwOkA2kDagNrA6eAuYDFgMaAs4C3gMTTAA4DXgNu
3089 A28DqgOrgQGkgQHbgQHdZgBQAHIAaQBuAHQgJlFwVnByaW50OtMADgNYA1kDWgOxA7KAu4DJgM3ZAA4D
3090 XgNfA2ADYQNiA2MDZAO0A2UDtgO3A7gDaQNqA2sDuwFYVU5TVGFngLmAyxIAEgAAgMyAs4C3gMrTAA4D
3091 XgNuA28DvgO/gQGkgQHAgQHCW1NtYXJ0IExpbmtzUUdfEB10b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0
3092 aW9uOtMADgNYA1kDWgPFA8aAu4DPgNPYAA4DXgNfA2ADYQNiA2MDZANlA8kDtwPKA2kDagNrA82AuYDR
3093 gNKAs4C3gNDTAA4DXgNuA28D0APRgQGkgQGvgQGxVFJlZG9RWlVyZWRvOtMADgNYA1kDWgPXA9iAu4DV
3094 gNjYAA4DXgNfA2ADYQNiA2MDZANlA9sDZwNoA2kDagNrA9+AuYDXgLKAs4C3gNbTAA4DXgNuA28D4gPj
3095 gQGkgQHEgQHGXlN0YXJ0IFNwZWFraW5nXnN0YXJ0U3BlYWtpbmc60wAOA1gDWQNaA+gD6YC7gNqA3tgA
3096 DgNeA18DYANhA2IDYwNkA2UD7ANnA+0DaQNqA2sD8IC5gNyA3YCzgLeA29MADgNeA24DbwPzA/SBAaSB
3097 AfGBAfNfEBRJUHl0aG9uMVNhbmRib3ggSGVscFE/WXNob3dIZWxwOtMADgNYA1kDWgP6A/uAu4DggOLY
3098 AA4DXgNfA2ADYQNiA2MDZANlA/4DZwNoA2kDagNrA5WAuYDhgLKAs4C3gL5fEBtDaGVjayBTcGVsbGlu
3099 ZyBXaGlsZSBUeXBpbmdfEB50b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZzrTAA4DWANZA1oEBwQI
3100 gLuA5IDn2AAOA14DXwNgA2EDYgNjA2QDZQQLA2cEDANpA2oDawPNgLmA5YDmgLOAt4DQWlNlbGVjdCBB
3101 bGxRYVpzZWxlY3RBbGw60wAOA1gDWQNaBBUEFoC7gOmA69gADgNeA18DYANhA2IDYwNkA2UEGQNnA2gD
3102 aQNqA2sDlYC5gOqAsoCzgLeAvl8QG0NoZWNrIEdyYW1tYXIgV2l0aCBTcGVsbGluZ18QFnRvZ2dsZUdy
3103 YW1tYXJDaGVja2luZzrTAA4DWANZA1oEIgQjgLuA7YDw2AAOA14DXwNgA2EDYgNjA2QDZQQmA2cDaANp
3104 A2oDawQqgLmA74CygLOAt4Du0wAOA14DbgNvBC0ELoEBpIEB54EB6W8QEgBDAHUAcwB0AG8AbQBpAHoA
3105 ZQAgAFQAbwBvAGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4DWANZ
3106 A1oEMwQ0gLuA8oD12AAOA14DXwNgA2EDYgNjA2QDZQQ3BDgEOQNpA2oDawQqgLmA8xIAGAAAgPSAs4C3
3107 gO5cU2hvdyBUb29sYmFyUXRfEBN0b2dnbGVUb29sYmFyU2hvd2460wAOA1gDWQNaBEIEQ4C7gPeA+tgA
3108 DgNeA18DYANhA2IDYwNkA2UERgNnBEcDaQNqA2sDp4C5gPiA+YCzgLeAxFRTYXZlUXNdc2F2ZURvY3Vt
3109 ZW50OtQADgRPA1gDWQRQBFEEUgRTXU5TRGVzdGluYXRpb26BAQCA/YD8gP/SAA4AMgAzADSABIAD0gAO
3110 ADIAMwRZgASA/l8QGklQeXRob24xU2FuZGJveEFwcERlbGVnYXRlWGRlbGVnYXRl0gA3ADgEXQReowRe
3111 A4oAO18QFE5TTmliT3V0bGV0Q29ubmVjdG9y0wAOA1gDWQNaBGEEYoC7gQECgQEF2QAOA14DXwNgA2ED
3112 YgNjA2QDtANlBGUDZwRmA2kDagNrA7sAVYC5gQEDgQEEgLOAt4DKXFNtYXJ0IFF1b3Rlc1FnXxAhdG9n
3113 Z2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb2461AAOBE8DWANZBFAEbwRRBHGBAQCBAQeA/YEBCdIA
3114 DgAyADMEdIAEgQEIXxAWSVB5dGhvbkNvY29hQ29udHJvbGxlcl8QEWlweXRob25Db250cm9sbGVy0wAO
3115 A1gDWQNaBHkEeoC7gQELgQEO2AAOA14DXwNgA2EDYgNjA2QDZQR9A2cEfgNpA2oDawNsgLmBAQyBAQ2A
3116 s4C3gLBfEBRRdWl0IElQeXRob24xU2FuZGJveFFxWnRlcm1pbmF0ZTrTAA4DWANZA1oEhwSIgLuBARCB
3117 ARTYAA4DXgNfA2ADYQNiA2MDZANlBIsDZwSMA2kDagNrBI+AuYEBEoEBE4CzgLeBARHUAA4DXgHVA24D
3118 bwSSBJMElIEBpIEB64EB74EB7VhNaW5pbWl6ZVFtXxATcGVyZm9ybU1pbmlhdHVyaXplOtMADgNYA1kD
3119 WgSaBJuAu4EBFoEBGdgADgNeA18DYANhA2IDYwNkA2UEngNnBJ8DaQNqA2sDzYC5gQEXgQEYgLOAt4DQ
3120 VFVuZG9RelV1bmRvOtMADgNYA1kDWgSoBKmAu4EBG4EBHtgADgNeA18DYANhA2IDYwNkA2UErANnBK0D
3121 aQNqA2sDlYC5gQEcgQEdgLOAt4C+bgBTAGgAbwB3ACAAUwBwAGUAbABsAGkAbgBnICZROl8QD3Nob3dH
3122 dWVzc1BhbmVsOtMADgNYA1kDWgS2BLeAu4EBIIEBJNgADgNeA18DYANhA2IDYwNkA2UEugO3BLsDaQNq
3123 A2sEvoC5gQEigQEjgLOAt4EBIdMADgNeA24DbwTBBMKBAaSBAZ+BAaFbU2hvdyBDb2xvcnNRQ18QFW9y
3124 ZGVyRnJvbnRDb2xvclBhbmVsOtMADgNYA1kDWgTIBMmAu4EBJoEBKdgADgNeA18DYANhA2IDYwNkA2UE
3125 zAQ4BM0DaQNqA2sDbIC5gQEngQEogLOAt4CwW0hpZGUgT3RoZXJzUWhfEBZoaWRlT3RoZXJBcHBsaWNh
3126 dGlvbnM60wAOA1gDWQNaBNYE14C7gQErgQEu2AAOA14DXwNgA2EDYgNjA2QDZQTaA2cE2wNpA2oDawPN
3127 gLmBASyBAS2As4C3gNBUQ29weVFjVWNvcHk60wAOA1gDWQNaBOQE5YC7gQEwgQE02QAOA14DXwNgA2ED
3128 YgNjA2QDtANlBOgDZwTpA2kDagNrBOwAkIC5gQEygQEzgLOAt4EBMdMADgNeA24DbwTvBPCBAaSBAbWB
3129 AbdlAEYAaQBuAGQgJlFmXxAXcGVyZm9ybUZpbmRQYW5lbEFjdGlvbjrTAA4DWANZA1oE9gT3gLuBATaB
3130 ATjYAA4DXgNfA2ADYQNiA2MDZANlBPoDZwNoA2kDagNrA9+AuYEBN4CygLOAt4DWXVN0b3AgU3BlYWtp
3131 bmddc3RvcFNwZWFraW5nOtQADgRPA1gDWQNaAB8FBAUFgLuAAoEBOoEBPNcADgNeA2ADYQNiA2MDZANl
3132 BQgDaANpA2oDawNsgLmBATuAsoCzgLeAsF8QFUFib3V0IElQeXRob24xU2FuZGJveF8QHW9yZGVyRnJv
3133 bnRTdGFuZGFyZEFib3V0UGFuZWw60wAOA1gDWQNaBREFEoC7gQE+gQFB2QAOBRQDXgNfA2ADYQNiA2MD
3134 ZANlA2gFFwO3BRgDaQNqA2sDp1lOU1Rvb2xUaXCAuYCygQE/gQFAgLOAt4DEXVBhZ2UgU2V0dXAuLi5R
3135 UF5ydW5QYWdlTGF5b3V0OtQADgRPA1gDWQRQBG8AQQRTgQEAgQEHgAeA/9MADgNYA1kDWgUmBSeAu4EB
3136 RIEBR9gADgNeA18DYANhA2IDYwNkA2UFKgNnBSsDaQNqA2sDzYC5gQFFgQFGgLOAt4DQVVBhc3RlUXZW
3137 cGFzdGU61AAOBE8DWANZBFAAyABBBTaBAQCAGIAHgQFJXxAVaW5pdGlhbEZpcnN0UmVzcG9uZGVy0wAO
3138 A1gDWQNaBToFO4C7gQFLgQFO2AAOA14DXwNgA2EDYgNjA2QDZQU+A2cFPwNpA2oDawTsgLmBAUyBAU2A
3139 s4C3gQExXxARSnVtcCB0byBTZWxlY3Rpb25Ral8QHWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6
3140 0wAOA1gDWQNaBUgFSYC7gQFQgQFT2AAOA14DXwNgA2EDYgNjA2QDZQVMA2cDaANpA2oDawVQgLmBAVKA
3141 soCzgLeBAVHUAA4DXgHVA24DbwVTBVQFVYEBpIEBpYEBp4EBplpDbGVhciBNZW51XxAVY2xlYXJSZWNl
3142 bnREb2N1bWVudHM60wAOA1gDWQNaBVoFW4C7gQFVgQFX2AAOA14DXwNgA2EDYgNjA2QDZQVeA2cDaANp
3143 A2oDawPNgLmBAVaAsoCzgLeA0FZEZWxldGVXZGVsZXRlOtMADgNYA1kDWgVnBWiAu4EBWYEBW9cADgNe
3144 A2ADYQNiA2MDZANlBWsDaANpA2oDawOngLmBAVqAsoCzgLeAxF8QD1JldmVydCB0byBTYXZlZF8QFnJl
3145 dmVydERvY3VtZW50VG9TYXZlZDrUAA4ETwNYA1kEUADIBG8FdoEBAIAYgQEHgQFdWHRleHRWaWV30wAO
3146 A1gDWQNaBXoFe4C7gQFfgQFh2AAOA14DXwNgA2EDYgNjA2QDZQV+A2cDaANpA2oDawSPgLmBAWCAsoCz
3147 gLeBARFfEBJCcmluZyBBbGwgdG8gRnJvbnRfEA9hcnJhbmdlSW5Gcm9udDrTAA4DWANZA1oFhwWIgLuB
3148 AWOBAWXYAA4DXgNfA2ADYQNiA2MDZANlBYsDZwTNA2kDagNrA2yAuYEBZIEBKICzgLeAsF8QFEhpZGUg
3149 SVB5dGhvbjFTYW5kYm94VWhpZGU60wAOA1gDWQNaBZQFlYC7gQFngQFp2AAOA14DXwNgA2EDYgNjA2QD
3150 ZQWYA2cDaANpA2oDawSPgLmBAWiAsoCzgLeBARFUWm9vbVxwZXJmb3JtWm9vbTrTAA4DWANZA1oFoQWi
3151 gLuBAWuBAW3ZAA4DXgNfA2ADYQNiA2MDZAO0A2UFpQNnBOkDaQNqA2sDuwCQgLmBAWyBATOAs4C3gMpf
3152 EBBTbWFydCBDb3B5L1Bhc3RlXxAYdG9nZ2xlU21hcnRJbnNlcnREZWxldGU60wAOA1gDWQNaBa4Fr4C7
3153 gQFvgQFy2AAOA14DXwNgA2EDYgNjA2QDZQWyA7cFswNpA2oDawOngLmBAXCBAXGAs4C3gMRoAFMAYQB2
3154 AGUAIABBAHMgJlFTXxAPc2F2ZURvY3VtZW50QXM60wAOA1gDWQNaBbwFvYC7gQF0gQF32AAOA14DXwNg
3155 A2EDYgNjA2QDZQXAA2cFwQNpA2oDawPNgLmBAXWBAXaAs4C3gNBTQ3V0UXhUY3V0OtMADgNYA1kDWgXK
3156 BcuAu4EBeYEBfNgADgNeA18DYANhA2IDYwNkA2UFzgNnBc8DaQNqA2sDp4C5gQF6gQF7gLOAt4DEVUNs
3157 b3NlUXddcGVyZm9ybUNsb3NlOtcADgRPBdcF2ANYA1kF2QXaBFEF3AXdBd4F3wBVWU5TS2V5UGF0aFlO
3158 U0JpbmRpbmdfEBxOU05pYkJpbmRpbmdDb25uZWN0b3JWZXJzaW9ugQGMgP2BAYuBAYqBAX6BAYnbBeEA
3159 DgXiBeMF5AXlBeYF5wXoBekF6gB6BewAegXuAHoF8AXxAHoAegB6BfVfEBpOU0ZpbHRlclJlc3RyaWN0
3160 c0luc2VydGlvbl8QFE5TUHJlc2VydmVzU2VsZWN0aW9uXE5TSW5pdGlhbEtleVpOU0VkaXRhYmxlXk5T
3161 RGVjbGFyZWRLZXlzXk5TSW5pdGlhbFZhbHVlXxAiTlNDbGVhcnNGaWx0ZXJQcmVkaWNhdGVPbkluc2Vy
3162 dGlvbl8QGE5TU2VsZWN0c0luc2VydGVkT2JqZWN0c18QFk5TQXZvaWRzRW1wdHlTZWxlY3Rpb25fEBFO
3163 U1NvcnREZXNjcmlwdG9ycwmBAYgJgQGBCYEBf4EBggkJCYEBg9IADgA+AGkF+IA0owX5Be4F8YEBgIEB
3164 gYEBglRrZXlzU2tleVV2YWx1ZdIADgA+BgAGAYEBh6EGAoEBhNQADgYEBgUGBgYHBe4GCQB6VU5TS2V5
3165 Wk5TU2VsZWN0b3JbTlNBc2NlbmRpbmeBAYaBAYGBAYUJWGNvbXBhcmU60gA3ADgGDQYOogYOADtfEBBO
3166 U1NvcnREZXNjcmlwdG9y0gA3ADgGEAE4ogE4ADvSADcAOAYSBhOlBhMGFAYVBhYAO18QFk5TRGljdGlv
3167 bmFyeUNvbnRyb2xsZXJfEBFOU0FycmF5Q29udHJvbGxlcl8QEk5TT2JqZWN0Q29udHJvbGxlclxOU0Nv
3168 bnRyb2xsZXJfEClmaWx0ZXJQcmVkaWNhdGU6IHdvcmtzcGFjZUZpbHRlclByZWRpY2F0ZV8QD2ZpbHRl
3169 clByZWRpY2F0ZV8QGHdvcmtzcGFjZUZpbHRlclByZWRpY2F0ZdIANwA4BhsGHKMGHAOKADtfEBVOU05p
3170 YkJpbmRpbmdDb25uZWN0b3LXAA4ETwXXBdgDWANZBdkF2gRvBiAGIQXeBiMAVYEBjIEBB4EBkIEBj4EB
3171 foEBjl8QGWNvbnRlbnREaWN0aW9uYXJ5OiB1c2VyTlNfEBFjb250ZW50RGljdGlvbmFyeVZ1c2VyTlPX
3172 AA4ETwXXBdgDWANZBdkF2gXeBioF8QJ2Bi0AVYEBjIEBfoEBk4EBgoCLgQGSXxAcdmFsdWU6IGFycmFu
3173 Z2VkT2JqZWN0cy52YWx1ZV8QFWFycmFuZ2VkT2JqZWN0cy52YWx1ZdcADgRPBdcF2ANYA1kF2QXaBd4G
3174 MwXxAnUGNgBVgQGMgQF+gQGWgQGCgHyBAZVfEBp2YWx1ZTogYXJyYW5nZWRPYmplY3RzLmtleV8QE2Fy
3175 cmFuZ2VkT2JqZWN0cy5rZXnXAA4ETwXXBdgDWANZBdkF2gRvBjwGPQBsBj8AVYEBjIEBB4EBmoEBmYCj
3176 gQGYXxAZYW5pbWF0ZTogd2FpdGluZ0ZvckVuZ2luZVdhbmltYXRlXxAQd2FpdGluZ0ZvckVuZ2luZdIA
3177 DgA+BgAGRYEBh68QZwZGAGsE5AVaBkoCwAVQBk0CgwZPBlAE1gZSBlMGVARCAE0AfgPwA7sEBwT2A7EE
3178 FQP6AgoAfwNsBJoGYwOnAEECKgTIA1sEeQPfBSYFegRSBm4EbwPoAMgF3gWuBnQE7AONBUgGeAZ5BGED
3179 nwOVA80GfgQqBoAEUQaCBREEMwIaBoYGhwaIBokAqgaLBCIFBASoA9cAbAWHBcoCRAaUA8UGlgJ2ALEF
3180 OgS+BpsFvAJ1Bp4FZwagBIcFoQS2AKMGpQIQBqcGqAWUBqoGqwSPgQGcgA6BATCBAVWBAZ2AjoEBUYEB
3181 qICDgQGqgQGugQErgQGygQGegQG/gPeAC4AQgNuAyoDkgQE2gMmA6YDggG6AaoCwgQEWgQHYgMSAB4By
3182 gQEmgK+BAQuA1oEBRIEBX4D8gQHVgQEHgNqAGIEBfoEBb4EB6oEBMYC9gQFQgQHlgQHugQECgMOAvoDQ
3183 gQG4gO6BAeGA/YEBzoEBPoDygJSBAbyBAcmBAd6BAeaAWIEBtIDtgQE6gQEbgNWAo4EBY4EBeYB0gQHN
3184 gM+BAdqAi4BUgQFLgQEhgQHwgQF0gHyBAbOBAVmBAcOBARCBAWuBASCAFIEB0YCWgQHSgQGigQFngQG6
3185 gQHkgQER2gAOA14DXwauA2AGrwNhA2IDYwNkA2UDaANnAHoDaAB6A2kDagNrA2xdTlNJc1NlcGFyYXRv
3186 clxOU0lzRGlzYWJsZWSAuYCyCYCyCYCzgLeAsNoADga5A14DXwNgA2EDYgNjA2QBoANlBL4EwQNnA2gD
3187 aQNqA2sGUwbBWU5TU3VibWVudYC5gQEhgQGfgLKAs4C3gQGegQGg1AAOA14B1QNuA28GxAbFBsaBAaSB
3188 AceBAfSBAchWRm9ybWF0XnN1Ym1lbnVBY3Rpb2460gAOAD4AaQbLgDSiBqgEtoEBooEBINgADgNeA18D
3189 YANhA2IDYwNkA2UG0ANnBDkDaQNqA2sEvoC5gQGjgPSAs4C3gQEhWlNob3cgRm9udHPSADcAOAbXA2Si
3190 A2QAO1tPcGVuIFJlY2VudNIADgA+AGkG24A0oQVIgQFQXxAWX05TUmVjZW50RG9jdW1lbnRzTWVuddoA
3191 Dga5A14DXwNgA2EDYgNjA2QBoANlBVAFUwNnA2gDaQNqA2sDpwbmgLmBAVGBAaWAsoCzgLeAxIEBqdoA
3192 Dga5A14DXwNgA2EDYgNjA2QBoANlA5UDmANnA2gDaQNqA2sDzQbvgLmAvoEBq4CygLOAt4DQgQGsXxAU
3193 U3BlbGxpbmcgYW5kIEdyYW1tYXLSAA4APgBpBvOANKQEqAONA/oEFYEBG4C9gOCA6doADga5A14DXwNg
3194 A2EDYgNjA2QBoANlA80D0ANnA2gDaQNqA2sGUwcAgLmA0IEBr4CygLOAt4EBnoEBsFRFZGl00gAOAD4A
3195 aQcEgDStBJoDxQZSBbwE1gUmBVoEBwaeBosGTwZUBqCBARaAz4EBsoEBdIEBK4EBRIEBVYDkgQGzgQG0
3196 gQGqgQG/gQHD2gAOA14DXwauA2AGrwNhA2IDYwNkA2UDaANnAHoDaAB6A2kDagNrA82AuYCyCYCyCYCz
3197 gLeA0NoADgNeA18GrgNgBq8DYQNiA2MDZANlA2gDZwB6A2gAegNpA2oDawPNgLmAsgmAsgmAs4C3gNDa
3198 AA4GuQNeA18DYANhA2IDYwNkAaADZQTsBO8DZwNoA2kDagNrA80HLIC5gQExgQG1gLKAs4C3gNCBAbZU
3199 RmluZNIADgA+AGkHMIA0pQTkBn4GqgaGBTqBATCBAbiBAbqBAbyBAUvZAA4DXgNfA2ADYQNiA2MDZAO0
3200 A2UHOANnBGYDaQNqA2sE7ABVgLmBAbmBAQSAs4C3gQExWUZpbmQgTmV4dNkADgNeA18DYANhA2IDYwNk
3201 A7QDZQdAA7cDuANpA2oDawTsAViAuYEBu4DMgLOAt4EBMV1GaW5kIFByZXZpb3Vz2QAOA14DXwNgA2ED
3202 YgNjA2QDtANlB0gDZwdJA2kDagNrBOwHTYC5gQG9gQG+gLOAt4EBMRAHXxAWVXNlIFNlbGVjdGlvbiBm
3203 b3IgRmluZFFl2gAOBrkDXgNfA2ADYQNiA2MDZAGgA2UDuwO+A2cDaANpA2oDawPNB1iAuYDKgQHAgLKA
3204 s4C3gNCBAcFdU3Vic3RpdHV0aW9uc9IADgA+AGkHXIA0owWhBGEDsYEBa4EBAoDJ2gAOBrkDXgNfA2AD
3205 YQNiA2MDZAGgA2UD3wPiA2cDaANpA2oDawPNB2iAuYDWgQHEgLKAs4C3gNCBAcVWU3BlZWNo0gAOAD4A
3206 aQdsgDSiA9cE9oDVgQE2WUFNYWluTWVuddIADgA+AGkHcoA0pwaHBpYGUAZKBokGdAabgQHJgQHagQGu
3207 gQGdgQHmgQHqgQHw2gAOBrkDXgNfA2ADYQNiA2MDZAGgA2UDbANwA2cDaANpA2oDawZTB4KAuYCwgQHK
3208 gLKAs4C3gQGegQHLXxAPSVB5dGhvbjFTYW5kYm940gAOAD4AaQeGgDSrBQQGlAaCBqUGpwZGBYcEyANb
3209 BmMEeYEBOoEBzYEBzoEB0YEB0oEBnIEBY4EBJoCvgQHYgQEL2gAOA14DXwauA2AGrwNhA2IDYwNkA2UD
3210 aANnAHoDaAB6A2kDagNrA2yAuYCyCYCyCYCzgLeAsNgADgNeA18DYANhA2IDYwNkA2UHnQNnB54DaQNq
3211 A2sDbIC5gQHPgQHQgLOAt4CwbABQAHIAZQBmAGUAcgBlAG4AYwBlAHMgJlEs2gAOA14DXwauA2AGrwNh
3212 A2IDYwNkA2UDaANnAHoDaAB6A2kDagNrA2yAuYCyCYCyCYCzgLeAsNoADga5A14DXwNgA2EDYgNjA2QB
3213 oANlBm4HsANnA2gDaQNqA2sDbAe1gLmBAdWBAdOAsoCzgLeAsIEB1FhTZXJ2aWNlc9QADgNeAdUDbgNv
3214 B7AHuge7gQGkgQHTgQHXgQHW0gAOAD4AaQe+gDSgXxAPX05TU2VydmljZXNNZW512gAOA14DXwauA2AG
3215 rwNhA2IDYwNkA2UDaANnAHoDaAB6A2kDagNrA2yAuYCyCYCyCYCzgLeAsFxfTlNBcHBsZU1lbnXaAA4G
3216 uQNeA18DYANhA2IDYwNkAaADZQOnA6oDZwNoA2kDagNrBlMH0oC5gMSBAduAsoCzgLeBAZ6BAdxURmls
3217 ZdIADgA+AGkH1oA0qwaIBoAGTQarBcoEQgWuBWcGeAURA5+BAd6BAeGBAaiBAeSBAXmA94EBb4EBWYEB
3218 5YEBPoDD2AAOA14DXwNgA2EDYgNjA2QDZQfkA2cH5QNpA2oDawOngLmBAd+BAeCAs4C3gMRTTmV3UW7Y
3219 AA4DXgNfA2ADYQNiA2MDZANlB+0DZwfuA2kDagNrA6eAuYEB4oEB44CzgLeAxGUATwBwAGUAbiAmUW/a
3220 AA4DXgNfBq4DYAavA2EDYgNjA2QDZQNoA2cAegNoAHoDaQNqA2sDp4C5gLIJgLIJgLOAt4DE2gAOA14D
3221 XwauA2AGrwNhA2IDYwNkA2UDaANnAHoDaAB6A2kDagNrA6eAuYCyCYCyCYCzgLeAxNoADga5A14DXwNg
3222 A2EDYgNjA2QBoANlBCoELQNnA2gDaQNqA2sGUwgOgLmA7oEB54CygLOAt4EBnoEB6FRWaWV30gAOAD4A
3223 aQgSgDSiBDMEIoDygO3aAA4GuQNeA18DYANhA2IDYwNkAaADZQSPBJIDZwNoA2kDagNrBlMIHYC5gQER
3224 gQHrgLKAs4C3gQGegQHsVldpbmRvd9IADgA+AGkIIYA0pASHBZQGeQV6gQEQgQFngQHugQFf2gAOA14D
3225 XwauA2AGrwNhA2IDYwNkA2UDaANnAHoDaAB6A2kDagNrBI+AuYCyCYCyCYCzgLeBARFeX05TV2luZG93
3226 c01lbnXaAA4GuQNeA18DYANhA2IDYwNkAaADZQPwA/MDZwNoA2kDagNrBlMIOIC5gNuBAfGAsoCzgLeB
3227 AZ6BAfJUSGVscNIADgA+AGkIPIA0oQPogNpbX05TTWFpbk1lbnXSAA4APgYACEGBAYevEGcDbABNBOwD
3228 zQZTAnYGTQOnAnUDzQZTA80DzQAfA80DpwBBAGsGmwZUA80D3wO7A5UDlQB/AGsGhwPNA2wGlgAfAgoD
3229 bANsA2wGoAPNBI8AHwanAB8D8ACjAB8DpwZTBosDlQVQA6cEjwO7A6cGTwZQBOwGiQOnAB8DbAOnBCoC
3230 CgTsBlMDpwZTAKMDzQQqA2wDlQPfAE0DbAOnAgoDbAPNBlMCKgCjBOwGSgZTA80CKgPNA6cDzQSPA7sE
3231 vgB+A2wCCgNsBL4EjwTsA6cGdICwgAuBATGA0IEBnoCLgQGogMSAfIDQgQGegNCA0IACgNCAxIAHgA6B
3232 AfCBAb+A0IDWgMqAvoC+gGqADoEByYDQgLCBAdqAAoBugLCAsICwgQHDgNCBARGAAoEB0oACgNuAFIAC
3233 gMSBAZ6BAbSAvoEBUYDEgQERgMqAxIEBqoEBroEBMYEB5oDEgAKAsIDEgO6AboEBMYEBnoDEgQGegBSA
3234 0IDugLCAvoDWgAuAsIDEgG6AsIDQgQGegHKAFIEBMYEBnYEBnoDQgHKA0IDEgNCBARGAyoEBIYAQgLCA
3235 boCwgQEhgQERgQExgMSBAerSAA4APgYACKuBAYevEGgAawZGBOQFWgZKAsAFUAZNAoMGTwZQBNYGUgZT
3236 BlQATQRCAH4D8AO7BAcE9gOxBBUCCgP6AH8DbABBA6cEmgZjAioEyANbBHkD3wUmBXoEUgZuBG8D6ADI
3237 Bd4AHwWuBnQGeATsA40FSAZ5BGEDnwOVA80EKgZ+BoAEUQaCBREEMwIaBoYGhwaJBogAqgaLBCIFBABs
3238 BKgD1wWHBcoCRAaUA8UGlgJ2ALEEvgU6BpsFvAJ1Bp4FZwagBIcFoQS2AKMGpQIQBqcGqAWUBqoGqwSP
3239 gA6BAZyBATCBAVWBAZ2AjoEBUYEBqICDgQGqgQGugQErgQGygQGegQG/gAuA94AQgNuAyoDkgQE2gMmA
3240 6YBugOCAaoCwgAeAxIEBFoEB2IBygQEmgK+BAQuA1oEBRIEBX4D8gQHVgQEHgNqAGIEBfoACgQFvgQHq
3241 gQHlgQExgL2BAVCBAe6BAQKAw4C+gNCA7oEBuIEB4YD9gQHOgQE+gPKAlIEBvIEByYEB5oEB3oBYgQG0
3242 gO2BATqAo4EBG4DVgQFjgQF5gHSBAc2Az4EB2oCLgFSBASGBAUuBAfCBAXSAfIEBs4EBWYEBw4EBEIEB
3243 a4EBIIAUgQHRgJaBAdKBAaKBAWeBAbqBAeSBARHSAA4APgYACRaBAYevEGgJFwkYCRkJGgkbCRwJHQke
3244 CR8JIAkhCSIJIwkkCSUJJgknCSgJKQkqCSsJLAktCS4JLwkwCTEJMgkzCTQJNQk2CTcJOAk5CToJOwk8
3245 CT0JPgk/CUAJQQlCCUMJRAlFCUYJRwlICUkJSglLCUwJTQlOCU8JUAlRCVIEWQlUCVUJVglXCVgJWQla
3246 CVsJXAldCV4JXwlgCWEJYgljCWQJZQlmCWcJaAlpCWoJawlsCW0JbglvCXAJcQlyCXMJdAl1CXYJdwl4
3247 CXkJegl7CXwJfQl+gQH4gQH5gQH6gQH7gQH8gQH9gQH+gQH/gQIAgQIBgQICgQIDgQIEgQIFgQIGgQIH
3248 gQIIgQIJgQIKgQILgQIMgQINgQIOgQIPgQIQgQIRgQISgQITgQIUgQIVgQIWgQIXgQIYgQIZgQIagQIb
3249 gQIcgQIdgQIegQIfgQIggQIhgQIigQIjgQIkgQIlgQImgQIngQIogQIpgQIqgQIrgQIsgQItgQIugQIv
3250 gQIwgQIxgQIygQIzgP6BAjSBAjWBAjaBAjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKB
3251 AkOBAkSBAkWBAkaBAkeBAkiBAkmBAkqBAkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaB
3252 AleBAliBAlmBAlqBAluBAlyBAl2BAl5aU3BsaXQgVmlld1tTZXBhcmF0b3ItM28QEQBNAGUAbgB1ACAA
3253 SQB0AGUAbQAgACgARgBpAG4AZCAmAClfEBJNZW51IEl0ZW0gKERlbGV0ZSlfEBJNZW51IEl0ZW0gKEZv
3254 cm1hdClfEBtUZXh0IEZpZWxkIENlbGwgKFRleHQgQ2VsbClfEBJNZW51IChPcGVuIFJlY2VudClfEBdN
3255 ZW51IEl0ZW0gKE9wZW4gUmVjZW50KV8QHVRleHQgRmllbGQgQ2VsbCAoVGV4dCBDZWxsKS0xXxAgTWVu
3256 dSBJdGVtIChTcGVsbGluZyBhbmQgR3JhbW1hcilfEBBNZW51IEl0ZW0gKEVkaXQpXxAQTWVudSBJdGVt
3257 IChDb3B5KVlTZXBhcmF0b3JYTWFpbk1lbnVfEBlNZW51IEl0ZW0gKFN1YnN0aXR1dGlvbnMpXENvbnRl
3258 bnQgVmlld1EzXUJveCAoQ29uc29sZSlRMl8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAWTWVudSBJdGVt
3259 IChTZWxlY3QgQWxsKV8QGU1lbnUgSXRlbSAoU3RvcCBTcGVha2luZylfEBdNZW51IEl0ZW0gKFNtYXJ0
3260 IExpbmtzKV8QJ01lbnUgSXRlbSAoQ2hlY2sgR3JhbW1hciBXaXRoIFNwZWxsaW5nKV1TY3JvbGwgVmll
3261 dy0xXxAnTWVudSBJdGVtIChDaGVjayBTcGVsbGluZyBXaGlsZSBUeXBpbmcpXxAPQm94IChXb3Jrc3Bh
3262 Y2UpXxAWTWVudSAoSVB5dGhvbjFTYW5kYm94KV8QGVdpbmRvdyAoSVB5dGhvbjEgKENvY29hKSlbTWVu
3263 dSAoRmlsZSlfEBBNZW51IEl0ZW0gKFVuZG8pW1NlcGFyYXRvci00XxAcVGFibGUgVmlldyAoVmFyaWFi
3264 bGUsIFZhbHVlKV8QF01lbnUgSXRlbSAoSGlkZSBPdGhlcnMpXxAUTWVudSBJdGVtIChTaG93IEFsbClU
3265 MTExMV1NZW51IChTcGVlY2gpXxARTWVudSBJdGVtIChQYXN0ZSlfEB5NZW51IEl0ZW0gKEJyaW5nIEFs
3266 bCB0byBGcm9udClbQXBwbGljYXRpb25fEA9NZW51IChTZXJ2aWNlcylfEBdQeXRob24gQ29jb2EgQ29u
3267 dHJvbGxlcl8QIE1lbnUgSXRlbSAoSVB5dGhvbjFTYW5kYm94IEhlbHApWVRleHQgVmlld18QGVVzZXIg
3268 TmFtZXNwYWNlIENvbnRyb2xsZXJcRmlsZSdzIE93bmVyUThfEBJNZW51IEl0ZW0gKFdpbmRvdylTMi0x
3269 W01lbnUgKEZpbmQpXxAaTWVudSBJdGVtIChDaGVjayBTcGVsbGluZylfEBZNZW51IEl0ZW0gKENsZWFy
3270 IE1lbnUpW1NlcGFyYXRvci0yXxAYTWVudSBJdGVtIChTbWFydCBRdW90ZXMpUTZfEBtNZW51IChTcGVs
3271 bGluZyBhbmQgR3JhbW1hcilbTWVudSAoRWRpdClbTWVudSAoVmlldylfEBVNZW51IEl0ZW0gKEZpbmQg
3272 TmV4dClvEBEATQBlAG4AdQAgAEkAdABlAG0AIAAoAE8AcABlAG4gJgApUzEyMVE1XxAYTWVudSBJdGVt
3273 IChTaG93IFRvb2xiYXIpXxATVmVydGljYWwgU2Nyb2xsZXItMV8QIk1lbnUgSXRlbSAoVXNlIFNlbGVj
3274 dGlvbiBmb3IgRmluZClfEBtNZW51IEl0ZW0gKElQeXRob24xU2FuZGJveClfEBBNZW51IEl0ZW0gKFZp
3275 ZXcpUTlfEBNIb3Jpem9udGFsIFNjcm9sbGVyXxAQTWVudSBJdGVtIChGaW5kKW8QHgBNAGUAbgB1ACAA
3276 SQB0AGUAbQAgACgAQwB1AHMAdABvAG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICYAKV8QIU1lbnUgSXRl
3277 bSAoQWJvdXQgSVB5dGhvbjFTYW5kYm94KVxBc3luYyBBcnJvd3NvEBoATQBlAG4AdQAgAEkAdABlAG0A
3278 IAAoAFMAaABvAHcAIABTAHAAZQBsAGwAaQBuAGcgJgApXxAaTWVudSBJdGVtIChTdGFydCBTcGVha2lu
3279 ZylfECBNZW51IEl0ZW0gKEhpZGUgSVB5dGhvbjFTYW5kYm94KVMxLTFfEBFUYWJsZSBIZWFkZXIgVmll
3280 d1tTZXBhcmF0b3ItNV8QEE1lbnUgSXRlbSAoUmVkbylfEBBNZW51IEl0ZW0gKEZpbGUpXxAUVGFibGUg
3281 Q29sdW1uIChWYWx1ZSlfEBFWZXJ0aWNhbCBTY3JvbGxlcl1NZW51IChGb3JtYXQpXxAdTWVudSBJdGVt
3282 IChKdW1wIHRvIFNlbGVjdGlvbilRMV8QD01lbnUgSXRlbSAoQ3V0KV8QF1RhYmxlIENvbHVtbiAoVmFy
3283 aWFibGUpW1NlcGFyYXRvci0xUjEwXxASTWVudSBJdGVtIChTcGVlY2gpXxAUTWVudSBJdGVtIChNaW5p
3284 bWl6ZSlfEBxNZW51IEl0ZW0gKFNtYXJ0IENvcHkvUGFzdGUpXxAXTWVudSBJdGVtIChTaG93IENvbG9y
3285 cylbU2Nyb2xsIFZpZXdbU2VwYXJhdG9yLTZfEBVIb3Jpem9udGFsIFNjcm9sbGVyLTFfEBRNZW51IEl0
3286 ZW0gKFNlcnZpY2VzKV8QFk1lbnUgSXRlbSAoU2hvdyBGb250cylfEBBNZW51IEl0ZW0gKFpvb20pXxAZ
3287 TWVudSBJdGVtIChGaW5kIFByZXZpb3VzKVE3XU1lbnUgKFdpbmRvdynSAA4APgYACeiBAYeg0gAOAD4G
3288 AAnrgQGHoNIADgA+BgAJ7oEBh68QlwZGAGsDUATkBVoGSgM8Az8CwAVQBk0DLQNHA1UCgwNEBk8GUAMr
3289 A08E1gZSAygDSAZTBlQEQgBNAH4D8AO7BAcE9gOxA0kEFQP6AgoAfwNsBJoGYwOnAEECKgTIA0EDWwNG
3290 BHkD3wNKBSYFegRSAzQDTgNUA1EDMgM3A00GbgRvA+gAyAXeAB8FrgZ0BOwDjQVIBngDMQM6BnkEYQOf
3291 AzsDlQPNAzkGfgQqAykGgARRBoIFEQQzAhoDOANFAyoGhgMwBocGiAaJAKoGiwQiAywFBASoA9cAbAWH
3292 A0wFygM2AkQGlAPFBpYCdgNCAzMDLgCxBToEvgabBbwCdQaeBWcGoAM1Az0EhwNLBaEEtgM+AKMDUgal
3293 AhADVganBqgDQANDBZQGqgMvA1MGqwSPgQGcgA6BAXOBATCBAVWBAZ2BAR+BAS+AjoEBUYEBqIDUgQFP
3294 gQGUgIOBAUOBAaqBAa6AyIEBboEBK4EBsoCugQFUgQGegQG/gPeAC4AQgNuAyoDkgQE2gMmBAViA6YDg
3295 gG6AaoCwgQEWgQHYgMSAB4BygQEmgQE5gK+BAUqBAQuA1oEBXIEBRIEBX4D8gPaBAWqBAZGBAXiA7IEB
3296 BoEBZoEB1YEBB4DagBiBAX6AAoEBb4EB6oEBMYC9gQFQgQHlgOiBARWBAe6BAQKAw4EBGoC+gNCBAQ+B
3297 AbiA7oC8gQHhgP2BAc6BAT6A8oCUgQEKgQFIgMKBAbyA44EByYEB3oEB5oBYgQG0gO2AzoEBOoEBG4DV
3298 gKOBAWOBAWKBAXmBAQGAdIEBzYDPgQHagIuBAT2A8YDZgFSBAUuBASGBAfCBAXSAfIEBs4EBWYEBw4D7
3299 gQElgQEQgQFegQFrgQEggQEqgBSBAX2BAdGAloEBl4EB0oEBooEBNYEBQoEBZ4EBuoDfgQGNgQHkgQER
3300 0gAOAD4GAAqIgQGHrxCXCokKigqLCowKjQqOCo8KkAqRCpIKkwqUCpUKlgqXCpgKmQqaCpsKnAqdCp4K
3301 nwqgCqEKogqjCqQKpQqmCqcKqAqpCqoKqwqsCq0KrgqvCrAKsQqyCrMKtAq1CrYKtwq4CrkKugq7CrwK
3302 vQq+Cr8KwArBCsIKwwrECsUKxgrHCsgKyQrKCssKzArNCs4KzwrQCtEK0grTCtQK1QrWCtcK2ArZCtoK
3303 2wrcCt0K3grfCuAK4QriCuMK5ArlCuYK5wroCukK6grrCuwK7QruCu8K8ArxCvIK8wr0CvUK9gr3CvgK
3304 +Qr6CvsK/Ar9Cv4K/wsACwELAgsDCwQLBQsGCwcLCAsJCwoLCwsMCw0LDgsPCxALEQsSCxMLFAsVCxYL
3305 FwsYCxkLGgsbCxwLHQseCx+BAmOBAmSBAmWBAmaBAmeBAmiBAmmBAmqBAmuBAmyBAm2BAm6BAm+BAnCB
3306 AnGBAnKBAnOBAnSBAnWBAnaBAneBAniBAnmBAnqBAnuBAnyBAn2BAn6BAn+BAoCBAoGBAoKBAoOBAoSB
3307 AoWBAoaBAoeBAoiBAomBAoqBAouBAoyBAo2BAo6BAo+BApCBApGBApKBApOBApSBApWBApaBApeBApiB
3308 ApmBApqBApuBApyBAp2BAp6BAp+BAqCBAqGBAqKBAqOBAqSBAqWBAqaBAqeBAqiBAqmBAqqBAquBAqyB
3309 Aq2BAq6BAq+BArCBArGBArKBArOBArSBArWBAraBAreBAriBArmBArqBAruBAryBAr2BAr6BAr+BAsCB
3310 AsGBAsKBAsOBAsSBAsWBAsaBAseBAsiBAsmBAsqBAsuBAsyBAs2BAs6BAs+BAtCBAtGBAtKBAtOBAtSB
3311 AtWBAtaBAteBAtiBAtmBAtqBAtuBAtyBAt2BAt6BAt+BAuCBAuGBAuKBAuOBAuSBAuWBAuaBAueBAuiB
3312 AumBAuqBAuuBAuyBAu2BAu6BAu+BAvCBAvGBAvKBAvOBAvSBAvWBAvaBAveBAviBAvkQkBEBpRDkENEQ
3313 yhEBKxEBaRDxEQGeEH0QfBDpEH8RAawRAZ8Q4hDYENkRAWURAWsQxRDOEQFyEOsQHREBXBBLEQF0EQGk
3314 EGoRAV0QxhDDEQFiEQFsEQFaENsRAZcRAZYQORDPEJUQUREBcxEBmxCREI4QlhD1EIgQ1BEBvBDLEAUT
3315 //////////0RAWoRAWMRAasQwREBbREBuRDwEIIRAaYQbxEBoxEBgREBvhBQEBMQ3BDJEH4QShEBWxDf
3316 EFwRAV8QThDmEMgQzRAlENARASgQ4RBIEQF1EIEQTREBKREBmREBcREBvRBWEN0Q6BA4EFIRAScRAaIQ
3317 2hEBKhDnEDoQzBDEEQG0EIYRAW8QSREBZBEBmBDsENcQUxEBnRBXEQFuEQFoEQGhENIRASwQZxDHEQGc
3318 ENYQcBDTEQF2EQFwEBcQJxEBXhEBWRDgEQGgEQG4EI8RAZoRAbUQgxEBWBDjEQGtEO8Q1RDeEQGoEE8Q
3319 GNIADgA+AGkLuYA0oNIADgA+BgALvIEBh6DSAA4APgYAC7+BAYeg0gA3ADgLwQvCogvCADteTlNJQk9i
3320 amVjdERhdGEACAAZACIAJwAxADoAPwBEAFIAVABmBmYGbAa3Br4GxQbTBuUHAQcPBxsHJwc1B0AHTgdq
3321 B3gHiwedB7cHwQfOB9AH0wfWB9kH3AfeB+EH4wfmB+kH7AfvB/EH8wf2B/kH/Af/CAgIFAgWCBgIJggv
3322 CDgIQwhICFcIYAhzCHwIhwiJCIwIjgi7CMgI1QjrCPkJAwkRCR4JMAlECVAJUglUCVYJWAlaCV8JYQlj
3323 CWUJZwlpCYQJlwmgCb0JzwnaCeMJ7wn7Cf0J/woBCgQKBgoICgoKEwoVChoKHAoeCkcKTwpeCm0Kegp8
3324 Cn4KgAqCCoUKhwqJCosKjAqVCpcKnAqeCqAK2QrjCu8K/QsKCxQLJgs0CzYLOAs6CzwLPQs/C0ELQwtF
3325 C0cLSQtLC00LVgtYC1sLXQt6C3wLfguAC4ILhAuGC48LkQuUC5YLxwvTC9wL6Av2C/gL+gv8C/4MAQwD
3326 DAUMBwwJDAsMDQwWDBgMHwwhDCMMJQxaDGMMbAx2DIAMigyMDI4MkAySDJQMlgyYDJsMnQyfDKEMowyl
3327 DK4MsAyzDLUM6gz8DQYNEw0fDSkNMg09DT8NQQ1DDUUNRw1JDUsNTg1QDVINVA1WDVgNYQ1jDYgNig2M
3328 DY4NkA2SDZQNlg2YDZoNnA2eDaANog2kDaYNqA2qDcYN2w34DhkONQ5bDoEOnw67DtcO9A8MDyYPWg93
3329 D5MPwA/JD9AP3Q/jD/oQDxAZECQQLBA+EEAQQhBLEE0QYhB1EIMQjRCPEJEQkxCVEKIQqxCtEK8QsRC6
3330 EMQQxhDHENAQ1xDpEPIQ+xEXESwRNRE3EToRPBFFEUwRWxFjEWwRcRF6EX8RoBGoEcIR1RHpEgASFRIo
3331 EioSLxIxEjMSNRI3EjkSOxJIElUSWxJdEngSgRKGEo4SmxKjEqUSpxKqErcSvxLBEsYSyBLKEs8S0RLT
3332 EugS9BMCEwQTBhMIEwoTERMvEzwTPhNKE18TYRNjE2UTZxN7E4QTiROWE6MTpROqE6wTrhOzE7UTtxPD
3333 E9AT0hPZE+IT5xP+FAsUExQcFCcULhQ1FEEUWBRwFH0UfxSCFI8UmRSmFKgUqhSyFLsUwBTJFNIU3RUC
3334 FQsVFBUeFSAVIhUkFSYVLxUxFTMVNRU+FVYVYxVsFXcVghWMFbkVxBXGFcgVyhXMFc4V0BXSFdsV5BX/
3335 FhgWIRYqFjcWThZXFl4WaRZwFo0WmRakFq4WuxbHFswWzhbQFtIW1BbWFt4W7xb2Fv0XBhcIFxEXExcW
3336 FyMXLBcxFzgXTRdPF1EXUxdVF2sXeBd6F4gXkReaF6wXuRfAF8kX0hfYGBEYExgVGBcYGRgaGBwYHhgg
3337 GCIYJBgmGC8YMRg0GDYYUxhVGFcYWRhbGF0YXxhoGGoYbRhvGK4YuxjOGNsY3RjfGOEY4xjlGOcY6Rjr
3338 GP4ZABkCGQQZBhkIGREZExkeGSAZIhkkGSYZKBlVGVcZWRlbGV0ZXxlhGWMZZRlnGXAZchl1GXcZzhnw
3339 GfoaBxocGjYaUhptGncagxqVGqQawxrPGtEa0xrcGt4a4BrhGuMa7Br1Gvca+Br6Gvwa/hsAGwkbFBsx
3340 Gz0bPxtBG0MbRRtHG0kbdht4G3obfBt+G4AbghuEG4YbiBuSG5sbpBu4G9Eb0xvVG9cb2RvbG/Ib+xwE
3341 HBIcGxwdHCIcJBwmHE8cXhxrHHYchRyQHJscqBypHKscrRy2HLgcwRzKHMsczRzqHO8c8RzzHPUc9xz5
3342 HQIdDx0RHR0dMh00HTYdOB06HUwdVR1gHXQdlR2jHagdqh2sHa4dsB2yHbUdtx3BHdId1B3dHd8d4h33
3343 Hfkd+x39Hf8eGB4tHi8eMR4zHjUeSB5RHlYeZB6NHo4ekB6SHpsenR6eHqAevR6/HsEewx7FHscezR7u
3344 HvAe8h70HvYe+B76Hw8fER8THxUfFx8hHy4fMB81Hz4fSR9hH4YfiB+KH4wfjh+QH5IflB+dH7Yf3x/h
3345 H+Mf5R/nH+kf6x/tH/YgDiAXIBkgHCAeIDQgTSBkIH0gmiCcIJ4goCCiIKQgriC7IL0g1iD5IQIhCyEX
3346 IUAhSyFWIWAhbSFvIXEhcyF8IYUhiCGKIY0hjyGRIZYhmCGhIaYhsSHJIdIh2yHxIfwiFCInIjAiNSJI
3347 IlEiUyK0IrYiuCK6IrwiviLAIsIixCLGIsgiyiLMIs4i0CLTItYi2SLcIt8i4iLlIugi6yLuIvEi9CL3
3348 Ivoi/SMAIwMjBiMJIwwjDyMSIxUjGCMbIx4jISMkIycjKiMtIzAjMyNAI0kjUSNTI1UjVyN4I4AjlCOf
3349 I60jtyPEI8sjzSPPI9Qj1iPbI90j3yPhI/Ij/iQBJAQkByQKJBMkICQvJDEkMyQ1JD0kTyRYJF0kcCR9
3350 JH8kgSSDJJYknySkJK8kyCTRJNgk8CT/JQwlDiUQJRIlMyU1JTclOSU7JT0lPyVMJU8lUiVVJWQlZiV1
3351 JYIlhCWGJYglqSWrJa0lryWxJbMltSXCJcUlyCXLJdgl2iXhJe4l8CXyJfQmGSYfJiEmIyYoJiomLCYu
3352 JjAmPSZAJkMmRiZSJlQmdCaBJoMmhSaHJqgmqiasJq4msCayJrQmwSbEJscmyibPJtEm1ybkJuYm6Cbq
3353 JwsnDScPJxEnEycVJxcnJCcnJyonLSc8J0snWCdaJ1wnXid/J4EngyeFJ4cniSeLJ5gnmyeeJ6EnuCe6
3354 J8Qn0SfTJ9Un1yf4J/on/Cf+KAAoAigEKCIoQyhQKFIoVChWKHcoeSh7KH0ofyiBKIMojiiQKJsoqCiq
3355 KKworijPKNEo0yjVKNco2SjbKPkpEikfKSEpIyklKUYpSClKKUwpTilQKVIpXyliKWUpaCmPKbEpvinA
3356 KcIpxCnlKecp6SnuKfAp8in0KfYqAyoFKhsqKCoqKiwqLipPKlEqUypVKlcqWSpbKmAqYipwKoEqjyqS
3357 KpQqliqYKqEqoyqlKq4qsCqyKs8q2CrhKugq/ysMKw4rESsUKzkrOys+K0ErQytFK0crVCtWK3oriyuO
3358 K5ErkyuWK58roSukK70r0SveK+Ar4yvmLAcsCSwMLA8sESwTLBUsLCwuLDksRixILEssTixvLHEsdCx3
3359 LHkseyx+LI8skiyVLJgsmyykLKYsvCzJLMsszizRLPIs9Cz3LPos/Cz+LQAtBS0HLQ0tGi0cLR8tIi1D
3360 LUUtSC1LLU0tTy1RLW4tcC2CLY8tkS2ULZctuC26Lb0twC3CLcQtxy3ULdct2i3dLekt6y4DLhAuEi4V
3361 LhguOS47Lj4uQS5DLkUuRy5TLlUubi57Ln0ugC6DLqQupi6pLqwuri6wLrIuty65Lr8uzC7OLtEu1C75
3362 Lvsu/i8BLwMvBS8ILxUvGC8bLx4vKS8rL0UvUi9UL1cvWi97L30vgC+CL4Qvhi+IL5YvpC+1L7cvuS+8
3363 L78v3C/eL+Ev4y/lL+cv6TABMCEwLjAwMDMwNjBbMGUwZzBpMGwwbzBxMHMwdTCDMIUwlDClMKgwqzCt
3364 MK8wvDC+MMEwxDDlMOcw6jDtMO8w8TDzMPkw+zECMRMxFjEYMRoxHTE1MUIxRDFHMUoxazFtMXAxczF1
3365 MXcxejGOMZAxsDG9Mb8xwjHFMeYx6DHrMe0x7zHxMfQyBTIIMgsyDjIRMhwyNDJBMkMyRjJJMmoybDJv
3366 MnEyczJ1MncyfjKGMpMylTKYMpsyuDK6Mr0yvzLBMsMyxTLXMvAzATMEMwYzCTMMMxUzIjMkMyczKjNL
3367 M00zUDNSM1QzVjNZM24zgDONM48zkjOVM7YzuDO7M74zwDPCM8Qz2zPhM+4z8DPzM/Y0FzQZNBw0HjQg
3368 NCI0JTQqNDc0RDRGNEk0TDRxNHM0djR5NHs0fTR/NJI0rTS6NLw0vzTCNOM05TToNOs07TTvNPE1AjUE
3369 NRY1IzUlNSg1KzVMNU41UTVUNVY1WDVaNV41YDVlNXI1dDV3NXo1mzWdNaA1ozWlNac1qTWvNbE1vzXc
3370 NeY18DYPNhI2FDYXNho2HTYgNk02ajaBNo42mTaoNrc23Db3NxA3JDclNyg3KTcsNy03MDczNzQ3NTc2
3371 Nzk3QjdEN0s3TjdRN1Q3WTddN2M3bDdvN3I3dTeGN4w3lzejN6Y3qTesN603tje/N8Q31zfgN+U37jf5
3372 OBI4Jjg7OEg4dDiGOKE4qjixOMk45jjpOOw47zjyOPU4+DkUOSg5LzlMOU85UjlVOVg5WjldOXw5lDmx
3373 ObQ5tzm6Ob05vznCOd859ToSOhU6GDobOh46IDojOj86RzpaOmM6Zjs3Ozo7PDs/O0I7RTtHO0o7TTtP
3374 O1I7VTtYO1s7XjthO2M7ZTtnO2k7azttO3A7cjt0O3Y7eDt6O3w7fzuCO4Q7hjuIO4s7jTuQO5I7lTuY
3375 O5o7nTugO6I7pDunO6o7rTuwO7I7tTu4O7s7vjvAO8I7xDvHO8k7zDvOO9E71DvWO9g72zveO+E75Dvm
3376 O+k76zvuO/E78zv1O/g7+zv9PAA8AjwFPAc8CTwMPA88EjwVPBc8GjwdPCA8IzwmPCk8KzwuPDA8Mzw2
3377 PDk8PDw/PEI8azx5PIY8iDyKPIs8jTyOPJA8kjyUPL08xzzJPMw8zzzRPNM81TzYPNs87DzvPPI89Tz4
3378 PP89Dj0XPRk9Hj0hPSQ9RT1HPUo9TD1OPVA9Uz1ePWc9bD14PYE9gz2GPYk9oj3LPc090D3TPdU91z3Z
3379 Pds93j4HPgk+Cz4OPhA+Ej4UPhY+GT4wPjk+Oz5EPkc+ST5LPk0+dj54Pno+fT5/PoE+gz6GPok+jj6X
3380 Ppk+tD63Prk+vD6/PsI+xT7IPso+zT7QPtM+1j7ZPwI/BD8GPwc/CT8KPww/Dj8QPzk/Oz89Pz4/QD9B
3381 P0M/RT9HP3A/cj91P3g/ej98P34/gD+DP4g/kT+TP54/oT+kP6c/qj+tP9I/1D/XP9o/3D/eP+E/60AQ
3382 QBJAFUAXQBlAG0AeQCxAUUBTQFZAWUBbQF1AYEBiQHtAfUCmQKhAqkCtQK9AsUCzQLVAuEDGQM9A0UDY
3383 QNtA3kDgQQlBC0ENQRBBEkEUQRZBGEEbQSJBK0EtQTJBNEE3QUFBSkFMQVtBXkFhQWRBZ0FqQW1BcEGZ
3384 QZtBnUGgQaJBpEGmQalBrEG+QcdByUHgQeNB5kHpQexB70HyQfVB+EH6Qf1CAEIpQitCLUIuQjBCMUIz
3385 QjVCN0JYQlpCXUJgQmJCZEJmQn9CgUKqQqxCrkKvQrFCskK0QrZCuELhQuNC5kLpQutC7ULvQvFC9EL9
3386 Qw5DEUMUQxdDGkMjQyVDJkM4Q2FDY0NlQ2ZDaENpQ2tDbUNvQ3xDpUOnQ6lDrEOuQ7BDskO1Q7hDvUPG
3387 Q8hD30PiQ+VD6EPrQ+5D8EPzQ/ZD+UP8Q/5EH0QhRCREJ0QpRCtELUQxRDNEVERWRFlEXEReRGBEYkRt
3388 RG9EmESaRJxEnUSfRKBEokSkRKZEz0TRRNNE1ETWRNdE2UTbRN1FBkUIRQpFDUUPRRFFE0UWRRlFHkUn
3389 RSlFLkUwRTJFW0VdRWBFY0VlRWdFaUVsRW9FdkV/RYFFikWNRZBFk0WWRb9FwUXDRcRFxkXHRclFy0XO
3390 Rd1GBkYIRgpGDUYPRhFGE0YWRhlGHkYnRilGLEYuRjpGQ0ZGRxdHGUcbRx5HIEcjRyVHKEcqRyxHLkcx
3391 RzNHNUc3RzlHO0c9Rz9HQkdFR0dHSUdLR01HT0dRR1NHVkdYR1pHXUdfR2FHY0dlR2dHakdsR29HcUd0
3392 R3ZHeEd6R3xHfkeBR4RHhkeJR4tHjkeQR5JHlUeYR5tHnkegR6JHpEemR6hHqketR7BHske1R7dHuUe7
3393 R71Hv0fBR8NHxUfHR8lHy0fNR9BH0kfUR9dH2kfdR99H4UfjR+VH50fqR+xH70fxR/NH9Uf3R/pH/UgA
3394 SAJIBUgOSBFI5EjmSOlI7EjvSPJI9Ej3SPpI/Ej/SQJJBUkISQtJDkkQSRJJFEkWSRhJGkkdSR9JIUkj
3395 SSVJJ0kpSStJLUkwSTNJNUk4STpJPUk/SUJJRUlHSUpJTUlPSVFJVElWSVlJXElfSWJJZElnSWpJbUlv
3396 SXFJc0l1SXhJe0l9SYBJg0mFSYdJikmNSZBJk0mVSZhJmkmdSZ9JokmkSadJqkmsSa9JsUm0SbZJuEm7
3397 Sb5JwUnEScZJyUnMSc9J0knVSdhJ2kndSd9J4knlSehJ60nuSfFJ+kn9StBK00rWStlK3ErfSuJK5Uro
3398 SutK7krxSvRK90r6Sv1LAEsDSwZLCUsMSw9LEksVSxhLG0seSyFLJEsnSypLLUswSzNLNks5SzxLP0tC
3399 S0VLSEtLS05LUUtUS1dLWktdS2BLY0tmS2lLbEtvS3JLdUt4S3tLfkuBS4RLhkuJS4xLj0uSS5VLmEub
3400 S55LoUukS6dLqkutS7BLs0u2S7lLvEu/S8JLxUvIS8tLzkvRS9RL10vaS91L4EvjS+ZL6UvsS+9L8kv1
3401 S/hL+0v+TAFMBEwHTBJMHkxDTFhMbUyLTKBMukzaTP1NEE0jTS1NNk1STV9NYU1vTXFNiE2hTb1N104B
3402 Tg9OOU5LTmROgE6MTp9Oq07KTuRO+08ATw5PIk9DT09PYU97T55PqE/ET9FP00/oT+xP+FAVUC5QOlBV
3403 UFdQdVCBUI1QpVDKUM5Q0FDrUQFRJlFEUVdRWVFvUYJRwVHlUfJSKVJGUmlSbVKBUo1SoFKzUspS3lLs
3404 UwxTDlMgUzpTRlNJU15TdVOUU65TulPGU95T9VQOVCFUPVQ/VE1UVlRZVFpUY1RmVGdUcFRzVaRVp1Wp
3405 VaxVr1WyVbVVuFW7Vb1VwFXDVcVVyFXLVc1V0FXTVdZV2FXbVd5V4VXjVeZV6VXsVe5V8FXyVfRV9lX4
3406 VftV/VYAVgJWBFYGVghWClYNVhBWElYUVhZWGVYcVh5WIVYkViZWKVYsVi9WMVYzVjZWOVY8Vj5WQVZE
3407 VkdWSlZMVk5WUVZTVlZWWVZcVl5WYVZkVmZWaVZsVm9WcVZ0VnZWeFZ7Vn5WgFaCVoVWh1aKVo1Wj1aR
3408 VpRWl1aZVpxWnlahVqRWp1apVqxWrlawVrNWtla4VrpWvVbAVsNWxlbIVstWzVbQVtJW1VbXVtlW21be
3409 VuFW5FbnVulW7FbvVvJW9Fb3VvpW/VcAVwNXBlcIVwtXDlcQVxNXFlcZVxxXH1ciVyVXJ1cqVy1XMFc5
3410 VzxYbVhwWHNYdlh5WHxYf1iCWIVYiFiLWI5YkViUWJdYmlidWKBYo1imWKlYrFivWLJYtVi4WLtYvljB
3411 WMRYx1jKWM1Y0FjTWNZY2VjcWN9Y4ljlWOhY61juWPFY9Fj3WPpY/VkAWQNZBlkJWQxZD1kSWRVZGFkb
3412 WR5ZIVkkWSdZKlktWTBZM1k2WTlZPFk/WUJZRVlIWUtZTllRWVRZV1laWV1ZYFljWWZZaVlsWW9Zcll1
3413 WXhZe1l+WYFZhFmHWYpZjVmQWZNZllmZWZxZn1miWaVZqFmrWa5ZsVm0WbdZulm9WcBZw1nGWclZzFnP
3414 WdJZ1VnYWdtZ3lnhWeRZ51nqWe1Z8FnzWfZZ+Vn8Wf9aAloFWghaC1oOWhFaFFoXWhpaHVogWiNaJlop
3415 WixaL1oyWjRaN1o5WjtaPVpAWkNaRVpIWkpaTFpOWlBaU1pWWlhaWlpcWl9aYlpkWmZaaVprWm1acFpy
3416 WnVaeFp6Wn1af1qBWoRah1qKWoxaj1qSWpRallqYWppanVqgWqJapFqmWqhaqlqsWq9asVqzWrxav1rC
3417 WsVax1rKWs1az1rRWtRa1lrZWtxa31rhWuNa5VrnWula61ruWvBa8lr1Wvda+Vr7Wv1a/1sBWwRbBlsI
3418 WwtbDVsPWxJbFVsYWxtbHVsfWyFbI1slWyhbK1stWzBbMls0WzZbOFs7Wz1bQFtCW0VbSFtKW0xbTltR
3419 W1NbVltZW1xbXlthW2NbZVtoW2pbbFtuW3FbdFt2W3hbe1t+W4Bbg1uGW4hbi1uOW5Bbk1uVW5hbmluc
3420 W55boVujW6VbrluwW7Fbulu9W75bx1vKW8tb1FvZAAAAAAAAAgIAAAAAAAALwwAAAAAAAAAAAAAAAAAA
3421 W+g</bytes>
3421 3422 </object>
3422 3423 </data>
3423 3424 </archive>
@@ -1,407 +1,400
1 1 # encoding: utf-8
2 2 # -*- test-case-name: IPython.frontend.tests.test_frontendbase -*-
3 3 """
4 4 frontendbase provides an interface and base class for GUI frontends for
5 5 IPython.kernel/IPython.kernel.core.
6 6
7 7 Frontend implementations will likely want to subclass FrontEndBase.
8 8
9 9 Author: Barry Wark
10 10 """
11 11 __docformat__ = "restructuredtext en"
12 12
13 13 #-------------------------------------------------------------------------------
14 14 # Copyright (C) 2008 The IPython Development Team
15 15 #
16 16 # Distributed under the terms of the BSD License. The full license is in
17 17 # the file COPYING, distributed as part of this software.
18 18 #-------------------------------------------------------------------------------
19 19
20 20 #-------------------------------------------------------------------------------
21 21 # Imports
22 22 #-------------------------------------------------------------------------------
23 23 import string
24 24 import uuid
25 25 import _ast
26 26
27 27 try:
28 28 from zope.interface import Interface, Attribute, implements, classProvides
29 29 except ImportError:
30 30 #zope.interface is not available
31 31 Interface = object
32 32 def Attribute(name, doc): pass
33 33 def implements(interface): pass
34 34 def classProvides(interface): pass
35 35
36 36 from IPython.kernel.core.history import FrontEndHistory
37 37 from IPython.kernel.core.util import Bunch
38 38 from IPython.kernel.engineservice import IEngineCore
39 39
40 try:
41 from twisted.python.failure import Failure
42 except ImportError:
43 #Twisted not available
44 Failure = Exception
45 40
46 41 ##############################################################################
47 42 # TEMPORARY!!! fake configuration, while we decide whether to use tconfig or
48 43 # not
49 44
50 45 rc = Bunch()
51 46 rc.prompt_in1 = r'In [$number]: '
52 47 rc.prompt_in2 = r'...'
53 48 rc.prompt_out = r'Out [$number]: '
54 49
55 50 ##############################################################################
56 51
57 52 class IFrontEndFactory(Interface):
58 53 """Factory interface for frontends."""
59 54
60 55 def __call__(engine=None, history=None):
61 56 """
62 57 Parameters:
63 58 interpreter : IPython.kernel.engineservice.IEngineCore
64 59 """
65 60
66 61 pass
67 62
68 63
69 64
70 65 class IFrontEnd(Interface):
71 66 """Interface for frontends. All methods return t.i.d.Deferred"""
72 67
73 68 Attribute("input_prompt_template", "string.Template instance\
74 69 substituteable with execute result.")
75 70 Attribute("output_prompt_template", "string.Template instance\
76 71 substituteable with execute result.")
77 72 Attribute("continuation_prompt_template", "string.Template instance\
78 73 substituteable with execute result.")
79 74
80 75 def update_cell_prompt(result, blockID=None):
81 76 """Subclass may override to update the input prompt for a block.
82 77 Since this method will be called as a
83 78 twisted.internet.defer.Deferred's callback/errback,
84 79 implementations should return result when finished.
85 80
86 81 Result is a result dict in case of success, and a
87 82 twisted.python.util.failure.Failure in case of an error
88 83 """
89 84
90 85 pass
91 86
92 87
93 88 def render_result(result):
94 89 """Render the result of an execute call. Implementors may choose the
95 90 method of rendering.
96 91 For example, a notebook-style frontend might render a Chaco plot
97 92 inline.
98 93
99 94 Parameters:
100 95 result : dict (result of IEngineBase.execute )
101 96 blockID = result['blockID']
102 97
103 98 Result:
104 99 Output of frontend rendering
105 100 """
106 101
107 102 pass
108 103
109 104 def render_error(failure):
110 105 """Subclasses must override to render the failure. Since this method
111 106 will be called as a twisted.internet.defer.Deferred's callback,
112 107 implementations should return result when finished.
113 108
114 109 blockID = failure.blockID
115 110 """
116 111
117 112 pass
118 113
119 114
120 115 def input_prompt(number=''):
121 116 """Returns the input prompt by subsituting into
122 117 self.input_prompt_template
123 118 """
124 119 pass
125 120
126 121 def output_prompt(number=''):
127 122 """Returns the output prompt by subsituting into
128 123 self.output_prompt_template
129 124 """
130 125
131 126 pass
132 127
133 128 def continuation_prompt():
134 129 """Returns the continuation prompt by subsituting into
135 130 self.continuation_prompt_template
136 131 """
137 132
138 133 pass
139 134
140 135 def is_complete(block):
141 136 """Returns True if block is complete, False otherwise."""
142 137
143 138 pass
144 139
145 140 def compile_ast(block):
146 141 """Compiles block to an _ast.AST"""
147 142
148 143 pass
149 144
150 145
151 146 def get_history_previous(currentBlock):
152 147 """Returns the block previous in the history. Saves currentBlock if
153 148 the history_cursor is currently at the end of the input history"""
154 149 pass
155 150
156 151 def get_history_next():
157 152 """Returns the next block in the history."""
158 153
159 154 pass
160 155
161 156
162 157 class FrontEndBase(object):
163 158 """
164 159 FrontEndBase manages the state tasks for a CLI frontend:
165 160 - Input and output history management
166 161 - Input/continuation and output prompt generation
167 162
168 163 Some issues (due to possibly unavailable engine):
169 164 - How do we get the current cell number for the engine?
170 165 - How do we handle completions?
171 166 """
172 167
173 168 history_cursor = 0
174 169
175 170 current_indent_level = 0
176 171
177 172
178 173 input_prompt_template = string.Template(rc.prompt_in1)
179 174 output_prompt_template = string.Template(rc.prompt_out)
180 175 continuation_prompt_template = string.Template(rc.prompt_in2)
181 176
182 177 def __init__(self, shell=None, history=None):
183 178 self.shell = shell
184 179 if history is None:
185 180 self.history = FrontEndHistory(input_cache=[''])
186 181 else:
187 182 self.history = history
188 183
189 184
190 185 def input_prompt(self, number=''):
191 186 """Returns the current input prompt
192 187
193 188 It would be great to use ipython1.core.prompts.Prompt1 here
194 189 """
195 190 return self.input_prompt_template.safe_substitute({'number':number})
196 191
197 192
198 193 def continuation_prompt(self):
199 194 """Returns the current continuation prompt"""
200 195
201 196 return self.continuation_prompt_template.safe_substitute()
202 197
203 198 def output_prompt(self, number=''):
204 199 """Returns the output prompt for result"""
205 200
206 201 return self.output_prompt_template.safe_substitute({'number':number})
207 202
208 203
209 204 def is_complete(self, block):
210 205 """Determine if block is complete.
211 206
212 207 Parameters
213 208 block : string
214 209
215 210 Result
216 211 True if block can be sent to the engine without compile errors.
217 212 False otherwise.
218 213 """
219 214
220 215 try:
221 216 ast = self.compile_ast(block)
222 217 except:
223 218 return False
224 219
225 220 lines = block.split('\n')
226 221 return (len(lines)==1 or str(lines[-1])=='')
227 222
228 223
229 224 def compile_ast(self, block):
230 225 """Compile block to an AST
231 226
232 227 Parameters:
233 228 block : str
234 229
235 230 Result:
236 231 AST
237 232
238 233 Throws:
239 234 Exception if block cannot be compiled
240 235 """
241 236
242 237 return compile(block, "<string>", "exec", _ast.PyCF_ONLY_AST)
243 238
244 239
245 240 def execute(self, block, blockID=None):
246 241 """Execute the block and return the result.
247 242
248 243 Parameters:
249 244 block : {str, AST}
250 245 blockID : any
251 246 Caller may provide an ID to identify this block.
252 247 result['blockID'] := blockID
253 248
254 249 Result:
255 250 Deferred result of self.interpreter.execute
256 251 """
257 252
258 253 if(not self.is_complete(block)):
259 254 raise Exception("Block is not compilable")
260 255
261 256 if(blockID == None):
262 257 blockID = uuid.uuid4() #random UUID
263 258
264 259 try:
265 260 result = self.shell.execute(block)
266 261 except Exception,e:
267 262 e = self._add_block_id_for_failure(e, blockID=blockID)
268 263 e = self.update_cell_prompt(e, blockID=blockID)
269 264 e = self.render_error(e)
270 265 else:
271 266 result = self._add_block_id_for_result(result, blockID=blockID)
272 267 result = self.update_cell_prompt(result, blockID=blockID)
273 268 result = self.render_result(result)
274 269
275 270 return result
276 271
277 272
278 273 def _add_block_id_for_result(self, result, blockID):
279 274 """Add the blockID to result or failure. Unfortunatley, we have to
280 275 treat failures differently than result dicts.
281 276 """
282 277
283 278 result['blockID'] = blockID
284 279
285 280 return result
286 281
287 282 def _add_block_id_for_failure(self, failure, blockID):
288 283 """_add_block_id_for_failure"""
289
290 284 failure.blockID = blockID
291 285 return failure
292 286
293 287
294 288 def _add_history(self, result, block=None):
295 289 """Add block to the history"""
296 290
297 291 assert(block != None)
298 292 self.history.add_items([block])
299 293 self.history_cursor += 1
300 294
301 295 return result
302 296
303 297
304 298 def get_history_previous(self, currentBlock):
305 299 """ Returns previous history string and decrement history cursor.
306 300 """
307 301 command = self.history.get_history_item(self.history_cursor - 1)
308 302
309 303 if command is not None:
310 304 if(self.history_cursor == len(self.history.input_cache)):
311 305 self.history.input_cache[self.history_cursor] = currentBlock
312 306 self.history_cursor -= 1
313 307 return command
314 308
315 309
316 310 def get_history_next(self):
317 311 """ Returns next history string and increment history cursor.
318 312 """
319 313 command = self.history.get_history_item(self.history_cursor+1)
320 314
321 315 if command is not None:
322 316 self.history_cursor += 1
323 317 return command
324 318
325 319 ###
326 320 # Subclasses probably want to override these methods...
327 321 ###
328 322
329 323 def update_cell_prompt(self, result, blockID=None):
330 324 """Subclass may override to update the input prompt for a block.
331 325 Since this method will be called as a
332 326 twisted.internet.defer.Deferred's callback, implementations should
333 327 return result when finished.
334 328 """
335 329
336 330 return result
337 331
338 332
339 333 def render_result(self, result):
340 334 """Subclasses must override to render result. Since this method will
341 335 be called as a twisted.internet.defer.Deferred's callback,
342 336 implementations should return result when finished.
343 337 """
344 338
345 339 return result
346 340
347 341
348 342 def render_error(self, failure):
349 343 """Subclasses must override to render the failure. Since this method
350 344 will be called as a twisted.internet.defer.Deferred's callback,
351 345 implementations should return result when finished.
352 346 """
353 347
354 348 return failure
355 349
356 350
357 351
358 352 class AsyncFrontEndBase(FrontEndBase):
359 353 """
360 354 Overrides FrontEndBase to wrap execute in a deferred result.
361 355 All callbacks are made as callbacks on the deferred result.
362 356 """
363 357
364 358 implements(IFrontEnd)
365 359 classProvides(IFrontEndFactory)
366 360
367 361 def __init__(self, engine=None, history=None):
368 362 assert(engine==None or IEngineCore.providedBy(engine))
369 363 self.engine = IEngineCore(engine)
370 364 if history is None:
371 365 self.history = FrontEndHistory(input_cache=[''])
372 366 else:
373 367 self.history = history
374 368
375 369
376 370 def execute(self, block, blockID=None):
377 371 """Execute the block and return the deferred result.
378 372
379 373 Parameters:
380 374 block : {str, AST}
381 375 blockID : any
382 376 Caller may provide an ID to identify this block.
383 377 result['blockID'] := blockID
384 378
385 379 Result:
386 380 Deferred result of self.interpreter.execute
387 381 """
388 382
389 383 if(not self.is_complete(block)):
384 from twisted.python.failure import Failure
390 385 return Failure(Exception("Block is not compilable"))
391 386
392 387 if(blockID == None):
393 388 blockID = uuid.uuid4() #random UUID
394 389
395 390 d = self.engine.execute(block)
396 391 d.addCallback(self._add_history, block=block)
397 d.addCallbacks(self._add_block_id_for_result,
398 errback=self._add_block_id_for_failure,
399 callbackArgs=(blockID,),
400 errbackArgs=(blockID,))
392 d.addCallback(self._add_block_id_for_result, blockID)
393 d.addErrback(self._add_block_id_for_failure, blockID)
401 394 d.addBoth(self.update_cell_prompt, blockID=blockID)
402 395 d.addCallbacks(self.render_result,
403 396 errback=self.render_error)
404 397
405 398 return d
406 399
407 400
@@ -1,878 +1,903
1 1 # encoding: utf-8
2 2 # -*- test-case-name: IPython.kernel.tests.test_engineservice -*-
3 3
4 4 """A Twisted Service Representation of the IPython core.
5 5
6 6 The IPython Core exposed to the network is called the Engine. Its
7 7 representation in Twisted in the EngineService. Interfaces and adapters
8 8 are used to abstract out the details of the actual network protocol used.
9 9 The EngineService is an Engine that knows nothing about the actual protocol
10 10 used.
11 11
12 12 The EngineService is exposed with various network protocols in modules like:
13 13
14 14 enginepb.py
15 15 enginevanilla.py
16 16
17 17 As of 12/12/06 the classes in this module have been simplified greatly. It was
18 18 felt that we had over-engineered things. To improve the maintainability of the
19 19 code we have taken out the ICompleteEngine interface and the completeEngine
20 20 method that automatically added methods to engines.
21 21
22 22 """
23 23
24 24 __docformat__ = "restructuredtext en"
25 25
26 26 #-------------------------------------------------------------------------------
27 27 # Copyright (C) 2008 The IPython Development Team
28 28 #
29 29 # Distributed under the terms of the BSD License. The full license is in
30 30 # the file COPYING, distributed as part of this software.
31 31 #-------------------------------------------------------------------------------
32 32
33 33 #-------------------------------------------------------------------------------
34 34 # Imports
35 35 #-------------------------------------------------------------------------------
36 36
37 37 import os, sys, copy
38 38 import cPickle as pickle
39 39 from new import instancemethod
40 40
41 41 from twisted.application import service
42 42 from twisted.internet import defer, reactor
43 43 from twisted.python import log, failure, components
44 44 import zope.interface as zi
45 45
46 46 from IPython.kernel.core.interpreter import Interpreter
47 47 from IPython.kernel import newserialized, error, util
48 48 from IPython.kernel.util import printer
49 49 from IPython.kernel.twistedutil import gatherBoth, DeferredList
50 50 from IPython.kernel import codeutil
51 51
52 52
53 53 #-------------------------------------------------------------------------------
54 54 # Interface specification for the Engine
55 55 #-------------------------------------------------------------------------------
56 56
57 57 class IEngineCore(zi.Interface):
58 58 """The minimal required interface for the IPython Engine.
59 59
60 60 This interface provides a formal specification of the IPython core.
61 61 All these methods should return deferreds regardless of what side of a
62 62 network connection they are on.
63 63
64 64 In general, this class simply wraps a shell class and wraps its return
65 65 values as Deferred objects. If the underlying shell class method raises
66 66 an exception, this class should convert it to a twisted.failure.Failure
67 67 that will be propagated along the Deferred's errback chain.
68 68
69 69 In addition, Failures are aggressive. By this, we mean that if a method
70 70 is performing multiple actions (like pulling multiple object) if any
71 71 single one fails, the entire method will fail with that Failure. It is
72 72 all or nothing.
73 73 """
74 74
75 75 id = zi.interface.Attribute("the id of the Engine object")
76 76 properties = zi.interface.Attribute("A dict of properties of the Engine")
77 77
78 78 def execute(lines):
79 79 """Execute lines of Python code.
80 80
81 81 Returns a dictionary with keys (id, number, stdin, stdout, stderr)
82 82 upon success.
83 83
84 84 Returns a failure object if the execution of lines raises an exception.
85 85 """
86 86
87 87 def push(namespace):
88 88 """Push dict namespace into the user's namespace.
89 89
90 90 Returns a deferred to None or a failure.
91 91 """
92 92
93 93 def pull(keys):
94 94 """Pulls values out of the user's namespace by keys.
95 95
96 96 Returns a deferred to a tuple objects or a single object.
97 97
98 98 Raises NameError if any one of objects doess not exist.
99 99 """
100 100
101 101 def push_function(namespace):
102 102 """Push a dict of key, function pairs into the user's namespace.
103 103
104 104 Returns a deferred to None or a failure."""
105 105
106 106 def pull_function(keys):
107 107 """Pulls functions out of the user's namespace by keys.
108 108
109 109 Returns a deferred to a tuple of functions or a single function.
110 110
111 111 Raises NameError if any one of the functions does not exist.
112 112 """
113 113
114 114 def get_result(i=None):
115 115 """Get the stdin/stdout/stderr of command i.
116 116
117 117 Returns a deferred to a dict with keys
118 118 (id, number, stdin, stdout, stderr).
119 119
120 120 Raises IndexError if command i does not exist.
121 121 Raises TypeError if i in not an int.
122 122 """
123 123
124 124 def reset():
125 125 """Reset the shell.
126 126
127 127 This clears the users namespace. Won't cause modules to be
128 128 reloaded. Should also re-initialize certain variables like id.
129 129 """
130 130
131 131 def kill():
132 132 """Kill the engine by stopping the reactor."""
133 133
134 134 def keys():
135 135 """Return the top level variables in the users namspace.
136 136
137 137 Returns a deferred to a dict."""
138 138
139 139
140 140 class IEngineSerialized(zi.Interface):
141 141 """Push/Pull methods that take Serialized objects.
142 142
143 143 All methods should return deferreds.
144 144 """
145 145
146 146 def push_serialized(namespace):
147 147 """Push a dict of keys and Serialized objects into the user's namespace."""
148 148
149 149 def pull_serialized(keys):
150 150 """Pull objects by key from the user's namespace as Serialized.
151 151
152 152 Returns a list of or one Serialized.
153 153
154 154 Raises NameError is any one of the objects does not exist.
155 155 """
156 156
157 157
158 158 class IEngineProperties(zi.Interface):
159 159 """Methods for access to the properties object of an Engine"""
160 160
161 161 properties = zi.Attribute("A StrictDict object, containing the properties")
162 162
163 163 def set_properties(properties):
164 164 """set properties by key and value"""
165 165
166 166 def get_properties(keys=None):
167 167 """get a list of properties by `keys`, if no keys specified, get all"""
168 168
169 169 def del_properties(keys):
170 170 """delete properties by `keys`"""
171 171
172 172 def has_properties(keys):
173 173 """get a list of bool values for whether `properties` has `keys`"""
174 174
175 175 def clear_properties():
176 176 """clear the properties dict"""
177 177
178 178 class IEngineBase(IEngineCore, IEngineSerialized, IEngineProperties):
179 179 """The basic engine interface that EngineService will implement.
180 180
181 181 This exists so it is easy to specify adapters that adapt to and from the
182 182 API that the basic EngineService implements.
183 183 """
184 184 pass
185 185
186 186 class IEngineQueued(IEngineBase):
187 187 """Interface for adding a queue to an IEngineBase.
188 188
189 189 This interface extends the IEngineBase interface to add methods for managing
190 190 the engine's queue. The implicit details of this interface are that the
191 191 execution of all methods declared in IEngineBase should appropriately be
192 192 put through a queue before execution.
193 193
194 194 All methods should return deferreds.
195 195 """
196 196
197 197 def clear_queue():
198 198 """Clear the queue."""
199 199
200 200 def queue_status():
201 201 """Get the queued and pending commands in the queue."""
202 202
203 203 def register_failure_observer(obs):
204 204 """Register an observer of pending Failures.
205 205
206 206 The observer must implement IFailureObserver.
207 207 """
208 208
209 209 def unregister_failure_observer(obs):
210 210 """Unregister an observer of pending Failures."""
211 211
212 212
213 213 class IEngineThreaded(zi.Interface):
214 214 """A place holder for threaded commands.
215 215
216 216 All methods should return deferreds.
217 217 """
218 218 pass
219 219
220 220
221 221 #-------------------------------------------------------------------------------
222 222 # Functions and classes to implement the EngineService
223 223 #-------------------------------------------------------------------------------
224 224
225 225
226 226 class StrictDict(dict):
227 227 """This is a strict copying dictionary for use as the interface to the
228 228 properties of an Engine.
229 229
230 230 :IMPORTANT:
231 231 This object copies the values you set to it, and returns copies to you
232 232 when you request them. The only way to change properties os explicitly
233 233 through the setitem and getitem of the dictionary interface.
234 234
235 235 Example:
236 236 >>> e = get_engine(id)
237 237 >>> L = [1,2,3]
238 238 >>> e.properties['L'] = L
239 239 >>> L == e.properties['L']
240 240 True
241 241 >>> L.append(99)
242 242 >>> L == e.properties['L']
243 243 False
244 244
245 245 Note that getitem copies, so calls to methods of objects do not affect
246 246 the properties, as seen here:
247 247
248 248 >>> e.properties[1] = range(2)
249 249 >>> print e.properties[1]
250 250 [0, 1]
251 251 >>> e.properties[1].append(2)
252 252 >>> print e.properties[1]
253 253 [0, 1]
254 254 """
255 255 def __init__(self, *args, **kwargs):
256 256 dict.__init__(self, *args, **kwargs)
257 257 self.modified = True
258 258
259 259 def __getitem__(self, key):
260 260 return copy.deepcopy(dict.__getitem__(self, key))
261 261
262 262 def __setitem__(self, key, value):
263 263 # check if this entry is valid for transport around the network
264 264 # and copying
265 265 try:
266 266 pickle.dumps(key, 2)
267 267 pickle.dumps(value, 2)
268 268 newvalue = copy.deepcopy(value)
269 269 except:
270 270 raise error.InvalidProperty(value)
271 271 dict.__setitem__(self, key, newvalue)
272 272 self.modified = True
273 273
274 274 def __delitem__(self, key):
275 275 dict.__delitem__(self, key)
276 276 self.modified = True
277 277
278 278 def update(self, dikt):
279 279 for k,v in dikt.iteritems():
280 280 self[k] = v
281 281
282 282 def pop(self, key):
283 283 self.modified = True
284 284 return dict.pop(self, key)
285 285
286 286 def popitem(self):
287 287 self.modified = True
288 288 return dict.popitem(self)
289 289
290 290 def clear(self):
291 291 self.modified = True
292 292 dict.clear(self)
293 293
294 294 def subDict(self, *keys):
295 295 d = {}
296 296 for key in keys:
297 297 d[key] = self[key]
298 298 return d
299 299
300 300
301 301
302 302 class EngineAPI(object):
303 303 """This is the object through which the user can edit the `properties`
304 304 attribute of an Engine.
305 305 The Engine Properties object copies all object in and out of itself.
306 306 See the EngineProperties object for details.
307 307 """
308 308 _fix=False
309 309 def __init__(self, id):
310 310 self.id = id
311 311 self.properties = StrictDict()
312 312 self._fix=True
313 313
314 314 def __setattr__(self, k,v):
315 315 if self._fix:
316 316 raise error.KernelError("I am protected!")
317 317 else:
318 318 object.__setattr__(self, k, v)
319 319
320 320 def __delattr__(self, key):
321 321 raise error.KernelError("I am protected!")
322 322
323 323
324 324 _apiDict = {}
325 325
326 326 def get_engine(id):
327 327 """Get the Engine API object, whcih currently just provides the properties
328 328 object, by ID"""
329 329 global _apiDict
330 330 if not _apiDict.get(id):
331 331 _apiDict[id] = EngineAPI(id)
332 332 return _apiDict[id]
333 333
334 334 def drop_engine(id):
335 335 """remove an engine"""
336 336 global _apiDict
337 337 if _apiDict.has_key(id):
338 338 del _apiDict[id]
339 339
340 340 class EngineService(object, service.Service):
341 341 """Adapt a IPython shell into a IEngine implementing Twisted Service."""
342 342
343 343 zi.implements(IEngineBase)
344 344 name = 'EngineService'
345 345
346 346 def __init__(self, shellClass=Interpreter, mpi=None):
347 347 """Create an EngineService.
348 348
349 349 shellClass: something that implements IInterpreter or core1
350 350 mpi: an mpi module that has rank and size attributes
351 351 """
352 352 self.shellClass = shellClass
353 353 self.shell = self.shellClass()
354 354 self.mpi = mpi
355 355 self.id = None
356 356 self.properties = get_engine(self.id).properties
357 357 if self.mpi is not None:
358 358 log.msg("MPI started with rank = %i and size = %i" %
359 359 (self.mpi.rank, self.mpi.size))
360 360 self.id = self.mpi.rank
361 361 self._seedNamespace()
362 362
363 363 # Make id a property so that the shell can get the updated id
364 364
365 365 def _setID(self, id):
366 366 self._id = id
367 367 self.properties = get_engine(id).properties
368 368 self.shell.push({'id': id})
369 369
370 370 def _getID(self):
371 371 return self._id
372 372
373 373 id = property(_getID, _setID)
374 374
375 375 def _seedNamespace(self):
376 376 self.shell.push({'mpi': self.mpi, 'id' : self.id})
377 377
378 378 def executeAndRaise(self, msg, callable, *args, **kwargs):
379 379 """Call a method of self.shell and wrap any exception."""
380 380 d = defer.Deferred()
381 381 try:
382 382 result = callable(*args, **kwargs)
383 383 except:
384 384 # This gives the following:
385 385 # et=exception class
386 386 # ev=exception class instance
387 387 # tb=traceback object
388 388 et,ev,tb = sys.exc_info()
389 389 # This call adds attributes to the exception value
390 390 et,ev,tb = self.shell.formatTraceback(et,ev,tb,msg)
391 391 # Add another attribute
392 392 ev._ipython_engine_info = msg
393 393 f = failure.Failure(ev,et,None)
394 394 d.errback(f)
395 395 else:
396 396 d.callback(result)
397 397
398 398 return d
399 399
400
400 401 # The IEngine methods. See the interface for documentation.
401 402
402 403 def execute(self, lines):
403 404 msg = {'engineid':self.id,
404 405 'method':'execute',
405 406 'args':[lines]}
406 407 d = self.executeAndRaise(msg, self.shell.execute, lines)
407 408 d.addCallback(self.addIDToResult)
408 409 return d
409 410
410 411 def addIDToResult(self, result):
411 412 result['id'] = self.id
412 413 return result
413 414
414 415 def push(self, namespace):
415 416 msg = {'engineid':self.id,
416 417 'method':'push',
417 418 'args':[repr(namespace.keys())]}
418 419 d = self.executeAndRaise(msg, self.shell.push, namespace)
419 420 return d
420 421
421 422 def pull(self, keys):
422 423 msg = {'engineid':self.id,
423 424 'method':'pull',
424 425 'args':[repr(keys)]}
425 426 d = self.executeAndRaise(msg, self.shell.pull, keys)
426 427 return d
427 428
428 429 def push_function(self, namespace):
429 430 msg = {'engineid':self.id,
430 431 'method':'push_function',
431 432 'args':[repr(namespace.keys())]}
432 433 d = self.executeAndRaise(msg, self.shell.push_function, namespace)
433 434 return d
434 435
435 436 def pull_function(self, keys):
436 437 msg = {'engineid':self.id,
437 438 'method':'pull_function',
438 439 'args':[repr(keys)]}
439 440 d = self.executeAndRaise(msg, self.shell.pull_function, keys)
440 441 return d
441 442
442 443 def get_result(self, i=None):
443 444 msg = {'engineid':self.id,
444 445 'method':'get_result',
445 446 'args':[repr(i)]}
446 447 d = self.executeAndRaise(msg, self.shell.getCommand, i)
447 448 d.addCallback(self.addIDToResult)
448 449 return d
449 450
450 451 def reset(self):
451 452 msg = {'engineid':self.id,
452 453 'method':'reset',
453 454 'args':[]}
454 455 del self.shell
455 456 self.shell = self.shellClass()
456 457 self.properties.clear()
457 458 d = self.executeAndRaise(msg, self._seedNamespace)
458 459 return d
459 460
460 461 def kill(self):
461 462 drop_engine(self.id)
462 463 try:
463 464 reactor.stop()
464 465 except RuntimeError:
465 466 log.msg('The reactor was not running apparently.')
466 467 return defer.fail()
467 468 else:
468 469 return defer.succeed(None)
469 470
470 471 def keys(self):
471 472 """Return a list of variables names in the users top level namespace.
472 473
473 474 This used to return a dict of all the keys/repr(values) in the
474 475 user's namespace. This was too much info for the ControllerService
475 476 to handle so it is now just a list of keys.
476 477 """
477 478
478 479 remotes = []
479 480 for k in self.shell.user_ns.iterkeys():
480 481 if k not in ['__name__', '_ih', '_oh', '__builtins__',
481 482 'In', 'Out', '_', '__', '___', '__IP', 'input', 'raw_input']:
482 483 remotes.append(k)
483 484 return defer.succeed(remotes)
484 485
485 486 def set_properties(self, properties):
486 487 msg = {'engineid':self.id,
487 488 'method':'set_properties',
488 489 'args':[repr(properties.keys())]}
489 490 return self.executeAndRaise(msg, self.properties.update, properties)
490 491
491 492 def get_properties(self, keys=None):
492 493 msg = {'engineid':self.id,
493 494 'method':'get_properties',
494 495 'args':[repr(keys)]}
495 496 if keys is None:
496 497 keys = self.properties.keys()
497 498 return self.executeAndRaise(msg, self.properties.subDict, *keys)
498 499
499 500 def _doDel(self, keys):
500 501 for key in keys:
501 502 del self.properties[key]
502 503
503 504 def del_properties(self, keys):
504 505 msg = {'engineid':self.id,
505 506 'method':'del_properties',
506 507 'args':[repr(keys)]}
507 508 return self.executeAndRaise(msg, self._doDel, keys)
508 509
509 510 def _doHas(self, keys):
510 511 return [self.properties.has_key(key) for key in keys]
511 512
512 513 def has_properties(self, keys):
513 514 msg = {'engineid':self.id,
514 515 'method':'has_properties',
515 516 'args':[repr(keys)]}
516 517 return self.executeAndRaise(msg, self._doHas, keys)
517 518
518 519 def clear_properties(self):
519 520 msg = {'engineid':self.id,
520 521 'method':'clear_properties',
521 522 'args':[]}
522 523 return self.executeAndRaise(msg, self.properties.clear)
523 524
524 525 def push_serialized(self, sNamespace):
525 526 msg = {'engineid':self.id,
526 527 'method':'push_serialized',
527 528 'args':[repr(sNamespace.keys())]}
528 529 ns = {}
529 530 for k,v in sNamespace.iteritems():
530 531 try:
531 532 unserialized = newserialized.IUnSerialized(v)
532 533 ns[k] = unserialized.getObject()
533 534 except:
534 535 return defer.fail()
535 536 return self.executeAndRaise(msg, self.shell.push, ns)
536 537
537 538 def pull_serialized(self, keys):
538 539 msg = {'engineid':self.id,
539 540 'method':'pull_serialized',
540 541 'args':[repr(keys)]}
541 542 if isinstance(keys, str):
542 543 keys = [keys]
543 544 if len(keys)==1:
544 545 d = self.executeAndRaise(msg, self.shell.pull, keys)
545 546 d.addCallback(newserialized.serialize)
546 547 return d
547 548 elif len(keys)>1:
548 549 d = self.executeAndRaise(msg, self.shell.pull, keys)
549 550 @d.addCallback
550 551 def packThemUp(values):
551 552 serials = []
552 553 for v in values:
553 554 try:
554 555 serials.append(newserialized.serialize(v))
555 556 except:
556 557 return defer.fail(failure.Failure())
557 558 return serials
558 559 return packThemUp
559 560
560 561
561 562 def queue(methodToQueue):
562 563 def queuedMethod(this, *args, **kwargs):
563 564 name = methodToQueue.__name__
564 565 return this.submitCommand(Command(name, *args, **kwargs))
565 566 return queuedMethod
566 567
567 568 class QueuedEngine(object):
568 569 """Adapt an IEngineBase to an IEngineQueued by wrapping it.
569 570
570 571 The resulting object will implement IEngineQueued which extends
571 572 IEngineCore which extends (IEngineBase, IEngineSerialized).
572 573
573 574 This seems like the best way of handling it, but I am not sure. The
574 575 other option is to have the various base interfaces be used like
575 576 mix-in intefaces. The problem I have with this is adpatation is
576 577 more difficult and complicated because there can be can multiple
577 578 original and final Interfaces.
578 579 """
579 580
580 581 zi.implements(IEngineQueued)
581 582
582 583 def __init__(self, engine):
583 584 """Create a QueuedEngine object from an engine
584 585
585 586 engine: An implementor of IEngineCore and IEngineSerialized
586 587 keepUpToDate: whether to update the remote status when the
587 588 queue is empty. Defaults to False.
588 589 """
589 590
590 591 # This is the right way to do these tests rather than
591 592 # IEngineCore in list(zi.providedBy(engine)) which will only
592 593 # picks of the interfaces that are directly declared by engine.
593 594 assert IEngineBase.providedBy(engine), \
594 595 "engine passed to QueuedEngine doesn't provide IEngineBase"
595 596
596 597 self.engine = engine
597 598 self.id = engine.id
598 599 self.queued = []
599 600 self.history = {}
600 601 self.engineStatus = {}
601 602 self.currentCommand = None
602 603 self.failureObservers = []
603 604
604 605 def _get_properties(self):
605 606 return self.engine.properties
606 607
607 608 properties = property(_get_properties, lambda self, _: None)
608 609 # Queue management methods. You should not call these directly
609 610
610 611 def submitCommand(self, cmd):
611 612 """Submit command to queue."""
612 613
613 614 d = defer.Deferred()
614 615 cmd.setDeferred(d)
615 616 if self.currentCommand is not None:
616 617 if self.currentCommand.finished:
617 618 # log.msg("Running command immediately: %r" % cmd)
618 619 self.currentCommand = cmd
619 620 self.runCurrentCommand()
620 621 else: # command is still running
621 622 # log.msg("Command is running: %r" % self.currentCommand)
622 623 # log.msg("Queueing: %r" % cmd)
623 624 self.queued.append(cmd)
624 625 else:
625 626 # log.msg("No current commands, running: %r" % cmd)
626 627 self.currentCommand = cmd
627 628 self.runCurrentCommand()
628 629 return d
629 630
630 631 def runCurrentCommand(self):
631 632 """Run current command."""
632 633
633 634 cmd = self.currentCommand
634 635 f = getattr(self.engine, cmd.remoteMethod, None)
635 636 if f:
636 637 d = f(*cmd.args, **cmd.kwargs)
637 638 if cmd.remoteMethod is 'execute':
638 639 d.addCallback(self.saveResult)
639 640 d.addCallback(self.finishCommand)
640 641 d.addErrback(self.abortCommand)
641 642 else:
642 643 return defer.fail(AttributeError(cmd.remoteMethod))
643 644
644 645 def _flushQueue(self):
645 646 """Pop next command in queue and run it."""
646 647
647 648 if len(self.queued) > 0:
648 649 self.currentCommand = self.queued.pop(0)
649 650 self.runCurrentCommand()
650 651
651 652 def saveResult(self, result):
652 653 """Put the result in the history."""
653 654 self.history[result['number']] = result
654 655 return result
655 656
656 657 def finishCommand(self, result):
657 658 """Finish currrent command."""
658 659
659 660 # The order of these commands is absolutely critical.
660 661 self.currentCommand.handleResult(result)
661 662 self.currentCommand.finished = True
662 663 self._flushQueue()
663 664 return result
664 665
665 666 def abortCommand(self, reason):
666 667 """Abort current command.
667 668
668 669 This eats the Failure but first passes it onto the Deferred that the
669 670 user has.
670 671
671 672 It also clear out the queue so subsequence commands don't run.
672 673 """
673 674
674 675 # The order of these 3 commands is absolutely critical. The currentCommand
675 676 # must first be marked as finished BEFORE the queue is cleared and before
676 677 # the current command is sent the failure.
677 678 # Also, the queue must be cleared BEFORE the current command is sent the Failure
678 679 # otherwise the errback chain could trigger new commands to be added to the
679 680 # queue before we clear it. We should clear ONLY the commands that were in
680 681 # the queue when the error occured.
681 682 self.currentCommand.finished = True
682 683 s = "%r %r %r" % (self.currentCommand.remoteMethod, self.currentCommand.args, self.currentCommand.kwargs)
683 684 self.clear_queue(msg=s)
684 685 self.currentCommand.handleError(reason)
685 686
686 687 return None
687 688
688 689 #---------------------------------------------------------------------------
689 690 # IEngineCore methods
690 691 #---------------------------------------------------------------------------
691 692
692 693 @queue
693 694 def execute(self, lines):
694 695 pass
695 696
696 697 @queue
697 698 def push(self, namespace):
698 699 pass
699 700
700 701 @queue
701 702 def pull(self, keys):
702 703 pass
703 704
704 705 @queue
705 706 def push_function(self, namespace):
706 707 pass
707 708
708 709 @queue
709 710 def pull_function(self, keys):
710 711 pass
711 712
712 713 def get_result(self, i=None):
713 714 if i is None:
714 715 i = max(self.history.keys()+[None])
715 716
716 717 cmd = self.history.get(i, None)
717 718 # Uncomment this line to disable chaching of results
718 719 #cmd = None
719 720 if cmd is None:
720 721 return self.submitCommand(Command('get_result', i))
721 722 else:
722 723 return defer.succeed(cmd)
723 724
724 725 def reset(self):
725 726 self.clear_queue()
726 727 self.history = {} # reset the cache - I am not sure we should do this
727 728 return self.submitCommand(Command('reset'))
728 729
729 730 def kill(self):
730 731 self.clear_queue()
731 732 return self.submitCommand(Command('kill'))
732 733
733 734 @queue
734 735 def keys(self):
735 736 pass
736 737
737 738 #---------------------------------------------------------------------------
738 739 # IEngineSerialized methods
739 740 #---------------------------------------------------------------------------
740 741
741 742 @queue
742 743 def push_serialized(self, namespace):
743 744 pass
744 745
745 746 @queue
746 747 def pull_serialized(self, keys):
747 748 pass
748 749
749 750 #---------------------------------------------------------------------------
750 751 # IEngineProperties methods
751 752 #---------------------------------------------------------------------------
752 753
753 754 @queue
754 755 def set_properties(self, namespace):
755 756 pass
756 757
757 758 @queue
758 759 def get_properties(self, keys=None):
759 760 pass
760 761
761 762 @queue
762 763 def del_properties(self, keys):
763 764 pass
764 765
765 766 @queue
766 767 def has_properties(self, keys):
767 768 pass
768 769
769 770 @queue
770 771 def clear_properties(self):
771 772 pass
772 773
773 774 #---------------------------------------------------------------------------
774 775 # IQueuedEngine methods
775 776 #---------------------------------------------------------------------------
776 777
777 778 def clear_queue(self, msg=''):
778 779 """Clear the queue, but doesn't cancel the currently running commmand."""
779 780
780 781 for cmd in self.queued:
781 782 cmd.deferred.errback(failure.Failure(error.QueueCleared(msg)))
782 783 self.queued = []
783 784 return defer.succeed(None)
784 785
785 786 def queue_status(self):
786 787 if self.currentCommand is not None:
787 788 if self.currentCommand.finished:
788 789 pending = repr(None)
789 790 else:
790 791 pending = repr(self.currentCommand)
791 792 else:
792 793 pending = repr(None)
793 794 dikt = {'queue':map(repr,self.queued), 'pending':pending}
794 795 return defer.succeed(dikt)
795 796
796 797 def register_failure_observer(self, obs):
797 798 self.failureObservers.append(obs)
798 799
799 800 def unregister_failure_observer(self, obs):
800 801 self.failureObservers.remove(obs)
801 802
802 803
803 804 # Now register QueuedEngine as an adpater class that makes an IEngineBase into a
804 805 # IEngineQueued.
805 806 components.registerAdapter(QueuedEngine, IEngineBase, IEngineQueued)
806 807
807 808
808 809 class Command(object):
809 810 """A command object that encapslates queued commands.
810 811
811 812 This class basically keeps track of a command that has been queued
812 813 in a QueuedEngine. It manages the deferreds and hold the method to be called
813 814 and the arguments to that method.
814 815 """
815 816
816 817
817 818 def __init__(self, remoteMethod, *args, **kwargs):
818 819 """Build a new Command object."""
819 820
820 821 self.remoteMethod = remoteMethod
821 822 self.args = args
822 823 self.kwargs = kwargs
823 824 self.finished = False
824 825
825 826 def setDeferred(self, d):
826 827 """Sets the deferred attribute of the Command."""
827 828
828 829 self.deferred = d
829 830
830 831 def __repr__(self):
831 832 if not self.args:
832 833 args = ''
833 834 else:
834 835 args = str(self.args)[1:-2] #cut off (...,)
835 836 for k,v in self.kwargs.iteritems():
836 837 if args:
837 838 args += ', '
838 839 args += '%s=%r' %(k,v)
839 840 return "%s(%s)" %(self.remoteMethod, args)
840 841
841 842 def handleResult(self, result):
842 843 """When the result is ready, relay it to self.deferred."""
843 844
844 845 self.deferred.callback(result)
845 846
846 847 def handleError(self, reason):
847 848 """When an error has occured, relay it to self.deferred."""
848 849
849 850 self.deferred.errback(reason)
850 851
851 852 class ThreadedEngineService(EngineService):
852 853 """An EngineService subclass that defers execute commands to a separate
853 854 thread.
854 855
855 856 ThreadedEngineService uses twisted.internet.threads.deferToThread to
856 857 defer execute requests to a separate thread. GUI frontends may want to
857 858 use ThreadedEngineService as the engine in an
858 859 IPython.frontend.frontendbase.FrontEndBase subclass to prevent
859 860 block execution from blocking the GUI thread.
860 861 """
861 862
862 863 zi.implements(IEngineBase)
863 864
864 865 def __init__(self, shellClass=Interpreter, mpi=None):
865 866 EngineService.__init__(self, shellClass, mpi)
866 867
868 def wrapped_execute(self, msg, lines):
869 """Wrap self.shell.execute to add extra information to tracebacks"""
870
871 try:
872 result = self.shell.execute(lines)
873 except Exception,e:
874 # This gives the following:
875 # et=exception class
876 # ev=exception class instance
877 # tb=traceback object
878 et,ev,tb = sys.exc_info()
879 # This call adds attributes to the exception value
880 et,ev,tb = self.shell.formatTraceback(et,ev,tb,msg)
881 # Add another attribute
882
883 # Create a new exception with the new attributes
884 e = et(ev._ipython_traceback_text)
885 e._ipython_engine_info = msg
886
887 # Re-raise
888 raise e
889
890 return result
891
867 892
868 893 def execute(self, lines):
869 894 # Only import this if we are going to use this class
870 895 from twisted.internet import threads
871 896
872 897 msg = {'engineid':self.id,
873 898 'method':'execute',
874 899 'args':[lines]}
875 900
876 d = threads.deferToThread(self.shell.execute, lines)
901 d = threads.deferToThread(self.wrapped_execute, msg, lines)
877 902 d.addCallback(self.addIDToResult)
878 903 return d
General Comments 0
You need to be logged in to leave comments. Login now