##// END OF EJS Templates
`IPython.zmq` --> `IPython.kernel.zmq` throughout docs and examples
Martin Spacek -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,1050 +1,1050 b''
1 1 .. _messaging:
2 2
3 3 ======================
4 4 Messaging in IPython
5 5 ======================
6 6
7 7
8 8 Introduction
9 9 ============
10 10
11 11 This document explains the basic communications design and messaging
12 12 specification for how the various IPython objects interact over a network
13 13 transport. The current implementation uses the ZeroMQ_ library for messaging
14 14 within and between hosts.
15 15
16 16 .. Note::
17 17
18 18 This document should be considered the authoritative description of the
19 19 IPython messaging protocol, and all developers are strongly encouraged to
20 20 keep it updated as the implementation evolves, so that we have a single
21 21 common reference for all protocol details.
22 22
23 23 The basic design is explained in the following diagram:
24 24
25 25 .. image:: figs/frontend-kernel.png
26 26 :width: 450px
27 27 :alt: IPython kernel/frontend messaging architecture.
28 28 :align: center
29 29 :target: ../_images/frontend-kernel.png
30 30
31 31 A single kernel can be simultaneously connected to one or more frontends. The
32 32 kernel has three sockets that serve the following functions:
33 33
34 34 1. stdin: this ROUTER socket is connected to all frontends, and it allows
35 35 the kernel to request input from the active frontend when :func:`raw_input` is called.
36 36 The frontend that executed the code has a DEALER socket that acts as a 'virtual keyboard'
37 37 for the kernel while this communication is happening (illustrated in the
38 38 figure by the black outline around the central keyboard). In practice,
39 39 frontends may display such kernel requests using a special input widget or
40 40 otherwise indicating that the user is to type input for the kernel instead
41 41 of normal commands in the frontend.
42 42
43 43 2. Shell: this single ROUTER socket allows multiple incoming connections from
44 44 frontends, and this is the socket where requests for code execution, object
45 45 information, prompts, etc. are made to the kernel by any frontend. The
46 46 communication on this socket is a sequence of request/reply actions from
47 47 each frontend and the kernel.
48 48
49 49 3. IOPub: this socket is the 'broadcast channel' where the kernel publishes all
50 50 side effects (stdout, stderr, etc.) as well as the requests coming from any
51 51 client over the shell socket and its own requests on the stdin socket. There
52 52 are a number of actions in Python which generate side effects: :func:`print`
53 53 writes to ``sys.stdout``, errors generate tracebacks, etc. Additionally, in
54 54 a multi-client scenario, we want all frontends to be able to know what each
55 55 other has sent to the kernel (this can be useful in collaborative scenarios,
56 56 for example). This socket allows both side effects and the information
57 57 about communications taking place with one client over the shell channel
58 58 to be made available to all clients in a uniform manner.
59 59
60 60 All messages are tagged with enough information (details below) for clients
61 61 to know which messages come from their own interaction with the kernel and
62 62 which ones are from other clients, so they can display each type
63 63 appropriately.
64 64
65 65 The actual format of the messages allowed on each of these channels is
66 66 specified below. Messages are dicts of dicts with string keys and values that
67 67 are reasonably representable in JSON. Our current implementation uses JSON
68 68 explicitly as its message format, but this shouldn't be considered a permanent
69 69 feature. As we've discovered that JSON has non-trivial performance issues due
70 70 to excessive copying, we may in the future move to a pure pickle-based raw
71 71 message format. However, it should be possible to easily convert from the raw
72 72 objects to JSON, since we may have non-python clients (e.g. a web frontend).
73 73 As long as it's easy to make a JSON version of the objects that is a faithful
74 74 representation of all the data, we can communicate with such clients.
75 75
76 76 .. Note::
77 77
78 78 Not all of these have yet been fully fleshed out, but the key ones are, see
79 79 kernel and frontend files for actual implementation details.
80 80
81 81 General Message Format
82 82 ======================
83 83
84 84 A message is defined by the following four-dictionary structure::
85 85
86 86 {
87 87 # The message header contains a pair of unique identifiers for the
88 88 # originating session and the actual message id, in addition to the
89 89 # username for the process that generated the message. This is useful in
90 90 # collaborative settings where multiple users may be interacting with the
91 91 # same kernel simultaneously, so that frontends can label the various
92 92 # messages in a meaningful way.
93 93 'header' : {
94 94 'msg_id' : uuid,
95 95 'username' : str,
96 96 'session' : uuid
97 97 # All recognized message type strings are listed below.
98 98 'msg_type' : str,
99 99 },
100 100
101 101 # In a chain of messages, the header from the parent is copied so that
102 102 # clients can track where messages come from.
103 103 'parent_header' : dict,
104 104
105 105 # The actual content of the message must be a dict, whose structure
106 106 # depends on the message type.
107 107 'content' : dict,
108 108
109 109 # Any metadata associated with the message.
110 110 'metadata' : dict,
111 111 }
112 112
113 113
114 114 Python functional API
115 115 =====================
116 116
117 117 As messages are dicts, they map naturally to a ``func(**kw)`` call form. We
118 118 should develop, at a few key points, functional forms of all the requests that
119 119 take arguments in this manner and automatically construct the necessary dict
120 120 for sending.
121 121
122 122 In addition, the Python implementation of the message specification extends
123 123 messages upon deserialization to the following form for convenience::
124 124
125 125 {
126 126 'header' : dict,
127 127 # The msg's unique identifier and type are always stored in the header,
128 128 # but the Python implementation copies them to the top level.
129 129 'msg_id' : uuid,
130 130 'msg_type' : str,
131 131 'parent_header' : dict,
132 132 'content' : dict,
133 133 'metadata' : dict,
134 134 }
135 135
136 136 All messages sent to or received by any IPython process should have this
137 137 extended structure.
138 138
139 139
140 140 Messages on the shell ROUTER/DEALER sockets
141 141 ===========================================
142 142
143 143 .. _execute:
144 144
145 145 Execute
146 146 -------
147 147
148 148 This message type is used by frontends to ask the kernel to execute code on
149 149 behalf of the user, in a namespace reserved to the user's variables (and thus
150 150 separate from the kernel's own internal code and variables).
151 151
152 152 Message type: ``execute_request``::
153 153
154 154 content = {
155 155 # Source code to be executed by the kernel, one or more lines.
156 156 'code' : str,
157 157
158 158 # A boolean flag which, if True, signals the kernel to execute
159 159 # this code as quietly as possible. This means that the kernel
160 160 # will compile the code with 'exec' instead of 'single' (so
161 161 # sys.displayhook will not fire), forces store_history to be False,
162 162 # and will *not*:
163 163 # - broadcast exceptions on the PUB socket
164 164 # - do any logging
165 165 #
166 166 # The default is False.
167 167 'silent' : bool,
168 168
169 169 # A boolean flag which, if True, signals the kernel to populate history
170 170 # The default is True if silent is False. If silent is True, store_history
171 171 # is forced to be False.
172 172 'store_history' : bool,
173 173
174 174 # A list of variable names from the user's namespace to be retrieved. What
175 175 # returns is a JSON string of the variable's repr(), not a python object.
176 176 'user_variables' : list,
177 177
178 178 # Similarly, a dict mapping names to expressions to be evaluated in the
179 179 # user's dict.
180 180 'user_expressions' : dict,
181 181
182 182 # Some frontends (e.g. the Notebook) do not support stdin requests. If
183 183 # raw_input is called from code executed from such a frontend, a
184 184 # StdinNotImplementedError will be raised.
185 185 'allow_stdin' : True,
186 186
187 187 }
188 188
189 189 The ``code`` field contains a single string (possibly multiline). The kernel
190 190 is responsible for splitting this into one or more independent execution blocks
191 191 and deciding whether to compile these in 'single' or 'exec' mode (see below for
192 192 detailed execution semantics).
193 193
194 194 The ``user_`` fields deserve a detailed explanation. In the past, IPython had
195 195 the notion of a prompt string that allowed arbitrary code to be evaluated, and
196 196 this was put to good use by many in creating prompts that displayed system
197 197 status, path information, and even more esoteric uses like remote instrument
198 198 status aqcuired over the network. But now that IPython has a clean separation
199 199 between the kernel and the clients, the kernel has no prompt knowledge; prompts
200 200 are a frontend-side feature, and it should be even possible for different
201 201 frontends to display different prompts while interacting with the same kernel.
202 202
203 203 The kernel now provides the ability to retrieve data from the user's namespace
204 204 after the execution of the main ``code``, thanks to two fields in the
205 205 ``execute_request`` message:
206 206
207 207 - ``user_variables``: If only variables from the user's namespace are needed, a
208 208 list of variable names can be passed and a dict with these names as keys and
209 209 their :func:`repr()` as values will be returned.
210 210
211 211 - ``user_expressions``: For more complex expressions that require function
212 212 evaluations, a dict can be provided with string keys and arbitrary python
213 213 expressions as values. The return message will contain also a dict with the
214 214 same keys and the :func:`repr()` of the evaluated expressions as value.
215 215
216 216 With this information, frontends can display any status information they wish
217 217 in the form that best suits each frontend (a status line, a popup, inline for a
218 218 terminal, etc).
219 219
220 220 .. Note::
221 221
222 222 In order to obtain the current execution counter for the purposes of
223 223 displaying input prompts, frontends simply make an execution request with an
224 224 empty code string and ``silent=True``.
225 225
226 226 Execution semantics
227 227 ~~~~~~~~~~~~~~~~~~~
228 228
229 229 When the silent flag is false, the execution of use code consists of the
230 230 following phases (in silent mode, only the ``code`` field is executed):
231 231
232 232 1. Run the ``pre_runcode_hook``.
233 233
234 234 2. Execute the ``code`` field, see below for details.
235 235
236 236 3. If #2 succeeds, compute ``user_variables`` and ``user_expressions`` are
237 237 computed. This ensures that any error in the latter don't harm the main
238 238 code execution.
239 239
240 240 4. Call any method registered with :meth:`register_post_execute`.
241 241
242 242 .. warning::
243 243
244 244 The API for running code before/after the main code block is likely to
245 245 change soon. Both the ``pre_runcode_hook`` and the
246 246 :meth:`register_post_execute` are susceptible to modification, as we find a
247 247 consistent model for both.
248 248
249 249 To understand how the ``code`` field is executed, one must know that Python
250 250 code can be compiled in one of three modes (controlled by the ``mode`` argument
251 251 to the :func:`compile` builtin):
252 252
253 253 *single*
254 254 Valid for a single interactive statement (though the source can contain
255 255 multiple lines, such as a for loop). When compiled in this mode, the
256 256 generated bytecode contains special instructions that trigger the calling of
257 257 :func:`sys.displayhook` for any expression in the block that returns a value.
258 258 This means that a single statement can actually produce multiple calls to
259 259 :func:`sys.displayhook`, if for example it contains a loop where each
260 260 iteration computes an unassigned expression would generate 10 calls::
261 261
262 262 for i in range(10):
263 263 i**2
264 264
265 265 *exec*
266 266 An arbitrary amount of source code, this is how modules are compiled.
267 267 :func:`sys.displayhook` is *never* implicitly called.
268 268
269 269 *eval*
270 270 A single expression that returns a value. :func:`sys.displayhook` is *never*
271 271 implicitly called.
272 272
273 273
274 274 The ``code`` field is split into individual blocks each of which is valid for
275 275 execution in 'single' mode, and then:
276 276
277 277 - If there is only a single block: it is executed in 'single' mode.
278 278
279 279 - If there is more than one block:
280 280
281 281 * if the last one is a single line long, run all but the last in 'exec' mode
282 282 and the very last one in 'single' mode. This makes it easy to type simple
283 283 expressions at the end to see computed values.
284 284
285 285 * if the last one is no more than two lines long, run all but the last in
286 286 'exec' mode and the very last one in 'single' mode. This makes it easy to
287 287 type simple expressions at the end to see computed values. - otherwise
288 288 (last one is also multiline), run all in 'exec' mode
289 289
290 290 * otherwise (last one is also multiline), run all in 'exec' mode as a single
291 291 unit.
292 292
293 293 Any error in retrieving the ``user_variables`` or evaluating the
294 294 ``user_expressions`` will result in a simple error message in the return fields
295 295 of the form::
296 296
297 297 [ERROR] ExceptionType: Exception message
298 298
299 299 The user can simply send the same variable name or expression for evaluation to
300 300 see a regular traceback.
301 301
302 302 Errors in any registered post_execute functions are also reported similarly,
303 303 and the failing function is removed from the post_execution set so that it does
304 304 not continue triggering failures.
305 305
306 306 Upon completion of the execution request, the kernel *always* sends a reply,
307 307 with a status code indicating what happened and additional data depending on
308 308 the outcome. See :ref:`below <execution_results>` for the possible return
309 309 codes and associated data.
310 310
311 311
312 312 Execution counter (old prompt number)
313 313 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
314 314
315 315 The kernel has a single, monotonically increasing counter of all execution
316 316 requests that are made with ``store_history=True``. This counter is used to populate
317 317 the ``In[n]``, ``Out[n]`` and ``_n`` variables, so clients will likely want to
318 318 display it in some form to the user, which will typically (but not necessarily)
319 319 be done in the prompts. The value of this counter will be returned as the
320 320 ``execution_count`` field of all ``execute_reply`` messages.
321 321
322 322 .. _execution_results:
323 323
324 324 Execution results
325 325 ~~~~~~~~~~~~~~~~~
326 326
327 327 Message type: ``execute_reply``::
328 328
329 329 content = {
330 330 # One of: 'ok' OR 'error' OR 'abort'
331 331 'status' : str,
332 332
333 333 # The global kernel counter that increases by one with each request that
334 334 # stores history. This will typically be used by clients to display
335 335 # prompt numbers to the user. If the request did not store history, this will
336 336 # be the current value of the counter in the kernel.
337 337 'execution_count' : int,
338 338 }
339 339
340 340 When status is 'ok', the following extra fields are present::
341 341
342 342 {
343 343 # 'payload' will be a list of payload dicts.
344 344 # Each execution payload is a dict with string keys that may have been
345 345 # produced by the code being executed. It is retrieved by the kernel at
346 346 # the end of the execution and sent back to the front end, which can take
347 347 # action on it as needed. See main text for further details.
348 348 'payload' : list(dict),
349 349
350 350 # Results for the user_variables and user_expressions.
351 351 'user_variables' : dict,
352 352 'user_expressions' : dict,
353 353 }
354 354
355 355 .. admonition:: Execution payloads
356 356
357 357 The notion of an 'execution payload' is different from a return value of a
358 358 given set of code, which normally is just displayed on the pyout stream
359 359 through the PUB socket. The idea of a payload is to allow special types of
360 360 code, typically magics, to populate a data container in the IPython kernel
361 361 that will be shipped back to the caller via this channel. The kernel
362 362 has an API for this in the PayloadManager::
363 363
364 364 ip.payload_manager.write_payload(payload_dict)
365 365
366 366 which appends a dictionary to the list of payloads.
367 367
368 368
369 369 When status is 'error', the following extra fields are present::
370 370
371 371 {
372 372 'ename' : str, # Exception name, as a string
373 373 'evalue' : str, # Exception value, as a string
374 374
375 375 # The traceback will contain a list of frames, represented each as a
376 376 # string. For now we'll stick to the existing design of ultraTB, which
377 377 # controls exception level of detail statefully. But eventually we'll
378 378 # want to grow into a model where more information is collected and
379 379 # packed into the traceback object, with clients deciding how little or
380 380 # how much of it to unpack. But for now, let's start with a simple list
381 381 # of strings, since that requires only minimal changes to ultratb as
382 382 # written.
383 383 'traceback' : list,
384 384 }
385 385
386 386
387 387 When status is 'abort', there are for now no additional data fields. This
388 388 happens when the kernel was interrupted by a signal.
389 389
390 390 Kernel attribute access
391 391 -----------------------
392 392
393 393 .. warning::
394 394
395 395 This part of the messaging spec is not actually implemented in the kernel
396 396 yet.
397 397
398 398 While this protocol does not specify full RPC access to arbitrary methods of
399 399 the kernel object, the kernel does allow read (and in some cases write) access
400 400 to certain attributes.
401 401
402 402 The policy for which attributes can be read is: any attribute of the kernel, or
403 403 its sub-objects, that belongs to a :class:`Configurable` object and has been
404 404 declared at the class-level with Traits validation, is in principle accessible
405 405 as long as its name does not begin with a leading underscore. The attribute
406 406 itself will have metadata indicating whether it allows remote read and/or write
407 407 access. The message spec follows for attribute read and write requests.
408 408
409 409 Message type: ``getattr_request``::
410 410
411 411 content = {
412 412 # The (possibly dotted) name of the attribute
413 413 'name' : str,
414 414 }
415 415
416 416 When a ``getattr_request`` fails, there are two possible error types:
417 417
418 418 - AttributeError: this type of error was raised when trying to access the
419 419 given name by the kernel itself. This means that the attribute likely
420 420 doesn't exist.
421 421
422 422 - AccessError: the attribute exists but its value is not readable remotely.
423 423
424 424
425 425 Message type: ``getattr_reply``::
426 426
427 427 content = {
428 428 # One of ['ok', 'AttributeError', 'AccessError'].
429 429 'status' : str,
430 430 # If status is 'ok', a JSON object.
431 431 'value' : object,
432 432 }
433 433
434 434 Message type: ``setattr_request``::
435 435
436 436 content = {
437 437 # The (possibly dotted) name of the attribute
438 438 'name' : str,
439 439
440 440 # A JSON-encoded object, that will be validated by the Traits
441 441 # information in the kernel
442 442 'value' : object,
443 443 }
444 444
445 445 When a ``setattr_request`` fails, there are also two possible error types with
446 446 similar meanings as those of the ``getattr_request`` case, but for writing.
447 447
448 448 Message type: ``setattr_reply``::
449 449
450 450 content = {
451 451 # One of ['ok', 'AttributeError', 'AccessError'].
452 452 'status' : str,
453 453 }
454 454
455 455
456 456
457 457 Object information
458 458 ------------------
459 459
460 460 One of IPython's most used capabilities is the introspection of Python objects
461 461 in the user's namespace, typically invoked via the ``?`` and ``??`` characters
462 462 (which in reality are shorthands for the ``%pinfo`` magic). This is used often
463 463 enough that it warrants an explicit message type, especially because frontends
464 464 may want to get object information in response to user keystrokes (like Tab or
465 465 F1) besides from the user explicitly typing code like ``x??``.
466 466
467 467 Message type: ``object_info_request``::
468 468
469 469 content = {
470 470 # The (possibly dotted) name of the object to be searched in all
471 471 # relevant namespaces
472 472 'name' : str,
473 473
474 474 # The level of detail desired. The default (0) is equivalent to typing
475 475 # 'x?' at the prompt, 1 is equivalent to 'x??'.
476 476 'detail_level' : int,
477 477 }
478 478
479 479 The returned information will be a dictionary with keys very similar to the
480 480 field names that IPython prints at the terminal.
481 481
482 482 Message type: ``object_info_reply``::
483 483
484 484 content = {
485 485 # The name the object was requested under
486 486 'name' : str,
487 487
488 488 # Boolean flag indicating whether the named object was found or not. If
489 489 # it's false, all other fields will be empty.
490 490 'found' : bool,
491 491
492 492 # Flags for magics and system aliases
493 493 'ismagic' : bool,
494 494 'isalias' : bool,
495 495
496 496 # The name of the namespace where the object was found ('builtin',
497 497 # 'magics', 'alias', 'interactive', etc.)
498 498 'namespace' : str,
499 499
500 500 # The type name will be type.__name__ for normal Python objects, but it
501 501 # can also be a string like 'Magic function' or 'System alias'
502 502 'type_name' : str,
503 503
504 504 # The string form of the object, possibly truncated for length if
505 505 # detail_level is 0
506 506 'string_form' : str,
507 507
508 508 # For objects with a __class__ attribute this will be set
509 509 'base_class' : str,
510 510
511 511 # For objects with a __len__ attribute this will be set
512 512 'length' : int,
513 513
514 514 # If the object is a function, class or method whose file we can find,
515 515 # we give its full path
516 516 'file' : str,
517 517
518 518 # For pure Python callable objects, we can reconstruct the object
519 519 # definition line which provides its call signature. For convenience this
520 520 # is returned as a single 'definition' field, but below the raw parts that
521 521 # compose it are also returned as the argspec field.
522 522 'definition' : str,
523 523
524 524 # The individual parts that together form the definition string. Clients
525 525 # with rich display capabilities may use this to provide a richer and more
526 526 # precise representation of the definition line (e.g. by highlighting
527 527 # arguments based on the user's cursor position). For non-callable
528 528 # objects, this field is empty.
529 529 'argspec' : { # The names of all the arguments
530 530 args : list,
531 531 # The name of the varargs (*args), if any
532 532 varargs : str,
533 533 # The name of the varkw (**kw), if any
534 534 varkw : str,
535 535 # The values (as strings) of all default arguments. Note
536 536 # that these must be matched *in reverse* with the 'args'
537 537 # list above, since the first positional args have no default
538 538 # value at all.
539 539 defaults : list,
540 540 },
541 541
542 542 # For instances, provide the constructor signature (the definition of
543 543 # the __init__ method):
544 544 'init_definition' : str,
545 545
546 546 # Docstrings: for any object (function, method, module, package) with a
547 547 # docstring, we show it. But in addition, we may provide additional
548 548 # docstrings. For example, for instances we will show the constructor
549 549 # and class docstrings as well, if available.
550 550 'docstring' : str,
551 551
552 552 # For instances, provide the constructor and class docstrings
553 553 'init_docstring' : str,
554 554 'class_docstring' : str,
555 555
556 556 # If it's a callable object whose call method has a separate docstring and
557 557 # definition line:
558 558 'call_def' : str,
559 559 'call_docstring' : str,
560 560
561 561 # If detail_level was 1, we also try to find the source code that
562 562 # defines the object, if possible. The string 'None' will indicate
563 563 # that no source was found.
564 564 'source' : str,
565 565 }
566 566
567 567
568 568 Complete
569 569 --------
570 570
571 571 Message type: ``complete_request``::
572 572
573 573 content = {
574 574 # The text to be completed, such as 'a.is'
575 575 'text' : str,
576 576
577 577 # The full line, such as 'print a.is'. This allows completers to
578 578 # make decisions that may require information about more than just the
579 579 # current word.
580 580 'line' : str,
581 581
582 582 # The entire block of text where the line is. This may be useful in the
583 583 # case of multiline completions where more context may be needed. Note: if
584 584 # in practice this field proves unnecessary, remove it to lighten the
585 585 # messages.
586 586
587 587 'block' : str,
588 588
589 589 # The position of the cursor where the user hit 'TAB' on the line.
590 590 'cursor_pos' : int,
591 591 }
592 592
593 593 Message type: ``complete_reply``::
594 594
595 595 content = {
596 596 # The list of all matches to the completion request, such as
597 597 # ['a.isalnum', 'a.isalpha'] for the above example.
598 598 'matches' : list
599 599 }
600 600
601 601
602 602 History
603 603 -------
604 604
605 605 For clients to explicitly request history from a kernel. The kernel has all
606 606 the actual execution history stored in a single location, so clients can
607 607 request it from the kernel when needed.
608 608
609 609 Message type: ``history_request``::
610 610
611 611 content = {
612 612
613 613 # If True, also return output history in the resulting dict.
614 614 'output' : bool,
615 615
616 616 # If True, return the raw input history, else the transformed input.
617 617 'raw' : bool,
618 618
619 619 # So far, this can be 'range', 'tail' or 'search'.
620 620 'hist_access_type' : str,
621 621
622 622 # If hist_access_type is 'range', get a range of input cells. session can
623 623 # be a positive session number, or a negative number to count back from
624 624 # the current session.
625 625 'session' : int,
626 626 # start and stop are line numbers within that session.
627 627 'start' : int,
628 628 'stop' : int,
629 629
630 630 # If hist_access_type is 'tail' or 'search', get the last n cells.
631 631 'n' : int,
632 632
633 633 # If hist_access_type is 'search', get cells matching the specified glob
634 634 # pattern (with * and ? as wildcards).
635 635 'pattern' : str,
636 636
637 637 # If hist_access_type is 'search' and unique is true, do not
638 638 # include duplicated history. Default is false.
639 639 'unique' : bool,
640 640
641 641 }
642 642
643 643 .. versionadded:: 4.0
644 644 The key ``unique`` for ``history_request``.
645 645
646 646 Message type: ``history_reply``::
647 647
648 648 content = {
649 649 # A list of 3 tuples, either:
650 650 # (session, line_number, input) or
651 651 # (session, line_number, (input, output)),
652 652 # depending on whether output was False or True, respectively.
653 653 'history' : list,
654 654 }
655 655
656 656
657 657 Connect
658 658 -------
659 659
660 660 When a client connects to the request/reply socket of the kernel, it can issue
661 661 a connect request to get basic information about the kernel, such as the ports
662 662 the other ZeroMQ sockets are listening on. This allows clients to only have
663 663 to know about a single port (the shell channel) to connect to a kernel.
664 664
665 665 Message type: ``connect_request``::
666 666
667 667 content = {
668 668 }
669 669
670 670 Message type: ``connect_reply``::
671 671
672 672 content = {
673 673 'shell_port' : int # The port the shell ROUTER socket is listening on.
674 674 'iopub_port' : int # The port the PUB socket is listening on.
675 675 'stdin_port' : int # The port the stdin ROUTER socket is listening on.
676 676 'hb_port' : int # The port the heartbeat socket is listening on.
677 677 }
678 678
679 679
680 680 Kernel info
681 681 -----------
682 682
683 683 If a client needs to know what protocol the kernel supports, it can
684 684 ask version number of the messaging protocol supported by the kernel.
685 685 This message can be used to fetch other core information of the
686 686 kernel, including language (e.g., Python), language version number and
687 687 IPython version number.
688 688
689 689 Message type: ``kernel_info_request``::
690 690
691 691 content = {
692 692 }
693 693
694 694 Message type: ``kernel_info_reply``::
695 695
696 696 content = {
697 697 # Version of messaging protocol (mandatory).
698 698 # The first integer indicates major version. It is incremented when
699 699 # there is any backward incompatible change.
700 700 # The second integer indicates minor version. It is incremented when
701 701 # there is any backward compatible change.
702 702 'protocol_version': [int, int],
703 703
704 704 # IPython version number (optional).
705 705 # Non-python kernel backend may not have this version number.
706 706 # The last component is an extra field, which may be 'dev' or
707 707 # 'rc1' in development version. It is an empty string for
708 708 # released version.
709 709 'ipython_version': [int, int, int, str],
710 710
711 711 # Language version number (mandatory).
712 712 # It is Python version number (e.g., [2, 7, 3]) for the kernel
713 713 # included in IPython.
714 714 'language_version': [int, ...],
715 715
716 716 # Programming language in which kernel is implemented (mandatory).
717 717 # Kernel included in IPython returns 'python'.
718 718 'language': str,
719 719 }
720 720
721 721
722 722 Kernel shutdown
723 723 ---------------
724 724
725 725 The clients can request the kernel to shut itself down; this is used in
726 726 multiple cases:
727 727
728 728 - when the user chooses to close the client application via a menu or window
729 729 control.
730 730 - when the user types 'exit' or 'quit' (or their uppercase magic equivalents).
731 731 - when the user chooses a GUI method (like the 'Ctrl-C' shortcut in the
732 732 IPythonQt client) to force a kernel restart to get a clean kernel without
733 733 losing client-side state like history or inlined figures.
734 734
735 735 The client sends a shutdown request to the kernel, and once it receives the
736 736 reply message (which is otherwise empty), it can assume that the kernel has
737 737 completed shutdown safely.
738 738
739 739 Upon their own shutdown, client applications will typically execute a last
740 740 minute sanity check and forcefully terminate any kernel that is still alive, to
741 741 avoid leaving stray processes in the user's machine.
742 742
743 743 For both shutdown request and reply, there is no actual content that needs to
744 744 be sent, so the content dict is empty.
745 745
746 746 Message type: ``shutdown_request``::
747 747
748 748 content = {
749 749 'restart' : bool # whether the shutdown is final, or precedes a restart
750 750 }
751 751
752 752 Message type: ``shutdown_reply``::
753 753
754 754 content = {
755 755 'restart' : bool # whether the shutdown is final, or precedes a restart
756 756 }
757 757
758 758 .. Note::
759 759
760 760 When the clients detect a dead kernel thanks to inactivity on the heartbeat
761 761 socket, they simply send a forceful process termination signal, since a dead
762 762 process is unlikely to respond in any useful way to messages.
763 763
764 764
765 765 Messages on the PUB/SUB socket
766 766 ==============================
767 767
768 768 Streams (stdout, stderr, etc)
769 769 ------------------------------
770 770
771 771 Message type: ``stream``::
772 772
773 773 content = {
774 774 # The name of the stream is one of 'stdin', 'stdout', 'stderr'
775 775 'name' : str,
776 776
777 777 # The data is an arbitrary string to be written to that stream
778 778 'data' : str,
779 779 }
780 780
781 781 When a kernel receives a raw_input call, it should also broadcast it on the pub
782 782 socket with the names 'stdin' and 'stdin_reply'. This will allow other clients
783 783 to monitor/display kernel interactions and possibly replay them to their user
784 784 or otherwise expose them.
785 785
786 786 Display Data
787 787 ------------
788 788
789 789 This type of message is used to bring back data that should be diplayed (text,
790 790 html, svg, etc.) in the frontends. This data is published to all frontends.
791 791 Each message can have multiple representations of the data; it is up to the
792 792 frontend to decide which to use and how. A single message should contain all
793 793 possible representations of the same information. Each representation should
794 794 be a JSON'able data structure, and should be a valid MIME type.
795 795
796 796 Some questions remain about this design:
797 797
798 798 * Do we use this message type for pyout/displayhook? Probably not, because
799 799 the displayhook also has to handle the Out prompt display. On the other hand
800 800 we could put that information into the metadata secion.
801 801
802 802 Message type: ``display_data``::
803 803
804 804 content = {
805 805
806 806 # Who create the data
807 807 'source' : str,
808 808
809 809 # The data dict contains key/value pairs, where the kids are MIME
810 810 # types and the values are the raw data of the representation in that
811 811 # format. The data dict must minimally contain the ``text/plain``
812 812 # MIME type which is used as a backup representation.
813 813 'data' : dict,
814 814
815 815 # Any metadata that describes the data
816 816 'metadata' : dict
817 817 }
818 818
819 819
820 820 Raw Data Publication
821 821 --------------------
822 822
823 823 ``display_data`` lets you publish *representations* of data, such as images and html.
824 824 This ``data_pub`` message lets you publish *actual raw data*, sent via message buffers.
825 825
826 826 data_pub messages are constructed via the :func:`IPython.lib.datapub.publish_data` function:
827 827
828 828 .. sourcecode:: python
829 829
830 from IPython.zmq.datapub import publish_data
830 from IPython.kernel.zmq.datapub import publish_data
831 831 ns = dict(x=my_array)
832 832 publish_data(ns)
833 833
834 834
835 835 Message type: ``data_pub``::
836 836
837 837 content = {
838 838 # the keys of the data dict, after it has been unserialized
839 839 keys = ['a', 'b']
840 840 }
841 841 # the namespace dict will be serialized in the message buffers,
842 842 # which will have a length of at least one
843 843 buffers = ['pdict', ...]
844 844
845 845
846 846 The interpretation of a sequence of data_pub messages for a given parent request should be
847 847 to update a single namespace with subsequent results.
848 848
849 849 .. note::
850 850
851 851 No frontends directly handle data_pub messages at this time.
852 852 It is currently only used by the client/engines in :mod:`IPython.parallel`,
853 853 where engines may publish *data* to the Client,
854 854 of which the Client can then publish *representations* via ``display_data``
855 855 to various frontends.
856 856
857 857 Python inputs
858 858 -------------
859 859
860 860 These messages are the re-broadcast of the ``execute_request``.
861 861
862 862 Message type: ``pyin``::
863 863
864 864 content = {
865 865 'code' : str, # Source code to be executed, one or more lines
866 866
867 867 # The counter for this execution is also provided so that clients can
868 868 # display it, since IPython automatically creates variables called _iN
869 869 # (for input prompt In[N]).
870 870 'execution_count' : int
871 871 }
872 872
873 873 Python outputs
874 874 --------------
875 875
876 876 When Python produces output from code that has been compiled in with the
877 877 'single' flag to :func:`compile`, any expression that produces a value (such as
878 878 ``1+1``) is passed to ``sys.displayhook``, which is a callable that can do with
879 879 this value whatever it wants. The default behavior of ``sys.displayhook`` in
880 880 the Python interactive prompt is to print to ``sys.stdout`` the :func:`repr` of
881 881 the value as long as it is not ``None`` (which isn't printed at all). In our
882 882 case, the kernel instantiates as ``sys.displayhook`` an object which has
883 883 similar behavior, but which instead of printing to stdout, broadcasts these
884 884 values as ``pyout`` messages for clients to display appropriately.
885 885
886 886 IPython's displayhook can handle multiple simultaneous formats depending on its
887 887 configuration. The default pretty-printed repr text is always given with the
888 888 ``data`` entry in this message. Any other formats are provided in the
889 889 ``extra_formats`` list. Frontends are free to display any or all of these
890 890 according to its capabilities. ``extra_formats`` list contains 3-tuples of an ID
891 891 string, a type string, and the data. The ID is unique to the formatter
892 892 implementation that created the data. Frontends will typically ignore the ID
893 893 unless if it has requested a particular formatter. The type string tells the
894 894 frontend how to interpret the data. It is often, but not always a MIME type.
895 895 Frontends should ignore types that it does not understand. The data itself is
896 896 any JSON object and depends on the format. It is often, but not always a string.
897 897
898 898 Message type: ``pyout``::
899 899
900 900 content = {
901 901
902 902 # The counter for this execution is also provided so that clients can
903 903 # display it, since IPython automatically creates variables called _N
904 904 # (for prompt N).
905 905 'execution_count' : int,
906 906
907 907 # The data dict contains key/value pairs, where the kids are MIME
908 908 # types and the values are the raw data of the representation in that
909 909 # format. The data dict must minimally contain the ``text/plain``
910 910 # MIME type which is used as a backup representation.
911 911 'data' : dict,
912 912
913 913 }
914 914
915 915 Python errors
916 916 -------------
917 917
918 918 When an error occurs during code execution
919 919
920 920 Message type: ``pyerr``::
921 921
922 922 content = {
923 923 # Similar content to the execute_reply messages for the 'error' case,
924 924 # except the 'status' field is omitted.
925 925 }
926 926
927 927 Kernel status
928 928 -------------
929 929
930 930 This message type is used by frontends to monitor the status of the kernel.
931 931
932 932 Message type: ``status``::
933 933
934 934 content = {
935 935 # When the kernel starts to execute code, it will enter the 'busy'
936 936 # state and when it finishes, it will enter the 'idle' state.
937 937 execution_state : ('busy', 'idle')
938 938 }
939 939
940 940 Kernel crashes
941 941 --------------
942 942
943 943 When the kernel has an unexpected exception, caught by the last-resort
944 944 sys.excepthook, we should broadcast the crash handler's output before exiting.
945 945 This will allow clients to notice that a kernel died, inform the user and
946 946 propose further actions.
947 947
948 948 Message type: ``crash``::
949 949
950 950 content = {
951 951 # Similarly to the 'error' case for execute_reply messages, this will
952 952 # contain ename, etype and traceback fields.
953 953
954 954 # An additional field with supplementary information such as where to
955 955 # send the crash message
956 956 'info' : str,
957 957 }
958 958
959 959
960 960 Future ideas
961 961 ------------
962 962
963 963 Other potential message types, currently unimplemented, listed below as ideas.
964 964
965 965 Message type: ``file``::
966 966
967 967 content = {
968 968 'path' : 'cool.jpg',
969 969 'mimetype' : str,
970 970 'data' : str,
971 971 }
972 972
973 973
974 974 Messages on the stdin ROUTER/DEALER sockets
975 975 ===========================================
976 976
977 977 This is a socket where the request/reply pattern goes in the opposite direction:
978 978 from the kernel to a *single* frontend, and its purpose is to allow
979 979 ``raw_input`` and similar operations that read from ``sys.stdin`` on the kernel
980 980 to be fulfilled by the client. The request should be made to the frontend that
981 981 made the execution request that prompted ``raw_input`` to be called. For now we
982 982 will keep these messages as simple as possible, since they only mean to convey
983 983 the ``raw_input(prompt)`` call.
984 984
985 985 Message type: ``input_request``::
986 986
987 987 content = { 'prompt' : str }
988 988
989 989 Message type: ``input_reply``::
990 990
991 991 content = { 'value' : str }
992 992
993 993 .. Note::
994 994
995 995 We do not explicitly try to forward the raw ``sys.stdin`` object, because in
996 996 practice the kernel should behave like an interactive program. When a
997 997 program is opened on the console, the keyboard effectively takes over the
998 998 ``stdin`` file descriptor, and it can't be used for raw reading anymore.
999 999 Since the IPython kernel effectively behaves like a console program (albeit
1000 1000 one whose "keyboard" is actually living in a separate process and
1001 1001 transported over the zmq connection), raw ``stdin`` isn't expected to be
1002 1002 available.
1003 1003
1004 1004
1005 1005 Heartbeat for kernels
1006 1006 =====================
1007 1007
1008 1008 Initially we had considered using messages like those above over ZMQ for a
1009 1009 kernel 'heartbeat' (a way to detect quickly and reliably whether a kernel is
1010 1010 alive at all, even if it may be busy executing user code). But this has the
1011 1011 problem that if the kernel is locked inside extension code, it wouldn't execute
1012 1012 the python heartbeat code. But it turns out that we can implement a basic
1013 1013 heartbeat with pure ZMQ, without using any Python messaging at all.
1014 1014
1015 1015 The monitor sends out a single zmq message (right now, it is a str of the
1016 1016 monitor's lifetime in seconds), and gets the same message right back, prefixed
1017 1017 with the zmq identity of the DEALER socket in the heartbeat process. This can be
1018 1018 a uuid, or even a full message, but there doesn't seem to be a need for packing
1019 1019 up a message when the sender and receiver are the exact same Python object.
1020 1020
1021 1021 The model is this::
1022 1022
1023 1023 monitor.send(str(self.lifetime)) # '1.2345678910'
1024 1024
1025 1025 and the monitor receives some number of messages of the form::
1026 1026
1027 1027 ['uuid-abcd-dead-beef', '1.2345678910']
1028 1028
1029 1029 where the first part is the zmq.IDENTITY of the heart's DEALER on the engine, and
1030 1030 the rest is the message sent by the monitor. No Python code ever has any
1031 1031 access to the message between the monitor's send, and the monitor's recv.
1032 1032
1033 1033
1034 1034 ToDo
1035 1035 ====
1036 1036
1037 1037 Missing things include:
1038 1038
1039 1039 * Important: finish thinking through the payload concept and API.
1040 1040
1041 1041 * Important: ensure that we have a good solution for magics like %edit. It's
1042 1042 likely that with the payload concept we can build a full solution, but not
1043 1043 100% clear yet.
1044 1044
1045 1045 * Finishing the details of the heartbeat protocol.
1046 1046
1047 1047 * Signal handling: specify what kind of information kernel should broadcast (or
1048 1048 not) when it receives signals.
1049 1049
1050 1050 .. include:: ../links.rst
@@ -1,367 +1,367 b''
1 1 .. _parallel_messages:
2 2
3 3 Messaging for Parallel Computing
4 4 ================================
5 5
6 6 This is an extension of the :ref:`messaging <messaging>` doc. Diagrams of the connections
7 7 can be found in the :ref:`parallel connections <parallel_connections>` doc.
8 8
9 9
10 10 ZMQ messaging is also used in the parallel computing IPython system. All messages to/from
11 11 kernels remain the same as the single kernel model, and are forwarded through a ZMQ Queue
12 12 device. The controller receives all messages and replies in these channels, and saves
13 13 results for future use.
14 14
15 15 The Controller
16 16 --------------
17 17
18 18 The controller is the central collection of processes in the IPython parallel computing
19 19 model. It has two major components:
20 20
21 21 * The Hub
22 22 * A collection of Schedulers
23 23
24 24 The Hub
25 25 -------
26 26
27 27 The Hub is the central process for monitoring the state of the engines, and all task
28 28 requests and results. It has no role in execution and does no relay of messages, so
29 29 large blocking requests or database actions in the Hub do not have the ability to impede
30 30 job submission and results.
31 31
32 32 Registration (``ROUTER``)
33 33 *************************
34 34
35 35 The first function of the Hub is to facilitate and monitor connections of clients
36 36 and engines. Both client and engine registration are handled by the same socket, so only
37 37 one ip/port pair is needed to connect any number of connections and clients.
38 38
39 39 Engines register with the ``zmq.IDENTITY`` of their two ``DEALER`` sockets, one for the
40 40 queue, which receives execute requests, and one for the heartbeat, which is used to
41 41 monitor the survival of the Engine process.
42 42
43 43 Message type: ``registration_request``::
44 44
45 45 content = {
46 46 'uuid' : 'abcd-1234-...', # the zmq.IDENTITY of the engine's sockets
47 47 }
48 48
49 49 .. note::
50 50
51 51 these are always the same, at least for now.
52 52
53 53 The Controller replies to an Engine's registration request with the engine's integer ID,
54 54 and all the remaining connection information for connecting the heartbeat process, and
55 55 kernel queue socket(s). The message status will be an error if the Engine requests IDs that
56 56 already in use.
57 57
58 58 Message type: ``registration_reply``::
59 59
60 60 content = {
61 61 'status' : 'ok', # or 'error'
62 62 # if ok:
63 63 'id' : 0, # int, the engine id
64 64 }
65 65
66 66 Clients use the same socket as engines to start their connections. Connection requests
67 67 from clients need no information:
68 68
69 69 Message type: ``connection_request``::
70 70
71 71 content = {}
72 72
73 73 The reply to a Client registration request contains the connection information for the
74 74 multiplexer and load balanced queues, as well as the address for direct hub
75 75 queries. If any of these addresses is `None`, that functionality is not available.
76 76
77 77 Message type: ``connection_reply``::
78 78
79 79 content = {
80 80 'status' : 'ok', # or 'error'
81 81 }
82 82
83 83 Heartbeat
84 84 *********
85 85
86 86 The hub uses a heartbeat system to monitor engines, and track when they become
87 87 unresponsive. As described in :ref:`messaging <messaging>`, and shown in :ref:`connections
88 88 <parallel_connections>`.
89 89
90 90 Notification (``PUB``)
91 91 **********************
92 92
93 93 The hub publishes all engine registration/unregistration events on a ``PUB`` socket.
94 94 This allows clients to have up-to-date engine ID sets without polling. Registration
95 95 notifications contain both the integer engine ID and the queue ID, which is necessary for
96 96 sending messages via the Multiplexer Queue and Control Queues.
97 97
98 98 Message type: ``registration_notification``::
99 99
100 100 content = {
101 101 'id' : 0, # engine ID that has been registered
102 102 'uuid' : 'engine_id' # the IDENT for the engine's sockets
103 103 }
104 104
105 105 Message type : ``unregistration_notification``::
106 106
107 107 content = {
108 108 'id' : 0 # engine ID that has been unregistered
109 109 'uuid' : 'engine_id' # the IDENT for the engine's sockets
110 110 }
111 111
112 112
113 113 Client Queries (``ROUTER``)
114 114 ***************************
115 115
116 116 The hub monitors and logs all queue traffic, so that clients can retrieve past
117 117 results or monitor pending tasks. This information may reside in-memory on the Hub, or
118 118 on disk in a database (SQLite and MongoDB are currently supported). These requests are
119 119 handled by the same socket as registration.
120 120
121 121
122 122 :func:`queue_request` requests can specify multiple engines to query via the `targets`
123 123 element. A verbose flag can be passed, to determine whether the result should be the list
124 124 of `msg_ids` in the queue or simply the length of each list.
125 125
126 126 Message type: ``queue_request``::
127 127
128 128 content = {
129 129 'verbose' : True, # whether return should be lists themselves or just lens
130 130 'targets' : [0,3,1] # list of ints
131 131 }
132 132
133 133 The content of a reply to a :func:`queue_request` request is a dict, keyed by the engine
134 134 IDs. Note that they will be the string representation of the integer keys, since JSON
135 135 cannot handle number keys. The three keys of each dict are::
136 136
137 137 'completed' : messages submitted via any queue that ran on the engine
138 138 'queue' : jobs submitted via MUX queue, whose results have not been received
139 139 'tasks' : tasks that are known to have been submitted to the engine, but
140 140 have not completed. Note that with the pure zmq scheduler, this will
141 141 always be 0/[].
142 142
143 143 Message type: ``queue_reply``::
144 144
145 145 content = {
146 146 'status' : 'ok', # or 'error'
147 147 # if verbose=False:
148 148 '0' : {'completed' : 1, 'queue' : 7, 'tasks' : 0},
149 149 # if verbose=True:
150 150 '1' : {'completed' : ['abcd-...','1234-...'], 'queue' : ['58008-'], 'tasks' : []},
151 151 }
152 152
153 153 Clients can request individual results directly from the hub. This is primarily for
154 154 gathering results of executions not submitted by the requesting client, as the client
155 155 will have all its own results already. Requests are made by msg_id, and can contain one or
156 156 more msg_id. An additional boolean key 'statusonly' can be used to not request the
157 157 results, but simply poll the status of the jobs.
158 158
159 159 Message type: ``result_request``::
160 160
161 161 content = {
162 162 'msg_ids' : ['uuid','...'], # list of strs
163 163 'targets' : [1,2,3], # list of int ids or uuids
164 164 'statusonly' : False, # bool
165 165 }
166 166
167 167 The :func:`result_request` reply contains the content objects of the actual execution
168 168 reply messages. If `statusonly=True`, then there will be only the 'pending' and
169 169 'completed' lists.
170 170
171 171
172 172 Message type: ``result_reply``::
173 173
174 174 content = {
175 175 'status' : 'ok', # else error
176 176 # if ok:
177 177 'acbd-...' : msg, # the content dict is keyed by msg_ids,
178 178 # values are the result messages
179 179 # there will be none of these if `statusonly=True`
180 180 'pending' : ['msg_id','...'], # msg_ids still pending
181 181 'completed' : ['msg_id','...'], # list of completed msg_ids
182 182 }
183 183 buffers = ['bufs','...'] # the buffers that contained the results of the objects.
184 184 # this will be empty if no messages are complete, or if
185 185 # statusonly is True.
186 186
187 187 For memory management purposes, Clients can also instruct the hub to forget the
188 188 results of messages. This can be done by message ID or engine ID. Individual messages are
189 189 dropped by msg_id, and all messages completed on an engine are dropped by engine ID. This
190 190 may no longer be necessary with the mongodb-based message logging backend.
191 191
192 192 If the msg_ids element is the string ``'all'`` instead of a list, then all completed
193 193 results are forgotten.
194 194
195 195 Message type: ``purge_request``::
196 196
197 197 content = {
198 198 'msg_ids' : ['id1', 'id2',...], # list of msg_ids or 'all'
199 199 'engine_ids' : [0,2,4] # list of engine IDs
200 200 }
201 201
202 202 The reply to a purge request is simply the status 'ok' if the request succeeded, or an
203 203 explanation of why it failed, such as requesting the purge of a nonexistent or pending
204 204 message.
205 205
206 206 Message type: ``purge_reply``::
207 207
208 208 content = {
209 209 'status' : 'ok', # or 'error'
210 210 }
211 211
212 212
213 213 Schedulers
214 214 ----------
215 215
216 216 There are three basic schedulers:
217 217
218 218 * Task Scheduler
219 219 * MUX Scheduler
220 220 * Control Scheduler
221 221
222 222 The MUX and Control schedulers are simple MonitoredQueue ØMQ devices, with ``ROUTER``
223 223 sockets on either side. This allows the queue to relay individual messages to particular
224 224 targets via ``zmq.IDENTITY`` routing. The Task scheduler may be a MonitoredQueue ØMQ
225 225 device, in which case the client-facing socket is ``ROUTER``, and the engine-facing socket
226 226 is ``DEALER``. The result of this is that client-submitted messages are load-balanced via
227 227 the ``DEALER`` socket, but the engine's replies to each message go to the requesting client.
228 228
229 229 Raw ``DEALER`` scheduling is quite primitive, and doesn't allow message introspection, so
230 230 there are also Python Schedulers that can be used. These Schedulers behave in much the
231 231 same way as a MonitoredQueue does from the outside, but have rich internal logic to
232 232 determine destinations, as well as handle dependency graphs Their sockets are always
233 233 ``ROUTER`` on both sides.
234 234
235 235 The Python task schedulers have an additional message type, which informs the Hub of
236 236 the destination of a task as soon as that destination is known.
237 237
238 238 Message type: ``task_destination``::
239 239
240 240 content = {
241 241 'msg_id' : 'abcd-1234-...', # the msg's uuid
242 242 'engine_id' : '1234-abcd-...', # the destination engine's zmq.IDENTITY
243 243 }
244 244
245 245 :func:`apply`
246 246 *************
247 247
248 248 In terms of message classes, the MUX scheduler and Task scheduler relay the exact same
249 249 message types. Their only difference lies in how the destination is selected.
250 250
251 251 The `Namespace <http://gist.github.com/483294>`_ model suggests that execution be able to
252 252 use the model::
253 253
254 254 ns.apply(f, *args, **kwargs)
255 255
256 256 which takes `f`, a function in the user's namespace, and executes ``f(*args, **kwargs)``
257 257 on a remote engine, returning the result (or, for non-blocking, information facilitating
258 258 later retrieval of the result). This model, unlike the execute message which just uses a
259 259 code string, must be able to send arbitrary (pickleable) Python objects. And ideally, copy
260 260 as little data as we can. The `buffers` property of a Message was introduced for this
261 261 purpose.
262 262
263 Utility method :func:`build_apply_message` in :mod:`IPython.zmq.serialize` wraps a
263 Utility method :func:`build_apply_message` in :mod:`IPython.kernel.zmq.serialize` wraps a
264 264 function signature and builds a sendable buffer format for minimal data copying (exactly
265 265 zero copies of numpy array data or buffers or large strings).
266 266
267 267 Message type: ``apply_request``::
268 268
269 269 metadata = {
270 270 'after' : ['msg_id',...], # list of msg_ids or output of Dependency.as_dict()
271 271 'follow' : ['msg_id',...], # list of msg_ids or output of Dependency.as_dict()
272 272 }
273 273 content = {}
274 274 buffers = ['...'] # at least 3 in length
275 275 # as built by build_apply_message(f,args,kwargs)
276 276
277 277 after/follow represent task dependencies. 'after' corresponds to a time dependency. The
278 278 request will not arrive at an engine until the 'after' dependency tasks have completed.
279 279 'follow' corresponds to a location dependency. The task will be submitted to the same
280 280 engine as these msg_ids (see :class:`Dependency` docs for details).
281 281
282 282 Message type: ``apply_reply``::
283 283
284 284 content = {
285 285 'status' : 'ok' # 'ok' or 'error'
286 286 # other error info here, as in other messages
287 287 }
288 288 buffers = ['...'] # either 1 or 2 in length
289 289 # a serialization of the return value of f(*args,**kwargs)
290 290 # only populated if status is 'ok'
291 291
292 292 All engine execution and data movement is performed via apply messages.
293 293
294 294 Control Messages
295 295 ----------------
296 296
297 297 Messages that interact with the engines, but are not meant to execute code, are submitted
298 298 via the Control queue. These messages have high priority, and are thus received and
299 299 handled before any execution requests.
300 300
301 301 Clients may want to clear the namespace on the engine. There are no arguments nor
302 302 information involved in this request, so the content is empty.
303 303
304 304 Message type: ``clear_request``::
305 305
306 306 content = {}
307 307
308 308 Message type: ``clear_reply``::
309 309
310 310 content = {
311 311 'status' : 'ok' # 'ok' or 'error'
312 312 # other error info here, as in other messages
313 313 }
314 314
315 315 Clients may want to abort tasks that have not yet run. This can by done by message id, or
316 316 all enqueued messages can be aborted if None is specified.
317 317
318 318 Message type: ``abort_request``::
319 319
320 320 content = {
321 321 'msg_ids' : ['1234-...', '...'] # list of msg_ids or None
322 322 }
323 323
324 324 Message type: ``abort_reply``::
325 325
326 326 content = {
327 327 'status' : 'ok' # 'ok' or 'error'
328 328 # other error info here, as in other messages
329 329 }
330 330
331 331 The last action a client may want to do is shutdown the kernel. If a kernel receives a
332 332 shutdown request, then it aborts all queued messages, replies to the request, and exits.
333 333
334 334 Message type: ``shutdown_request``::
335 335
336 336 content = {}
337 337
338 338 Message type: ``shutdown_reply``::
339 339
340 340 content = {
341 341 'status' : 'ok' # 'ok' or 'error'
342 342 # other error info here, as in other messages
343 343 }
344 344
345 345
346 346 Implementation
347 347 --------------
348 348
349 349 There are a few differences in implementation between the `StreamSession` object used in
350 350 the newparallel branch and the `Session` object, the main one being that messages are
351 351 sent in parts, rather than as a single serialized object. `StreamSession` objects also
352 352 take pack/unpack functions, which are to be used when serializing/deserializing objects.
353 353 These can be any functions that translate to/from formats that ZMQ sockets can send
354 354 (buffers,bytes, etc.).
355 355
356 356 Split Sends
357 357 ***********
358 358
359 359 Previously, messages were bundled as a single json object and one call to
360 360 :func:`socket.send_json`. Since the hub inspects all messages, and doesn't need to
361 361 see the content of the messages, which can be large, messages are now serialized and sent in
362 362 pieces. All messages are sent in at least 4 parts: the header, the parent header, the metadata and the content.
363 363 This allows the controller to unpack and inspect the (always small) header,
364 364 without spending time unpacking the content unless the message is bound for the
365 365 controller. Buffers are added on to the end of the message, and can be any objects that
366 366 present the buffer interface.
367 367
@@ -1,85 +1,85 b''
1 1 .. _module_reorg:
2 2
3 3 ===========================
4 4 IPython module organization
5 5 ===========================
6 6
7 7 As of the 0.11 release of IPython, the top-level packages and modules have
8 8 been completely reorganized. This section describes the purpose of the
9 9 top-level IPython subpackages.
10 10
11 11 Subpackage descriptions
12 12 =======================
13 13
14 14 * :mod:`IPython.config`. This package contains the :ref:`configuration system
15 15 <config_index>` of IPython, as well as default configuration files for the
16 16 different IPython applications.
17 17
18 18 * :mod:`IPython.core`. This sub-package contains the core of the IPython
19 19 interpreter, but none of its extended capabilities.
20 20
21 21 * :mod:`IPython.deathrow`. This is for code that is outdated, untested,
22 22 rotting, or that belongs in a separate third party project. Eventually all
23 23 this code will either 1) be revived by someone willing to maintain it with
24 24 tests and docs and re-included into IPython or 2) be removed from IPython
25 25 proper, but put into a separate third-party Python package. No new code will
26 26 be allowed here. If your favorite extension has been moved here please
27 27 contact the IPython developer mailing list to help us determine the best
28 28 course of action.
29 29
30 30 * :mod:`IPython.extensions`. This package contains fully supported IPython
31 31 extensions. These extensions adhere to the official IPython extension API
32 32 and can be enabled by adding them to a field in the configuration file.
33 33 If your extension is no longer in this location, please look in
34 34 :mod:`IPython.quarantine` and :mod:`IPython.deathrow` and contact the
35 35 IPython developer mailing list.
36 36
37 37 * :mod:`IPython.external`. This package contains third party packages and
38 38 modules that IPython ships internally to reduce the number of dependencies.
39 39 Usually, these are short, single file modules.
40 40
41 41 * :mod:`IPython.frontend`. This package contains the various IPython
42 frontends which communicate with the :mod:`IPython.zmq` kernels (see
42 frontends which communicate with the :mod:`IPython.kernel.zmq` kernels (see
43 43 :ref:`Messaging in IPython <messaging>`). This includes the
44 44 :ref:`ipython notebook <htmlnotebook>`, :ref:`ipython qtconsole
45 45 <qtconsole>`, and :ref:`ipython console <two_process_console>` entry points.
46 46
47 47 * :mod:`IPython.lib`. IPython has many extended capabilities that are not part
48 48 of the IPython core. These things will go here and in. Modules in this
49 49 package are similar to extensions, but don't adhere to the official
50 50 IPython extension API.
51 51
52 52 * :mod:`IPython.nbformat`. This package contains code related to reading and
53 53 writing :ref:`IPython Notebook's <htmlnotebook>` file format (`.ipynb`
54 54 files).
55 55
56 56 * :mod:`IPython.parallel`. This contains :ref:`IPython's parallel computing
57 57 system <parallel_index>`. This previously lived under :mod:`IPython.kernel`,
58 58 but that module has been deprecated.
59 59
60 60 * :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's
61 61 standards, but that we plan on keeping. To be moved out of this sub-package
62 62 a module needs to have approval of the core IPython developers, tests and
63 63 documentation. If your favorite extension has been moved here please contact
64 64 the IPython developer mailing list to help us determine the best course of
65 65 action.
66 66
67 67 * :mod:`IPython.scripts`. This package contains a variety of top-level
68 68 command line scripts. Eventually, these should be moved to the
69 69 :file:`scripts` subdirectory of the appropriate IPython subpackage.
70 70
71 71 * :mod:`IPython.testing`. This package contains code related to the IPython
72 72 test suite, which locates and executes the `tests` submodules of all
73 73 IPython sub-packages. It also contains decorators and utilities relevant for
74 74 testing.
75 75
76 76 * :mod:`IPython.utils`. This sub-package will contain anything that might
77 77 eventually be found in the Python standard library, like things in
78 78 :mod:`genutils`. Each sub-module in this sub-package should contain
79 79 functions and classes that serve a single purpose and that don't
80 80 depend on things in the rest of IPython.
81 81
82 * :mod:`IPython.zmq`. This sub-package contains code related to starting and
83 managing IPython kernels, which :mod:`IPython.frontend` instances can then
82 * :mod:`IPython.kernel.zmq`. This sub-package contains code related to starting
83 and managing IPython kernels, which :mod:`IPython.frontend` instances can then
84 84 communicate with (see :ref:`Messaging in IPython <messaging>`).
85 85
@@ -1,395 +1,395 b''
1 1 Overview
2 2 ========
3 3
4 4 This document describes the steps required to install IPython. IPython is
5 5 organized into a number of subpackages, each of which has its own dependencies.
6 6 All of the subpackages come with IPython, so you don't need to download and
7 7 install them separately. However, to use a given subpackage, you will need to
8 8 install all of its dependencies.
9 9
10 10 Please let us know if you have problems installing IPython or any of its
11 11 dependencies. Officially, IPython requires Python 2.6, 2.7, 3.1, or 3.2.
12 12
13 13 .. warning::
14 14
15 15 Since version 0.11, IPython has a hard syntax dependency on 2.6, and will no
16 16 longer work on Python <= 2.5. You can find older versions of IPython which
17 17 supported Python <= 2.5 `here <http://archive.ipython.org/release/>`_
18 18
19 19 Some of the installation approaches use the :mod:`distribute` package and its
20 20 :command:`easy_install` command line program. In many scenarios, this provides
21 21 the most simple method of installing IPython and its dependencies. More
22 22 information about :mod:`distribute` can be found on `its PyPI page
23 23 <http://pypi.python.org/pypi/distribute>`__.
24 24
25 25 .. note::
26 26
27 27 On Windows, IPython has a hard dependency on :mod:`distribute`. We hope to
28 28 change this in the future, but for now on Windows, you *must* install
29 29 :mod:`distribute`.
30 30
31 31 More general information about installing Python packages can be found in
32 32 `Python's documentation <http://docs.python.org>`_.
33 33
34 34
35 35 Quickstart
36 36 ==========
37 37
38 38 If you have :mod:`distribute` installed and you are on OS X or Linux (not
39 39 Windows), the following will download and install IPython *and* the main
40 40 optional dependencies:
41 41
42 42 .. code-block:: bash
43 43
44 44 $ easy_install ipython[zmq,qtconsole,notebook,test]
45 45
46 46 This will get:
47 47
48 48 - jinja2, needed for the notebook
49 49 - pyzmq, needed for IPython's parallel computing features, qt console and
50 50 notebook.
51 51 - pygments, used by the Qt console for syntax highlighting.
52 52 - tornado, needed by the web-based notebook
53 53 - nose, used by the test suite.
54 54
55 55 To run IPython's test suite, use the :command:`iptest` command:
56 56
57 57 .. code-block:: bash
58 58
59 59 $ iptest
60 60
61 61
62 62 Installing IPython itself
63 63 =========================
64 64
65 65 Given a properly built Python, the basic interactive IPython shell will work
66 66 with no external dependencies. However, some Python distributions
67 67 (particularly on Windows and OS X), don't come with a working :mod:`readline`
68 68 module. The IPython shell will work without :mod:`readline`, but will lack
69 69 many features that users depend on, such as tab completion and command line
70 70 editing. If you install IPython with :mod:`distribute`, (e.g. with
71 71 `easy_install`), then the appropriate :mod:`readline` for your platform will be
72 72 installed. See below for details of how to make sure you have a working
73 73 :mod:`readline`.
74 74
75 75 Installation using easy_install
76 76 -------------------------------
77 77
78 78 If you have :mod:`distribute` installed, the easiest way of getting IPython is
79 79 to simply use :command:`easy_install`:
80 80
81 81 .. code-block:: bash
82 82
83 83 $ easy_install ipython
84 84
85 85 That's it.
86 86
87 87 Installation from source
88 88 ------------------------
89 89
90 90 If you don't want to use :command:`easy_install`, or don't have it installed,
91 91 just grab the latest stable build of IPython from `here
92 92 <http://ipython.org/download.html>`_. Then do the following:
93 93
94 94 .. code-block:: bash
95 95
96 96 $ tar -xzf ipython.tar.gz
97 97 $ cd ipython
98 98 $ python setup.py install
99 99
100 100 If you are installing to a location (like ``/usr/local``) that requires higher
101 101 permissions, you may need to run the last command with :command:`sudo`.
102 102
103 103 Windows
104 104 -------
105 105
106 106 As mentioned above, on Windows, IPython requires :mod:`distribute`, and it also
107 107 requires the PyReadline library to properly support coloring and keyboard
108 108 management (features that the default windows console doesn't have). So on
109 109 Windows, the installation procedure is:
110 110
111 111 1. Install `distribute <http://pypi.python.org/pypi/distribute>`_.
112 112
113 113 2. Install `pyreadline <http://pypi.python.org/pypi/pyreadline>`_. You can use
114 114 the command ``easy_install pyreadline`` from a terminal, or the binary
115 115 installer appropriate for your platform from the PyPI page.
116 116
117 117 3. Install IPython itself, which you can download from `PyPI
118 118 <http://pypi.python.org/pypi/ipython>`_ or from `our site
119 119 <http://ipython.org/download.html>`_. Note that on Windows 7, you *must*
120 120 right-click and 'Run as administrator' for the Start menu shortcuts to be
121 121 created.
122 122
123 123 IPython by default runs in a terminal window, but the normal terminal
124 124 application supplied by Microsoft Windows is very primitive. You may want to
125 125 download the excellent and free Console_ application instead, which is a far
126 126 superior tool. You can even configure Console to give you by default an
127 127 IPython tab, which is very convenient to create new IPython sessions directly
128 128 from the working terminal.
129 129
130 130 .. _Console: http://sourceforge.net/projects/console
131 131
132 132
133 133 Installing the development version
134 134 ----------------------------------
135 135
136 136 It is also possible to install the development version of IPython from our
137 137 `Git <http://git-scm.com/>`_ source code repository. To do this you will
138 138 need to have Git installed on your system. Then just do:
139 139
140 140 .. code-block:: bash
141 141
142 142 $ git clone https://github.com/ipython/ipython.git
143 143 $ cd ipython
144 144 $ python setup.py install
145 145
146 146 Some users want to be able to follow the development branch as it changes. If
147 147 you have :mod:`distribute` installed, this is easy. Simply replace the last
148 148 step by:
149 149
150 150 .. code-block:: bash
151 151
152 152 $ python setupegg.py develop
153 153
154 154 This creates links in the right places and installs the command line script to
155 155 the appropriate places. Then, if you want to update your IPython at any time,
156 156 just do:
157 157
158 158 .. code-block:: bash
159 159
160 160 $ git pull
161 161
162 162
163 163 Basic optional dependencies
164 164 ===========================
165 165
166 166 There are a number of basic optional dependencies that most users will want to
167 167 get. These are:
168 168
169 169 * readline (for command line editing, tab completion, etc.)
170 170 * nose (to run the IPython test suite)
171 171 * pexpect (to use things like irunner)
172 172
173 173 If you are comfortable installing these things yourself, have at it, otherwise
174 174 read on for more details.
175 175
176 176 readline
177 177 --------
178 178
179 179 As indicated above, on Windows, PyReadline is a *mandatory* dependency.
180 180 PyReadline is a separate, Windows only implementation of readline that uses
181 181 native Windows calls through :mod:`ctypes`. The easiest way of installing
182 182 PyReadline is you use the binary installer available `here
183 183 <http://pypi.python.org/pypi/pyreadline>`_.
184 184
185 185 On OSX, if you are using the built-in Python shipped by Apple, you will be
186 186 missing a full readline implementation as Apple ships instead a library called
187 187 ``libedit`` that provides only some of readline's functionality. While you may
188 188 find libedit sufficient, we have occasional reports of bugs with it and several
189 189 developers who use OS X as their main environment consider libedit unacceptable
190 190 for productive, regular use with IPython.
191 191
192 192 Therefore, we *strongly* recommend that on OS X you get the full
193 193 :mod:`readline` module. We will *not* consider completion/history problems to
194 194 be bugs for IPython if you are using libedit.
195 195
196 196 To get a working :mod:`readline` module, just do (with :mod:`distribute`
197 197 installed):
198 198
199 199 .. code-block:: bash
200 200
201 201 $ easy_install readline
202 202
203 203 .. note::
204 204
205 205 Other Python distributions on OS X (such as fink, MacPorts and the official
206 206 python.org binaries) already have readline installed so you likely don't
207 207 have to do this step.
208 208
209 209 When IPython is installed with :mod:`distribute`, (e.g. using the
210 210 ``easy_install`` command), readline is added as a dependency on OS X, and
211 211 PyReadline on Windows, and will be installed on your system. However, if you
212 212 do not use distribute, you may have to install one of these packages yourself.
213 213
214 214
215 215 nose
216 216 ----
217 217
218 218 To run the IPython test suite you will need the :mod:`nose` package. Nose
219 219 provides a great way of sniffing out and running all of the IPython tests. The
220 220 simplest way of getting nose, is to use :command:`easy_install`:
221 221
222 222 .. code-block:: bash
223 223
224 224 $ easy_install nose
225 225
226 226 Another way of getting this is to do:
227 227
228 228 .. code-block:: bash
229 229
230 230 $ easy_install ipython[test]
231 231
232 232 For more installation options, see the `nose website
233 233 <http://somethingaboutorange.com/mrl/projects/nose/>`_.
234 234
235 235 Once you have nose installed, you can run IPython's test suite using the
236 236 iptest command:
237 237
238 238 .. code-block:: bash
239 239
240 240 $ iptest
241 241
242 242 pexpect
243 243 -------
244 244
245 245 The pexpect_ package is used in IPython's :command:`irunner` script, as well as
246 246 for managing subprocesses. IPython now includes a version of pexpect in
247 247 :mod:`IPython.external`, but if you have installed pexpect, IPython will use
248 248 that instead. On Unix platforms (including OS X), just do:
249 249
250 250 .. code-block:: bash
251 251
252 252 $ easy_install pexpect
253 253
254 254 Windows users are out of luck as pexpect does not run there.
255 255
256 256 Dependencies for IPython.parallel (parallel computing)
257 257 ======================================================
258 258
259 259 :mod:`IPython.kernel` has been replaced by :mod:`IPython.parallel`,
260 260 which uses ZeroMQ for all communication.
261 261
262 262 IPython.parallel provides a nice architecture for parallel computing, with a
263 263 focus on fluid interactive workflows. These features require just one package:
264 264 PyZMQ. See the next section for PyZMQ details.
265 265
266 266 On a Unix style platform (including OS X), if you want to use
267 267 :mod:`distribute`, you can just do:
268 268
269 269 .. code-block:: bash
270 270
271 271 $ easy_install ipython[zmq] # will include pyzmq
272 272
273 273 Security in IPython.parallel is provided by SSH tunnels. By default, Linux
274 274 and OSX clients will use the shell ssh command, but on Windows, we also
275 275 support tunneling with paramiko_.
276 276
277 Dependencies for IPython.zmq
277 Dependencies for IPython.kernel.zmq
278 278 ============================
279 279
280 280 pyzmq
281 281 -----
282 282
283 283 IPython 0.11 introduced some new functionality, including a two-process
284 284 execution model using ZeroMQ_ for communication. The Python bindings to ZeroMQ
285 285 are found in the PyZMQ_ project, which is easy_install-able once you have
286 286 ZeroMQ installed. If you are on Python 2.6 or 2.7 on OSX, or 2.7 on Windows,
287 287 pyzmq has eggs that include ZeroMQ itself.
288 288
289 IPython.zmq depends on pyzmq >= 2.1.4.
289 IPython.kernel.zmq depends on pyzmq >= 2.1.4.
290 290
291 291 Dependencies for the IPython QT console
292 292 =======================================
293 293
294 294 pyzmq
295 295 -----
296 296
297 297 Like the :mod:`IPython.parallel` package, the QT Console requires ZeroMQ and
298 298 PyZMQ.
299 299
300 300 Qt
301 301 --
302 302
303 Also with 0.11, a new GUI was added using the work in :mod:`IPython.zmq`, which
303 Also with 0.11, a new GUI was added using the work in :mod:`IPython.kernel.zmq`, which
304 304 can be launched with ``ipython qtconsole``. The GUI is built on Qt, and works
305 305 with either PyQt, which can be installed from the `PyQt website
306 306 <http://www.riverbankcomputing.co.uk/>`_, or `PySide
307 307 <http://www.pyside.org/>`_, from Nokia.
308 308
309 309 pygments
310 310 --------
311 311
312 312 The syntax-highlighting in ``ipython qtconsole`` is done with the pygments_
313 313 project, which is easy_install-able.
314 314
315 315 .. _installnotebook:
316 316
317 317 Dependencies for the IPython HTML notebook
318 318 ==========================================
319 319
320 320 The IPython notebook is a notebook-style web interface to IPython and can be
321 321 started withe command ``ipython notebook``.
322 322
323 323 pyzmq
324 324 -----
325 325
326 326 Like the :mod:`IPython.parallel` and :mod:`IPython.frontend.qt.console`
327 327 packages, the HTML notebook requires ZeroMQ and PyZMQ.
328 328
329 329 Tornado
330 330 -------
331 331
332 332 The IPython notebook uses the Tornado_ project for its HTTP server. Tornado 2.1
333 333 is required, in order to support current versions of browsers, due to an update
334 334 to the websocket protocol.
335 335
336 336 Jinja
337 337 -----
338 338
339 339 The IPython notebook uses the Jinja_ templating tool to render HTML pages.
340 340
341 341
342 342 MathJax
343 343 -------
344 344
345 345 The IPython notebook uses the MathJax_ Javascript library for rendering LaTeX
346 346 in web browsers. Because MathJax is large, we don't include it with
347 347 IPython. Normally IPython will load MathJax from a CDN, but if you have a slow
348 348 network connection, or want to use LaTeX without an internet connection at all,
349 349 you can install MathJax locally.
350 350
351 351 A quick and easy method is to install it from a python session::
352 352
353 353 from IPython.external.mathjax import install_mathjax
354 354 install_mathjax()
355 355
356 356 If you need tighter configuration control, you can download your own copy
357 357 of MathJax from http://www.mathjax.org/download/ - use the MathJax-2.0 link.
358 358 When you have the file stored locally, install it with::
359 359
360 360 python -m IPython.external.mathjax /path/to/source/mathjax-MathJax-v2.0-20-g07669ac.zip
361 361
362 362 For unusual needs, IPython can tell you what directory it wants to find MathJax in::
363 363
364 364 python -m IPython.external.mathjax -d /some/other/mathjax
365 365
366 366 By default Mathjax will be installed in your ipython profile directory, but you
367 367 can make system wide install, please refer to the documentation and helper function
368 368 of :mod:`IPython.external.mathjax`
369 369
370 370 Browser Compatibility
371 371 ---------------------
372 372
373 373 The notebook uses WebSockets and the flexible box model. These features are
374 374 available in the following browsers:
375 375
376 376 * Chrome
377 377 * Safari
378 378 * Firefox 6 and above
379 379 * Firefox 4 and 5: These browsers have WebSocket support, but it is disabled by
380 380 default. If you're unable to upgrade, you can enable it by entering ``about:config``
381 381 in the URL bar and then setting ``network.websocket.enabled`` and
382 382 ``network.websocket.override-security-block`` to ``true``.
383 383
384 384 Internet Explorer 9 does not support WebSockets or the flexible box model, but
385 385 these features should appear in Internet Explorer 10.
386 386
387 387
388 388 .. _ZeroMQ: http://www.zeromq.org
389 389 .. _PyZMQ: https://github.com/zeromq/pyzmq
390 390 .. _paramiko: https://github.com/robey/paramiko
391 391 .. _pygments: http://pygments.org
392 392 .. _pexpect: http://www.noah.org/wiki/Pexpect
393 393 .. _Jinja: http://jinja.pocoo.org
394 394 .. _Tornado: http://www.tornadoweb.org
395 395 .. _MathJax: http://www.mathjax.org
@@ -1,251 +1,251 b''
1 1 .. _parallelsecurity:
2 2
3 3 ===========================
4 4 Security details of IPython
5 5 ===========================
6 6
7 7 .. note::
8 8
9 This section is not thorough, and IPython.zmq needs a thorough security
9 This section is not thorough, and IPython.kernel.zmq needs a thorough security
10 10 audit.
11 11
12 IPython's :mod:`IPython.zmq` package exposes the full power of the
12 IPython's :mod:`IPython.kernel.zmq` package exposes the full power of the
13 13 Python interpreter over a TCP/IP network for the purposes of parallel
14 14 computing. This feature brings up the important question of IPython's security
15 15 model. This document gives details about this model and how it is implemented
16 16 in IPython's architecture.
17 17
18 18 Process and network topology
19 19 ============================
20 20
21 21 To enable parallel computing, IPython has a number of different processes that
22 22 run. These processes are discussed at length in the IPython documentation and
23 23 are summarized here:
24 24
25 25 * The IPython *engine*. This process is a full blown Python
26 26 interpreter in which user code is executed. Multiple
27 27 engines are started to make parallel computing possible.
28 28 * The IPython *hub*. This process monitors a set of
29 29 engines and schedulers, and keeps track of the state of the processes. It listens
30 30 for registration connections from engines and clients, and monitor connections
31 31 from schedulers.
32 32 * The IPython *schedulers*. This is a set of processes that relay commands and results
33 33 between clients and engines. They are typically on the same machine as the controller,
34 34 and listen for connections from engines and clients, but connect to the Hub.
35 35 * The IPython *client*. This process is typically an
36 36 interactive Python process that is used to coordinate the
37 37 engines to get a parallel computation done.
38 38
39 39 Collectively, these processes are called the IPython *cluster*, and the hub and schedulers
40 40 together are referred to as the *controller*.
41 41
42 42
43 43 These processes communicate over any transport supported by ZeroMQ (tcp,pgm,infiniband,ipc)
44 44 with a well defined topology. The IPython hub and schedulers listen on sockets. Upon
45 45 starting, an engine connects to a hub and registers itself, which then informs the engine
46 46 of the connection information for the schedulers, and the engine then connects to the
47 47 schedulers. These engine/hub and engine/scheduler connections persist for the
48 48 lifetime of each engine.
49 49
50 50 The IPython client also connects to the controller processes using a number of socket
51 51 connections. As of writing, this is one socket per scheduler (4), and 3 connections to the
52 52 hub for a total of 7. These connections persist for the lifetime of the client only.
53 53
54 54 A given IPython controller and set of engines engines typically has a relatively
55 55 short lifetime. Typically this lifetime corresponds to the duration of a single parallel
56 56 simulation performed by a single user. Finally, the hub, schedulers, engines, and client
57 57 processes typically execute with the permissions of that same user. More specifically, the
58 58 controller and engines are *not* executed as root or with any other superuser permissions.
59 59
60 60 Application logic
61 61 =================
62 62
63 63 When running the IPython kernel to perform a parallel computation, a user
64 64 utilizes the IPython client to send Python commands and data through the
65 65 IPython schedulers to the IPython engines, where those commands are executed
66 66 and the data processed. The design of IPython ensures that the client is the
67 67 only access point for the capabilities of the engines. That is, the only way
68 68 of addressing the engines is through a client.
69 69
70 70 A user can utilize the client to instruct the IPython engines to execute
71 71 arbitrary Python commands. These Python commands can include calls to the
72 72 system shell, access the filesystem, etc., as required by the user's
73 73 application code. From this perspective, when a user runs an IPython engine on
74 74 a host, that engine has the same capabilities and permissions as the user
75 75 themselves (as if they were logged onto the engine's host with a terminal).
76 76
77 77 Secure network connections
78 78 ==========================
79 79
80 80 Overview
81 81 --------
82 82
83 83 ZeroMQ provides exactly no security. For this reason, users of IPython must be very
84 84 careful in managing connections, because an open TCP/IP socket presents access to
85 85 arbitrary execution as the user on the engine machines. As a result, the default behavior
86 86 of controller processes is to only listen for clients on the loopback interface, and the
87 87 client must establish SSH tunnels to connect to the controller processes.
88 88
89 89 .. warning::
90 90
91 91 If the controller's loopback interface is untrusted, then IPython should be considered
92 92 vulnerable, and this extends to the loopback of all connected clients, which have
93 93 opened a loopback port that is redirected to the controller's loopback port.
94 94
95 95
96 96 SSH
97 97 ---
98 98
99 99 Since ZeroMQ provides no security, SSH tunnels are the primary source of secure
100 100 connections. A connector file, such as `ipcontroller-client.json`, will contain
101 101 information for connecting to the controller, possibly including the address of an
102 102 ssh-server through with the client is to tunnel. The Client object then creates tunnels
103 103 using either [OpenSSH]_ or [Paramiko]_, depending on the platform. If users do not wish to
104 104 use OpenSSH or Paramiko, or the tunneling utilities are insufficient, then they may
105 105 construct the tunnels themselves, and simply connect clients and engines as if the
106 106 controller were on loopback on the connecting machine.
107 107
108 108
109 109 Authentication
110 110 --------------
111 111
112 112 To protect users of shared machines, [HMAC]_ digests are used to sign messages, using a
113 113 shared key.
114 114
115 115 The Session object that handles the message protocol uses a unique key to verify valid
116 116 messages. This can be any value specified by the user, but the default behavior is a
117 117 pseudo-random 128-bit number, as generated by `uuid.uuid4()`. This key is used to
118 118 initialize an HMAC object, which digests all messages, and includes that digest as a
119 119 signature and part of the message. Every message that is unpacked (on Controller, Engine,
120 120 and Client) will also be digested by the receiver, ensuring that the sender's key is the
121 121 same as the receiver's. No messages that do not contain this key are acted upon in any
122 122 way. The key itself is never sent over the network.
123 123
124 124 There is exactly one shared key per cluster - it must be the same everywhere. Typically,
125 125 the controller creates this key, and stores it in the private connection files
126 126 `ipython-{engine|client}.json`. These files are typically stored in the
127 127 `~/.ipython/profile_<name>/security` directory, and are maintained as readable only by the
128 128 owner, just as is common practice with a user's keys in their `.ssh` directory.
129 129
130 130 .. warning::
131 131
132 132 It is important to note that the signatures protect against unauthorized messages,
133 133 but, as there is no encryption, provide exactly no protection of data privacy. It is
134 134 possible, however, to use a custom serialization scheme (via Session.packer/unpacker
135 135 traits) that does incorporate your own encryption scheme.
136 136
137 137
138 138
139 139 Specific security vulnerabilities
140 140 =================================
141 141
142 142 There are a number of potential security vulnerabilities present in IPython's
143 143 architecture. In this section we discuss those vulnerabilities and detail how
144 144 the security architecture described above prevents them from being exploited.
145 145
146 146 Unauthorized clients
147 147 --------------------
148 148
149 149 The IPython client can instruct the IPython engines to execute arbitrary
150 150 Python code with the permissions of the user who started the engines. If an
151 151 attacker were able to connect their own hostile IPython client to the IPython
152 152 controller, they could instruct the engines to execute code.
153 153
154 154
155 155 On the first level, this attack is prevented by requiring access to the controller's
156 156 ports, which are recommended to only be open on loopback if the controller is on an
157 157 untrusted local network. If the attacker does have access to the Controller's ports, then
158 158 the attack is prevented by the capabilities based client authentication of the execution
159 159 key. The relevant authentication information is encoded into the JSON file that clients
160 160 must present to gain access to the IPython controller. By limiting the distribution of
161 161 those keys, a user can grant access to only authorized persons, just as with SSH keys.
162 162
163 163 It is highly unlikely that an execution key could be guessed by an attacker
164 164 in a brute force guessing attack. A given instance of the IPython controller
165 165 only runs for a relatively short amount of time (on the order of hours). Thus
166 166 an attacker would have only a limited amount of time to test a search space of
167 167 size 2**128. For added security, users can have arbitrarily long keys.
168 168
169 169 .. warning::
170 170
171 171 If the attacker has gained enough access to intercept loopback connections on *either* the
172 172 controller or client, then a duplicate message can be sent. To protect against this,
173 173 recipients only allow each signature once, and consider duplicates invalid. However,
174 174 the duplicate message could be sent to *another* recipient using the same key,
175 175 and it would be considered valid.
176 176
177 177
178 178 Unauthorized engines
179 179 --------------------
180 180
181 181 If an attacker were able to connect a hostile engine to a user's controller,
182 182 the user might unknowingly send sensitive code or data to the hostile engine.
183 183 This attacker's engine would then have full access to that code and data.
184 184
185 185 This type of attack is prevented in the same way as the unauthorized client
186 186 attack, through the usage of the capabilities based authentication scheme.
187 187
188 188 Unauthorized controllers
189 189 ------------------------
190 190
191 191 It is also possible that an attacker could try to convince a user's IPython
192 192 client or engine to connect to a hostile IPython controller. That controller
193 193 would then have full access to the code and data sent between the IPython
194 194 client and the IPython engines.
195 195
196 196 Again, this attack is prevented through the capabilities in a connection file, which
197 197 ensure that a client or engine connects to the correct controller. It is also important to
198 198 note that the connection files also encode the IP address and port that the controller is
199 199 listening on, so there is little chance of mistakenly connecting to a controller running
200 200 on a different IP address and port.
201 201
202 202 When starting an engine or client, a user must specify the key to use
203 203 for that connection. Thus, in order to introduce a hostile controller, the
204 204 attacker must convince the user to use the key associated with the
205 205 hostile controller. As long as a user is diligent in only using keys from
206 206 trusted sources, this attack is not possible.
207 207
208 208 .. note::
209 209
210 210 I may be wrong, the unauthorized controller may be easier to fake than this.
211 211
212 212 Other security measures
213 213 =======================
214 214
215 215 A number of other measures are taken to further limit the security risks
216 216 involved in running the IPython kernel.
217 217
218 218 First, by default, the IPython controller listens on random port numbers.
219 219 While this can be overridden by the user, in the default configuration, an
220 220 attacker would have to do a port scan to even find a controller to attack.
221 221 When coupled with the relatively short running time of a typical controller
222 222 (on the order of hours), an attacker would have to work extremely hard and
223 223 extremely *fast* to even find a running controller to attack.
224 224
225 225 Second, much of the time, especially when run on supercomputers or clusters,
226 226 the controller is running behind a firewall. Thus, for engines or client to
227 227 connect to the controller:
228 228
229 229 * The different processes have to all be behind the firewall.
230 230
231 231 or:
232 232
233 233 * The user has to use SSH port forwarding to tunnel the
234 234 connections through the firewall.
235 235
236 236 In either case, an attacker is presented with additional barriers that prevent
237 237 attacking or even probing the system.
238 238
239 239 Summary
240 240 =======
241 241
242 242 IPython's architecture has been carefully designed with security in mind. The
243 243 capabilities based authentication model, in conjunction with SSH tunneled
244 244 TCP/IP channels, address the core potential vulnerabilities in the system,
245 245 while still enabling user's to use the system in open networks.
246 246
247 247 .. [RFC5246] <http://tools.ietf.org/html/rfc5246>
248 248
249 249 .. [OpenSSH] <http://www.openssh.com/>
250 250 .. [Paramiko] <http://www.lag.net/paramiko/>
251 251 .. [HMAC] <http://tools.ietf.org/html/rfc2104.html>
@@ -1,59 +1,59 b''
1 1 #-----------------------------------------------------------------------------
2 2 # Imports
3 3 #-----------------------------------------------------------------------------
4 4
5 5 import subprocess
6 6 import sys
7 7
8 8 from IPython.lib.kernel import connect_qtconsole
9 from IPython.zmq.ipkernel import IPKernelApp
9 from IPython.kernel.zmq.ipkernel import IPKernelApp
10 10
11 11 #-----------------------------------------------------------------------------
12 12 # Functions and classes
13 13 #-----------------------------------------------------------------------------
14 14 def pylab_kernel(gui):
15 15 """Launch and return an IPython kernel with pylab support for the desired gui
16 16 """
17 17 kernel = IPKernelApp.instance()
18 18 kernel.initialize(['python', '--pylab=%s' % gui,
19 19 #'--log-level=10'
20 20 ])
21 21 return kernel
22 22
23 23
24 24 class InternalIPKernel(object):
25 25
26 26 def init_ipkernel(self, backend):
27 27 # Start IPython kernel with GUI event loop and pylab support
28 28 self.ipkernel = pylab_kernel(backend)
29 29 # To create and track active qt consoles
30 30 self.consoles = []
31 31
32 32 # This application will also act on the shell user namespace
33 33 self.namespace = self.ipkernel.shell.user_ns
34 34 # Keys present at startup so we don't print the entire pylab/numpy
35 35 # namespace when the user clicks the 'namespace' button
36 36 self._init_keys = set(self.namespace.keys())
37 37
38 38 # Example: a variable that will be seen by the user in the shell, and
39 39 # that the GUI modifies (the 'Counter++' button increments it):
40 40 self.namespace['app_counter'] = 0
41 41 #self.namespace['ipkernel'] = self.ipkernel # dbg
42 42
43 43 def print_namespace(self, evt=None):
44 44 print("\n***Variables in User namespace***")
45 45 for k, v in self.namespace.iteritems():
46 46 if k not in self._init_keys and not k.startswith('_'):
47 47 print('%s -> %r' % (k, v))
48 48 sys.stdout.flush()
49 49
50 50 def new_qt_console(self, evt=None):
51 51 """start a new qtconsole connected to our kernel"""
52 52 return connect_qtconsole(self.ipkernel.connection_file, profile=self.ipkernel.profile)
53 53
54 54 def count(self, evt=None):
55 55 self.namespace['app_counter'] += 1
56 56
57 57 def cleanup_consoles(self, evt=None):
58 58 for c in self.consoles:
59 59 c.kill()
@@ -1,201 +1,201 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Animations Using clear_output"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Simple animations Using clear_output"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "Sometimes you want to clear the output area in the middle of a calculation. This can be useful for doing simple animations. In terminals, there is the carriage-return (`'\\r'`) for overwriting a single line, but the notebook frontend does not support this behavior.\n",
23 23 "\n",
24 24 "To clear output in the Notebook you can use the `clear_output` function."
25 25 ]
26 26 },
27 27 {
28 28 "cell_type": "heading",
29 29 "level": 2,
30 30 "metadata": {},
31 31 "source": [
32 32 "Simple example"
33 33 ]
34 34 },
35 35 {
36 36 "cell_type": "markdown",
37 37 "metadata": {},
38 38 "source": [
39 39 "Here we show our progress iterating through a list:"
40 40 ]
41 41 },
42 42 {
43 43 "cell_type": "code",
44 44 "collapsed": true,
45 45 "input": [
46 46 "import sys\n",
47 47 "import time"
48 48 ],
49 49 "language": "python",
50 50 "metadata": {},
51 51 "outputs": [],
52 52 "prompt_number": 1
53 53 },
54 54 {
55 55 "cell_type": "code",
56 56 "collapsed": false,
57 57 "input": [
58 58 "from IPython.display import clear_output\n",
59 59 "for i in range(10):\n",
60 60 " time.sleep(0.25)\n",
61 61 " clear_output()\n",
62 62 " print(i)\n",
63 63 " sys.stdout.flush()"
64 64 ],
65 65 "language": "python",
66 66 "metadata": {},
67 67 "outputs": [
68 68 {
69 69 "output_type": "stream",
70 70 "stream": "stdout",
71 71 "text": [
72 72 "9\n"
73 73 ]
74 74 }
75 75 ],
76 76 "prompt_number": 2
77 77 },
78 78 {
79 79 "cell_type": "heading",
80 80 "level": 2,
81 81 "metadata": {},
82 82 "source": [
83 83 "AsyncResult.wait_interactive"
84 84 ]
85 85 },
86 86 {
87 87 "cell_type": "markdown",
88 88 "metadata": {},
89 89 "source": [
90 90 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,\n",
91 91 "so you can watch as your parallel computation completes.\n",
92 92 "\n",
93 93 "**This example assumes you have an IPython cluster running, which you can start from the [cluster panel](/#tab2)**"
94 94 ]
95 95 },
96 96 {
97 97 "cell_type": "code",
98 98 "collapsed": false,
99 99 "input": [
100 100 "from IPython import parallel\n",
101 101 "rc = parallel.Client()\n",
102 102 "view = rc.load_balanced_view()\n",
103 103 "\n",
104 104 "amr = view.map_async(time.sleep, [0.5]*100)\n",
105 105 "\n",
106 106 "amr.wait_interactive()"
107 107 ],
108 108 "language": "python",
109 109 "metadata": {},
110 110 "outputs": [
111 111 {
112 112 "output_type": "stream",
113 113 "stream": "stdout",
114 114 "text": [
115 115 " 100/100 tasks finished after 30 s"
116 116 ]
117 117 },
118 118 {
119 119 "output_type": "stream",
120 120 "stream": "stdout",
121 121 "text": [
122 122 "\n",
123 123 "done\n"
124 124 ]
125 125 }
126 126 ],
127 127 "prompt_number": 3
128 128 },
129 129 {
130 130 "cell_type": "heading",
131 131 "level": 2,
132 132 "metadata": {},
133 133 "source": [
134 134 "Matplotlib example"
135 135 ]
136 136 },
137 137 {
138 138 "cell_type": "markdown",
139 139 "metadata": {},
140 140 "source": [
141 141 "You can also use `clear_output()` to clear figures and plots."
142 142 ]
143 143 },
144 144 {
145 145 "cell_type": "code",
146 146 "collapsed": false,
147 147 "input": [
148 148 "%pylab inline"
149 149 ],
150 150 "language": "python",
151 151 "metadata": {},
152 152 "outputs": [
153 153 {
154 154 "output_type": "stream",
155 155 "stream": "stdout",
156 156 "text": [
157 157 "\n",
158 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
158 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
159 159 "For more information, type 'help(pylab)'.\n"
160 160 ]
161 161 }
162 162 ],
163 163 "prompt_number": 4
164 164 },
165 165 {
166 166 "cell_type": "code",
167 167 "collapsed": false,
168 168 "input": [
169 169 "from scipy.special import jn\n",
170 170 "x = np.linspace(0,5)\n",
171 171 "f, ax = plt.subplots()\n",
172 172 "ax.set_title(\"Bessel functions\")\n",
173 173 "\n",
174 174 "for n in range(1,10):\n",
175 175 " time.sleep(1)\n",
176 176 " ax.plot(x, jn(x,n))\n",
177 177 " clear_output()\n",
178 178 " display(f)\n",
179 179 "\n",
180 180 "# close the figure at the end, so we don't get a duplicate\n",
181 181 "# of the last plot\n",
182 182 "plt.close()"
183 183 ],
184 184 "language": "python",
185 185 "metadata": {},
186 186 "outputs": [
187 187 {
188 188 "output_type": "display_data",
189 189 "png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEICAYAAABRSj9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdYFNfXx7+AooIowgJiwa7YscUSC/ZujDGWRGOPGktM\nfknemKZpxmgsWBJLTGISjT32xNhQlo5iBUEEAeltl7Kwbb7vH2OIBaVtAZ3P88zDrjNz79lx99x7\nzz3FgiQhISEhIfHMYmluASQkJCQkjIuk6CUkJCSecSRFLyEhIfGMIyl6CQkJiWccSdFLSEhIPONI\nil5CQkLiGUdS9BLPFXfv3oWlpSUEQXji+VdffRV16tTBpk2bTCZXXFwc7OzsIHk7SxgDSdFLGJ3G\njRvDxsYGdnZ2aNq0KRYvXozU1FRzi1Ukv//+O2rXro2MjAwsXLjQaP00btwY586dK3zv5uaGnJwc\nWFhYGK1PiecXSdFLGB0LCwscP34cOTk58Pf3R3x8PDZu3GhusYpELpeje/fusLQ07k/DwsJCmr1L\nmAxJ0UuYFBcXF0ycOBEnTpwo/DedTod9+/ZhwIAB8PDwwI4dO6DRaAAAKpUKs2fPRuPGjeHo6Ii+\nffsWKsgdO3agZ8+eqF27Ntzd3R+aIf/1118YM2YMWrVqhXXr1iE3N7dY2QYMGIAzZ85g8eLFqFWr\nFm7fvg1PT0/s2LGj8JpffvkFffr0KXxvaWmJXbt2wcPDA82bN8e6deseavP8+fOYMmUKHBwc0LZt\nW4SGhmLq1KmIi4vD6NGjYWdnh+++++4xk1JmZia+/fZbtGjRAuPHj8eFCxcK21y+fDkmT56MhQsX\nom7dupgwYQLCw8MLzz/tuUg8p1BCwsg0btyYZ86cIUneu3ePo0aN4jvvvFN43svLiwMGDOCNGzcY\nFRVFT09Pbtu2jSS5adMmvvbaa1QqldTpdJTL5STJtLQ0NmjQgJGRkSTJ2NhY3rlzhyR55MgRdujQ\ngf7+/kxMTOSECRP40UcfkSRjYmJoYWFBvV5fpKyenp7csWPHE9///PPP7N27d+F7CwsLDhgwgOHh\n4bx06RLt7OwYFRVFkrx8+TKdnZ25e/duajQaRkVFMTY2tvCZnD17trCdR+V64403OGHCBMbHx/Pg\nwYN0cHBgTEwMSXLZsmW0trbmtm3bmJmZydmzZ3PKlCnFPheJ5xdpRi9hdEhi7NixqFOnDho1aoSY\nmBh88sknhef37duHL7/8Em3btkWzZs3w9ttv4/DhwwAAQRCQnp6OhIQEWFlZ4cUXXwQgmj7y8/MR\nGRkJrVYLNzc3NG3aFACwd+9e/N///R969OgBV1dXLF26tLC9kspbGhYsWAB3d3d07twZvXr1wunT\npwEAe/bsweTJkzF58mRUrVoVzZo1g5ubW7Ht6fV6nDhxAl9++SUaNGiAcePGYfjw4fjzzz8Lr2nV\nqhXmzJmDOnXqYNasWThz5gyApz8XiecXSdFLGB0LCwscOXIEWVlZyMrKwrx589CmTRtoNBrk5eXB\nz88PI0eORJ06dVCnTh1Mnz4dfn5+AIBZs2bB09MTo0aNQvv27QvNKI6Ojvjtt9+wbt06uLq6YsmS\nJUhLSwMAnDlzBvPnzy9sr3///rh7926JN4BLuyHq4eFR+NrV1RWJiYkAAG9v78KBqTSEh4dDrVaj\nZcuWhf/WpUsX+Pj4FL7v2LFj4eu6desiJSUFgiA89blIPL9Iil7CpNjZ2WH+/PnIycmBj48PbG1t\n0b17d5w6dapwIFAoFMjKygIA2NjYYOnSpbhz5w5++uknvPvuuwgLCwMADB8+HGfOnEFYWBhiYmKw\natUqAKKtffv27YXtZWVlIS8vD87OzqWWt379+khOTi58HxoaWuJ7+/fvD7lcXuQ5KyurJ64c3N3d\nUa1aNURERBT+W0hICPr27Vuifp/0XCSeXyRFL2ES/lVqubm52LZtG2xsbNCrVy8AwNSpU/HZZ5/h\n8uXLEAQBCQkJ+OeffwAAJ06cQFRUFARBgK2tLaytrVG9enVERkbi3LlzUKvVsLa2RrVq1WBnZ1fY\n3qpVqyCXy6HX65GWloajR4+WWlYAGDhwIA4fPoyEhAScO3cOR44cKfbef++fNGkS9u3bh3379kGj\n0SAqKgpxcXEAxBn6pUuXimyjSpUqGDlyJJYtW4aEhAQcPnwYf//9N8aOHVus7E97LhLPL5KilzAJ\n/3qYNG3aFOfOncPOnTtRo0YNAMCcOXMwc+ZMfPbZZ3BwcMDgwYMRGRkJALh9+zYGDx6M2rVrY86c\nOfjqq6/QtGlTqNVqLF26FE5OTujatSvs7e3xzjvvABBntF988QU2bdoEJycn9OzZE0FBQYWyFGea\nefD8uHHj0KtXL3Tt2hWrVq3CggULHjr/aFsWFhaF/+bh4YFdu3bh0KFDcHZ2xrhx4wpXKvPmzcPx\n48fh4OCAtWvXPtbW2rVr0bFjR/Tr1w+//vor9u/fj8aNGz/Wx6NyPO25SDy/WLC0O08SEhISEpWK\ncs/oL168iNatW6NFixZFBsHk5+dj2rRp6NSpE/r161fs0ldCQkJCwrCUe0bfqVMneHl5oVGjRhg6\ndCjkcjlkMlnh+S1btuDatWv4/vvvERsbiwEDBiAqKkoK9ZaQkJAwEeWa0SuVSgBA37590ahRIwwZ\nMgSBgYEPXVO7dm3k5ORAq9UiMzMTNjY2kpKXkJCQMCHlUvTBwcFwd3cvfN+mTRsEBAQ8dM3kyZOh\n1+shk8nQu3dv7Nq1qzxdSkhISEiUkirG7mDTpk2oUqUKkpKScP36dYwcORKxsbGPJY2SZvkSEhIS\nZaM4C3y5ZvTdunXDrVu3Ct/fvHkTPXr0eOiaixcv4vXXX4eNjQ26d++OevXqFbrOFSWsdBDLli0z\nuwwV5ZCehfQspGfx9KMklEvR165du1CZ3717F6dPn0b37t0fumbgwIE4duwYBEFAdHQ0MjMzHzL3\nSEhISEgYl3KbbtavX4+5c+dCq9Vi8eLFkMlk2Lp1KwBg7ty5mDRpEsLCwtC1a1c4OTnBy8ur3EJL\nSEhISJScChMw9WAhBp0OiI0FIiKAmBigbVugZ0+gWjUzC2kivL294enpaW4xKgTSs/gP6Vn8h/Qs\n/qMkRWwqlKJ/6SUiMlJU7i4uQMuWgJsbcO0acOsW8OKLwODBwKBBQPv2gLR/KyEh8bxT6RT9gQNE\ny5ZA8+bA/TQohWRmAufPA6dPA2fOADk5wLBhwLJlgJRuW0JC4nml0in60ogSEwPs3g2sWwcsXgx8\n8AFQvboRBZSQkJCogJREd1ba7JVNmgAffwxcvgxcuSKacv7+29xSSUhISFQ8Ku2M/lFOngQWLQI6\ndRJn+Q0bGlA4CQkJiQrKMz2jf5QRI4AbN0QPnU6dgPXrgYoxhElISEiYl2dmRv8gUVHAxImAhwew\nZQtQtapBmpWQkJCocDzTm7HFkZsLTJoEaLXA/v1ArVoGa1pCQkKiwvBcmW4epWZN4PBh0fWyTx8g\nIcHcEklISEiYh2dW0QNAlSrA998Dr78uRtZev25uiSQkJCRMzzNrunmUvXtFr5xdu8ToWgkJCYln\ngefadPMoEycCBw8CU6cCv/1mbmkkJCQkTIfRC49UJPr0Aby9gYEDxRQL48ebWyIJCQkJ4/NcKXoA\ncHcXg6uGDAHs7IChQ80tkYSEhIRxeW5MNw/SsSPw55+iGcfX19zSSEhISBiX51LRA0CvXqKtftw4\nMVeOhISExLPKc6voAdFss3mzmD7hCWVsJSQkJCo9z52N/lHGjweys0WbvY+PlAxNQkLi2eO5V/QA\nMHMmoFCI/vUXLwLOzuaWSEJCQsJwPDcBUyXh44+Bc+fESlZSERMJCYnKwHOd1KwsCIKYCK16dWDn\nTqkmrYSERMVHiowtJZaWwC+/ADdvAqtXm1saCQkJCcMg2egfwcYGOHIE6N5dDK4aM8bcEklISEiU\nD8l08wQCA4FRo0Sbffv25pZGQkJComgk00056N5dLEc4ZgyQlmZuaSQkJCTKjjSjL4aPPgLkcuDM\nGcDa2tzSSEhISDyM5HVjAARBTJPg6Aj8+KPkiSMhIVGxkEw3BsDSEvj9dyAkBNi0ydzSSEhISJSe\nciv6ixcvonXr1mjRogU2btxY5DXBwcHo1q0bWrduDU9Pz/J2aXJq1gQOHQK+/BLw8zO3NBISEhKl\no9ymm06dOsHLywuNGjXC0KFDIZfLIZPJCs+TRIcOHbBu3ToMGjQI6enpD50vFKSCmm4e5PhxYP58\ncXbv4mJuaSQkJCRMYLpRKpUAgL59+6JRo0YYMmQIAgMDH7omJCQEHTp0wKBBgwCgSCVfWRg1Cpg2\nDZg8GdDpzC2NhISERMkol6IPDg6Gu7t74fs2bdogICDgoWtOnToFCwsL9OnTB6NHj8apU6fK06XZ\n+fxzoEoV4JNPzC2JhISERMkwemRsQUEBrly5gjNnzkClUmHw4MG4ceMGatSo8di1y5cvL3zt6elZ\nIe35VlbA7t1Aly5Ajx7A2LHmlkhCQuJ5wtvbG97e3qW6p1w2eqVSCU9PT4SGhgIAFi1ahGHDhmHk\nyJGF15w4cQLe3t5YfT95zMSJEzFz5kwMfaRYa2Ww0T9IYCAwerRYirBFC3NLIyEh8bxidBt97dq1\nAYieN3fv3sXp06fRvXv3h67p0aMHLly4AJVKhczMTISGhuLFF18sT7cVgu7dRTPOuHFAXp65pZGQ\nkJB4MuU23axfvx5z586FVqvF4sWLIZPJsHXrVgDA3Llz4ejoiBkzZqBr165wcnLCF198gZo1a5Zb\n8IrAvHmAv7/499dfHw+mUuvUCE4MRmJOIlLzUpGSl4LUvNTCI1eTi7o166KeXT3Ut6uPenb1Cl83\nd2iOOjXqmOeDSUhIPFNIkbHlRKUCevYU3S7nzQPS8tJw8vZJHIs8hjPRZ9DCsQUa2zeGs60znG2c\n4VLTRXxt6wybqjZIyU1BYk4iEnISkJiTWPj6dsZttJK1wuCmgzGo6SC82PBFVKtSzdwfV0JCooIh\npUAwEX+HROCVTw6h+YhjiFWFYVDTQRjdcjSGtxgOZ9uy1SXU6DXwj/fHmZgzOH3nNMLSwtCrYS8M\najoIL7u/jGYOzQz8KSQkJCojkqI3Mncy7+DT85/iXMw5eFR9FdcOjMaVw/3g7Gj4mbeiQIHzMefx\nT/Q/OBh2EB51PTC/63yMbjUaVSylsgISEs8rkqI3Esm5yfjq4lfYc2MPlvRYgiU9lqCmdU3Mnw+k\npwP79hk3+VmBrgAHww5iy6UtiMmKwezOszG782w0qNXAeJ1KSEhUSCRFb2Cy1dlY7bca3wd/j2kd\np+GjPh9BZvNfpG9BAdCrFzBzJrBwoWlkup5yHVsvbcXu67vRr3E/vN/rffRq2Ms0nUtISJgdSdEb\nCJLYfnk7Pj3/KYY3H47PPT9HI/tGRV4bFSUq+xMngG7dTCdjriYXv1/7Hd/Iv0EHlw74qv9X6Fi3\no+kEkJCQMAuSojcAKq0Kbx57EzfTbuLXsb+ivUvxdQUPHgTefx+4dAmoY2IPSbVOja2XtmKFzwr0\nb9Ifn3t+jpaOLU0rhISEhMmQ8tGXk+isaPTa0QuWFpbwnelbIiUPAK+8IiZAmzEDMPXYVa1KNSzu\nvhhRi6PQ3rk9eu3ohTnH5iBeGW9aQSQkJCoMkqJ/An/d/gs9d/TE7M6zsXPsTthUtSnV/atXA4mJ\nYt1Zc1DTuiY+6vMRIhdFQmYjg8dWDyz3Xo4CXYF5BJKQkDAbkunmEQQK+Pri19hyaQv2jd+HF93K\nnq4hJkZMlXD0qJgAzZzEK+Ox5NQSXEu5hu9HfI/BzQabVyAJCQmDINnoS4myQImpf05FZn4m9r+6\nH652ruVu8/Bh4O23gdBQwMHBAEKWk+ORx7Hor0Xo0aAH1g5Za5DPKCEhYT4kG30pUBYoMeDXAWhQ\nqwHOTTtnMAU4diwwfrxYsEQQDNJkuRjVchRuvnUTje0bo8OWDtgctBl6QW9usSQkJIyINKMHkKfJ\nw9Dfh6KTaydsGLYBFgaOdtJqgb59gZdfBj74wKBNl4ubqTcx/8R85Ovy8ctLv6Ctc1tziyQhIVFK\nJNNNCSjQFWDMH2NQv1Z97BizA5YWxlnkxMWJfvUHDwK9exulizLxb4zAx+c+xtLeS7GkxxKjPQMJ\nCQnDIyn6YtDqtXh1/6uoalUVf7zyh9Fzxpw4IWa4vHwZcHIyalelJjorGtMOT4OVhRV+GfsLGts3\nLn0jJJCVJY5qubmApWXRh5MT4OoqvpaQkCgXkqJ/CnpBjzcOvwFFgQJ/TvwT1lbWJun3ww+BK1eA\nkycrnp7TC3qs9V+LVX6rsHLgSszsNLNoM1ZuLiCXiyNWXBwQGyv+jYsTay26uQG1aombEo8eej2Q\nmgpkZgINGgCNGwONGolHkyZA585AmzYV7+FISFRQJEX/BEhi3ol5iEiPwF+v/4UaVR+vX2ssdDqg\nf39g+HDgo49M1m2puJ5yHVP/nIqGtRti++jtqGtVW6ywcv48cO4ccPUq0LWr6DvauLGo2P897lcd\nK5aCgv8GidhY4O5dIDoaCAkRB4IXXhB9Unv2FP+aOsRYQqKSICn6IiCJ90+/D584H5yZegZ21eyM\n3uejJCSIenLPHqBfP5N3XyI02Vk4/sUUOB8+jR5JVqjSwQMYMEAcpXr1AmxKF0BWKtLSgIAAcXDx\n9xeVv5sbMHKk6MbUvbu4cpCQkJAUfVF4BXhhR+gOeE/3hkMN8zm2nzoFzJol6rC6dc0mxuNcvw5s\n3Qrs3g306YMbI1/AqxnfY1TX1/D1gK9NZuJ6CJ1ONBMdOyYGJqSmAmPGAC+9BAwcCNQw3YpMQqKi\nISn6Rwi8F4jRf4xG4OxANKnTxKh9lYTlywFvb+DMGaCKOWuH5OcDBw4AW7aIJpQ5c8RRqGFDAEC6\nKh3TD09HmioNe17ZY/5nFx0NHDkiHqGhwJAhwPTpwNChZn6QEhKmR1L0D5CZn4nOWztj/bD1GOs+\n1mj9lAa9XrRGdOwIfPutGQTQaoEffgC++krcBJ03T8zGVoSyJIl1AeuwUr4S34/8HuPbjDeDwEWQ\nng4cOgT89BMQHy9Gps2cCTRvbm7JJCRMgqTo70MSL+15Cc0dmmPt0LVG6aOspKcDXboAXl6i+dkk\nkKIZ5P33gaZNxQxs7dqV6NbghGBMOjgJQ5oNwdoha026kV0sN2+KCv/33wF3d1Hhjx8P2NqaWzIJ\nCaMhKfr7fOf3HQ6EHcDFGRfNY2MuhqAgcSLt52eCiWhoKPC//4l27u++A4YNK3UTygIl5h6fi/D0\ncByccBDNHSrY7FmjAY4fB3bsAAIDRVPUwoVA/frmlkxCwuBIuW4A+MX7YbXfauwdv7dCKnlA9CRc\nvlzMY69SGamTxERxhjtiBDBxoujMXwYlDwC1q9fGH6/8gbld5qLXjl44fOuwgYUtJ9bWwLhxYoRa\nYKD4UNu3B6ZOFTd1JSSeM57pGX26Kh2dt3bG5hGbMbrVaIO2bWhIUQ9VqQL8/LOBi4vv3i2m0Jw1\nS3Ter1XLYE0HJQRhwv4JmNB2AlYMXGH06OIyk5UF/PgjsGGDuGx6911xg6QEgVmZWi1uqVS4pVIh\nMj8f6VotFDodlA8eej1y9XpUtbBAdUtLVLe0RLX7f6tbWqKmlRXqW1ujYfXqaFCtGhpUq4aG9/86\nVKli8PxKEs8Pz7XpRqCAUbtHoa1zW6wevNpg7RqTvDzRRfztt0VrQ7nJzRVNFv7+otN+p04GaPRx\n0lXpmHJoCvJ1+djzyp6KnfpYqwX27wfWrBGDtj75BJgwAbCyAkncUqlwXqHA1dxchN9X7gWCAHcb\nG7S2sUFLGxs4Va0K+ypVUPv+YV+lCmpbWaGmlRV0JAoEAQWCAPUDr3N0OtxTq3FPrUb8/ePf1wDQ\nwdYWHWvWFA9bW7SztUUNKVZAogQ814r+W/m3OBp5FN7TvFHVqqrB2jU2ERFAnz7AX3+Jm7Rl5vJl\nYNIksTEvL6BmTYPJWBR6QY+vLn6FbZe3Yfe43ejXuIJGgv0LCZw6hbj163G2Xj2cHT8e5+ztYW1p\niQH29uhqZwd3Gxu429jA1draqDPuNI0G1/LycCU3F1fvH5H5+WhcvTpesLODp709+tnbo0n16tLM\nX+IxnltFH5wQjNF/jEbwnGA0rN3QIG2akgMHgPfeA4KDy5D8TBDE+oUrV4pmikmTjCLjkzgVdQrT\nDk/D/3r+D+/1eq9CKqYrubnYmZyM4xkZUOp0GKBWY+DRoxgQHIym8+bBYvJks/vjawQB4SoV/LOz\ncUGhgLdCgaoWFuhnbw/P+0dTSfFL4DlV9DpBh27bu+G9nu/h9Q6vG0Ay87B0qbiPeOoUULWkC5LU\nVNGPXKEQ7fJNzBPYFKeMwyv7XkET+ybYMWaHWdJMPEqyRoNdKSn4NTkZSr0eb7i4YLyTE9rZ2sLS\nwkKc4Z8/D3z+ubhxvWwZ8NprFSa5Gknczs+Ht0KBCwoFzisUsLGywhhHR4x2dETv2rVRtYLIKmFa\nSqQ7WU4uXLhAd3d3Nm/enBs2bHjidUFBQbSysuLBgweLPG8AUUiSa/zWcNCvgygIgkHaMxc6HTls\nGPn22yW84cYN0s2NXLqU1GiMKltJyNfmc9aRWWyzuQ1vpd0yiwxqvZ77UlI44upV2vv4cHp4OM9n\nZVFf3Hfj3DmyRw+yQwfy+HGyAn6XBEFgaE4OP4+JYZeQENbx8eHkmzf5R0oKs7Rac4snYUJKojvL\nPaPv1KkTvLy80KhRIwwdOhRyuRwymeyha/R6PQYPHgwbGxvMmDEDr7zyStlGpWKIU8ah89bO8J/l\njxaOLcrVVkUgK0t0vfzkE3Gi/kR8fMTAoDVrgClTTCZfSdh+SSxqsm30NpNFJOfr9diRnIxVcXFo\nVqMGZtSti3FOTqhZms1NUqzq/tFHgKOjaArr1ct4QpeTBLUaxzMycDQ9HT5KJfra2+M1Z2eMkclK\n97kfQafUQR2vhjZdC71KD0ElQJ9//69KDyFfrI9pWd3y4aOG+LeqY1VY17WGtYs1LKtJKw5jYHTT\njVKphKenJ0JDQwEAixcvxtChQzFy5MiHrlu/fj2sra0RHByMUaNGGUXR83706wv1X8AnfT8pczsV\njZs3AU9PMX99t25FXHDokJi6YNcuYPBgU4tXIoISgjB+33i80fENfO75OawsjeNNkqvXY2tiItbE\nx+OFWrXwsZsbupXXlVSvB377TTTleHgAX39d4ihic5Gj0+FIRgZ2p6TAV6nECEdHvObsjKEODrB+\nxLxDEgUxBcgNzUXezTyo49RQ31OjIL4A6ng1QKBaw2qo6lQVVrZWsLKxEpW4jSWsaoivYQEIBcLj\nR74AbboWmmQNNCkaWNlZiUq/rjWquVZDjeY1UKNVDdi0soFNSxtY1ZS8jMpCSXRnuXacgoOD4e7u\nXvi+TZs2CAgIeEjRJyQk4MiRIzh37hyCg4ONtnl0+NZhRGVGYf+r+43Svrlo2xbYtk0MpgoOBlxc\nHji5eTOwYoVoyDeS66QheKH+Cwh5MwSTDkzCyN0jsWvcLjjaOBqsfaVOh80JCfC6dw+e9vb4q0MH\ndDSUl5GVlZgwbdIkMS/QwIHA6NHAl1+KVbIqIHZVqmCKiwumuLggTaPBgbQ0rIqPx4xbtzAj2x5j\nE2rCJVyH3NBc5F7JhZWtFWp2rgnb9raw62YH2TgZqjWshuoNq8OqtpVBfrMUCF2mDppkDdRJamgS\nNciPykf6oXSoIlTIj8pHVYeqqNGqBmxb26Jm55qw62oH2za2sKgibTiXF6O7FixZsgQrV64sHHWe\nNvIsX7688LWnpyc8PT1L1Ee2OhuL/16MXeN2oVqVauWUuOLx8sti5oLx44GzZwHrqgQ+/lgsQCuX\nm23TtTQ42zrjn6n/4MMzH6Lb9m44NPEQPOp6lKtNHYmN9+5hRVwchjs4wNvDA62NldemenXgnXeA\nGTPEwbVdO2DJEjGdhDFz85cT+2wLjLtYBf1P1UDaPyrkWSng1yoLie6WaDfbCSM9W6BufePnArKw\ntEBVWVVUlVWFbbvH+6NAqOPUUEWokHczD4pzCsSviof6nhq2HW1h19UOdl3tUOuFWqjRssZz7W3k\n7e0Nb2/vUt1jUNPNokWLMGzYsIdm9E2bNi1U7unp6bCxscH27dsxZsyYhwUph+nm7b/fRq4mFzvG\n7CjjJ6n4CIKYfr1xfS025s8WHe6PHwce2Q+pDOy9sRcL/1qIdUPXYUqHsu0pyJVKvBUZCRdra2xs\n0QLupla2MTFiXUg/P9GcM2VKhfDQoUBkB2Qj82QmMk9lQhWpgn0/ezgMdYDDUAfUaF4DJHFBqcSO\npCQcy8jAMAcHzHZ1xQB7e9EDqQKhU4orj+zgbOSE5CDbPxvUEPae9rD3tEftfrVh427zXCt+k7hX\n/rsZ6+bmhmHDhhW5GfsvM2bMwOjRozFu3LgyCVsUIYkhGLV7FG6+ddOg5oCKiDJdi6AmE9CyiRaN\n/PdW6qyMN1Jv4OW9L2NEixH4bvB3JQ5qS9Vo8EF0NM5kZWFts2Z41cnJvD9yPz8xnYJWK26Gl3AV\namhUt1VI+S0FKb+lwNLGErIxMjgMdUCtXrVgaf3kAShLq8Xu1FT8mJQEpU6H+fXqYaarKxxL7NNr\negruFkDhrSg89Pl62Hvao86AOnAY7oDqbtVL3SZJ6PVKaDTJ0GhSoNGkQKtNhV6fB0FQQxAK7h/i\na1IDC4uqsLSsBkvLarCwqFb42tLSBlWrymBt7YSqVWWoWlX8a2VlnN+rSRT9hQsXMG/ePGi1Wixe\nvBiLFy/G1q1bAQBz58596FpDK3qdoEP3H7tjSfclmNpxatk/RGVAEIBp05AXl4FW4Yex8w9rDBxo\nbqHKh6JAgSmHpiBbnY19r+5D3ZpPLrWlJ7E1MRHL797FG3XrYlmjRrCrKEVGSGDvXnGG37WrmPbZ\nBOY0bYYWqXtTkfJbCgpiCuA82Rkub7igpkfNMg1+QdnZ2JyQgKMZGRgnk2FB/frobGf+GIjiKLhb\nAMUFBbLAeqYoAAAgAElEQVROZyHzVCas61rDYbgDHEc4otaLtWBZVRzoSB3y86OhUt166FCr70Gr\nTYWFhTWsrV1gbV0X1tYuqFrVGVZWNWFpWf3+Ua3wtYVFVZDa+4pfDVJdOBDo9SpotemPHGkAAGvr\nuqhevTGqV2+C6tUbo0aNJoXvra1dYWFR+lXhMx8wtT5gPY5FHsOZqWee7aUbCSxYILrg/PUXvINs\nMGECcOEC0Lq1uYUrHwIFfHHhC+wI3YF94/ehZ8Oej10TnpeHqbduwdbSEptbtkS7irqSyc8XZ/Xr\n1gHz54uK3wipJ7IDsxG/Jh6ZpzLhONwRLm+4wGGIg8E2LdM0GvyYlIQtiYmoX60aFtavj/FOTo95\n7FREqCdyQnKQ/lcy0q8GosDmEqr0iwQaR0FbLQ7VqtWDjY37A0crVKvmBmtrF1hZGdf8p9eroNEk\noqDgLvLzY1BQcBcFBTGFh16fBxub1rC1bXf/aAtb23awtq73VP32TCv65NxktPu+Hfxm+aGlY0sj\nSlYB+PBDcRf27NnCzJM//ywWhgoMrJRm+sc4HnkcM4/MxOeen2Ne13mF34cfk5LwUUwMVjRpgtmu\nrpVjQL93D/i//xNH4pUrgddfL3c6UgpExokMxK+OhzpOjQbvNEDd6XVRpbbxVjU6EsczMrApIQFh\neXlYUL8+5tarB1kFNOvodAooFD7IzvaDUumH3NxLqF69CWpW7QHLqHbI/6cBsv+sjdoeTpCNk0E2\nVoZqrhXLcUOnUyAvLwx5eTfuHzeRl3cDpAY1a3ZCrVovwM6uG+zsXkC1ag0KfwvPtKJfcHIBqllV\nq3AVowzON9+IPvIXLoiBOw+wdKkYK3X2LFCtYn1ny8TtjNt4Zd8r6OTaCSuGbsTb0fGIys/HnjZt\nTL/Zagh8fcVUpNbWYmK5IgMhno6gFpDyewriv4uHpY0l3N53g9N4J5O7HN7Iy8O6+HgcSk/HJGdn\nLGnQAK3M+H9CEvn5kcjIOI6MjBPIyQlBrVrdUbv2i6hVqxdq1eqOKlVqP3SPPk+PzFOZSD+UjowT\nGbBpYwOncU5wetWpTHZ9U6HRpCIn5xJycoKRkxOM7OwgWFhYwM7uBdSq9QIaN/702VT0UZlR6PFj\nD9xaeAsym2dgOvskNm8WzQA+PkX6bAuCmGG3Rg3g118NnMPeTORp8jD2789wocaLeN21EX5o0wnV\nK4HJ4IkIArBzp+gOO3y46Jr5UDDEE24rEJCwOQHxa+JRs2NNNHy/Iez725t9RZOi0eD7hARsSUzE\nC7Vq4Z0GDdDf3jRykTooFBfuK/fj0OtVcHQcBUfHUahTZ0CpNjsFjQDFOQXSDqYh/c902LjbwHmy\nM5xedYK1c8UsUPQvJKFWxyMnJwjZ2cFo3nzVs6noJx+cjLZObZ+pCNjH+PVXUTlcvPjUjT2VSnT0\nGD0a+PRT04lnDHQkvoqNxdbERLxkEYk/ff8PP7/0M0a0GGFu0cqPUikGWf2r9BcsKDJbHQUidU8q\nYj6OgW0HWzT5sglqdjBuiumykK/X4/eUFKy7dw/VLS3xgZsbxjs5oYoRFH5u7nWkpOxESsouVKvW\nADLZS3B0HAVb244GGWAEjYCsf7KQ8kcKMk9kolaPWnCe7AzZyzJUqVVBNvyfgkmSmhmKkopyKfES\nXb9zZa4618gSmZHjx8m6dcmwsBJdnpRENmpE7t5tXLGMSapazb6XL3PQlStMLCggSfrG+bL+mvpc\ndn4Z9YLezBIaiPBwcsgQsk0b8syZh05lnstkSJcQhnQLYZZ3lpkELB16QeCx9HT2vnyZTfz9uene\nPebpdOVuV61OZXz8egYHd6KfXwPeubOUeXnGT46ny9UxZU8Kr425xou1LvLGhBtMP55OQVtxEttl\nZ2fzxIkTfO+999ilSxfTJDUzFCWd0Q/9fSjGthqL+d3mm0AqMxAWJk7Rjx4FevQo8W3Xr4vR+YcO\nAb17G088Y3AzLw+jr1/Hay4u+KJx44eCdpJzkzHxwETYVrXFby//9mzESvybMO2dd4BOnZA39xtE\nb1AjLywPTVc0hdMEJ1hYVj47nJ9SidXx8fBTKrGgfn0sqF+/VP74JKFQnENCwkYoFN5wdByDunXf\ngL19f1hYmD4PjjZTi7R9aUjemYyCuwVwfs0ZdafVNfkKS6VSQS6X4/z58zh//jxu3LiBbt26oX//\n/ujfvz/69u37bM3oz9w5w+YbmlOjM38aXqOQkUE2a0bu3Fmm20+dIp2dyevXDSyXEfkrI4NOcjl/\nS05+4jUanYb/O/U/NlrXiAHxASaUzrhoU3MZ2eN3yi0OM27Iduqzno1VanheHmfdusU6Pj5cHBnJ\nuPz8p16v1xcwKekXBgV1YGBgGyYkbKNWm20iaUtG3q08Rn8cTT83PwZ7BDNubRzVqWqj9ZeWlsaf\nfvqJo0ePpp2dHXv37s1PP/2U586dY/4jz7MkurPSKHpBENh1W1fuub7HRBKZGK2WHDSIfPfdcjWz\nezfZoAF5966B5DIiG+/dY11fX8oVihJdfyjsEJ1WOXFj4MZKX28g/WQ6/dz8GD49nJor0eSrr5KN\nG5MHD1bI/PdlIaGggO9FRbGOjw9nhIfzVl7eQ+c1mnTevfsVfX1deeXKYGZk/F3h/18FvcDMs5kM\nmxpGn9o+vPHKDaafTKegK7/csbGx9PLyoqenJ2vVqsVx48bxt99+Y2Zm5lPve6YU/b4b+9h5a+dn\nx1b7KEuWiLZbAxSN8PIiW7YkU1MNIJcR0AoCF0RGsk1gIO+oVKW6Nyojih5bPDhh/wRmF1SsWV9J\nUKeqGfZ6GP2b+DPjn4yHT549S7ZtKw74JdyfqQxkaDT8PCaGTnI5x9+4weD0cEZEvEUfH3uGh89g\nTs41c4tYJrQKLRN+SGBI1xD6NfBj9CfRVN0p3fdZoVBw69at7NGjBx0dHTl9+nQeOXKEqlL8Lp4Z\nRa/RadhiQwv+E/WPCSUyIT/9RLZoQRYzcpeGjz8mu3YlsyuYLlRotRxy5QqHXr1KRRkHNZVGxTlH\n57DVxla8nlI57FSCIDD592T6uvjy9ru3qct9woalRkOuX0/KZOLqroSrncpApiqJey/P5rHzdvzG\nbxrPp96q8DP4kpJzNYeRiyMpl8kZOiCUKXtSqC8oelKq1+t59uxZTpkyhbVr1+a4ceN47NgxaspY\nGe6ZUfRbgrdw4M6BJpTGhPj5kU5OBp/BCQI5Z444OVQbz5RYKpLVarYPCuKCyEhqDfAD33llJ2Wr\nZPwl9BcDSGc8Cu4V8OrwqwzqEERlkLJkN6WkkDNnit5XP/1E6ivvSlarVTA6+lP6+DgwMnIBs1X3\nuD0xkc0DAvji5cs8mZ7+zCh8fYGeKX+kMHRAKOVOcka9F8W8CNFkFR8fz2XLlrFx48bs0KED169f\nz7S0tHL3+Uwo+jxNHuutqcfghGATS2QC4uPJevXIEyeM0rxWS44dS06caH49EV9QwFaBgfw8Jsag\nP+rrKdfpvsmd0/6cxhx1jsHaNRTpx9Pp6+LLmOUx1GvK8J8QGEh2706+8AIZULk2onW6XMbGrqRc\nLmN4+HTm58c8dF4rCNydnMx2QUHsFBzM/ampxdfzrUTkReYx6v0o/ljnRw5zHkZ7W3u+Ne8tXrp0\nyaC/gWdC0a+4uIKv7nvVxNKYAJWK7NKFXLnSqN3k55P9+pELF5pvjy9apWJTf3+uio01Svu56lxO\nPzydrTa24pWkK0bpo7To1Xrefvc2/dz8mHWxnD7xer3oieXqSk6bJgZOVGAEQWBKyh/082vAGzfG\nMzf36atVvSDwSFoaXwgJoXtgIHcmJVFj7plJOdHpdDx06BB79+5NNzc3Lp+6nD79fMRZ/vtRVN0u\nnS3/aVQ6Rb948WLu2rWLUVFRFASBygIlHb91ZER6hLnFMzxvvUVOmGAS7atQkB4e5Icfml7ZR+Tl\nsaGfHzfdu2f0vn67+htlq2TcHLTZrKYA1W0VQ7qE8PpL16nJMKArsFJJvv8+6ehIrlpVcWxyD5Cb\ne4Ohof0ZFNSBCoVPqe4VBIGnMzPpGRrKxv7+/CEhgfmVTOHn5ubSy8uLTZs2Zffu3bl3715qH9iL\nyovMY9R7UZTL5Lwy+ApTD6aWbaX3AJVO0a9atYqvvPIK69evT5lMRvde7mw/qT1v375tbvEMy59/\niq50JtxoS0sj27cXN2lNpQOv5+aynq8vdyQmmqZDkhHpEey0pRPH7R3HTJXhNrdLSvLuZMplct7b\neM94g01EBDlihLiBf/RohXDH1GqVvH37XcrlMt67t5GCUD7vMV+FgiOuXmU9X1+uiYtjrgGibY2J\nSqXi2rVrWbduXY4bN45+fn5PvV6fr2fy78m83PsyfV19Gf1pNPPjnh5v8CQqnaJ/kKi7UbSfZs/X\n57xOJycnDh48mH/++edDo2OlJD5ejGoq5otgDFJTyXbtyM8+M35fl7Kz6eLry91PCYQyFgXaAi46\nuYiN1jWiX5xpnrNOpWP4zHAGtAxgTqiJ9gr++ot0dycHDyZv3DBNn48gCAKTk3+nr289hofPoFqd\nYtD2L2dnc/yNG3SSy/nl3bvMqmC///z8fG7YsIH16tXjyy+/zKtXr5a6jdzruYxcGEmfOj68NuYa\nM/7KoKAv+eBdEkVfYVMgbAnZgmORx3DitRMoKCjAgQMH8P333yM+Ph5vvvkmZs+eDdciMjqWh7w8\nIDYWyMoCMjPFv/8eCgVgZwc0aAA0bPjfX3v7UmSN1OvFPAWDB4uJrcxAairQvz8wcSLw2WfG6SMw\nOxtjrl/HlpYt8bKTk3E6KQGHbx3G3ONzMb/rfHzS9xNUsTROgip1gho3Xr6BGs1qoNX2VrCqacJw\nfa0W+OEHsTjBhAnA558/ls7aWBQUxCIiYha02ky0aLEZtWs/XjTGUITn5eHb+HgcS0/Hm/XqYUmD\nBnCxNl+WSbVajR07duCbb75Bp06dsHz5cnTu3Llcbepz9Uj5IwWJPyRCp9Sh3rx6cJ3hiqqyp6eR\nqLRJzbR6LZusb0J5rPyx60JDQ/nmm2/S3t6eEyZMKJdZJztbnBR9+CHZowdpa0u2aiW+HjGCfP11\ncRPz00/JNWvI5cvJWbPIoUPFuJZatUgbG3FSNXs2eeAAmfW0fbcvvyQ9PUkzL0OTk8nWrUVxDM3V\nnBw6y+U8kZ5u+MbLQEJ2Agf/Opg9fuzBqIwog7evDFTSr74f735917wugunp5IIFoquul5foj28k\nBEFgQsI2yuUyxsZ+W24zTWmIyc/nWxERrOPjw4WRkbxbTHoFQyMIAnft2kU3NzcOHz6cgYGBRulD\nGaBk+LRw+tj7MGxKGBW+iid+v0qixiukot91bRf7/NTnqdcrFAquWLGCjo6O/Pjjj5mbW7I8ISEh\n4n5Wt26iYu/XTzRlnD1LPhKhXSKUSvLqVfG3NWwYWbMm2bs3+dVXYl+Fe0m+vqLJxgSbkiUhKUkc\n1FasMFybkXl5rOfry30phl2+lxe9oOc6/3WUrZLx59CfDaaQk3clU+4kZ9rh8vtCG4zr10VTTqtW\n5JEjBrff5+fH8cqVIQwJ6cLcXPOYi0gySa3mB1FRdPDx4fQi0isYg4CAAPbo0YNdunThxYsXjd4f\nSWoyNIxbE8eAFgEM6hDEhB8SqM1+eGAtiaKvcKYbkui4pSO+HfQthrcYXux9CQkJeP/99+Hr64vv\nvvsO48ePfyxHtUYDHDgAbNwIJCUB06YBAwYA3bsD1Q1cWCY/X0wh//ff4qFQAG++UYC3/ugDl42f\nAC+9ZND+MvMzcTP1JsLSwhCeHg6lWgmBAvSCHnrqC18DQP1a9dG8TnM0d2iOFo4tUFXVCIMHVMWs\nWWLlu/JwT61Gn9BQfNyoEWYb2KRmKK6nXMdrh16Du8wdW0ZuKXMmTApEzMcxSN2binZH2qFm+wqW\nL54Uv3zvvQc4O4t1bMtpViCJ5ORfEB39ARo0WIKGDT+ApaX5SwpmabXYlJCAjQkJ6Gdvjw/d3NDF\nwAXN7927h6VLl+LcuXNYsWIFpk6dCksTF8OhQGSdzULiD4lQeCvgPMkZ9ebXQ832NStnKcHjkcfx\n6flPcfnNy6UqKnDhwgUsXLgQzs7O2LhxI9q0aYOkJGDrVmDbNrGI9qJFYoEOKxOaUMPDCK/RZ7A3\n4UWMnWyDd94BOnQoW1vKAiVO3D4B/3v+hco9X5ePNk5t0MapDVrLWsOhhgOsLKxgaWEJK0urwtcA\nEJ8dj6jMqMIjIScB9WwbIi3cHb1cB2LDwhFoJWtZ6mIO6Vot+oaGYqarK95r2LBsH85EFOgKsPTs\nUhwIO4CfxvyEwc0Gl+p+XbYO4VPCoVPq0PZAW1g7VeBqRDodsGMHsHw5MHQo8PXXQP36pW5GrU5C\nRMRsaDSJcHffiZo1y/gFNiK5ej1+TErCmvh4tLaxwYdubuWufKVSqbB69Wps2LAB8+fPx4cffoia\nRij2XlrUCWok/ZiEpO1JqN64Ojr7dq5cNnpBENhrR68yZ6jUarX08vJinTrd2Lr1JdrbC5w3z2wO\nCSI7dpDt2jE9XsWvvxYDYQcOFGuLlMRFODU3ldsvbefw34fTboUdR+0exbV+a3kq6hTjlfHlMkMU\naAt4K+0Wd/gdoGz6m7T9tAGbrG/CBScW8ETkCeZpil8OK7VadgkJ4Ud37pRZDnPwT9Q/dFvnxjeP\nvVni5GgF8QUMahfEiLkR1KsrkX+3UkkuXUo6OIgbTqVIgJSR8Td9fesyOvpT6vUVPz24Wq/nz0lJ\ndA8MZLeQEB4sY7Tt0aNH6ebmxokTJ/JuBU0FK2gFph1Jq3w2+gt3L7D5hubU6cu2WZmbS370Eeng\noGfr1jvZqVN/RkdHG1jSUhAVJQa3PDDSqNXkb7+RnTqJRYZOnXr8ttTcVHoFeLHfz/1Y+5vanLB/\nAvdc32PUbI1KJdnPU+DQN67xa++V7PdzP9ZcUZOjdo/iicgTRWYNVel07BcayrciIiplrhJFvoKz\njsxio3WNeObOmademxuWSz83P8Z+G1spPytJMjaWnDqVdHEhN258asCVIGh5586H9POrz6ys86aT\n0UDoBYGHUlPZLSSErQID+WNiIgtKMLNKTEzk+PHj2bx5c549e9YEkpafSqfoh/42lNsvbS/1vYIg\npvF2cyMnTyYTEsSd6zVr1tDJyYmHDx82gsTFoNeLHjbffVfkaUEQ98qaNhXz0URHk7GKWC46uYh1\nVtbh1ENTefTWUeZrTedVkJ8vyjJkiDhoZuVn8afLP7Hz1s5s5tWMa/3WMitfdCvS6PUcde0aX7t5\ns9LnJzkZeZIN1jbg/OPzi8yXowxQ0tfFl0k/V+zUAyXmyhXRc6BZM3LPnseWlvn5cbx8+UVevTrM\n4H7xpkYQBJ7NzOSwq1fp6uvLb2Jji/TF1+v13LJlC2UyGT/++ONSpQk2N5VO0ddfU58F2oJS3RcR\n8V8JzvPnHz/v5+dHNzc3vvvuu2VOA1omfvhBTERVjCtlfj65+MswWk+YxhrLHLjkxPtMyE4wkZCP\no9WSM2aILqYZ99OlC4JAvzg/Tj4wmfYr7Tn32Fy+HHCUI69dq/Q5Sf4lKz+LMw7PYJP1TXgu+lzh\nv6efTKdcJmf6sYrhLmpQzp4Vc1l36VJYvzYt7SjlcmfGxq6k8IzVfriSk8MpYWF08PHhu7dvF1a+\nunnzJl988UX27NmT1ytTebb7VDpFv8ZvTYmvV6tFM42jo+jj/jQdnp6ezhEjRrBnz56Mi4szgLTF\ncPeumE/85s2nXhZ4L5Av73mZzqud+d7RL/ny5Ey6uZH795s3ql0QRBfUtm0f9wZNzE7koMPvsMo3\nMg76dQhDk0LNI6SROBF5gvXX1OfcY3N556c7lDvLqfB9dnLCP4YgkHv3Ut+yKW+vbEQ/77pUKHzN\nLZVRic3P5zu3b9P+/Hl2WLCAdRwd+f3331NfSSctlU7RlzTN7N274mR5zBjRTFMS9Ho9V65cSWdn\nZ/7111/lkLQYBEFcYnz99RMvScxO5KQDk9hgbQN6BXgxV/1fDIC3t5iTZuhQ0oQpYork229Fc9iV\nBxJC7k9NZQM/P0bnZXNz0Ga6rHbhG3++wViFcTJTmoOs/CyunbWW++338+CRg5XXJl9C1OoUXr7U\nm9eOtqempatov6uEM9vSEBYWRo/Ondmqf3+6HD7MQVeu8GR6eqU0Q1Y6RV8Sjh8X447WrCnbrPfi\nxYt0cXHhjz/+WPqbS8JPP4k7rUUsMXR6HTcGbqRslYwfnvnwiV4tWi25bJlYc+LYMeOIWVL++ENc\nnBw+TAYqlZTJ5bz0gNeGskDJj89+TIdvHfjB6Q8KbfiVFUEQeOfDOwxsHUh5gJxtN7flyF0jeTer\nYnpelJfs7Ev083NjdPSnoqlGpRJ/XC4u5GuvkZGR5hbRoOj1eq5fv54ymYxbt26lIAhU6/X8NSmJ\nHsHBbB0YyG0JCVRV8CRqD2ISRX/hwgW6u7uzefPm3LBhw2Pnf//9d3bo0IEdOnTg5MmTGRFRdMrh\n4oTVasVUBQ0bkvLHMyOUioiICDZp0oRffPGFYWdr9+6JWjH0cXNGcEIwu2ztwr4/9+WNlJL5e/r4\nkI0aiWkYTBzp/RCBgaRLh3zWOuXLP1OLjgK9p7zHWUdm0Xm1M9f7r6daV/FS6BaHIAi8/e5tBncK\npiZdHKjVOjW/uvAVHb915Bq/NdTqK1ZSrfKQnLybcrmMqan7Hz+ZnS2Gd8tkYt4PI9USMCWxsbEc\nMGAAe/XqVWTqFEEQeC4zk6OuXaOzXM7PoqOZVAFTQT+KSRS9h4cHL1y4wLt377JVq1aPlcby8/Oj\n4n463l9++YVTpkwptbCJiWTfvqJFxFAFr5OSktipUyfOnTuXOkOM3oJAjhol+ik/gCJfwYUnF9Jl\ntQt/Cf2l1ANLVpaYtr5dO/OtppVaLd19g1h/SRzfeOPpg8615Gsc9vswtt3cloH3DJ8HxFgIgsDb\nb99mSJcQajIfX41Fpkey/y/92XlrZwbEV65KT48iCDreufN/9PdvwpycYgq1ZGb+67NMvvkmGRNj\nEhkNiSAI/PXXX+nk5MQVK1aU6PcenpfHeRERtPfx4ZSwMAYpS1gC0gwYXdErFAp6eHgUvl+0aBGP\nHz/+xOvT0tLYsGHDogV5grBnz4qFdT7/3PC5wJRKJQcNGsSXXnqp/O5Uu3aJ2viBGcDZ6LOsv6Y+\n5xydw/S8snttCIJoEZLJyM2bTbtRqxUEDr96lXMjIpibK3D8eLJnTzEx2pPlFfjH9T/ovNqZH5z+\nwKQuomVBEARGLopkSLcQarOePGMXBIG/XvmVrt+5cvrh6UzOMX0K5vKi1Wbx6tXhDA3tT42mFDl6\n0tPFYgYODuIMv5IEyCmVSk6cOJFt27ZlaBEr7eLI1Gi4Oi6Ojfz92ePSJe5OTqa6gm3aGl3Rnz59\nmpMmTSp8/8MPP/CTTz554vVff/0133rrraIFKULYnTtFe/zp0+WR8umo1Wq+/vrr7NWrFzP+9Scs\nLcnJoqBBQSRFW/zy88vp+p0rT98xnPAREaIn3Pjxop+7KVgYGcnBV64UulHq9WISuEaNHt6kLYrk\nnGSO3zeerTa2Mlle+NIi6AVGvBXBS90vUasomVlGWaDke/+8R9kqGdf6raVGV/EjRklSpbrNgICW\njIxcVPYo14wMcdXq6EhOn16hbfghISFs1qwZ582bV+6JnE4Q+GdaGvuHhrKery+/iImpMGadCqXo\nT58+zdatWzPrCXl8AXDZsmWFx7x55+nmRoY9vdykQdDr9fzggw/o7u7O2LLYIl99lfzgA5JkUk4S\nB+wcQM9fPJmYbXi3mYIC8o03xP3e+HiDN/8QWxMS2DowsMgAk383abdvL36Fsf/mftb9ri7fPfVu\nidIqmApBLzBibgQv9bxErbL0tvfwtHAO+W0IW29qbdAB3RgoFH709XVhQsIWwzSYlSXm7XZ0FDdt\ny1Bww1gIgsCNGzdSJpNx7969Bm//Wk4O59y6RXsfH068eZPeWVkm9cw6f/78Q7rS5KabhQsXFmm6\nuXr1Kps1a/bU3PH/CqvXk//7nxgAZQqX9wdZt24dmzRpUrrcFidPihGGKhXP3DlD1+9c+dn5z8qc\nxqEkCIJYMrRePTLASOZif6WSTnI5I56S/jUsTLRWvfZa8elT0vLSOPnAZDbf0LxC2LgFvcBbs2/x\n8ouXH0v7Wqp2BIF/hv/Jxusb8+U9LzMyveLNcFNTD1AulzE9/YThG1coRD9cV1exiMPFi2YNAsnK\nyuK4cePYuXNno5cgVWi13BAfT/fAQLYJDOSme/eoNEMFLJNuxsbExBS5GRsbG8vmzZszoBiNBIAa\njZiKo1ev/6IyTY2XlxebNGlSspm9SkU2bUrdiWP87PxnBjfVFMfRo2KdiV27DNtuslrNBn5+PJJW\nvA03L08sutKyZfGmHJI8GHaQTqucuN5/vdn80wVB4K05t3i5T/mU/IOoNCp+ffFrOn7ryIUnFzI1\n10BeA+UkPn4dfX3rMTv7knE7ys8nt24VJz29eolfThPbsoOCgtikSRMuXLiQBQWli7AvD4Ig8HxW\nFl+9cYP2Pj6cGxHBkFIkjisrqankzJkmUvTe3t50d3dns2bN6OXlRZLcsmULt2wRl4izZs2ig4MD\nPTw86OHhwW7duhUtCMDhw8mRI8tWAMSQrFu3js2aNWN8cbaRZcuY+eooDtw5kP1/6W8UU01xXLsm\n1hn/6CPD/K40ej37Xr7MT0uZDG7XLtGU88MPxU/o7mTeYZetXThu7ziT+90LgsDb79zmpR6XqMsx\n/KorNTeVi04uouO3jvz64tdmM1UJgo6RkYsZGNiG+fkmjAHQ6ci9e0XbYtu2oheBkX2D/zXVODk5\ncf/+IlxFTUhiQQG/vHuXjf392Sk4mN/fu0eFEWb5J0+Ki6j33quEAVPTpxu1AlqpWLNmDZs3b857\nT+evzjoAACAASURBVKoIdfs2o5vY031dc77919tGNdUUR2oq2aePGNCYU8661Etu3+aIq1fLFCEY\nEUF27Ci6gxbnjVagLeCCEwvY1KspLyUaebb5ADHLYxjUIahIF0pDcjvjNl/d9yrrr6nPHy/9aNLv\nh06Xx+vXxzI0tD+1WjMFsAmCmJp12DAx+Gr58qe7apURlUrFadOmsX379oyKMnypyLKiFwSeysjg\n+Puz/Onh4fRVPLkcYEnJyyPfekuMJzp3PyVTpVP0FS36ePXq1WzRosXjyl4QGPhKD7p+XoteAV7m\nEe4R1GrRCaJ7d9ETrizsSk5ms4AAZpZjtFWpyHnzRK+cf/4p/vq9N/ZStkrGH4J/MLopJ25NHANa\nBlCdbDpviYD4APb5qQ/bbG7DvTf2Fpnu2ZBoNOm8dKkHw8KmUK+vGF4hvHmTnDOHtLcXM+Zdu2aQ\nZmNjY9mlSxdOnDixxKVEzUGKWs1VsbFsGRDA1oGB/DY2lgllMC0FB4sVIl977eHa1JVO0VdEVq5c\nyZYtWzLxgcQzh3/6gLIPrXj4xgEzSvY4giA6/7RpU/rStFdyciiTy3m1vEuC+/z9t5gnZ86c4mf3\nEekR7PBDB046MKnE+Y5KS8K2BPo38md+nOl9+gVB4MnIk+y2rRvbfd+O+2/uN4rCLyhIYFBQW0ZF\nvVcx8/OkpYnRtq6uYvWdw4fFkPcycP78edatW5erV6+umJ+1CARBoI9CwVn3PXaGX73KvSkpzC/G\n5qrVio/NyUn0dnsUSdEbiBUrVrBVq1ZMSkqi14VVdH3fkkFHDeSmZgS+/Va02z8h28RjZGg0bOrv\nz90GXlorlWIwpZubqPifhkqj4vTD0+mxxYNxCsO6W6X8kULfer7MizTv5o8gCDwWcYxdtnZhhx86\n8FDYIYMpKZXqNv39mzA2dqVB2jMq/1bf6dlTtEF8+aVYrb4ECILAdevW0cXFhaeNGWBjZHJ1Ov6W\nnMyBV67QwceH8yMi6K9UPvZ9iIsje/cmBwx4sheipOgNyGfLP6NsioytPnVgzIyXzS1Osfz4ozhx\nunz56dfp70e+vmNEV7R//hFNObNmid54T0IQBK72Xc16a+oZzAUz7Wga5c5y5lwzzkqhLAiCwCO3\njrDTlk702OLBQ2GHyjXDz8m5Sl/fekxI2GpAKU3E5cv/mXUmTiQvXHjibr5KpeLrr79ODw8P81aO\nMzB38/P5RUwMWwYEsKm/Pz+JjmZ4Xh6PHhXjML/55umOFpKiNxBqnZqv7H2F9T9wZi+7KsyvoDUk\nH+XgQXG55+395Gu+vnuXfS5fptbIy9/sbNF236ABeejQ0z1zjt46StkqGf+4XsQ6tRRknc+i3ElO\nZWDFzFPyrw9+121d2WpjK26/tL3UhXcUCl/K5c5MSSlbneUKQ1YWuWED6e4u2h7XrhVNPfdJTEzk\nCy+8wEmTJjHP3G55RkIQBIZkZ3Pxzdu0nZhA67oFXHQouVh7fqVT9KmpFcvmTZL52nyO3DWSY/8Y\ny7y+L3JC584cN26cYRKhmYCzZ0Vlf+TI4+cuZmXRxdeX8Sb0OT53TvS6GzTo6XVZriZfZaN1jfjZ\n+c/KNNvNuZpDuZOcmWczyyGtaRAEgedjznPY78Po+p0rV/qspCK/+GInGRl/Uy53YkaGEesrmBpB\nEEvFTZ1K1q5Njh/P0E2b6ObmZvhssxWQqCix6NfoMQIP3sni9PBw2vv40DM0lN/fu8fkItIuVDpF\nL5c7MS+vhIZlE5CnyePgXwdzwv4J1Oz8iezShQV5eRw4cCDffPPNSvOlCw4Wc9vv3v3fv6VpNGzo\n9//snXd4U+X7xu8Wyiyre0BbWkaZZU8VUBAZsgUHQxFBxYU//SrKcLNkKQoCyhJRVJCtIDuddNDd\n0tJJd9Pd7Jz798dhWOlI06RJsZ/req+TJifveZImd97xDD+e0tdFpw6oVOTWraLf/VtvVfQg+CfZ\npdkcvns4Z/86u1b+6PJUOf06+jHnUMOrdxqeHc65R+bSZp0N3z37LtOLK4/lyM39lRKJA4uK6piz\n25wpKuKxl1+mXdOm/MXGhlyxosEkU9OHX34RB2VbtlSc8cq1Wv6Rl8dno6PZ7upVjvmX6Dc4oc/I\n2M6goN7UaEzvKlWqLOWoPaM478g8qosKxAXv29G9JSUlHDhwIFf+KyWxORMZKYr9wYPiuvykiAi+\na2K/49xccXnWyUncU6hsHVKulnPukbkctHOQTtkiVVIVA3sEMm1TPefPMDAphSl888yb7LC2A2cd\nnsVLyZfuDiyysw/Q19e55hTDDRhBELh+/Xq6uLgwMDBQzKXz5pvi6GDkSDEyzwSDFGOgUIi+8V5e\n4qCsOmQaDY/m5fGZ26L/aFhYwxN6QRAYEzOPMTHzTDpaLpIXcfju4Vx0fJEY6LJ8uZhJ7B/k5OSw\na9eu/Prrr01kZe2JihJ/r57Zks9hISFmU9g7OFh0wPhHjeoKCILAjy5+RK+tXkyQVr1prJFpGDoy\nlIn/Zz6BM3WlWFHMbYHb6L3Nm72/7c2f/BZQ4uvCsrLq6xE3ZJRKJRcuXEgfH5/7azyrVGLZtTlz\nyLZtxXqihw+LARwNkLQ0sSzq9OnVOypUxh3Rb3BCT4pRfUFBvQ2XZa+WSGVSDto5iEtPLRXXhpOS\nxAx9lTimJyUl0dXV1SgZ8ozFT4GltLRVctP3ZhJMcxtBEJeWunQhR48Wq2v9m53BO+n8pTOvZdw/\n7BE0AiOnRTL6mWgK2oaxpFYbBEHg+fBlPP53S/be2o5vnnmTMbn1kNq1npFKpRw1ahSnTJnC0ppi\nOoqLyb17xQ2fDh3IBQvEWqNmkj64Js6dE2ez69bVLQ9cgxR6kiwvj6dEYseSkhrmMQYmtyyXPtt9\n+PZfb9+bUcycKfr5VkF4eDgdHBx44U48shlToFLR3d+fX/sW0MVF/I6YG2q1mB7F3V0skH47xf9d\njsUdo/16e/6ZcM8xXxDEnPJhj4ZRqzCPWYqhuXVrG/383CiTJTClMIXv//0+nb504vDdw7krZBeL\nFebpWVQbkpOT6e3tzbfffrv2zg4ZGeLi9siRoujPny+O/OvR0UBXtFry88/F2bUhZKPBCj0pbjb5\n+7tTpaqfdTipTMq+2/ty+d/L74n8pUui4tQwLTx//jwdHBwYGxtrfEP1RBAETo2M5Ju3/eVjY8U0\nx3v2mNauqlAqyW+/JV1dxdn5PzNj+qb50nGDI/df30+STPk8hdd8rumVU74hkJa2if7+nSmTVfQd\nV2vVPBF/gtN/ns52a9pxwdEFvJxyucE4CfyTkJAQuri43E2MWCdu3RJ3+x96SBT9efPIo0frr1pP\nNRQWkk8+KS5V1jZ6vSoatNCTZELC2wwPf0KsTm9EShQlHLJrSMWRvEZD9utH/qybf/KePXvo6enJ\nnBzz9PTYmp7OQcHBFcqgxcaKQvr99yY0rAZkMnLzZnGK+8QTYvCVIJAxuTF02+zGlV+vpJ+7HxUZ\n5jdyMwSpqesYEOBFubz6tNk5ZTnc6LeRPb/pyS5fdeGqi6sYm2e+A49/cubMGdrb2/P33383fOcZ\nGaJ//mOPkW3aiHWdd+4UC1HXM+Hh4obr668bdnWpwQu9VqtiaOhIpqR8YbTrlqvK+cieR7jkxJKK\nI6Fdu8QRQS1GRytWrOCwYcPqXn/WwITdzmOTWIldcXGi2O/fbwLDaoFcLv4g9epF9ukjzkTCT0bT\n83VPLj241OjJwkxBSsrnDAjoRoVC96GfIAgMuhXEt/58i85fOrPfjn5ce3UtUwrNM8hv9+7ddHR0\npK+vr/EvVlAgbgQ9/bQYiTtkiJhEJizM6MVSDh8WHYZ+/NHwfTd4oSdJuTzVaP7CCrWCT/z4BOce\nmVtRKIqLxSFkcHCt+hMEgc8++yxnzpxJrZl4tJRrNOwRGMgD1eSxiY4WX66JU3nrhCCIeXPmjCzn\nUUtfrluYxKHfjeTzfzxPtfbBWbpJTV17W+T1H3lqtBpeTL7IxScW03adLUd8P4JbA7YaPJeQPgiC\nwFWrVtHT05PxuiZlMiRKpeji9frrZNeuYirl+fPFHwIdCu7oikYj1opwdydDjJSNWxeht7h9osmx\nsLBAVabk5x9HQsLrGDQoDFZWNga5nkbQYPavswEAh586jKaWTe89+L//AXl5wJ49te5XqVRi7Nix\nGDFiBNatW2cQW+vC0hs3UKjR4GCPHrCwsKjyvOvXgfHjgR9+ACZNqkcD9UAtVSN0WCgsn+uE7Wku\n+P14OVotnI5u7u3w1+KDaGHVzNQm1on09I3IzNyBfv0uoXlzV4P0qdaqcS7pHH6J/gWnbpyCR3sP\nTO0+FdO8p6G3Q+9qPxuGRq1WY/HixYiOjsbJkyfh4OBQb9eukps3gb/+Av78E7h8GejeXfxCjB0L\nDBsGNG9e6y6Li4HnngNKS4FffwWM9TKr0867GOc3pvbUZEpCwpuMjJxmkI0mraDl3CNzOf7A+Ptz\niyQkkDY2dVrDy8/PZ9euXfndd6ZNMnUiP5/u/v6VFveujIAAMTLPnJMCahVahj4cysR37/nK5+eT\nG7co2Pal6Wz50hNc9Wm5wTa66pv09C309/ekXG68Ubdaq+bF5It888yb9Njiwc5bOnPZn8t4Mfki\nVRrjFmQpLy/npEmTOHHiRPPNIa9Uiu4w771HDh5MWluLa/yff076++uUWjkuTswdv3Sp8Ysp6SLj\nDUbotVoFr10bwPT0r+p0HUEQuOTEEj6y55HKw+qnTSO/qPueQEJCAh0dHXnmjGnykGQplXTy9eWV\nqvILVMHly+JaYmV+7KZGEATGzI1h1MyoSn3lVRo1J+6aR6flD7O9YxEnThTXRhtKDqxbt7bR39+j\nXkv/CYLA61nX+fGljzlo5yC2W9OOUw9N5bdB3/JmgWHTDUilUg4fPpzz58+nylxKyelCYaFYA/et\nt8QSam3bkhMmiDpx5cp9pRJPnBAHTLt21Y95D5TQk2LObdG/Xv/FrvfOvcchu4awRFFJ8d7z58VE\n7gaqcSmRSGhvb8/IyEiD9KcrWkHg+PBwrtAzletff4kf1H/7sJua5I+TGTwkmJryqn2stYKWr556\nlf23D+TX3+dx7FjxezlnDvnbb+Yr+hkZO277yZs2/W5uWS4PRhzk/KPz6bjBkV2/6srXTr/GY3HH\nWCDTP0Fceno6e/bsyXfeecds9q/0Ji9PTA27bJk44m/dmhw+nMI773Lt/Gi6OGno51d/5jxwQk+S\n2dk/MSCgK9Xq2ldZ3+y/md7bvJlfXolvvlYrulMaOMr1xx9/ZOfOnZmbm2vQfqtja3o6h9YxxcGd\nXNjh4QY0rA5kH8ymv7s/lVk1+6UJgsDlfy9nz296MqMkg7m55HffibPvdu1E0f/9d/MR/czM3fTz\n60iZzHg1AfRBK2gZlhXGNVfX8LF9j9H6C2v239Gfb/35Fv+I/YNSmVSnfmJiYujm5sb169cb2WIT\nUVZG+Z+XOM8nnAPa3GC6tTfp6Sl692zaRPr6GjVFwwMp9CQZF/ciY2Keq9V6/U8RP7Hjpo5MLarC\nH3nfPnLYMKO4WX344YccOXIkFfUQpRdRjStlbfnlFzF6zxROEf+kyLeIEnsJyyJrt6a75uoaem31\nquBamJND7tghVuyxthajb7duJW/cMLTVupGVtY9+fq5mlbW1KpQaJX3TfPn5lc85bv84Wn9hTZ/t\nPnzt9Gs8GHGQNwtu3vedDAgIoKOjI/eaYxi2gcjOFqVj1qzbgwetloyJEUPPX31VTOLUsiXZv7+Y\nxW/7dnFDzEAjjQdW6DWacgYG9mRm5g86nX828SwdNjgwMqeKJRSZTCxpJjFOyletVssZM2Zw/vz5\nRo1alGk07B0UxD06lmXThd27RdewqsqYGRt5ipy+zr7MP61fhPTWgK103+zOROn9ic6KisTlnIUL\nxR+0O8Esp0/XTxBlTs5h+vo6saysYeasuSP8G3w3cMYvM+j8pTMdNjhwyqEpXHN1DdftXUdbO1ue\nOHHC1KYajbAwsVTmqlXVV4GiXC5u5H79tfiB699fFP+ePcnnniO//FL0gsjOrvVg84EVepIsK4ui\nRGJb45ckOCOYduvteCXlStUnrVkjpo8zImVlZezfvz/XrVtntGu8ceMGn4qKMviPycaNogdBfQf9\nako1DOobVOeUwzuu7WDHTR0ZlxdX5TmCIKZZ+OIL8uGHxWXXYcNEx4tTp2qfWbAm8vKOUyJxeKBS\nDQuCwNSiVP4S9QsnLJ/Apm2asvni5uz+dXc+89sz3OC7geeTztdprd+cOHJEdFzQMXj+fpRKsZTi\n99+Tr71GPvKImLLBzk7M7Pfaa+Kao6+vGOxVBbpoZ4Pwo6+KzMydyMz8FgMGBMDSssV9jydIEzBq\n7yh8O+lbTPOeVnkneXlAjx6Anx/QrZs+puvMrVu3MGzYMHzzzTeYOnWqQfs+V1CAhfHxCB80CDZW\nVgbtGwBWrgROnQIuXgTatTN49/dBgYieGY2mNk3RfXf3Ovt5772+Fx9e+BB/zf0LvR1613i+XA4E\nBABXrohu1deuiR+PUaOAoUOBwYOBzp0BfcwqLPwbMTHPok+fk2jbdoger8a82blzJz7++GOcOXMG\nPXr1QFx+HEKzQhGaHYrQrFBcz74O+1b26OvYF70det9t3Wy7oVkT84+BIIG1a4FvvwWOHgUGDTJw\n59nZQFQUEBl57xgXB7RqBXh739csPD1r1M4GLfQkERPzFJo1c0HXrl9VeCy7LBsjfxiJ90e+j5cG\nvlR1J2+8AQgCsG2bPmbXmmvXrmHixIk4d+4c+vXrZ5A+C9Vq+AQH4/vu3THOxjABZf+GFN+q8HAx\npqRVK6Nc5i5JHyShWFIMn799YNnM0iB9Hoo8hLfPvo3Tz55Gf+f+tXquSgUEB4vCHxQkNoVC/JIP\nHnyvOTlVL/7FxRJERU1Hr15H0L79w3V8RebHunXrsGPHDpw7dw5dunSp9ByBAhILEhGZE4mo3ChE\n5orH1OJUeHXwQm+H3uhu1x3dbcXWzbYb2jRvU8+vpHKUSuCll4CYGODYMcDVMPFsNUMCmZmi4MfH\ni8fbzSI9/cEWegBQqwsRHNwPXbtug53dkwCAEmUJRu0dhRneM7By1Mqqn5yQAAwfDsTGAvb2+ppe\naw4fPox3330XgYGBcHJyqnN/z8XEwMbKCl937WoA66pGEIAFC4CCAnEk08xIg6+cH3OQvCoZAwIH\noJm9YS9yJPYIXjn1Ck4+cxKDXQfXqa+sLHGkf6cFB4si36dPxdarF2BtDZSUXENk5CT06HEQNjbj\nDPSKzAOSWL58OU6cOIGzZ8/CVQ8FVGgUiMuPQ1RuFOKl8YjPj0e8NB4J0gR0aNkB3Wy7oZttN3h1\n8IJnB8+7rX2L9kZ4RfeTnw9Mny5GuO7fD7RuXS+XrRFdtLPBCz0AFBf7Ijp6JgYODIFlUwdM+mkS\nvGy88O3Eb6uf8s+aBQwYAHzwgZ5W68+dqe2lS5fQosX9y0668ktuLlanpCB04EC0atLEgBZWjlot\nvm2tWgE//ggY+pIlASWIfDIS/S72Q+vexvkmnbxxEguPLcTROUcx0m2kwfq9M+uOjKzYYmOBgQMj\n8P774xAevgtt2kxB167iUpC7u+Hfw/pGq9Vi6dKlCA0NxZkzZ2Bra2vQ/gUKuFVyC/H58bghvYHk\nomQkFSYhqTAJNwtvwsrSCp4dPNG5Q2d0atsJbu3c7rZObTvBobVDnZf+4uLE1CBPPQV88QVgaZhJ\npkH4zwg9AKSkfIrCwgvYmuqGAnkhjsw5UjF/zb/x8wPmzBGnQcZeh6gEknj66adhZWWFAwcO6PVB\nzFAqMSA4GCf79MHgtm2NYGXlKBTAxImiUG3frt86daX9pikQOiwU3Xd2h+1kw4rFvzl78yzmHpmL\nX5/6FaM8Rhn1WqWl8QgLGwOZbDPi4ubgxg3gxg1xQpmTA3h4iILv4XH/bScn8xKVf6NSqTB//nzk\n5ubi2LFjaNOmfpdYSEIqlyKpMAnJhclIL0lHWnFahVamKoNrW1e4tHG516zFo3MbZzhZO8GhtQNs\nWtrA0uL+N/vvv4FnnwXWrQNeeKFeX55O1IvQX7lyBUuWLIFGo8Ebb7yB119//b5zli9fjl9++QUd\nOnTAwYMH4e3trZex1UFq8fLPnggsEOD7UhxaN6tmNEgCI0cCixcDzz+v9zXrikwmw6hRozBjxgws\nX768Vs8liQmRkRjeti1We3gYx8BqKC0FHntMzPn0xRd1709brkXYQ2FweNYBbu+61b1DHbiQfAFP\n//Y0Ds08hMc8HzPKNRSKVISFPQwPj4/h7Hy/SshkQHIykJoKpKTcO95phYWAo6O4FuziUvHo5CQu\nIzg4AHZ2xltKqwq5XI5Zs2bBysoKP//8c51mpsakXFWOzNLMuy2rLOvu7YzSDOSW5yKnLAelqlLY\ntbKDY2tHOLR2gENrB2RdfhKBByZh8Zq/MfwhNWxb2cKulR1sW9qiQ8sOaNm0Zb0mhKuMehH6/v37\nY+vWrXB3d8f48eMhkUhgZ2d39/GgoCC8/fbbOH78OP766y8cPHgQJ0+e1MvY6tgduhtfXP0MX/Ut\nx8MDjqFduxFVn/z778AnnwChoSafN2dkZGDo0KHYtm0bpk2rwjOoEr7NyMDe7Gz49u8PKxMN+fLz\ngUceEUc5776rfz8kETMnBpYtLeG917tevzhXU69i5uGZ2D99P57o8oRB+1apshEW9jBcXV9Hx45v\n6NWHUinuBWRmAhkZ4vHO7ZwcIDdXbPn5QJs2oujb2wO2tmKzsbm/tWtXsemRmBElJSWYMmUKOnbs\niD179sDKCJ5e9Y1Kq0JeeR5yy3ORVZKLr7/oiJCLLpj52R7Q5gbyZfmQyqXiUSZFoaIQAgV0aNEB\nHVp2QPsW7e/ebtu8Ldo1b1fx2EI8WjezhnUza7Rp1gbWzazRulnr6lcfasDoQl9cXIzRo0cjLCwM\nAPDGG29g/PjxmPSPPLdff/01tFot3nrrLQCAl5cXbt68qZexVXEm4QxeOPYCrrxwBTaMRWLiWxg0\nKAxNm1aySaNSibtj33wDPP64XtczNHc8cf7++2/4+PjUeP4NmQwjwsLg278/uptg2emf3LoFPPww\n8OGHwKJF+vWR+lkqpCel6HepHyxb1P+Pll+6H6b9PA0/TP0Bk7tNNkifanUBrl8fBXv72fDwqMYh\nwEAIgjj6z8sTfwAKCsQmld5/u7i4YmvSBGjfHmjbVvyxsLa+/2htLa5wtmoFkFJ8/fUEdO06EG+9\n9Q2srS3RogUqtJYtxWPz5kBT/TXMJJSXi+mFi4qAI0fEH8eqUGgUKJQXokhRhEJFIQrlhShUFKJE\nWYISZQmKlcXiUVF8974yVRlKVaUoU5Xdbc2aNIN1M2u0smqF1lat0bpZ6wq3WzZtiVZWrdDSqiVa\nNr3drMT7lg5ZWqN21ulfcO3atQrLMD179kRAQEAFoQ8KCsK8efPu/m1vb4+bN2/Cy8urLpe+S0hm\nCOb/MR/Hnj6GbrbdAHRDYeE5xMcvRs+ev9w/Oty5E/D0NBuRB4DBgwdj27ZtmDp1KgIDA+Ho6Fjl\nuRoS82Jj8bGHh8lFHgA6dgTOnhX9y9u3Fzdqa0P+sXxkfpeJAYEDTCLyADCi0wicfPYknjz0JHZM\n2oHpPabXqT+NphQRERNgYzMe7u4rDGRl9Vha3hvFV7IyWiWkGDNwR/TLysRWWlrxWFYmPp6YmIWj\nRx+Hk9NENG++Fhs3WkChEPtQKFDhtlwuzkgAUfCbNROPd1qzZmKzsrr/aGUl/kDcOf77dpMm999u\n0qT6ZmkptqpuW1qKP5Zr14r7JG++KcZSWFiIzdKy4lFsLWBp6QwLC2dYWADtLYAOdx5rClhYARZt\n/nl+xXb7vwClIINcWw65tly8rSmHQlsOuVYGhbYcCq0MSq0cSoUcMq0chVo5lNoiKLRynf7PRv+t\npRh9W+G+qqbmH3300d3bo0ePxujRo6vtO6UoBVN+noLvJn+HEZ3uLdV4eX2JkJChyMraDReXf/jQ\nl5YCn30mFhgwM+bMmYOYmBjMmDEDFy5cQPMq5tNrUlPRvmlTvOriUs8WVk3XrsDp02KdhnbtgHE6\neg6WR5UjflE8+pzug+YueqwfGJAhrkNw5rkzmHhwItSCGrN7zdarH61WjqioKbC29oGn5waTr9/W\nhIXFvZG6s3P156ampmLs2LF4550XsHz5cp1fm0YjCr5KJR7vNJVK9OJSq+/d/ud9Gk3lR61WvH3n\neOe2SiUeK2uCILZ/39ZqxR+7OzMiPz9R5Fu1AnbvvvcYWfH2P++r7G9dGnDntgXI1gBaV7j/3uMV\n7ysvvwS5/BLINgB03PzWJVK3KoqKitivX7+7f7/22ms8efJkhXO++uorbtq06e7fnp6elfZVW1Ok\nMim9t3lza0DlVePLymIokdixrCzq3p2rV5Nz59bqOvWJVqvlrFmzqsyJE1JSQgeJhLfqITmaPly9\nKqY31iVFqypfRX9Pf2YfqLrEoSm4nnWdTl868cfw2hf31GpVjIiYzOjopykIVadSbojExcWxU6dO\n/OqrutWDMFfOnBE/u4cOmdqS2qOLdtY5102/fv14+fJlJicns3v37sz7V73FwMBAjhw5kvn5+Tx4\n8CAnTZqkt7F3kKvlfPiHh/n2X29Xe15m5vcMCupFjUYmJguysSGTk3W+jimoKieOXKtlr6Ag/lhN\n7Vdz4PRpMb1xRETV52hVWoaNCatQJcqciMqJostGF34f+r3OzxEEDaOjn2ZExGRqtQ2oqIYOXL9+\nnc7OztyzZ4+pTTEK334r1kyuj/rkxqBehP7SpUv09vaml5cXt24VR9c7duzgjh077p7z3nvv0cPD\ngwMGDGBMTOVJyHQVeq2g5Zxf53DW4VkVC3pXgiAIjI5+hvHxS8SaXm+9peOrMi3p6el0dXXl5kbn\npgAAIABJREFU0aNH7973TmIiZxohYZkxOHSIdHERqzJWxo3XbjB8QjgFjfm+lvj8eHba1InfBn1b\n47mCIDAu7iWGhY0WBxUPEH5+fnRwcODhw4dNbYrB0WjE2iHe3mSieY45dKJehN5Q6Cr07559lyO/\nH0m5WrcqUGp1MQOuuDFnsrVBq7sbm2vXrtHOzo6hoaG8UlhIZ19f5iprLrphLuzcKRbr+nd648xd\nmQzsHkh1kW51bE3JzYKb9NjiwU1+m6o8RxAEJia+w+DgIXoVwzFnzp8/T3t7e54+fdrUphic0lJy\nyhRyzJhqE0M2CB44od8WuI3dv+5eeYWoaihZOpaSs60plyfraZ1p+PXXX+nasSPdjh/nsQb0I3WH\nL78ku3W7l9646KpYQKQ83kxKO+lAalEqvbZ6cc3VNZU+npLyGYOCelOl0q3aUkPh+PHjtLe356VL\nl0xtisHJyBDTwS9cKGYKbug8UEL/R+wfdP7SmUkFtaypGRREurgwLXENQ0KGNbj108HLltG2Vy+W\nm0vdu1qycqVYoTErQiwgIv2z4QliRkkGvbd5c/XF1RWWztLTv2JAQBcqFJkmtM7wHDp0iI6Ojgwy\nt6LBBuD6dbHG0BdfGKWYnEl4YIQ+ID2A9uvteS3jWu06FQRxbvbddxQELcPDJ/DmzffraGn9cTo/\nn25+fnx67lzOmjWrQRZVFgTyjaVa9mldytjP001tjt7klOWwz7d9+N659ygIArOy9tLPr1ODmyXW\nxK5du+ji4sKI6nbTGygnT4qeNQYuC21yHgihT5Qm0ulLJ56I16Mc2Z9/imsHanE9WKnMoZ+fK6XS\nv+piar0gVano6ufHCwUFVCgUHDlyJD/88ENTm1VrBEFgxFNRnO5VyLFjBcp121oxS/LL8znguwF8\n8fcJvCpxZHl5rKlNMiibNm2iu7s7b5iqgK4R+eor0bPG39/UlhieBi/0uWW57PpVV26/tr32HWq1\npI8P+fvvFe4uKLhAX19nKhQZ+ppaLzwTHc03/vGFy83NZefOnbl//34TWlV7Uj5LYfCQYKrKtHzq\nKXLqVFLVsFbPKpCceZR9t1jxmcOTqdaa/4ayLgiCwNWrV7Nbt25MM1VxYCOhVot1gHv0IJNquerb\nENAK2oYt9KXKUg7eOZgrLqzQr8MDB8Sin5UsxCUnf8LQ0EcoCOb5RT2ck8NuAQEs11QMuomKiqK9\nvT2vXr1qIstqR96xPPq5+lGRIQZ4KZXkhAnk00+Lrm0NjaIiCSUSe2bmnePjBx7njF9mUKE2z+A1\nXdFqtXzzzTfp4+PDbDOP0agtxcXi523cOLKw0NTWGJ6I7Aj6bPdpuEKv0qg44ccJXHhsoX5+4wqF\n6Nt3+XKlDwuCltevP26W6/WZCgUdJBIGFhdX+vhff/1FR0dHxsfH17NltaMsqowSOwmLAyq+DpmM\nfOwxcsECcdLVUCgpCaZEYk+p9CxJUqFWcMYvMzj+wHiWqxrmRrlarebzzz/PkSNHsvABU8LkZLJX\nL/Lllxv2DLIq9l/fT7v1dtx3fV/DFHpBELjg6AJOOjhJ/6nx5s1kFRG4d1Aqc+nn15H5+SerPa8+\nEQSBE8PDubKGOebu3bvp6enJnDt+i2aGKl/FAK8AZu3LqvTx8nKx4P1LLzUMsS8ri6KvrxPz8v6o\ncL9aq+aCowv40A8PsUheZCLr9EOhUHD69Ol8/PHHWVZWZmpzDIqfH+nsTG7d+uB41txBoVbw5ZMv\ns+tXXRmRLW6YN0ihX/73cg7dNZRlSj0/fEVFYgx+ZKQOp16lROJAuTxFv2sZmJ0ZGRxw7RqVOqjf\nypUrOWTIELNzu9SqtLz+2HUmvF1FWOxtSkrI4cPFgGVz/jLKZIn083NldvbBSh/XClq+dvo1Dvhu\nAPPKG0asQ2lpKceNG8eZM2dSYaZ5k/Tlp59IOzvRw+ZBI7kwmYN2DuKMX2awWHFvptzghP6rgK/Y\n7etudfvCfPAB+cILOp+emrqeISFDqdWaNnLipkxGO4mEUTqOrgRB4Lx58zht2jRqzGjBO/7VeJ3T\nGxQVkYMHk2+/bZ5iL5en0d/fgxkZO6s9TxAEfnD+A/bY1oNpRea9mVlQUMBhw4Zx4cKFVKvNc49K\nHwSB/Ogj0t2dDA83tTWG59SNU3TY4MCNfhvvW85ucELvutGVyYXJ+ndy65aYuKwWngOCIDAi4kkm\nJJguD45GEPhQaCg31tLjQalUcsyYMXzjjTeMZFntuPXNLQb2qF16g4ICMaBq+XLzEnulMpsBAd2Y\nllZ1+oN/s9FvIztt6sSonKiaTzYBmZmZ7Nu3L5ctW9YgcibpSnk5OWcOOXQomVX5amGDRaPVcMWF\nFXTd6MqrqZU7YTQ4ob+edb1unbz0Evm//9X6aSpVAf39PZib+3vNJxuB9ampHBUWRq0eX77CwkL2\n6tWLmzdvNoJlulNwvoASBwllCbVP6pWXR/buLY7IzAGVSsqgoD5MTv641s/9MfxHOmxwoCRVYgTL\n9CcxMZGenp789NNPHyiRT08nBw4kn3tO3Oh/kMgsyeTovaP52L7HmF1atUdUgxP6OhETIy7O6Zmh\nqLg4iBKJPWWy6teWDU1kWRntJBIm1yGSKDU1la6urvztt98MaJnuyBJklDhIWHBB/+xQ2dmir/NH\nH5l2ZK9WFzE4eDATE9/RWxD/TPiTduvteCzumIGt04+wsDA6OztXyCj7IBAQIGZJXbvWvGaDhuDc\nzXN0/tKZH138iBpt9Uuz/y2hnzaNXL++Tl3curWNQUF9qNHUjxeCUqtlv2vX+H1m3XOlhIaG0t7e\nnhJJ/Y4k1UVqBnoHMmN73QPQsrPFkf0HH5jmi6tWlzAkZARv3HitzqPeoFtBdPrSibtCdhnIOv24\ndOkS7e3t+euvv5rUDkNz4IA4rjt+3NSWGBaNVsNVF1fR+Utn/n3zb52e898ReolEzFRUx/h6QRAY\nG7uAUVGz62V6+2FSEp+MiDDYtf766y86ODgwvJ52owS1wPAnwnljqeFC5vPyxDX7//u/+hV7jaaM\noaGPMC5uMYUa6hzoSnx+PDtv6cxPL5tmueTo0aO0t7fn+fPn6/3axkKjId97j+zcWSfHugZFVmkW\nx+wdwzF7xzCrVPfNhv+G0AsCOXIkaaDqN1qtnMHBg5mautYg/VWFX1ERHX19mWXgPKk///wzXVxc\nmFgPlRQSliXw+tjrFNSGFTGplBw0SAxdrw991GhkDAt7lLGxzxtM5O+QWZJJn+0+fOXkK/WaMmH3\n7t10cnJicHBwvV3T2BQXk5Mnk6NGNajSEjrx982/6fylM1ddXFXjUs2/+W8I/bFj4nzfgC6GCkU6\nfX2dKZX+abA+/0mJWk1Pf38eNdKndceOHfT09GRGhvHy+WTuymRA1wCqCowTdlhUJGawWLLEuEFV\nWq2c4eHjGR39rNHqvBbJizhu/zhO+HFCBf9nYyAIAtesWUMPDw+zj56uDbGxZPfuYqTrg5BD/g4q\njYrvnXuPLhtdeO7mOb36ePCFXq0Wd/CMEB1RWHiFEokDZTLDj4xfiI3lorg4g/f7Tz7//HP27t2b\nBUYon1NwTvSwMXYBkZIS8qGHxLAIY4QKaLVKRkRMZlTUU0bPe6TSqLjkxBL2/rY3UwqNE6Cn0Wj4\n6quvsk+fPrx165ZRrmEKjh4V0wt/r3sJ3wZBojSRg3cO5qSDk5hblqt3Pw++0O/eLcbSG2l+L27O\n9qZGU2qwPn/LzWWXgACWGjnISRAELlu2jMOHDzdoiHtZdBkl9hIWXqqf3ChlZWJJgblz72abNgha\nrYqRkdMZGTm13orRCILATX6b6PylMwPSAwzad3l5OadOncrHHnuMRUUNKx1DVWg05IoV4vZbYKCp\nrTEsd3LVfBXwVZ33bx5soS8vJ11dRR8rIyFuzi5kVNQsg2ym3bqdsCygioRlhkar1XLBggUcP348\nlQaY7yqzlfT38K8yh42xKC8XsxBOnizeritarYpRUU8xPHwitdr6TwFwPO447dbb8Zcow1TAyM3N\n5dChQzlv3jyD/J/NgYIC8X8+atS9UpQPAsWKYj73+3Pssa0Hw7MN4zShi3ZaoqGyeTMwfDgwdKjR\nLmFhYYFu3b6BQpGG9PR1depLIPF8XBxec3XF0LZtDWRh9VhaWmL37t1o0aIF5s+fD61Wq3dfWrkW\nUVOj4DjPEU7znQxoZc20agUcOwZ06ACMGwcUFOjflyCoEBMzB4IgQ+/ev8PSsrnhDNWRJ7s/iXPz\nzuGds+/g8yufQ/yu6kdCQgKGDx+OsWPHYt++fWjWrJkBLTUNUVHA4MFAt27AuXOAg4OpLTIM/un+\n6P9df1g3s0bw4mD0dexbfxc3yE+KAaiVKdnZYqqDevAsIUmF4hZ9fV2Yn69HlavbbE5P54iQEKpN\n4GYnl8v56KOPcv78+XrlxRG0AqOeimL0M9EmjarUasl33iF79hQjImv/fAUjIqYwImKKSUby/yaz\nJJODdg7ic78/p1eqY39/fzo5OfG7774zgnWm4Y5//IEDprbEcCg1Si7/ezkdNzjySMwRg/evi3Y2\nTKF/+WVy2TLjGVMJxcUBlEjsWVJSe3e1iNJS2kkkvGnCGO2ysjKOGTNGL7G/ufwmQ0eGUis3j5zC\nGzaQbm5iMLSuaLVyRkRMYmTkdJMnsPsn5apyzj0yl32392WiVPeByx0f+VOnThnRuvpDJiMXLRIr\nfz5IScnCs8Pps92HUw9NrTaNQV14MIU+Olr8yZdKjWtQJeTmHqGvr0ut0hrLtVr2CQriHjPItqSP\n2Gd+n8kArwAqc81HHEly/37S0VG3GqCiC+UTjIp6qt42XmuDIAjcFriNDhscaqyNLAgC165dS1dX\nV167dq2eLDQu8fFk375i5bGSElNbYxg0Wg3XXl1Lu/V23BO2x6gz4QdT6CdPJjduNK4x1ZCevpmB\ngT2pVuvmdbIsIYGzoqLMJpFUeXk5x4wZw3nz5tUo9tKzUtGNMta8ct7f4fRp0e2uukGtRlPO69fH\nMTr6abMtHXkHvzQ/dtzUkSsvrKw0aEahUHD+/PkcMGAA0/VZuzJDfv5ZHLft2PHg5KtJkCZwxPcj\nOGbvGKO50v6TB0/oz58XY59NWCxBEATeuPE6w8IerXEJ4IxUyo5+fsw3s1pmuoh9SXAJJXYSFl4x\n7xJzAQGkkxO5Zcv9QqHRlDEs7FHGxMw1e5G/Q3ZpNkftGcUnfnyCUtm9WWtOTg5HjBjBWbNmPRAV\noeRy8pVXSC8vMjTU1NYYBo1Wwy3+W2i33o5bA7ZSa+Ao66p4sIReqyX79yd/MYxLWl0QBA0jI6cy\nJmZ+lSP1DIWCTr6+vGymtTirE3tZooy+zr7MPaJ/EEd9kpIiTv1ffPFe1KRKVcCQkBG30xqYT2EW\nXVBr1Xzn7Dv02OLBaxnXGB4eTnd3d65cuZLahlB7sQZiYsSv8qxZYgT0g0BEdgSH7BrCUXtGMT6/\nfiOSHyyh37dPrCxgJvM7jaacwcGDmZy8+v7HBIGjw8L4SXJyvdtVG+6I/dy5c+9WG1JmKxngFcCM\nHcZLn2AMSkvFBKYPPUSmpWUzKKgPExLeMnjumvrk1+hf2e6zdmw9vjUP/lR5KcOGhCCQ27Y9WEs1\ncrWcH57/kPbr7bkrZFe9jeL/iS5C3zD86GUy4MMPgY0bAQsLU1sDAGjSpBX69DmB7Oz9yM7eW+Gx\nz1JTYQngA3d3k9imK61atcLJkyeRl5eH6dOnoySnBBETI+A41xEuS1xMbV6tsLYGfv8deOihQgwd\nqoJU+hq8vDbBwqJhfMT/jSAISDiWgBb7W8B7kje2K7YjpSjF1GbpTXY2MGkSsG8f4OsLLFliNl9l\nvbmcchk+O3wQlx+H8JfDsWjAIlia6+dN31+RkpISTpkyhZ06deLUqVNZWnp/moC0tDSOHj2aPXv2\n5KhRo3jwYNWjEgDM+6OKJF+ff07OnKmvqUalrCyGEokD8/PFfDuXCgvp5OvLzAZUdFmlUnHuc3PZ\nt11f+s/3N5uN49pSWhpBPz9XfvPNWdrbk0cM77JcLxQWFnLKlCkcPnw409PTqRW03OC7gXbr7bj/\n+v4G9/85elT0kFq5kjSz7Sq9yC/P5+ITi+m60ZVHY4+a2hzjLt2sW7eOr732GhUKBZcuXcoNGzbc\nd05WVhbDwsJIknl5eezcuTNLqvCfAkCJfSWJsu4ERyXUb+Wn2nDHxz4p5xQ7+vnxjAlcP+uCoBUY\n+XQkF3ZZyO7duzMlxfieAoamqMiXEokDs7N/Ikleu0Z27ChWrDKj2uk1EhYWRi8vL77xxhv3pTMI\nywpjz296cvavs1kgM3yyOkNTWirum3h6kr6+pram7qi1an4T9A3t19tz6amlLJKbxwaDUYV+5syZ\nd0U8JCSEs2bNqvE5kydP5oULFyo3BGDGjgwG9QqipvQf38xXXiHffFNfM+uNgsIrPHmpA9dENay1\nVEEQmPB2AkMfCqVGpuHmzZvp6upab8VLDIFU+iclEjvm55+ucH9mppgQbfRosW68ubNnzx7a2dnx\n0KFDVZ4jU8n4+unX2WlTJ566Yb7BUmfPig5yL7zwYPjGX0q+xL7b+3L03tEGy1FjKIwq9G5ubpTf\nruhUXl5ONze3as9PSEhg586dq3QNAyAmEXshllGzb/udR0SIjtL5+fqaWW9sSEvjs4E7eFVix6Ki\nhjN8Sf4omUG9gyrklT906BDt7e158eJF0xmmI1lZ+yiROLCoqPISihoN+dln4tLBCf0zWBgVuVzO\nl156id7e3oyOjtbpOWcTz9JrqxdnHZ7FW8Xm8yuWn08uWEC6u4txDg2d1KJUzv51Nt02u/HX6F/N\nctmszkI/duxY9u7d+7527NgxdurUSWehLykp4YABA/jHH39Ua+zq1au56sNVXOy8mL+88rM4FNu2\nrcYXYWoCiotpL5EwRS6/Pbq0Z3FxkKnNqpHUNakM9A6kMvv+eIDz58/T3t6ehw8fNoFlNSMIWiYl\nfUh//84sK6tZHCUSMW3CG2+YNAzjPm7evMmBAwfyqaeeqnJZsypkKhlXXFhB23W23OK/pV4rWP0b\nQRCDn5ycxPe4ki27BkWJooQfXfyItutsufriar1yERmLixcvcvXq1XebUUf0M2bMYOjtSIfg4GDO\nrGKzVKVScdy4cdy8eXP1hvzDWHmKnL7tz7Ow83TDJiE3AvkqFT38/fl77j2f87y845RIHFhaGmZC\ny6onbVMaA7oEUJFRteqFhYWxU6dO/OCDD/RKhmYsNBoZo6JmMyRkOJVK3XPYFhSQM2aINWmNXPel\nRgRB4A8//EA7Oztu2bKlTiPF2LxYjt47mgO+G8CgW/U/wEhLEwPWe/XSLSWFOSNXy7nJbxMdNjjw\nmd+eqZfI1rpSL5uxMpmMr776aqWbsYIgcN68eVymQwKyCsaWl1NqP4G+NhepSDej4de/UAsCx16/\nzncryaKZm/sbfX2dWFZmfhWMb227RX8Pf8pTay6mnpOTwzFjxvDxxx9nvhksoSmV2QwJGcro6Kep\n1da+GLwgkNu33/PlNkX8UV5eHqdPn84+ffowIiLCIH0KgsD91/fTcYMjXz31KvPKjV9UVaUSI5Lt\n7MhPPmnYJf5UGhV3XNvBjps6cuqhqYzINsz/pT4wqtBX5V6ZkZHBiRMnkiSvXr1KCwsL+vj4sF+/\nfuzXrx/PnDlTs7GrV5OzZzN1TSpDhoaYTdbEf/O/xESOvX69ytTD2dk/0dfXmSUl5hPjnbkrk36d\n/ChL0j2Tplqt5jvvvEMPDw+GhIQY0brqKSuLpL+/B5OSVtV5rTQyUqxJO3KkmCevvjhz5gxdXFz4\nzjvvUGGENSSpTMpXT71Km3U2/OjiRyxRGH4nVBDE6p3du5OPP167LKLmhkar4YHwA/Ta6sWx+8ca\nvPJXfWBUoTc0d41NThbdKVNTKQgCo2ZHMWpWFAWNeW2C/JKTQw9//xrz2OTm/k6JxJ5S6dl6sqxq\nsvZl0c/Vj+U39FtvPHz4MO3s7PjDDz8Y2LKaubP3kZ1tuETlGg35zTfiiHTFCjH/irEoLy/n0qVL\n2alTpyo9zwxJojSRc4/MpcMGB27020iZyjApsiMjyXHjSG9vMZmcGe5N6oRcLefO4J303ubN4buH\n80KS8f8nxqJhCv3MmeI88DZahZZhY8J4Y+kNs9nxvpNfPkzHHac7hcYNKVK1JefnHPo6+bIsum4J\nsaKjo9mtWzcuWbLEKCPSfyMIWqakfEFfX0cWFV01yjUyMsS8K126kH//bfj+fX196e3tzWeeecYo\nxdqrIzInktN+nsaOmzpyZ/BOqjT6RSzl5oplIOztya++ariBT7llufzo4kd03ODIiQcn8nzSebPR\nFX1peEL/99+kh4dYheAfqIvUvOZzjSmfmn5jRKpS0SsggAeza1dEoKwsin5+bkxNXVfvH6zM7zPp\n6+TL0nDDuEIUFxdz+vTpHDBggFH97VWqfIaHT2RIyAjK5WlGu84dTpwQPXPmzycNUT4gPz+fixYt\noouLC38xcTK+gPQAjt0/ll5bvbg1YCuLFbrVLS4qIj/9VJz1vPmmScpAGIS4vDguPrGY7de256Lj\nixidW4/rdUam4Ql9r15Vxq0rMhX09/Rn5q7MerbsHhpB4BPh4VymZ5SuQpHOoKDevHHj9XrLqJj2\nZRr93PxYHmdY9zBBELh7927a2dnx448/psrAQ7zi4gD6+7szMfH/6rVYSGkp+e674urh//6nXwiH\nIAjcu3cvHR0d+frrr7PIjFI0SlIlnPPrHHZY24GvnnqVMbmVL7BLpWLKAltbct4803sp6UO5qpw/\nRfzE8QfG0369PVddXGW0Kk+mpOEJ/dix1S76ld8op6+zb9U5cYzMBzdvcnRYWJ3qvqrVhQwLG82o\nqFl6eY3oiiAIvLn8JgO9AylPM9510tPTOWHCBPr4+Nx1t60LgiAwPX0LJRJ75uVVHXdhbNLTxaUK\nGxty1Srd0+lGR0fzkUce4aBBgxgcXPuyk/XFreJbXHlhJR03OHLs/rH8I/YParQa5uSQ770nvu5F\ni+qtLLPBEASBV1Ku8MVjL7LD2g4cf2A8D0YcNNgehTnS8IReB/eHkmsllNhLWHS1fkdJv+Xm0s3P\njzkG8CHTahWMiprN0NCRVCgMH9UoaATGL4ln8MDgeikBeGcEa29vzxUrVui9dq9WFzEqaiaDgwdS\nJrtpYCv1IymJfP55cW16zRqyqpofRUVFfP/992lnZ8dt27aZVdxBdSjUCh4IP8B+24bSelVHNp/6\nJqe9eZlJyQ3DflL8/EXlRHH1xdXsvKUze37Tk+sk68wqYtiYNDyh15E7Je7KIuun0o5/cTHtJBIG\nGzBph7jJ+Cl9fR2Zn2+4nCVapZZRs6MYNiaM6uL6DTbLyMjgk08+yV69elEiqTwlQVUUFl6kv78n\n4+NfNepMR1/i4sSapo6O5Icfis5hpFiHd+3atbS3t+eCBQuYmWm6pcXaolSShw+LE2k7O3LBu1F8\n98Qn9NnuQ4cNDlx8YjH/TPiTSo35OcgXK4p5JOYIXzr+Ejtt6kT3ze58/fTrvJZxrcFvrtYWXbTT\n4vaJJsfCwgK1MSXnUA6S/peEvmf7onWP1kazK0EmwyPXr2N39+6YZGtr8P6Liq4gNvY5ODg8jc6d\nv4ClpZXefWnLtYieGQ3LFpbo+XNPWLao/9zYJHHo0CG8//778PHxweeff46+fftWeb5GU4KkpP9B\nKj2Frl2/hZ3dk/Vobe2JjQV27gQOHCDs7dOQnf0xHntMjk8/XYUePXqY2jyduHED2LUL2L8f6NUL\neOklYPp0oEWLe+fcLLiJo3FH8Xvs74jPj8dYz7EY3nE4hnUchv7O/dGiaYuqL2AESpQluJ59Hf7p\n/jiTeAYhWSEY0WkEnvB6AhO6TkB32+6waOgJ7vVEF+1ssEIPANn7s5H0XhJ6H+uNtkPaGtymHJUK\nI0JD8b6bG15yMV4hDrU6H3Fxz0OtzkfPnj+jRQuPWvehzFAianoUWvdsje67u8OiqWk/9AqFAjt2\n7MCaNWswduxYfPLJJ/Dy8qpwjlR6GjduvAwbmyfg5bUBTZu2M5G1uqNWq7Fv3z589NE62NsvgYXF\ny8jOtsYLLwAvvgh4eprawsq5eRM4dUoszhIXBzz/PLBoEdC1a83PzSjJwPnk8wjMCETArQDE5ceh\nl30vDO04FMNch6GXQy90atsJNi1t6iy2AgVkl2UjPDscYdlhYssKQ3ZZNvo49sFgl8EY7zUeoz1G\no3Uz4w3wGhIPvNADQP6JfMS/GI8eB3vAZpyNwewp02ox5vp1TLCxwSedOxus36ogBdy6tQVpaWvR\nrdsO2NvP0Pm5xZJiRM+OhuvrrnB7382sRjalpaXYvHkzvvrqK8yePRsrV66EnV0zJCa+heJiX3Tv\nvhsdOjxqajNrJD8/H3v37sX27dvh4eGBzz77DMOHDwcgjvJ37QIOHAAcHYEnngDGjwcefrjiKLk+\n0WgAPz/g5EmxFRSIFZ6efBKYOBFo1kz/vmVqGUKzQhF4KxABGQG4Ib2B9OJ0KDQKdGzb8W7r1K4T\nWlu1hqWFJSwtLGEBi7u3AUAqlyK7LBvZZdnIKstCdlk28srz0L5Fe/Rx7IMBzgPQ36k/+jv1Rzfb\nbmhi2cRA786DxX9C6AGg6GoRomdGo+u2rnCY7VBnWzQkpkZGwrFZM3zfvX6nhCUlQYiJeRodOoyF\np+cXsLKyq/Jcksj6LgvJq5Lhvc8bthMMv7RkKPLz87F27Rr88MNOPPKIgPnzp2DKlF1o2tTa1KZV\nCUn4+/tj+/btOHHiBKZMmYJXXnnlrsD/G60WCA4G/voL+PNPICoKeOghUfgffRTo1q1uAlsdeXnA\n9etAWJhow99/A507A5Mni23gQMDSyCt55apy3Cq5hfSSdPFYnA65Rg6Bwt1GUDySsG1M3PmeAAAN\nsklEQVRpCydrJzi3cYaTtROcrJ3g0NoBzZoY6U16QPnPCD0AlIWXIWJiBNxXuMP1FVe9+yGJl27c\nQIZSieO9e8PK2N+OStBoipCcvAq5uT/D3X0FXFxeuW/tXlAKSHg9AcW+xej9R2+06tqq3u3UFZIo\nLDyHpKTlkEo18PUdjoMHz6F169ZYtGgR5s6dCxsbw83G6kppaSkOHjyI7du3QyaT4eWXX8bzzz8P\n21ru0RQUAOfPi6J/5QqQng54eAA9eojN21s8ursDrVoBLVsCTaoYtCoUQH7+vZaXJ84kwsLEVlYG\n9OsH9O8vtsceA1z1/xo00oD4Twk9AMiT5Ih4PAKO8x3hvtJdr5H4xykpOJ6fj8v9+8O6qm9dPVFe\nHo3ExLegVGaiS5ctsLEZBwBQZioRPSsazZyawXufN5q2aWpSO6ujpCQQSUnLoVJlonPnz2FnNwMW\nFhYQBAGXL1/G7t27cerUKUyYMAEvvvgiRo0aBSsr/Tek9eXmzZs4deoUTp06BT8/P4wbNw6vvPIK\nHnvsMVga6MdeoQASE0WBjo0V18pjY4FbtwC5HJDJxBF/q1b3mkolCrtaDdjZ3Wu2tuIM4Y6wd+7c\n8IttN6If/zmhBwBVtgoRT0Sg7Yi26LKlCyyb6f4l/S4zE+vS0uA3YACcjDXHriUkIZUeR2Li22jd\nujccClcj6VklXF52gdsHbrCwNM9vd3l5NJKTV6C0NBgeHh/ByWkBLCwq/0EqLCzEwYMHsW/fPsTH\nx2PYsGEYPXo0Ro0ahcGDB6OZEf4XCoUCvr6+d8W9uLgYEydOxKRJkzBu3Di0bWv4zf2aIAGlUhR8\nmQwoLwesrAB7e8DaulHIG6mc/6TQA4CmSIPYBbFQ3lKi50890ap7zcsa2zIysD4tDed9fNC1lfkt\ng6hLZYjcvxolbrtg02IGvEaIwm9OkAKKii4iM/M7FBVdgpvbe3BxeRVNmrTUuY/CwkJcvXoVly5d\nwuXLl3Hjxg0MHToUDz30EDp37gxXV1d07NgRrq6uaNOmTY39yWQyxMfHIyYmBtHR0YiJiUFMTAzS\n0tLg4+ODSZMmYdKkSejfv7/BRu6NNFKf/GeFHhBHwpk7MpGyKgWeazzh9KJTlUs5G9PT8U1GBs77\n+KBzS91Fqb4ovFiI+EXxaDeyHdzWWyNP8T0yM3ehZUsvuLq+Cju7GbC0NN0MRKXKRlbWHmRl7UaT\nJtZwcXkJjo7zDOIuWVRUBIlEAn9/f6SlpeHWrVvIyMhARkYGmjRpgo4dO8LW1hYqlQoKheK+plKp\n0KVLF/Ts2RM9e/ZEr1690LNnT3Tp0sUoM4VGGqlv/tNCf4fy6HLEPBuDVl1bodvObrCyqbj++3lq\nKvZmZ+OCjw86mcoXrgo0pRok/S8J0pNSdNveDbaT720GCoIaUulxZGR8C5ksGk5OC+HisgQtWrjX\ni22kBgUF55CVtQtFRRdhbz8Lzs4voU2bwfXipUQSRUVFyMjIgFQqRfPmzdGiRYv7mrW1NZo2Nd89\njEYaqSuNQn8bQSEg6f0k5B3JQ48DPdB+VHuQxKqUFPyel4fzPj5wbt7cKNfWl4K/ChC/OB4242zg\n9aUXmravWqxksjhkZu5AdvYBtGzphfbtH0G7do+gXbuHYGVlGG8WQVCjrCwERUWXUVR0CcXFfmjV\nqjucnRfBweEZNG1a8zJKI400Yngahf5fSM9IEf9iPByedsCeZwScRDHO+fjAwYym8GXXy5DySQrK\nQsvQbWc32Dyuu1ALggIlJUEoLr6CoqIrKCkJQIsWHreF/yE0b+4OKysbWFnZomnTDrCwqOhVRBIa\nTRHU6hyoVDlQqbIhl99EcfEVFBf7oUWLzmjffjTatx+F9u0fqdbHv5FGGqkfGoW+EpTZShx8OwKO\np8vh8UpHdHvX/b7lHFNQGlKKlE9SUHqtFG7/c4PzYmc0aVU3905xFB52V6hVqiyo1VKo1VJotcVo\n0qQNrKxs0aRJm9v358LCojmaNXNEs2ZOaNbMEc2bu6F9+4fRrt3DsLIy34CsRhr5r9Io9P+iVKPB\novh4pCmVONa2GwrXZSDvSB5cX3NFp2Wdql0eMRYl10qQ+kkqSkNL4faeG5xfckaTlsb33ye10GiK\nb4t+CaysbGFl5VgrD5lGGmnE9DQK/T+Ik8kwIyoKI9q1w7auXdHitiud/KYcqZ+lQnpSio5vdoTL\nUhdYdTDuCF9bpkXBnwXI+iEL5ZHlcHvfDc4vOpsk22QjjTTSsGkU+tv8lpeHV27cwBpPTyxydq70\nHNkNGVI/S0X+H/mw7m8N28m2sJ1si1berQziRaLKU0F6Qor8o/koulyEtsPbwmG2AxznOsKyeaPA\nN9JII/rxnxd6DYn3k5Lwe14efuvVCwN1CLDRyrQoulgE6SkppCelsGhqIYr+JFu07t0aVvZWNUbb\nako0UKQqoExVQhYnQ/6JfJRdL4PN4zawm24H24m2JlkmaqSRRh48/tNCn6NSYU5MDFpYWuJgjx6w\n1SN/CkmUR5VDelKKgtMFkN+UQ52nRpPWTWDlYAUreys0c2iGpjZNoc5XQ5mqhCJVAUEloIV7C7Rw\nb4GWXi1h84QNOozt0Lg000gjjRic/6TQk8TR/Hy8mZiIF5ycsNrDA00MGMBDEpoiDdS5aqjz1FDl\nqqCWqmFla3VX3JvaNjWrnPCNNNLIg8t/TuiDS0vxdmIiCjUabO3SBY926GAg6xpppJFGzBNdtPOB\nWCi+pVTiw6QknC0sxCceHljo7GzQUXwjjTTSSEOmQQt9uVaL9Wlp2JaRgZddXHBjyBC0acxr0kgj\njTRSAb13B0tLSzF16lS4ublh2rRpKCsrq/JcrVaL/v3748knn9T3cvf6InGlqAhvJiSgS2AgEuVy\nhA4ahM89PR8Ykb906ZKpTTAbGt+LezS+F/dofC9qh95Cv337dri5uSEhIQEdO3bEjh07qjx369at\n6Nmzp94blCpBwF8FBVgSHw8XPz+8kZgIOysrXPDxwcGePeFuZlkn60rjh/geje/FPRrfi3s0vhe1\nQ+8hcFBQEFasWIHmzZtj4cKFWLNmTaXn3bp1C6dPn8aHH36ITZs2Vdvn4dxcFGk0FVquWo0LhYXo\n3qoVZtjZwW/AAHiZYc74RhpppBFzRW+hv3btGry9vQEA3t7eCAoKqvS8ZcuWYcOGDSgpKamxz1/z\n8tC+adO7zbV5czzUtCm2dOmCjmaWRriRRhpppMHAahg7dix79+59Xzt27Bg7depEuVxOkiwvL6eb\nm9t9zz9x4gRfffVVkuTFixc5efLkKq8FoLE1tsbW2BqbHq0mqh3Rnzt3rsrH9u3bh9jYWPTv3x+x\nsbEYPHjwfef4+fnh+PHjOH36NBQKBUpKSjB//nzs37//vnPNxJ2/kUYaaeSBQ+/N2KFDh+KHH36A\nXC7HDz/8gGHDht13zhdffIH09HQkJyfj559/xqOPPlqpyDfSSCONNGI89Bb6V155BWlpaejevTsy\nMjLw8ssvAwAyMzMxadKkSp/TmBagkUYaaaT+MXkKhCtXrmDJkiXQaDR444038Prrr5vSHJOxcOFC\nnDp1Cg4ODoiMjDS1OSYlPT0d8+fPR25uLuzt7bF48WI8++yzpjbLJCgUCowaNQpKpRItWrTAnDlz\nsGzZMlObZVK0Wi0GDRqEjh074sSJE6Y2x2R4eHigbdu2aNKkCaysrKp0iAHMQOj79++PrVu3wt3d\nHePHj4dEIoGd3X+vFunVq1dhbW2N+fPn/+eFPjs7G9nZ2ejXrx/y8/MxZMgQhIeHo40OaaYfRGQy\nGVq1agWlUomBAwfijz/+QJcuXUxtlsnYtGkTQkJCUFpaiuPHj5vaHJPRuXNnhISEwMam5rrSJs2b\nW1xcDAB45JFH4O7ujscffxyBgYGmNMlkPPzww+jQmIQNAODk5IR+/foBAOzs7NCrVy8EBweb2CrT\n0apVKwBAWVkZNBoNmv+HXY3vxOUsWrSo0YEDujuxmFTo/+mLDwA9e/ZEQECACS1qxNxITExEdHQ0\nhgwZYmpTTIYgCPDx8YGjoyNee+01dOrUydQmmYw7cTmWlo21HSwsLPDoo49i2rRpNc5sGt+tRsyW\n0tJSzJkzB5s3b0br1q1NbY7JsLS0RHh4OBITE/Htt98iLCzM1CaZhJMnT8LBwQH9+/dvHM0D8PX1\nRXh4ONasWYO3334b2dnZVZ5rUqEfPHgw4uLi7v4dHR1dqZtmI/891Go1Zs6ciXnz5mHq1KmmNscs\n8PDwwMSJE/+zy5t34nI6d+6MZ555BhcuXMD8+fNNbZbJcL5d/7pHjx6YMmVKtRvTJhX6du3aAf/f\nzh2jOAhEYRz/38HGxhtIIFWuYGtpJZIinQT0BDa2HiKX0FQpvIddCCoIQhqRpFjYrTbdMsv4/eop\nXjF8M/DeDF+TN13Xcb1eORwOJkuSf+D1enE8HvF9n/P5bLoco4ZhYJomAMZxpGmazR58epfz4/l8\nMs8zAH3fU9c1QRD8ut74v75VVXE6nViWhTRNNzlxAxBFEbfbjXEc8TyPoihIksR0WUa0bcvlcmG3\n27Hf7wEoy/LjRrbV/X4njmPWdcV1XfI8/77Jbd2W3+U8Hg/CMATAcRyyLPvYuzE+XikiIn9LzVgR\nEcsp6EVELKegFxGxnIJeRMRyCnoREcsp6EVELPcGkQPsdA5FLVsAAAAASUVORK5CYII=\n",
190 190 "text": [
191 191 "<matplotlib.figure.Figure at 0x1082fcbd0>"
192 192 ]
193 193 }
194 194 ],
195 195 "prompt_number": 5
196 196 }
197 197 ],
198 198 "metadata": {}
199 199 }
200 200 ]
201 201 } No newline at end of file
@@ -1,1421 +1,1421 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Cell Magics"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "The cell magics in IPython"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "IPython has a system of commands we call 'magics' that provide effectively a mini command language that is orthogonal to the syntax of Python and is extensible by the user with new commands. Magics are meant to be typed interactively, so they use command-line conventions, such as using whitespace for separating arguments, dashes for options and other conventions typical of a command-line environment.\n",
23 23 "\n",
24 24 "Magics come in two kinds:\n",
25 25 "\n",
26 26 "* Line magics: these are commands prepended by one `%` character and whose arguments only extend to the end of the current line.\n",
27 27 "* Cell magics: these use *two* percent characters as a marker (`%%`), and they receive as argument *both* the current line where they are declared and the whole body of the cell. Note that cell magics can *only* be used as the first line in a cell, and as a general principle they can't be 'stacked' (i.e. you can only use one cell magic per cell). A few of them, because of how they operate, can be stacked, but that is something you will discover on a case by case basis.\n",
28 28 "\n",
29 29 "The `%lsmagic` magic is used to list all available magics, and it will show both line and cell magics currently defined:"
30 30 ]
31 31 },
32 32 {
33 33 "cell_type": "code",
34 34 "collapsed": false,
35 35 "input": [
36 36 "%lsmagic"
37 37 ],
38 38 "language": "python",
39 39 "metadata": {},
40 40 "outputs": [
41 41 {
42 42 "output_type": "stream",
43 43 "stream": "stdout",
44 44 "text": [
45 45 "Available line magics:\n",
46 46 "%alias %alias_magic %autocall %automagic %bookmark %cd %clear %colors %config %connect_info %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %man %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %run %save %sc %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n",
47 47 "\n",
48 48 "Available cell magics:\n",
49 49 "%%! %%bash %%capture %%file %%perl %%prun %%python3 %%ruby %%script %%sh %%sx %%system %%timeit\n",
50 50 "\n",
51 51 "Automagic is ON, % prefix IS NOT needed for line magics.\n"
52 52 ]
53 53 }
54 54 ],
55 55 "prompt_number": 1
56 56 },
57 57 {
58 58 "cell_type": "markdown",
59 59 "metadata": {},
60 60 "source": [
61 61 "Since in the introductory section we already covered the most frequently used line magics, we will focus here on the cell magics, which offer a great amount of power.\n",
62 62 "\n",
63 63 "Let's load the pylab support so we can use numerics/plotting at will later on."
64 64 ]
65 65 },
66 66 {
67 67 "cell_type": "code",
68 68 "collapsed": false,
69 69 "input": [
70 70 "%pylab inline"
71 71 ],
72 72 "language": "python",
73 73 "metadata": {},
74 74 "outputs": [
75 75 {
76 76 "output_type": "stream",
77 77 "stream": "stdout",
78 78 "text": [
79 79 "\n",
80 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
80 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
81 81 "For more information, type 'help(pylab)'.\n"
82 82 ]
83 83 }
84 84 ],
85 85 "prompt_number": 8
86 86 },
87 87 {
88 88 "cell_type": "heading",
89 89 "level": 2,
90 90 "metadata": {},
91 91 "source": [
92 92 "<!--====-->\n",
93 93 "Some simple cell magics"
94 94 ]
95 95 },
96 96 {
97 97 "cell_type": "markdown",
98 98 "metadata": {},
99 99 "source": [
100 100 "Timing the execution of code; the 'timeit' magic exists both in line and cell form:"
101 101 ]
102 102 },
103 103 {
104 104 "cell_type": "code",
105 105 "collapsed": false,
106 106 "input": [
107 107 "%timeit np.linalg.eigvals(np.random.rand(100,100))"
108 108 ],
109 109 "language": "python",
110 110 "metadata": {},
111 111 "outputs": [
112 112 {
113 113 "output_type": "stream",
114 114 "stream": "stdout",
115 115 "text": [
116 116 "10 loops, best of 3: 20.5 ms per loop\n"
117 117 ]
118 118 }
119 119 ],
120 120 "prompt_number": 13
121 121 },
122 122 {
123 123 "cell_type": "code",
124 124 "collapsed": false,
125 125 "input": [
126 126 "%%timeit a = np.random.rand(100, 100)\n",
127 127 "np.linalg.eigvals(a)"
128 128 ],
129 129 "language": "python",
130 130 "metadata": {},
131 131 "outputs": [
132 132 {
133 133 "output_type": "stream",
134 134 "stream": "stdout",
135 135 "text": [
136 136 "10 loops, best of 3: 17.8 ms per loop\n"
137 137 ]
138 138 }
139 139 ],
140 140 "prompt_number": 14
141 141 },
142 142 {
143 143 "cell_type": "markdown",
144 144 "metadata": {},
145 145 "source": [
146 146 "The `%%capture` magic can be used to capture the stdout/err of any block of python code, either to discard it (if it's noise to you) or to store it in a variable for later use:"
147 147 ]
148 148 },
149 149 {
150 150 "cell_type": "code",
151 151 "collapsed": false,
152 152 "input": [
153 153 "%%capture capt\n",
154 154 "from __future__ import print_function\n",
155 155 "import sys\n",
156 156 "print('Hello stdout')\n",
157 157 "print('and stderr', file=sys.stderr)"
158 158 ],
159 159 "language": "python",
160 160 "metadata": {},
161 161 "outputs": [],
162 162 "prompt_number": 30
163 163 },
164 164 {
165 165 "cell_type": "code",
166 166 "collapsed": false,
167 167 "input": [
168 168 "capt.stdout, capt.stderr"
169 169 ],
170 170 "language": "python",
171 171 "metadata": {},
172 172 "outputs": [
173 173 {
174 174 "output_type": "pyout",
175 175 "prompt_number": 33,
176 176 "text": [
177 177 "('Hello stdout\\n', 'and stderr\\n')"
178 178 ]
179 179 }
180 180 ],
181 181 "prompt_number": 33
182 182 },
183 183 {
184 184 "cell_type": "code",
185 185 "collapsed": false,
186 186 "input": [
187 187 "capt.show()"
188 188 ],
189 189 "language": "python",
190 190 "metadata": {},
191 191 "outputs": [
192 192 {
193 193 "output_type": "stream",
194 194 "stream": "stdout",
195 195 "text": [
196 196 "Hello stdout\n"
197 197 ]
198 198 },
199 199 {
200 200 "output_type": "stream",
201 201 "stream": "stderr",
202 202 "text": [
203 203 "and stderr\n"
204 204 ]
205 205 }
206 206 ],
207 207 "prompt_number": 34
208 208 },
209 209 {
210 210 "cell_type": "markdown",
211 211 "metadata": {},
212 212 "source": [
213 213 "The `%%file` magic is a very useful tool that writes the cell contents as a named file:"
214 214 ]
215 215 },
216 216 {
217 217 "cell_type": "code",
218 218 "collapsed": false,
219 219 "input": [
220 220 "%%file foo.py\n",
221 221 "print('Hello world')"
222 222 ],
223 223 "language": "python",
224 224 "metadata": {},
225 225 "outputs": [
226 226 {
227 227 "output_type": "stream",
228 228 "stream": "stdout",
229 229 "text": [
230 230 "Overwriting foo.py\n"
231 231 ]
232 232 }
233 233 ],
234 234 "prompt_number": 44
235 235 },
236 236 {
237 237 "cell_type": "code",
238 238 "collapsed": false,
239 239 "input": [
240 240 "%run foo"
241 241 ],
242 242 "language": "python",
243 243 "metadata": {},
244 244 "outputs": [
245 245 {
246 246 "output_type": "stream",
247 247 "stream": "stdout",
248 248 "text": [
249 249 "Hello world\n"
250 250 ]
251 251 }
252 252 ],
253 253 "prompt_number": 45
254 254 },
255 255 {
256 256 "cell_type": "heading",
257 257 "level": 2,
258 258 "metadata": {},
259 259 "source": [
260 260 "<!--====-->\n",
261 261 "Magics for running code under other interpreters"
262 262 ]
263 263 },
264 264 {
265 265 "cell_type": "markdown",
266 266 "metadata": {},
267 267 "source": [
268 268 "IPython has a `%%script` cell magic, which lets you run a cell in\n",
269 269 "a subprocess of any interpreter on your system, such as: bash, ruby, perl, zsh, R, etc.\n",
270 270 "\n",
271 271 "It can even be a script of your own, which expects input on stdin."
272 272 ]
273 273 },
274 274 {
275 275 "cell_type": "markdown",
276 276 "metadata": {},
277 277 "source": [
278 278 "To use it, simply pass a path or shell command to the program you want to run on the `%%script` line,\n",
279 279 "and the rest of the cell will be run by that script, and stdout/err from the subprocess are captured and displayed."
280 280 ]
281 281 },
282 282 {
283 283 "cell_type": "code",
284 284 "collapsed": false,
285 285 "input": [
286 286 "%%script python\n",
287 287 "import sys\n",
288 288 "print 'hello from Python %s' % sys.version"
289 289 ],
290 290 "language": "python",
291 291 "metadata": {},
292 292 "outputs": [
293 293 {
294 294 "output_type": "stream",
295 295 "stream": "stdout",
296 296 "text": [
297 297 "hello from Python 2.7.3 (default, Apr 20 2012, 22:39:59) \n",
298 298 "[GCC 4.6.3]\n"
299 299 ]
300 300 }
301 301 ],
302 302 "prompt_number": 46
303 303 },
304 304 {
305 305 "cell_type": "code",
306 306 "collapsed": false,
307 307 "input": [
308 308 "%%script python3\n",
309 309 "import sys\n",
310 310 "print('hello from Python: %s' % sys.version)"
311 311 ],
312 312 "language": "python",
313 313 "metadata": {},
314 314 "outputs": [
315 315 {
316 316 "output_type": "stream",
317 317 "stream": "stdout",
318 318 "text": [
319 319 "hello from Python: 3.2.3 (default, May 3 2012, 15:51:42) \n",
320 320 "[GCC 4.6.3]\n"
321 321 ]
322 322 }
323 323 ],
324 324 "prompt_number": 47
325 325 },
326 326 {
327 327 "cell_type": "markdown",
328 328 "metadata": {},
329 329 "source": [
330 330 "IPython also creates aliases for a few common interpreters, such as bash, ruby, perl, etc.\n",
331 331 "\n",
332 332 "These are all equivalent to `%%script <name>`"
333 333 ]
334 334 },
335 335 {
336 336 "cell_type": "code",
337 337 "collapsed": false,
338 338 "input": [
339 339 "%%ruby\n",
340 340 "puts \"Hello from Ruby #{RUBY_VERSION}\""
341 341 ],
342 342 "language": "python",
343 343 "metadata": {},
344 344 "outputs": [
345 345 {
346 346 "output_type": "stream",
347 347 "stream": "stdout",
348 348 "text": [
349 349 "Hello from Ruby 1.8.7\n"
350 350 ]
351 351 }
352 352 ],
353 353 "prompt_number": 48
354 354 },
355 355 {
356 356 "cell_type": "code",
357 357 "collapsed": false,
358 358 "input": [
359 359 "%%bash\n",
360 360 "echo \"hello from $BASH\""
361 361 ],
362 362 "language": "python",
363 363 "metadata": {},
364 364 "outputs": [
365 365 {
366 366 "output_type": "stream",
367 367 "stream": "stdout",
368 368 "text": [
369 369 "hello from /bin/bash\n"
370 370 ]
371 371 }
372 372 ],
373 373 "prompt_number": 49
374 374 },
375 375 {
376 376 "cell_type": "heading",
377 377 "level": 2,
378 378 "metadata": {},
379 379 "source": [
380 380 "Exercise: write your own script that numbers input lines"
381 381 ]
382 382 },
383 383 {
384 384 "cell_type": "markdown",
385 385 "metadata": {},
386 386 "source": [
387 387 "Write a file, called `lnum.py`, such that the following cell works as shown (hint: don't forget about the executable bit!): "
388 388 ]
389 389 },
390 390 {
391 391 "cell_type": "code",
392 392 "collapsed": false,
393 393 "input": [
394 394 "%%script lnum.py\n",
395 395 "my first line\n",
396 396 "my second\n",
397 397 "more"
398 398 ],
399 399 "language": "python",
400 400 "metadata": {},
401 401 "outputs": [
402 402 {
403 403 "output_type": "stream",
404 404 "stream": "stdout",
405 405 "text": [
406 406 "1 : my first line\n",
407 407 "2 : my second\n",
408 408 "3 : more \n",
409 409 "---- END ---\n"
410 410 ]
411 411 }
412 412 ],
413 413 "prompt_number": 97
414 414 },
415 415 {
416 416 "cell_type": "heading",
417 417 "level": 2,
418 418 "metadata": {},
419 419 "source": [
420 420 "Capturing output"
421 421 ]
422 422 },
423 423 {
424 424 "cell_type": "markdown",
425 425 "metadata": {},
426 426 "source": [
427 427 "You can also capture stdout/err from these subprocesses into Python variables, instead of letting them go directly to stdout/err"
428 428 ]
429 429 },
430 430 {
431 431 "cell_type": "code",
432 432 "collapsed": false,
433 433 "input": [
434 434 "%%bash\n",
435 435 "echo \"hi, stdout\"\n",
436 436 "echo \"hello, stderr\" >&2\n"
437 437 ],
438 438 "language": "python",
439 439 "metadata": {},
440 440 "outputs": [
441 441 {
442 442 "output_type": "stream",
443 443 "stream": "stdout",
444 444 "text": [
445 445 "hi, stdout\n"
446 446 ]
447 447 },
448 448 {
449 449 "output_type": "stream",
450 450 "stream": "stderr",
451 451 "text": [
452 452 "hello, stderr\n"
453 453 ]
454 454 }
455 455 ],
456 456 "prompt_number": 98
457 457 },
458 458 {
459 459 "cell_type": "code",
460 460 "collapsed": false,
461 461 "input": [
462 462 "%%bash --out output --err error\n",
463 463 "echo \"hi, stdout\"\n",
464 464 "echo \"hello, stderr\" >&2"
465 465 ],
466 466 "language": "python",
467 467 "metadata": {},
468 468 "outputs": [],
469 469 "prompt_number": 99
470 470 },
471 471 {
472 472 "cell_type": "code",
473 473 "collapsed": false,
474 474 "input": [
475 475 "print(error)\n",
476 476 "print(output)"
477 477 ],
478 478 "language": "python",
479 479 "metadata": {},
480 480 "outputs": [
481 481 {
482 482 "output_type": "stream",
483 483 "stream": "stdout",
484 484 "text": [
485 485 "hello, stderr\n",
486 486 "\n",
487 487 "hi, stdout\n",
488 488 "\n"
489 489 ]
490 490 }
491 491 ],
492 492 "prompt_number": 100
493 493 },
494 494 {
495 495 "cell_type": "heading",
496 496 "level": 2,
497 497 "metadata": {},
498 498 "source": [
499 499 "Background Scripts"
500 500 ]
501 501 },
502 502 {
503 503 "cell_type": "markdown",
504 504 "metadata": {},
505 505 "source": [
506 506 "These scripts can be run in the background, by adding the `--bg` flag.\n",
507 507 "\n",
508 508 "When you do this, output is discarded unless you use the `--out/err`\n",
509 509 "flags to store output as above."
510 510 ]
511 511 },
512 512 {
513 513 "cell_type": "code",
514 514 "collapsed": false,
515 515 "input": [
516 516 "%%ruby --bg --out ruby_lines\n",
517 517 "for n in 1...10\n",
518 518 " sleep 1\n",
519 519 " puts \"line #{n}\"\n",
520 520 " STDOUT.flush\n",
521 521 "end"
522 522 ],
523 523 "language": "python",
524 524 "metadata": {},
525 525 "outputs": [
526 526 {
527 527 "output_type": "stream",
528 528 "stream": "stdout",
529 529 "text": [
530 530 "Starting job # 0 in a separate thread.\n"
531 531 ]
532 532 }
533 533 ],
534 534 "prompt_number": 22
535 535 },
536 536 {
537 537 "cell_type": "markdown",
538 538 "metadata": {},
539 539 "source": [
540 540 "When you do store output of a background thread, these are the stdout/err *pipes*,\n",
541 541 "rather than the text of the output."
542 542 ]
543 543 },
544 544 {
545 545 "cell_type": "code",
546 546 "collapsed": false,
547 547 "input": [
548 548 "ruby_lines"
549 549 ],
550 550 "language": "python",
551 551 "metadata": {},
552 552 "outputs": [
553 553 {
554 554 "output_type": "pyout",
555 555 "prompt_number": 23,
556 556 "text": [
557 557 "<open file '<fdopen>', mode 'rb' at 0x2ed8ed0>"
558 558 ]
559 559 }
560 560 ],
561 561 "prompt_number": 23
562 562 },
563 563 {
564 564 "cell_type": "code",
565 565 "collapsed": false,
566 566 "input": [
567 567 "print(ruby_lines.read())"
568 568 ],
569 569 "language": "python",
570 570 "metadata": {},
571 571 "outputs": [
572 572 {
573 573 "output_type": "stream",
574 574 "stream": "stdout",
575 575 "text": [
576 576 "line 1\n",
577 577 "line 2\n",
578 578 "line 3\n",
579 579 "line 4\n",
580 580 "line 5\n",
581 581 "line 6\n",
582 582 "line 7\n",
583 583 "line 8\n",
584 584 "line 9\n",
585 585 "\n"
586 586 ]
587 587 }
588 588 ],
589 589 "prompt_number": 24
590 590 },
591 591 {
592 592 "cell_type": "heading",
593 593 "level": 1,
594 594 "metadata": {},
595 595 "source": [
596 596 "Cython Magic Functions Extension"
597 597 ]
598 598 },
599 599 {
600 600 "cell_type": "heading",
601 601 "level": 2,
602 602 "metadata": {},
603 603 "source": [
604 604 "Loading the extension"
605 605 ]
606 606 },
607 607 {
608 608 "cell_type": "markdown",
609 609 "metadata": {},
610 610 "source": [
611 611 "IPtyhon has a `cythonmagic` extension that contains a number of magic functions for working with Cython code. This extension can be loaded using the `%load_ext` magic as follows:"
612 612 ]
613 613 },
614 614 {
615 615 "cell_type": "code",
616 616 "collapsed": false,
617 617 "input": [
618 618 "%load_ext cythonmagic"
619 619 ],
620 620 "language": "python",
621 621 "metadata": {},
622 622 "outputs": [],
623 623 "prompt_number": 1
624 624 },
625 625 {
626 626 "cell_type": "markdown",
627 627 "metadata": {},
628 628 "source": [
629 629 "The `%%cython_pyximport` magic allows you to enter arbitrary Cython code into a cell. That Cython code is written as a `.pyx` file in the current working directory and then imported using `pyximport`. You have the specify the name of the module that the Code will appear in. All symbols from the module are imported automatically by the magic function."
630 630 ]
631 631 },
632 632 {
633 633 "cell_type": "code",
634 634 "collapsed": false,
635 635 "input": [
636 636 "%%cython_pyximport foo\n",
637 637 "def f(x):\n",
638 638 " return 4.0*x"
639 639 ],
640 640 "language": "python",
641 641 "metadata": {},
642 642 "outputs": [],
643 643 "prompt_number": 4
644 644 },
645 645 {
646 646 "cell_type": "code",
647 647 "collapsed": false,
648 648 "input": [
649 649 "f(10)"
650 650 ],
651 651 "language": "python",
652 652 "metadata": {},
653 653 "outputs": [
654 654 {
655 655 "output_type": "pyout",
656 656 "prompt_number": 5,
657 657 "text": [
658 658 "40.0"
659 659 ]
660 660 }
661 661 ],
662 662 "prompt_number": 5
663 663 },
664 664 {
665 665 "cell_type": "heading",
666 666 "level": 2,
667 667 "metadata": {},
668 668 "source": [
669 669 "The %cython magic"
670 670 ]
671 671 },
672 672 {
673 673 "cell_type": "markdown",
674 674 "metadata": {},
675 675 "source": [
676 676 "Probably the most important magic is the `%cython` magic. This is similar to the `%%cython_pyximport` magic, but doesn't require you to specify a module name. Instead, the `%%cython` magic uses manages everything using temporary files in the `~/.cython/magic` directory. All of the symbols in the Cython module are imported automatically by the magic.\n",
677 677 "\n",
678 678 "Here is a simple example of a Black-Scholes options pricing algorithm written in Cython:"
679 679 ]
680 680 },
681 681 {
682 682 "cell_type": "code",
683 683 "collapsed": false,
684 684 "input": [
685 685 "%%cython\n",
686 686 "cimport cython\n",
687 687 "from libc.math cimport exp, sqrt, pow, log, erf\n",
688 688 "\n",
689 689 "@cython.cdivision(True)\n",
690 690 "cdef double std_norm_cdf(double x) nogil:\n",
691 691 " return 0.5*(1+erf(x/sqrt(2.0)))\n",
692 692 "\n",
693 693 "@cython.cdivision(True)\n",
694 694 "def black_scholes(double s, double k, double t, double v,\n",
695 695 " double rf, double div, double cp):\n",
696 696 " \"\"\"Price an option using the Black-Scholes model.\n",
697 697 " \n",
698 698 " s : initial stock price\n",
699 699 " k : strike price\n",
700 700 " t : expiration time\n",
701 701 " v : volatility\n",
702 702 " rf : risk-free rate\n",
703 703 " div : dividend\n",
704 704 " cp : +1/-1 for call/put\n",
705 705 " \"\"\"\n",
706 706 " cdef double d1, d2, optprice\n",
707 707 " with nogil:\n",
708 708 " d1 = (log(s/k)+(rf-div+0.5*pow(v,2))*t)/(v*sqrt(t))\n",
709 709 " d2 = d1 - v*sqrt(t)\n",
710 710 " optprice = cp*s*exp(-div*t)*std_norm_cdf(cp*d1) - \\\n",
711 711 " cp*k*exp(-rf*t)*std_norm_cdf(cp*d2)\n",
712 712 " return optprice"
713 713 ],
714 714 "language": "python",
715 715 "metadata": {},
716 716 "outputs": [],
717 717 "prompt_number": 6
718 718 },
719 719 {
720 720 "cell_type": "code",
721 721 "collapsed": false,
722 722 "input": [
723 723 "black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
724 724 ],
725 725 "language": "python",
726 726 "metadata": {},
727 727 "outputs": [
728 728 {
729 729 "output_type": "pyout",
730 730 "prompt_number": 7,
731 731 "text": [
732 732 "10.327861752731728"
733 733 ]
734 734 }
735 735 ],
736 736 "prompt_number": 7
737 737 },
738 738 {
739 739 "cell_type": "code",
740 740 "collapsed": false,
741 741 "input": [
742 742 "%timeit black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
743 743 ],
744 744 "language": "python",
745 745 "metadata": {},
746 746 "outputs": [
747 747 {
748 748 "output_type": "stream",
749 749 "stream": "stdout",
750 750 "text": [
751 751 "1000000 loops, best of 3: 821 ns per loop\n"
752 752 ]
753 753 }
754 754 ],
755 755 "prompt_number": 8
756 756 },
757 757 {
758 758 "cell_type": "markdown",
759 759 "metadata": {},
760 760 "source": [
761 761 "Cython allows you to specify additional libraries to be linked with your extension, you can do so with the `-l` flag (also spelled `--lib`). Note that this flag can be passed more than once to specify multiple libraries, such as `-lm -llib2 --lib lib3`. Here's a simple example of how to access the system math library:"
762 762 ]
763 763 },
764 764 {
765 765 "cell_type": "code",
766 766 "collapsed": false,
767 767 "input": [
768 768 "%%cython -lm\n",
769 769 "from libc.math cimport sin\n",
770 770 "print 'sin(1)=', sin(1)"
771 771 ],
772 772 "language": "python",
773 773 "metadata": {},
774 774 "outputs": [
775 775 {
776 776 "output_type": "stream",
777 777 "stream": "stdout",
778 778 "text": [
779 779 "sin(1)= 0.841470984808\n"
780 780 ]
781 781 }
782 782 ],
783 783 "prompt_number": 9
784 784 },
785 785 {
786 786 "cell_type": "markdown",
787 787 "metadata": {},
788 788 "source": [
789 789 "You can similarly use the `-I/--include` flag to add include directories to the search path, and `-c/--compile-args` to add extra flags that are passed to Cython via the `extra_compile_args` of the distutils `Extension` class. Please see [the Cython docs on C library usage](http://docs.cython.org/src/tutorial/clibraries.html) for more details on the use of these flags."
790 790 ]
791 791 },
792 792 {
793 793 "cell_type": "heading",
794 794 "level": 1,
795 795 "metadata": {},
796 796 "source": [
797 797 "Rmagic Functions Extension"
798 798 ]
799 799 },
800 800 {
801 801 "cell_type": "markdown",
802 802 "metadata": {},
803 803 "source": [
804 804 "IPython has an `rmagic` extension that contains a some magic functions for working with R via rpy2. This extension can be loaded using the `%load_ext` magic as follows:"
805 805 ]
806 806 },
807 807 {
808 808 "cell_type": "code",
809 809 "collapsed": true,
810 810 "input": [
811 811 "%load_ext rmagic "
812 812 ],
813 813 "language": "python",
814 814 "metadata": {},
815 815 "outputs": [],
816 816 "prompt_number": 101
817 817 },
818 818 {
819 819 "cell_type": "markdown",
820 820 "metadata": {},
821 821 "source": [
822 822 "A typical use case one imagines is having some numpy arrays, wanting to compute some statistics of interest on these\n",
823 823 " arrays and return the result back to python. Let's suppose we just want to fit a simple linear model to a scatterplot."
824 824 ]
825 825 },
826 826 {
827 827 "cell_type": "code",
828 828 "collapsed": false,
829 829 "input": [
830 830 "import numpy as np\n",
831 831 "import pylab\n",
832 832 "X = np.array([0,1,2,3,4])\n",
833 833 "Y = np.array([3,5,4,6,7])\n",
834 834 "pylab.scatter(X, Y)"
835 835 ],
836 836 "language": "python",
837 837 "metadata": {},
838 838 "outputs": [
839 839 {
840 840 "output_type": "pyout",
841 841 "prompt_number": 102,
842 842 "text": [
843 843 "<matplotlib.collections.PathCollection at 0x49f83d0>"
844 844 ]
845 845 },
846 846 {
847 847 "output_type": "display_data",
848 848 "png": "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\nKyutYcOG2T2lSzQ0NFhVVVWWZVlWY2OjNXTo0Lj672dZltXc3GxZlmVdvnzZys3NtXbv3m3zouj6\ny1/+Ys2YMcMqKiqye0rUpaWlWT/88ENEx0blR70zMjI0dOjQaJzKCBUVFbrrrruUlpamxMRETZs2\nTRs3brR7VtTk5eXplltusXtGl+kO79/v2bOnJCkQCCgYDCo5OdnmRdFz/Phxbd26VXPmzInbNyFE\nel38WxxXceLECaWmpl75/ZAhQ3TixAkbF+F6xev799va2pSdna2BAwdq7Nixcrvddk+Kmvnz52vF\nihVKSIjPPDkcDuXn5ysnJ0dr164NeWzYt9n9v4KCAp06dep3ny8pKYm750S8tzs+NDU1aerUqVq1\napWSkpLsnhNVCQkJqq6u1vnz51VYWCifzyev12v3rE7bsmWLBgwYII/HE7c/6l1WVqbBgwfrzJkz\nKigoUEZGhvLy8q56bMSB3rFjR9QGmi4lJUX19fVXfl9fX68hQ4bYuAgdFe79+/GiT58+mjhxovbt\n2xcXgd67d682bdqkrVu3qqWlRRcuXNCsWbO0fv16u6dFzeDBgyVJ/fv31+TJk1VRUXHNQEf9zxDx\n8MwoJydHR48eVV1dnQKBgD788EM99thjds9ChCzL0rPPPiu326158+bZPSfqzp49q3PnzkmSLl68\nqB07dsjj8di8KjpKSkpUX1+v2tpabdiwQePGjYurOPv9fjU2NkqSmpubtX379pDvpopKoD/77DOl\npqaqvLxcEydO1IQJE6JxWtu4XC6tWbNGhYWFcrvdeuKJJ5SZmWn3rKiZPn26Ro8erSNHjig1NVXr\n1q2ze1JUlZWV6b333tPOnTvl8Xjk8Xi0bds2u2dFTUNDg8aNG6fs7Gzl5uaqqKhI48ePt3tWl4i3\nx42nT59WXl7elf92jz76qB566KFrHh/Rv8UBAIi9+PxrUgCIAwQaAAxFoAHAUAQaAAxFoAHAUAQa\nAAz1vw0tF27Rt+wZAAAAAElFTkSuQmCC\n"
849 849 }
850 850 ],
851 851 "prompt_number": 102
852 852 },
853 853 {
854 854 "cell_type": "markdown",
855 855 "metadata": {},
856 856 "source": [
857 857 "We can accomplish this by first pushing variables to R, fitting a model and returning the results. The line magic %Rpush copies its arguments to variables of the same name in rpy2. The %R line magic evaluates the string in rpy2 and returns the results. In this case, the coefficients of a linear model."
858 858 ]
859 859 },
860 860 {
861 861 "cell_type": "code",
862 862 "collapsed": false,
863 863 "input": [
864 864 "%Rpush X Y\n",
865 865 "%R lm(Y~X)$coef"
866 866 ],
867 867 "language": "python",
868 868 "metadata": {},
869 869 "outputs": [
870 870 {
871 871 "output_type": "pyout",
872 872 "prompt_number": 103,
873 873 "text": [
874 874 "array([ 3.2, 0.9])"
875 875 ]
876 876 }
877 877 ],
878 878 "prompt_number": 103
879 879 },
880 880 {
881 881 "cell_type": "markdown",
882 882 "metadata": {},
883 883 "source": [
884 884 "It is also possible to return more than one value with %R."
885 885 ]
886 886 },
887 887 {
888 888 "cell_type": "code",
889 889 "collapsed": false,
890 890 "input": [
891 891 "%R resid(lm(Y~X)); coef(lm(X~Y))"
892 892 ],
893 893 "language": "python",
894 894 "metadata": {},
895 895 "outputs": [
896 896 {
897 897 "output_type": "pyout",
898 898 "prompt_number": 104,
899 899 "text": [
900 900 "array([-2.5, 0.9])"
901 901 ]
902 902 }
903 903 ],
904 904 "prompt_number": 104
905 905 },
906 906 {
907 907 "cell_type": "markdown",
908 908 "metadata": {},
909 909 "source": [
910 910 "One can also easily capture the results of %R into python objects. Like R, the return value of this multiline expression (multiline in the sense that it is separated by ';') is the final value, which is \n",
911 911 "the *coef(lm(X~Y))*. To pull other variables from R, there is one more magic."
912 912 ]
913 913 },
914 914 {
915 915 "cell_type": "markdown",
916 916 "metadata": {},
917 917 "source": [
918 918 "There are two more line magics, %Rpull and %Rget. Both are useful after some R code has been executed and there are variables\n",
919 919 "in the rpy2 namespace that one would like to retrieve. The main difference is that one\n",
920 920 " returns the value (%Rget), while the other pulls it to self.shell.user_ns (%Rpull). Imagine we've stored the results\n",
921 921 "of some calculation in the variable \"a\" in rpy2's namespace. By using the %R magic, we can obtain these results and\n",
922 922 "store them in b. We can also pull them directly to user_ns with %Rpull. They are both views on the same data."
923 923 ]
924 924 },
925 925 {
926 926 "cell_type": "code",
927 927 "collapsed": false,
928 928 "input": [
929 929 "b = %R a=resid(lm(Y~X))\n",
930 930 "%Rpull a\n",
931 931 "print(a)\n",
932 932 "assert id(b.data) == id(a.data)\n",
933 933 "%R -o a"
934 934 ],
935 935 "language": "python",
936 936 "metadata": {},
937 937 "outputs": [
938 938 {
939 939 "output_type": "stream",
940 940 "stream": "stdout",
941 941 "text": [
942 942 "[-0.2 0.9 -1. 0.1 0.2]\n"
943 943 ]
944 944 }
945 945 ],
946 946 "prompt_number": 6
947 947 },
948 948 {
949 949 "cell_type": "heading",
950 950 "level": 2,
951 951 "metadata": {},
952 952 "source": [
953 953 "Plotting and capturing output"
954 954 ]
955 955 },
956 956 {
957 957 "cell_type": "markdown",
958 958 "metadata": {},
959 959 "source": [
960 960 "R's console (i.e. its stdout() connection) is captured by ipython, as are any plots which are published as PNG files like the notebook with arguments --pylab inline. As a call to %R may produce a return value (see above) we must ask what happens to a magic like the one below. The R code specifies that something is published to the notebook. If anything is published to the notebook, that call to %R returns None."
961 961 ]
962 962 },
963 963 {
964 964 "cell_type": "code",
965 965 "collapsed": false,
966 966 "input": [
967 967 "from __future__ import print_function\n",
968 968 "v1 = %R plot(X,Y); print(summary(lm(Y~X))); vv=mean(X)*mean(Y)\n",
969 969 "print('v1 is:', v1)\n",
970 970 "v2 = %R mean(X)*mean(Y)\n",
971 971 "print('v2 is:', v2)"
972 972 ],
973 973 "language": "python",
974 974 "metadata": {},
975 975 "outputs": [
976 976 {
977 977 "output_type": "display_data",
978 978 "text": [
979 979 "\n",
980 980 "Call:\n",
981 981 "lm(formula = Y ~ X)\n",
982 982 "\n",
983 983 "Residuals:\n",
984 984 " 1 2 3 4 5 \n",
985 985 "-0.2 0.9 -1.0 0.1 0.2 \n",
986 986 "\n",
987 987 "Coefficients:\n",
988 988 " Estimate Std. Error t value Pr(>|t|) \n",
989 989 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
990 990 "X 0.9000 0.2517 3.576 0.0374 *\n",
991 991 "---\n",
992 992 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
993 993 "\n",
994 994 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
995 995 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
996 996 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
997 997 "\n"
998 998 ]
999 999 },
1000 1000 {
1001 1001 "output_type": "display_data",
1002 1002 "png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAMAAABKCk6nAAACo1BMVEUAAAABAQECAgIDAwMEBAQF\nBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQWFhYXFxcZGRka\nGhobGxsdHR0eHh4fHx8hISEiIiIjIyMkJCQlJSUmJiYnJycoKCgpKSkqKiorKystLS0uLi4vLy8x\nMTEyMjIzMzM2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFDQ0NERERFRUVGRkZH\nR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJUVFRVVVVWVlZXV1dYWFhZWVlaWlpb\nW1tcXFxeXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxubm5vb29w\ncHBxcXFycnJ0dHR1dXV2dnZ3d3d4eHh6enp7e3t8fHx9fX1+fn6AgICBgYGDg4OFhYWGhoaHh4eI\niIiJiYmKioqLi4uNjY2Ojo6Pj4+QkJCRkZGUlJSVlZWXl5eYmJiZmZmampqbm5ucnJyenp6fn5+g\noKCioqKjo6OkpKSlpaWoqKipqamqqqqrq6uurq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi6urq7u7u8vLy9vb2/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fJycnKysrLy8vMzMzNzc3P\nz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi\n4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT1\n9fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7///9dYsGyAAALXElEQVR4nO3c+5uUdRnH8TtI\nRZTAU0lQSpoHEhUE3TQVMkpkMUEBxVILTxlZZqFoJOrioRPYQTNTCBURoUwT1BRXWU/sbgKisMgy\n3z+l2f1h2Z1hcWaf556b/Vzv1w+jPDN8n4+8L2d3YS8sQZpFD4Avix4AXxY9AL4segB8WfQA+LLo\nAfBl0QPgy6IHwJdFD4Avix4AXxY9AL4segB8WfQA+LLoAfBl0QPgy6IHwJdFD4Avix4AXxY9AL4s\n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\nrkJggg==\n"
1003 1003 },
1004 1004 {
1005 1005 "output_type": "stream",
1006 1006 "stream": "stdout",
1007 1007 "text": [
1008 1008 "v1 is: [ 10.]\n",
1009 1009 "v2 is: [ 10.]\n"
1010 1010 ]
1011 1011 }
1012 1012 ],
1013 1013 "prompt_number": 105
1014 1014 },
1015 1015 {
1016 1016 "cell_type": "heading",
1017 1017 "level": 2,
1018 1018 "metadata": {},
1019 1019 "source": [
1020 1020 "Cell level magic"
1021 1021 ]
1022 1022 },
1023 1023 {
1024 1024 "cell_type": "markdown",
1025 1025 "metadata": {},
1026 1026 "source": [
1027 1027 "Often, we will want to do more than a simple linear regression model. There may be several lines of R code that we want to \n",
1028 1028 "use before returning to python. This is the cell-level magic.\n",
1029 1029 "\n",
1030 1030 "\n",
1031 1031 "For the cell level magic, inputs can be passed via the -i or --inputs argument in the line. These variables are copied \n",
1032 1032 "from the shell namespace to R's namespace using rpy2.robjects.r.assign. It would be nice not to have to copy these into R: rnumpy ( http://bitbucket.org/njs/rnumpy/wiki/API ) has done some work to limit or at least make transparent the number of copies of an array. This seems like a natural thing to try to build on. Arrays can be output from R via the -o or --outputs argument in the line. All other arguments are sent to R's png function, which is the graphics device used to create the plots.\n",
1033 1033 "\n",
1034 1034 "We can redo the above calculations in one ipython cell. We might also want to add some output such as a summary\n",
1035 1035 " from R or perhaps the standard plotting diagnostics of the lm."
1036 1036 ]
1037 1037 },
1038 1038 {
1039 1039 "cell_type": "code",
1040 1040 "collapsed": false,
1041 1041 "input": [
1042 1042 "%%R -i X,Y -o XYcoef\n",
1043 1043 "XYlm = lm(Y~X)\n",
1044 1044 "XYcoef = coef(XYlm)\n",
1045 1045 "print(summary(XYlm))\n",
1046 1046 "par(mfrow=c(2,2))\n",
1047 1047 "plot(XYlm)"
1048 1048 ],
1049 1049 "language": "python",
1050 1050 "metadata": {},
1051 1051 "outputs": [
1052 1052 {
1053 1053 "output_type": "display_data",
1054 1054 "text": [
1055 1055 "\n",
1056 1056 "Call:\n",
1057 1057 "lm(formula = Y ~ X)\n",
1058 1058 "\n",
1059 1059 "Residuals:\n",
1060 1060 " 1 2 3 4 5 \n",
1061 1061 "-0.2 0.9 -1.0 0.1 0.2 \n",
1062 1062 "\n",
1063 1063 "Coefficients:\n",
1064 1064 " Estimate Std. Error t value Pr(>|t|) \n",
1065 1065 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
1066 1066 "X 0.9000 0.2517 3.576 0.0374 *\n",
1067 1067 "---\n",
1068 1068 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
1069 1069 "\n",
1070 1070 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
1071 1071 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
1072 1072 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
1073 1073 "\n"
1074 1074 ]
1075 1075 },
1076 1076 {
1077 1077 "output_type": "display_data",
1078 1078 "png": "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\n"
1079 1079 }
1080 1080 ],
1081 1081 "prompt_number": 16
1082 1082 },
1083 1083 {
1084 1084 "cell_type": "heading",
1085 1085 "level": 1,
1086 1086 "metadata": {},
1087 1087 "source": [
1088 1088 "octavemagic: Octave inside IPython"
1089 1089 ]
1090 1090 },
1091 1091 {
1092 1092 "cell_type": "markdown",
1093 1093 "metadata": {},
1094 1094 "source": [
1095 1095 "The `octavemagic` extension provides the ability to interact with Octave. It depends on the `oct2py` and `h5py` packages,\n",
1096 1096 "which may be installed using `easy_install`. It has been closely modeled after the R extension, so many of its names and usage patterns are the same.\n",
1097 1097 "\n",
1098 1098 "To enable the extension, load it as follows:"
1099 1099 ]
1100 1100 },
1101 1101 {
1102 1102 "cell_type": "code",
1103 1103 "collapsed": false,
1104 1104 "input": [
1105 1105 "%load_ext octavemagic"
1106 1106 ],
1107 1107 "language": "python",
1108 1108 "metadata": {},
1109 1109 "outputs": [],
1110 1110 "prompt_number": 109
1111 1111 },
1112 1112 {
1113 1113 "cell_type": "heading",
1114 1114 "level": 2,
1115 1115 "metadata": {},
1116 1116 "source": [
1117 1117 "Overview"
1118 1118 ]
1119 1119 },
1120 1120 {
1121 1121 "cell_type": "markdown",
1122 1122 "metadata": {},
1123 1123 "source": [
1124 1124 "Loading the extension enables three magic functions: `%octave`, `%octave_push`, and `%octave_pull`.\n",
1125 1125 "\n",
1126 1126 "The first is for executing one or more lines of Octave, while the latter allow moving variables between the Octave and Python workspace.\n",
1127 1127 "Here you see an example of how to execute a single line of Octave, and how to transfer the generated value back to Python:"
1128 1128 ]
1129 1129 },
1130 1130 {
1131 1131 "cell_type": "code",
1132 1132 "collapsed": false,
1133 1133 "input": [
1134 1134 "x = %octave [1 2; 3 4];\n",
1135 1135 "x"
1136 1136 ],
1137 1137 "language": "python",
1138 1138 "metadata": {},
1139 1139 "outputs": [
1140 1140 {
1141 1141 "output_type": "pyout",
1142 1142 "prompt_number": 110,
1143 1143 "text": [
1144 1144 "array([[ 1., 2.],\n",
1145 1145 " [ 3., 4.]])"
1146 1146 ]
1147 1147 }
1148 1148 ],
1149 1149 "prompt_number": 110
1150 1150 },
1151 1151 {
1152 1152 "cell_type": "code",
1153 1153 "collapsed": false,
1154 1154 "input": [
1155 1155 "a = [1, 2, 3]\n",
1156 1156 "\n",
1157 1157 "%octave_push a\n",
1158 1158 "%octave a = a * 2;\n",
1159 1159 "%octave_pull a\n",
1160 1160 "a"
1161 1161 ],
1162 1162 "language": "python",
1163 1163 "metadata": {},
1164 1164 "outputs": [
1165 1165 {
1166 1166 "output_type": "pyout",
1167 1167 "prompt_number": 111,
1168 1168 "text": [
1169 1169 "array([[2, 4, 6]])"
1170 1170 ]
1171 1171 }
1172 1172 ],
1173 1173 "prompt_number": 111
1174 1174 },
1175 1175 {
1176 1176 "cell_type": "markdown",
1177 1177 "metadata": {},
1178 1178 "source": [
1179 1179 "When using the cell magic, `%%octave` (note the double `%`), multiple lines of Octave can be executed together. Unlike\n",
1180 1180 "with the single cell magic, no value is returned, so we use the `-i` and `-o` flags to specify input and output variables."
1181 1181 ]
1182 1182 },
1183 1183 {
1184 1184 "cell_type": "code",
1185 1185 "collapsed": false,
1186 1186 "input": [
1187 1187 "%%octave -i x -o y\n",
1188 1188 "y = x + 3;"
1189 1189 ],
1190 1190 "language": "python",
1191 1191 "metadata": {},
1192 1192 "outputs": [],
1193 1193 "prompt_number": 116
1194 1194 },
1195 1195 {
1196 1196 "cell_type": "code",
1197 1197 "collapsed": false,
1198 1198 "input": [
1199 1199 "y"
1200 1200 ],
1201 1201 "language": "python",
1202 1202 "metadata": {},
1203 1203 "outputs": [
1204 1204 {
1205 1205 "output_type": "pyout",
1206 1206 "prompt_number": 117,
1207 1207 "text": [
1208 1208 "array([[ 4., 5.],\n",
1209 1209 " [ 6., 7.]])"
1210 1210 ]
1211 1211 }
1212 1212 ],
1213 1213 "prompt_number": 117
1214 1214 },
1215 1215 {
1216 1216 "cell_type": "heading",
1217 1217 "level": 2,
1218 1218 "metadata": {},
1219 1219 "source": [
1220 1220 "Plotting"
1221 1221 ]
1222 1222 },
1223 1223 {
1224 1224 "cell_type": "markdown",
1225 1225 "metadata": {},
1226 1226 "source": [
1227 1227 "Plot output is automatically captured and displayed, and using the `-f` flag you may choose its format (currently, `png` and `svg` are supported)."
1228 1228 ]
1229 1229 },
1230 1230 {
1231 1231 "cell_type": "code",
1232 1232 "collapsed": false,
1233 1233 "input": [
1234 1234 "%%octave -f svg\n",
1235 1235 "\n",
1236 1236 "p = [12 -2.5 -8 -0.1 8];\n",
1237 1237 "x = 0:0.01:1;\n",
1238 1238 "\n",
1239 1239 "polyout(p, 'x')\n",
1240 1240 "plot(x, polyval(p, x));"
1241 1241 ],
1242 1242 "language": "python",
1243 1243 "metadata": {},
1244 1244 "outputs": [
1245 1245 {
1246 1246 "output_type": "display_data",
1247 1247 "text": [
1248 1248 "12*x^4 - 2.5*x^3 - 8*x^2 - 0.1*x^1 + 8"
1249 1249 ]
1250 1250 },
1251 1251 {
1252 1252 "output_type": "display_data",
1253 1253 "svg": [
1254 1254 "<svg height=\"240px\" viewBox=\"0 0 400 240\" width=\"400px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
1255 1255 "\n",
1256 1256 "<desc>Produced by GNUPLOT 4.4 patchlevel 3 </desc>\n",
1257 1257 "\n",
1258 1258 "<defs>\n",
1259 1259 "\n",
1260 1260 "\t<circle id=\"gpDot\" r=\"0.5\" stroke-width=\"0.5\"/>\n",
1261 1261 "\t<path d=\"M-1,0 h2 M0,-1 v2\" id=\"gpPt0\" stroke=\"currentColor\" stroke-width=\"0.222\"/>\n",
1262 1262 "\t<path d=\"M-1,-1 L1,1 M1,-1 L-1,1\" id=\"gpPt1\" stroke=\"currentColor\" stroke-width=\"0.222\"/>\n",
1263 1263 "\t<path d=\"M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1\" id=\"gpPt2\" stroke=\"currentColor\" stroke-width=\"0.222\"/>\n",
1264 1264 "\t<rect height=\"2\" id=\"gpPt3\" stroke=\"currentColor\" stroke-width=\"0.222\" width=\"2\" x=\"-1\" y=\"-1\"/>\n",
1265 1265 "\t<rect fill=\"currentColor\" height=\"2\" id=\"gpPt4\" stroke=\"currentColor\" stroke-width=\"0.222\" width=\"2\" x=\"-1\" y=\"-1\"/>\n",
1266 1266 "\t<circle cx=\"0\" cy=\"0\" id=\"gpPt5\" r=\"1\" stroke=\"currentColor\" stroke-width=\"0.222\"/>\n",
1267 1267 "\t<use fill=\"currentColor\" id=\"gpPt6\" stroke=\"none\" xlink:href=\"#gpPt5\"/>\n",
1268 1268 "\t<path d=\"M0,-1.33 L-1.33,0.67 L1.33,0.67 z\" id=\"gpPt7\" stroke=\"currentColor\" stroke-width=\"0.222\"/>\n",
1269 1269 "\t<use fill=\"currentColor\" id=\"gpPt8\" stroke=\"none\" xlink:href=\"#gpPt7\"/>\n",
1270 1270 "\t<use id=\"gpPt9\" stroke=\"currentColor\" transform=\"rotate(180)\" xlink:href=\"#gpPt7\"/>\n",
1271 1271 "\t<use fill=\"currentColor\" id=\"gpPt10\" stroke=\"none\" xlink:href=\"#gpPt9\"/>\n",
1272 1272 "\t<use id=\"gpPt11\" stroke=\"currentColor\" transform=\"rotate(45)\" xlink:href=\"#gpPt3\"/>\n",
1273 1273 "\t<use fill=\"currentColor\" id=\"gpPt12\" stroke=\"none\" xlink:href=\"#gpPt11\"/>\n",
1274 1274 "</defs>\n",
1275 1275 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter\">\n",
1276 1276 "</g>\n",
1277 1277 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
1278 1278 "</g>\n",
1279 1279 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
1280 1280 "\t<path d=\"M52.0,213.6 L64.5,213.6 M361.9,213.6 L349.4,213.6 \"/>\n",
1281 1281 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,218.1)\">\n",
1282 1282 "\t\t<text><tspan>6</tspan>\n",
1283 1283 "\t\t</text>\n",
1284 1284 "\t</g>\n",
1285 1285 "\t<path d=\"M52.0,185.7 L64.5,185.7 M361.9,185.7 L349.4,185.7 \"/>\n",
1286 1286 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,190.2)\">\n",
1287 1287 "\t\t<text><tspan>6.5</tspan>\n",
1288 1288 "\t\t</text>\n",
1289 1289 "\t</g>\n",
1290 1290 "\t<path d=\"M52.0,157.7 L64.5,157.7 M361.9,157.7 L349.4,157.7 \"/>\n",
1291 1291 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,162.2)\">\n",
1292 1292 "\t\t<text><tspan>7</tspan>\n",
1293 1293 "\t\t</text>\n",
1294 1294 "\t</g>\n",
1295 1295 "\t<path d=\"M52.0,129.8 L64.5,129.8 M361.9,129.8 L349.4,129.8 \"/>\n",
1296 1296 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,134.3)\">\n",
1297 1297 "\t\t<text><tspan>7.5</tspan>\n",
1298 1298 "\t\t</text>\n",
1299 1299 "\t</g>\n",
1300 1300 "\t<path d=\"M52.0,101.9 L64.5,101.9 M361.9,101.9 L349.4,101.9 \"/>\n",
1301 1301 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,106.4)\">\n",
1302 1302 "\t\t<text><tspan>8</tspan>\n",
1303 1303 "\t\t</text>\n",
1304 1304 "\t</g>\n",
1305 1305 "\t<path d=\"M52.0,74.0 L64.5,74.0 M361.9,74.0 L349.4,74.0 \"/>\n",
1306 1306 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,78.5)\">\n",
1307 1307 "\t\t<text><tspan>8.5</tspan>\n",
1308 1308 "\t\t</text>\n",
1309 1309 "\t</g>\n",
1310 1310 "\t<path d=\"M52.0,46.0 L64.5,46.0 M361.9,46.0 L349.4,46.0 \"/>\n",
1311 1311 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,50.5)\">\n",
1312 1312 "\t\t<text><tspan>9</tspan>\n",
1313 1313 "\t\t</text>\n",
1314 1314 "\t</g>\n",
1315 1315 "\t<path d=\"M52.0,18.1 L64.5,18.1 M361.9,18.1 L349.4,18.1 \"/>\n",
1316 1316 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:end\" transform=\"translate(43.7,22.6)\">\n",
1317 1317 "\t\t<text><tspan>9.5</tspan>\n",
1318 1318 "\t\t</text>\n",
1319 1319 "\t</g>\n",
1320 1320 "\t<path d=\"M52.0,213.6 L52.0,201.1 M52.0,18.1 L52.0,30.6 \"/>\n",
1321 1321 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(52.0,236.1)\">\n",
1322 1322 "\t\t<text><tspan>0</tspan>\n",
1323 1323 "\t\t</text>\n",
1324 1324 "\t</g>\n",
1325 1325 "\t<path d=\"M114.0,213.6 L114.0,201.1 M114.0,18.1 L114.0,30.6 \"/>\n",
1326 1326 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(114.0,236.1)\">\n",
1327 1327 "\t\t<text><tspan>0.2</tspan>\n",
1328 1328 "\t\t</text>\n",
1329 1329 "\t</g>\n",
1330 1330 "\t<path d=\"M176.0,213.6 L176.0,201.1 M176.0,18.1 L176.0,30.6 \"/>\n",
1331 1331 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(176.0,236.1)\">\n",
1332 1332 "\t\t<text><tspan>0.4</tspan>\n",
1333 1333 "\t\t</text>\n",
1334 1334 "\t</g>\n",
1335 1335 "\t<path d=\"M237.9,213.6 L237.9,201.1 M237.9,18.1 L237.9,30.6 \"/>\n",
1336 1336 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(237.9,236.1)\">\n",
1337 1337 "\t\t<text><tspan>0.6</tspan>\n",
1338 1338 "\t\t</text>\n",
1339 1339 "\t</g>\n",
1340 1340 "\t<path d=\"M299.9,213.6 L299.9,201.1 M299.9,18.1 L299.9,30.6 \"/>\n",
1341 1341 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(299.9,236.1)\">\n",
1342 1342 "\t\t<text><tspan>0.8</tspan>\n",
1343 1343 "\t\t</text>\n",
1344 1344 "\t</g>\n",
1345 1345 "\t<path d=\"M361.9,213.6 L361.9,201.1 M361.9,18.1 L361.9,30.6 \"/>\n",
1346 1346 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:Arial; font-size:12.00pt; text-anchor:middle\" transform=\"translate(361.9,236.1)\">\n",
1347 1347 "\t\t<text><tspan>1</tspan>\n",
1348 1348 "\t\t</text>\n",
1349 1349 "\t</g>\n",
1350 1350 "\t<path d=\"M52.0,18.1 L52.0,213.6 L361.9,213.6 L361.9,18.1 L52.0,18.1 Z \"/>\n",
1351 1351 "</g>\n",
1352 1352 "\t<a xlink:title=\"Plot #1\">\n",
1353 1353 "<g style=\"fill:none; color:red; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
1354 1354 "\t<path d=\"M52.0,101.9 L55.1,102.0 L58.2,102.2 L61.3,102.5 L64.4,102.8 L67.5,103.3 L70.6,103.9 L73.7,104.5 L76.8,105.2 L79.9,106.1 L83.0,107.0 L86.1,108.0 L89.2,109.1 L92.3,110.3 L95.4,111.6 L98.5,112.9 L101.6,114.4 L104.7,115.9 L107.8,117.5 L110.9,119.2 L114.0,120.9 L117.1,122.8 L120.2,124.7 L123.3,126.6 L126.4,128.7 L129.5,130.8 L132.6,132.9 L135.7,135.2 L138.8,137.4 L141.9,139.8 L145.0,142.1 L148.1,144.5 L151.2,147.0 L154.3,149.5 L157.4,152.0 L160.5,154.5 L163.6,157.1 L166.7,159.6 L169.8,162.2 L172.9,164.8 L176.0,167.4 L179.1,170.0 L182.2,172.5 L185.3,175.1 L188.4,177.6 L191.5,180.1 L194.6,182.6 L197.7,185.0 L200.8,187.4 L203.9,189.7 L207.0,192.0 L210.0,194.1 L213.1,196.2 L216.2,198.3 L219.3,200.2 L222.4,202.0 L225.5,203.8 L228.6,205.4 L231.7,206.8 L234.8,208.2 L237.9,209.4 L241.0,210.5 L244.1,211.4 L247.2,212.1 L250.3,212.6 L253.4,213.0 L256.5,213.2 L259.6,213.2 L262.7,212.9 L265.8,212.4 L268.9,211.7 L272.0,210.8 L275.1,209.5 L278.2,208.1 L281.3,206.3 L284.4,204.3 L287.5,201.9 L290.6,199.3 L293.7,196.3 L296.8,193.0 L299.9,189.3 L303.0,185.3 L306.1,180.9 L309.2,176.1 L312.3,170.9 L315.4,165.4 L318.5,159.4 L321.6,152.9 L324.7,146.0 L327.8,138.7 L330.9,130.9 L334.0,122.6 L337.1,113.8 L340.2,104.5 L343.3,94.6 L346.4,84.3 L349.5,73.3 L352.6,61.8 L355.7,49.7 L358.8,37.0 L361.9,23.7 \" stroke=\"rgb( 0, 0, 255)\"/>\n",
1355 1355 "</g>\n",
1356 1356 "\t</a>\n",
1357 1357 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
1358 1358 "</g>\n",
1359 1359 "</svg>"
1360 1360 ]
1361 1361 }
1362 1362 ],
1363 1363 "prompt_number": 118
1364 1364 },
1365 1365 {
1366 1366 "cell_type": "markdown",
1367 1367 "metadata": {},
1368 1368 "source": [
1369 1369 "The plot size is adjusted using the `-s` flag:"
1370 1370 ]
1371 1371 },
1372 1372 {
1373 1373 "cell_type": "code",
1374 1374 "collapsed": false,
1375 1375 "input": [
1376 1376 "%%octave -s 500,500\n",
1377 1377 "\n",
1378 1378 "# butterworth filter, order 2, cutoff pi/2 radians\n",
1379 1379 "b = [0.292893218813452 0.585786437626905 0.292893218813452];\n",
1380 1380 "a = [1 0 0.171572875253810];\n",
1381 1381 "freqz(b, a, 32);"
1382 1382 ],
1383 1383 "language": "python",
1384 1384 "metadata": {},
1385 1385 "outputs": [
1386 1386 {
1387 1387 "output_type": "display_data",
1388 1388 "png": "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\nFaCsDL6+YG8PPJfzQBBeyMN3p7W1VSLekZa1Hb2iZtw4CAqCsLDa6GhoboavvoKICOC8GCVqRs7n\nLFmv2JCH4F5WViYR70jL2o5esXnpdJg/H7Zvh7g40NSEHTsgMhJSUoDFEq1XhK2jV+zgmDuCyAAE\nATduwB9/QEcH6OvD3Lkwbpyk+4S8irQFIhxzRxAZgEL5Z2i+qQny8uD4cejshGnTwMMDZ80jbwCD\nO4LIGFpasGQJAACbDSUlsHs3NDWBvj4sXgxjx0q6c4jUIA9j7vn5+RLxjrSs7eiVNq+CAtjaQmQk\nxMWBlxf8+it89RXEx0NJiWi9wmWkecWGPIy5R0ZG7ty5U/xeucnajl558ra1QU4OkJMM3nsP3NzA\nwEAcXoGRGy+OuQsfOp0uEe9Iy9qOXpnwqqnB4sWweDEAAIsFRUVQUQHt7TB+PPj4/PMerNC9AjPS\nvGJDHoI7giBvREcHlix5MUBfVQVZWVBVBQQB06aBlxcMtiIfItvIw5j7oAu+i4hz586hF72y4jUx\ngaAgiIuDmBjQ0oLvvoOYGNi9G27cgP5+EXoHZaR5xYY83Ll3dHRIxDvSsrajVz68NBq4uoKrKwBA\nRwdcugTffAP9/XDz5hgGA2bOBCUlkfoHIq+fs8SRhweq0vYcA0FkkefP4fJl+OsvaG8HbW2YMwem\nTMHFbYaAtAUiIf/T1dfXr1u3zs7OTkVFhUKh1NTUcNfm5uZSXmXAMw0Wi7VixQotLS0Gg+Hl5VVZ\nWSnc7iEI8jZUVcHNDb78EuLiIDAQbt+GrVshJgYOHYI7dyTdOWToCHlYpqqqKj09ffr06XZ2dgUF\nBW88JiEhwfDlqqbKXK/W9fb2enh4sFis+Ph4BoMRGxvr7OxcVlamq6sr3E4iCMIbfX0IDHyx/ewZ\n/Pe/kJEBfX1ApcKMGTBrFqioSLR/CD8IN/cHm80mNxITEwGgurqauzYnJwcAbt68+cZzU1NTASA/\nP58sPnr0iEqlbtiwYVCpra3tsDotKHKTtR296OXT295O5OQQ27YRGzcSGzcSP/9MPHkiDq8oELpX\n2jIxiWrM/dtvvw0NDa2urjY2NubszM3NdXd3v3nzpomJCTluw32Kn5/flStX6urqOHvmzZt39+7d\nQSfDSNtQF4KMBNrb4dIluHwZWlpAWRlsbMDeHoyMJN0tySFtgUgCs2UcHBxaW1vpdLqnp+euXbtM\n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\n3r33339fXV3dxsampKREQ0PD2NgYAFpaWkpLS52cnMjDioqKrK2tyUuoqalpaWmxsbEhqzIzMxcs\nWEBuD2ghIyNDWVl5OC0I1oeKigrSK5Sr4L8FgiBIr9A/Sd4t1NTUkF6hf5K8WygsLFRWVhb1v+br\nLWRnZysrK4vzG0W2kJ2d3dnZKc5vFNlCdnZ2ZWWlOL9RZAvZ2dnnzp0bUgslJSUPHz58PcKQ25Ja\nmP6tEIJy+fLlt7XT1dXl6emprq7+999/c+8fP368p6cn956IiAgKhdLR0TFoLYIgCMI/gt+5W1hY\nFBcXv76/p6fnww8/vHjx4h9//DFlypQBp1y9epV7T3l5uYmJiYqKyqC1CIIgCP8IPuaupqbmwAW5\ns6+vb9myZXl5eVlZWXZ2dgNO8fX1raurKyoqIot1dXV5eXmcn0W8axEEQRD+EfJ67p988smBAweC\ngoLc3d05O83MzMhBrt7eXltb26dPn27fvl1VVTU2NrahoaG0tFRPT2/QWgRBEGQICHeUZ8BcRpLg\n4GDOAY8fPw4ICNDQ0KDT6R4eHhUVFdyn865FEARB+EQeMjEhCIIgA8BVIREEQeQQDO4IgiByCAZ3\nBEEQOQSDO4IgiByCwR1BEEQOweCOIAgih8hwcBdDTj7+FfX19evWrbOzs1NRUaFQKDU1NeLxDprX\nUETeixcv+vj4jB07lkaj6enp+fr6Dlg6QkRebvz8/CgUyscffywGb25uLuVVhrNK1FCv9+zZs46O\njgwGQ11d3c7OjvMWt+i8CxcupLzGjBkzRO0FgKKiIldX13feeWf06NHTp08/fvy4YNKheouLi52c\nnOh0uqam5rJlyzhZKGQYSU+0F5Cenh5ra2s9Pb0DBw6kp6dbWVnp6Og8fvxYUori4mIdHR1vb28y\n2Uh1dbV4vE5OTjY2Nlu3bk1NTY2MjKTT6e+9996zZ89E7T169OiHH364c+fO1NTUuLg4ExMTKpU6\nYJ04UXg5ZGZmamlpUanUjz76SADpUL05OTkAkJCQkPGS06dPi8FLEMS+ffsAwN3dPTExMTk5OTg4\n+MSJE6L2Xrp0KYOLuLg4AIiKihK19+rVq1Qqddq0aWlpaSdPniRXC09LSxO196+//lJSUpoxY8ax\nY8d+/PFHQ0NDMzOztrY2AbzSg6wG99TUVADIz88ni48ePaJSqRs2bJCUgs1mkxuJiYnDDO5D8t6+\n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\nY2RHRMr/A5YdmP24XbLsAAAAAElFTkSuQmCC\n"
1389 1389 }
1390 1390 ],
1391 1391 "prompt_number": 119
1392 1392 },
1393 1393 {
1394 1394 "cell_type": "code",
1395 1395 "collapsed": false,
1396 1396 "input": [
1397 1397 "%%octave -s 600,200 -f png\n",
1398 1398 "\n",
1399 1399 "subplot(121);\n",
1400 1400 "[x, y] = meshgrid(0:0.1:3);\n",
1401 1401 "r = sin(x - 0.5).^2 + cos(y - 0.5).^2;\n",
1402 1402 "surf(x, y, r);\n",
1403 1403 "\n",
1404 1404 "subplot(122);\n",
1405 1405 "sombrero()"
1406 1406 ],
1407 1407 "language": "python",
1408 1408 "metadata": {},
1409 1409 "outputs": [
1410 1410 {
1411 1411 "output_type": "display_data",
1412 1412 "png": "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\nFhMTs2bNmrCwsIiIiA0bzCthiQAAEHhJREFUNtTI10Z1R5jaCNLWKKjuP4gavvI3b94cNGhQYGDg\nj08zWz7+9ebNmwcOHPjBDajAkydPvLy8pk+fXkHmPjExcdu2bWFhYatWrQoPD9fguqIaWkK/Or8N\nYa1QxRBWoPIcQigUxsXFBQYGfnMULJVKk5KSJkyYoGKnlEql4eHh5etU2xBKJBI/P7/yM7DHjx+r\n7iauOm/evFmwYMGECRPkLrUBAQE+Pj7qrfBUprrMzLUUpFUjqO4/hXpBYzKZ7ObNm0FBQX/99ZcG\n1c6qJCIi4psi7IWFhT9mXbRKcnNzw8LCvL29g4OD58yZM2fOnGHDhml8MFol/4Vlj99eoz+a7t27\nm5mZ3bp1a9q0aUlJSampqQKB4N27d2vWrLl165ajo2PXrl0XLlxYPiHfhw8fVqxYUa9ePQqF0rZt\n29DQUCMjI1WuRaFQ/P395a9Jkrx7926NmvrmzZuTJ0/OmjULAJVK3bhxY/lPbWxsFOkeCwsL5Qsp\ntUEikcTHx9+6dSszM7O4uNjc3DwgIKCWdVbg9u3bAFq2bFnhuiNGjLhy5UpsbGznzp2/2Uga7f/f\nNefPn//06dP48eM1285/GXp6egUFBeWP5OfnEwShPLUnQRBdu3bt2rXrmzdvfHx86HR6eHi4np6e\nplq1dOnSOXPmMBgMANOmTftm+ZcvX757927YsGGaaoDq3L9/Pz4+vrCw8P3795aWljNmzPiR6R7l\nj6ykpKQfdsUfz78nMe8/wvr16/39/d+9e9ewYUPVzzIxMTEyMsrIyOjQoQOfz7927Vr5GlJTUw8d\nOsTj8QwNDbOzsyUSiaGhobGxceV4xBohlUqPHj368uVL5Yl579279/XrVzc3txpVvmrVqvj4+LCw\nsFatWtW0YRkZGbGxsRcuXDAxMRk4cKCFhcX69evLDxGU/LbynLHljxgYGFQX+FFdZmZvb+9du3b5\n+PiUr6pJkyatW7cGcOnSJRcXl/37948aNQpA3759jY2NbW1teTze/fv3d+7caWhoeP/+/RqFE/zX\nGDJkSFJSUkZGhuKIi4vLy5cvX79+rXolmZmZe/fuLS0t9fPzMzY2VqMZBQUFt2/fdnV1lb/Ny8tT\nhE/UlOzsbB6PVyH/s2bJz8+/fPnyqVOnhELhiBEjevXqVV1C4Ozs7MDAwPPnzyvSLKudhro6TExM\n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\n"
1413 1413 }
1414 1414 ],
1415 1415 "prompt_number": 120
1416 1416 }
1417 1417 ],
1418 1418 "metadata": {}
1419 1419 }
1420 1420 ]
1421 1421 } No newline at end of file
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now