-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathincremental-online-statistics-007.nb
7006 lines (6790 loc) · 334 KB
/
incremental-online-statistics-007.nb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* CreatedBy='Mathematica 10.4' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 158, 7]
NotebookDataLength[ 342294, 6998]
NotebookOptionsPosition[ 325614, 6739]
NotebookOutlinePosition[ 326153, 6759]
CellTagsIndexPosition[ 326110, 6756]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[CellGroupData[{
Cell["Windowed Incremental Online Statistics", "Title",
CellChangeTimes->{{3.6698529556858463`*^9, 3.669852964981929*^9}, {
3.703627058983081*^9, 3.70362706623743*^9}, {3.703628927030475*^9,
3.703628928893201*^9}},ExpressionUUID->"b0744051-821f-478f-bc14-\
6bebce883993"],
Cell["Extracting Models from Data, One Observation at a Time", "Subtitle",
CellChangeTimes->{
3.762854478509541*^9, {3.762854525374554*^9,
3.762854537420007*^9}},ExpressionUUID->"b3f72312-1f30-4cff-a8b6-\
4689f3a236a9"],
Cell["Brian Beckman", "Subsubtitle",
CellChangeTimes->{{3.669852973717079*^9,
3.6698529760933933`*^9}},ExpressionUUID->"56da506d-a60f-4f33-b478-\
9bef0e27827d"],
Cell["11 May 2024", "Subsubtitle",
CellChangeTimes->{{3.669916040271191*^9, 3.669916050814829*^9}, {
3.670568322040224*^9, 3.67056832212545*^9}, {3.703627074282936*^9,
3.703627081067047*^9}, {3.7628541692863617`*^9, 3.762854179784972*^9}, {
3.924467511030157*^9,
3.924467519844315*^9}},ExpressionUUID->"381e9851-d168-47b4-94ec-\
14616942eb57"],
Cell[TextData[{
"We calculate descriptive statistics\[LongDash]count, mean, unbiased \
variance\[LongDash]both overall and in a sliding window, of sequences of \
numerical data. The statistics calculator is written as a ",
StyleBox["foldable accumulator function",
FontWeight->"Bold",
FontSlant->"Italic"],
", decoupling calculation from iteration. Exactly the same stateless \
accumulator function works over data distributed over space in memory or in \
tables, or over time in asynchronous or lazy streams. Foldable accumulator \
functions can be tested independently of data source, say over ground-truth \
test data, then later deployed in harsh asynchronous environments with high \
assurance, often without even being recompiled."
}], "Text",
CellChangeTimes->{{3.6704315337480507`*^9, 3.670431538810305*^9}, {
3.670433011092613*^9, 3.670433012117442*^9}, {3.670517974613204*^9,
3.670518132702087*^9}, {3.703257038903595*^9, 3.70325709498783*^9}, {
3.703521036238616*^9, 3.7035211007149377`*^9}, {3.7036271493714*^9,
3.703627240750091*^9}, {3.7036273107413287`*^9, 3.703627493470467*^9}, {
3.7628539631382866`*^9, 3.7628541530644703`*^9}, {3.762854594374955*^9,
3.7628546866424217`*^9}, {3.762854747110767*^9, 3.762854749523016*^9}, {
3.762856715095398*^9, 3.762856836630719*^9}, {3.9244192850425167`*^9,
3.924419285724481*^9}, {3.924419362109108*^9, 3.924419417849194*^9}, {
3.924467598083089*^9, 3.924467635009366*^9}, {3.924467666654786*^9,
3.924467857891773*^9}},ExpressionUUID->"7692651a-e82e-447d-ba88-\
f11c8d7ccc78"],
Cell[TextData[{
"The solution at the end of this notebook has been implemented in C, Python, \
and Clojure and deployed in mission-critical web applications and embedded \
applications. It runs in ",
Cell[BoxData[
FormBox[
RowBox[{"O", "(", "w", ")"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"5a45f08b-0dae-4f22-9c6f-d67b9fdb41e9"],
" space, where ",
Cell[BoxData[
FormBox["w", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"9ac74c9c-f782-456c-b11b-eb6842f3f9e0"],
" is the width of the window, and in ",
Cell[BoxData[
FormBox[
RowBox[{"O", "(", "1", ")"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"0c82e5e6-0f0b-49fb-872e-be7c5d255a99"],
" time. Contrast to more obvious solutions that run in ",
Cell[BoxData[
FormBox[
RowBox[{"O", "(", "w", ")"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"6fc183ea-f84b-4420-b7e9-9b83e1e02b92"],
" time."
}], "Text",
CellChangeTimes->{{3.924471421171899*^9, 3.9244715706659718`*^9}, {
3.924505603555684*^9,
3.924505646354912*^9}},ExpressionUUID->"13018296-aa0f-4074-b884-\
e74ca9b258a8"],
Cell[CellGroupData[{
Cell["Prelude: Running Count", "Chapter",
CellChangeTimes->{{3.6704315063231487`*^9, 3.6704315092341843`*^9}, {
3.703627512012957*^9,
3.703627514556757*^9}},ExpressionUUID->"7189fc66-31fb-4cb2-8745-\
c29fa068f25d"],
Cell["\<\
For ground truth, we want a fixed but random sequence of data. The following \
is a sample of length 10 from the standard normal distribution\[LongDash]mean \
zero, standard deviation one:\
\>", "Text",
CellChangeTimes->{{3.706391457777802*^9, 3.706391483858736*^9}, {
3.762854718260289*^9, 3.762854722823119*^9}, {3.762854797689057*^9,
3.7628548874162083`*^9}, {3.924467869496292*^9,
3.924467889375144*^9}},ExpressionUUID->"bb306649-10eb-4b62-a946-\
2a8b77fb5924"],
Cell[BoxData[
RowBox[{
RowBox[{"zs", " ", "=", " ",
RowBox[{"{",
RowBox[{
RowBox[{"-", "0.178654"}], ",", "0.828305", ",", "0.0592247", ",",
RowBox[{"-", "0.0121089"}], ",",
RowBox[{"-", "1.48014"}], ",",
RowBox[{"-", "0.315044"}], ",",
RowBox[{"-", "0.324796"}], ",",
RowBox[{"-", "0.676357"}], ",", "0.16301", ",",
RowBox[{"-", "0.858164"}]}], "}"}]}], ";"}]], "Input",
CellChangeTimes->{{3.70639144335928*^9, 3.706391452389128*^9},
3.7063914992771873`*^9},
CellLabel->"In[1]:=",ExpressionUUID->"8ca4ee7b-ccb5-4754-84d6-fd9fc5f93bad"],
Cell[TextData[{
StyleBox["Fold", "Input"],
" has three arguments: an accumulator function, an initial state, and a \
sequence of data. All variations of ",
StyleBox["Fold", "Input"],
"\[LongDash]over asynchronous streams, over on-demand (lazy) streams, over \
tables, lists, arrays\[LongDash]have exactly the same signature as ",
StyleBox["Fold", "Input"],
"."
}], "Text",
CellChangeTimes->{{3.670433018774361*^9, 3.670433023108251*^9}, {
3.670518142496415*^9, 3.670518147005398*^9}, {3.703521108648394*^9,
3.703521119744053*^9}, {3.762854740100055*^9, 3.762854784514863*^9}, {
3.762856879508958*^9, 3.762856916403267*^9}, {3.7628570048641543`*^9,
3.762857100752841*^9}, {3.924419362157299*^9, 3.924419362172904*^9}, {
3.9244194446089*^9, 3.9244196368792753`*^9}, {3.9244679103842688`*^9,
3.924468063695854*^9}},ExpressionUUID->"ffa4b7c9-3950-48b1-9915-\
531b1df13028"],
Cell[CellGroupData[{
Cell[BoxData[{
RowBox[{
RowBox[{"ClearAll", "[", "cume", "]"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"cume", "[",
RowBox[{"n_", ",", "z_"}], "]"}], ":=",
RowBox[{"n", "+", "1"}]}], ";"}], "\[IndentingNewLine]",
RowBox[{"Fold", "[",
RowBox[{"cume", ",", "0", ",", "zs"}], "]"}]}], "Input",
CellChangeTimes->{{3.670362262676239*^9, 3.670362403112179*^9}, {
3.670362491967467*^9, 3.670362500108472*^9}, {3.670382335403171*^9,
3.670382392568015*^9}, {3.670431573529311*^9, 3.67043161176023*^9}},
CellLabel->"In[2]:=",ExpressionUUID->"9e959217-11b5-422a-a847-02da0de6f86c"],
Cell[BoxData["10"], "Output",
CellChangeTimes->{{3.670362386860121*^9, 3.670362403451788*^9},
3.670362500750139*^9, {3.670382380701834*^9, 3.670382393646204*^9}, {
3.6704316052181597`*^9, 3.670431612698892*^9}, 3.6704316598530817`*^9,
3.670434305008449*^9, 3.670510828814732*^9, 3.670511021991407*^9,
3.6705156383222437`*^9, 3.670532554390843*^9, 3.670533641128706*^9,
3.670534990204936*^9, 3.670545241683096*^9, 3.670568332167439*^9,
3.670603468588195*^9, 3.670775509237636*^9, 3.6708648250455*^9,
3.670872521140728*^9, 3.670956957876609*^9, 3.6709746721071672`*^9,
3.670979363897111*^9, 3.671033133935173*^9, 3.671033181090272*^9,
3.671033248379916*^9, 3.671039609902426*^9, 3.671042461077897*^9,
3.671044042463487*^9, 3.671065160885859*^9, 3.6710834272121267`*^9,
3.671208538711453*^9, 3.671213360851935*^9, 3.67121764635679*^9,
3.671218311528186*^9, 3.671380182639037*^9, 3.671467523124352*^9,
3.67149460139983*^9, 3.671551662821696*^9, 3.6715632502793937`*^9,
3.671587605321035*^9, 3.671654764447816*^9, 3.671663238240183*^9,
3.671665733516741*^9, 3.671666441628186*^9, 3.671887645821486*^9,
3.671939612530803*^9, 3.671974959421951*^9, 3.672154916974106*^9,
3.67222181089568*^9, 3.672306126242933*^9, 3.672308486802026*^9,
3.672311740498646*^9, 3.672311893426462*^9, 3.672476728306038*^9,
3.672833720310568*^9, 3.672911581556663*^9, 3.673548773060635*^9,
3.676478494593018*^9, 3.703191966360875*^9, 3.703238552830134*^9,
3.703238745418429*^9, 3.703247642341167*^9, 3.7035209774920697`*^9,
3.70352111141931*^9, 3.703626685236958*^9, 3.70639150619586*^9,
3.762854892146904*^9, 3.76311091518804*^9, 3.763122795361785*^9,
3.924419656908058*^9, {3.924468771760252*^9, 3.924468789953239*^9},
3.924471375790019*^9, 3.924505781087735*^9, 3.9245059765279512`*^9,
3.924506614138597*^9},
CellLabel->"Out[4]=",ExpressionUUID->"cc365850-9c06-4d89-8362-684bf6cdc71c"]
}, Open ]],
Cell[TextData[{
"The first argument of the accumulator function, ",
StyleBox["cume", "Input"],
", is a ",
StyleBox["circulating state",
FontWeight->"Bold",
FontSlant->"Italic"],
", kept externally to the function. Above, the circulating state is ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"82a49a9b-3db2-45a8-9ee9-47ad3e72f5c9"],
". The caller must feed in two arguments to ",
StyleBox["cume", "Input"],
": the ",
StyleBox["prior",
FontWeight->"Bold",
FontSlant->"Italic"],
" value ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"72a1a6cf-3e74-4bba-8ecd-19e149c6ff19"],
" of the circulating state and a new observation ",
Cell[BoxData[
FormBox["z", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"fdcf5742-02b2-4d65-b5bc-f26bfe6f02fa"],
". The caller receives the ",
StyleBox["posterior",
FontWeight->"Bold",
FontSlant->"Italic"],
" value of the state, ",
Cell[BoxData[
FormBox[
RowBox[{"n", "+", "1"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"5cb215fb-0232-494a-b90a-a3c4a01a8235"],
"."
}], "Text",
CellChangeTimes->{{3.92442012286875*^9, 3.924420317276824*^9}, {
3.9244203481831837`*^9, 3.924420375230352*^9}, {3.924468098994392*^9,
3.924468173711217*^9}},ExpressionUUID->"c23474ac-c5ba-41da-aca1-\
c695b816f0af"],
Cell[TextData[{
"To see all intermediate results, use ",
StyleBox["FoldList", "Code"],
":"
}], "Text",
CellChangeTimes->{{3.7628569426216598`*^9,
3.7628569591755505`*^9}},ExpressionUUID->"d6246666-3a29-4921-b4a6-\
4ec5a48b9400"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"FoldList", "[",
RowBox[{"cume", ",", "0", ",", "zs"}], "]"}]], "Input",
CellChangeTimes->{{3.7628569869815464`*^9, 3.7628569942567587`*^9}},
CellLabel->"In[5]:=",ExpressionUUID->"d6d3e7be-b5de-4b0e-a374-7d4fc03e94b1"],
Cell[BoxData[
RowBox[{"{",
RowBox[{
"0", ",", "1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6", ",", "7",
",", "8", ",", "9", ",", "10"}], "}"}]], "Output",
CellChangeTimes->{
3.762856995336447*^9, 3.763110917204025*^9, 3.7631227969459233`*^9,
3.924419666092806*^9, {3.9244687717655168`*^9, 3.924468789958175*^9},
3.924471375795555*^9, 3.924505781091956*^9, 3.924505976593852*^9,
3.9245066141422167`*^9},
CellLabel->"Out[5]=",ExpressionUUID->"cc88b010-4c0c-44b5-800f-905624ac603f"]
}, Open ]],
Cell[CellGroupData[{
Cell["LEFT FOLD", "Subsection",
CellChangeTimes->{{3.762855000301767*^9,
3.7628550046819477`*^9}},ExpressionUUID->"d3a92e89-9116-4d74-a1d5-\
328750d8997d"],
Cell[TextData[{
"Wolfram\[CloseCurlyQuote]s documentation for ",
StyleBox["Fold", "Input"],
" includes an example that explains this operator symbolically. The \
following should be self-explanatory:"
}], "Text",
CellChangeTimes->{{3.703627654696693*^9, 3.703627655361246*^9}, {
3.703627730638696*^9, 3.703627778906796*^9}, {3.92446820490478*^9,
3.9244682463047323`*^9}},ExpressionUUID->"7df49337-3474-47de-8329-\
fe349fd58939"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Fold", "[",
RowBox[{"f", ",", "z", ",",
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}]}], "]"}]], "Input",
CellChangeTimes->{3.703627846568565*^9},
CellLabel->"In[6]:=",
CellID->12834,ExpressionUUID->"d965aa6c-3c1f-407c-99bd-dc38275b68d1"],
Cell[BoxData[
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], ",", "b"}], "]"}], ",", "c"}], "]"}],
",", "d"}], "]"}]], "Output",
CellChangeTimes->{
3.703627785817709*^9, 3.703627847322299*^9, 3.706391509227429*^9,
3.706391558600135*^9, 3.7628548959191914`*^9, 3.763110919065629*^9,
3.7631227986549664`*^9, 3.924419680465679*^9, {3.924468771779726*^9,
3.924468789974491*^9}, 3.924471375810998*^9, 3.924505781106917*^9,
3.924505976630115*^9, 3.9245066141514893`*^9},
ImageSize->{167, 16},
ImageMargins->{{0, 0}, {0, 0}},
ImageRegion->{{0, 1}, {0, 1}},
CellLabel->"Out[6]=",ExpressionUUID->"666a56c9-70a3-417c-9b5b-ea185e2b576d"]
}, Open ]],
Cell[TextData[{
StyleBox["Fold", "Input"],
" first computes ",
Cell[BoxData[
FormBox[
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"0b6e7b89-386b-4072-b71f-30c85cb3d9b3"],
", then feeds the result\[LongDash]the posterior value of the circulating \
state\[LongDash]back into ",
Cell[BoxData[
FormBox["f", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"4397797f-78bb-4557-949e-901cb99c2d59"],
", computing ",
Cell[BoxData[
FormBox[
RowBox[{"f", "[",
RowBox[{
RowBox[{"f", "[",
RowBox[{"z", ",", "a"}], "]"}], ",", "b"}], "]"}], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"0ecd7888-8f10-45c1-b34a-5d12d67cf4a0"],
", and so on. More concisely, ",
StyleBox["Fold", "Input"],
" iteratively applies the binary function ",
Cell[BoxData[
FormBox["f", TraditionalForm]],ExpressionUUID->
"581dc6b4-6c6f-4278-8965-0efbd45c391c"],
" to the sequence ",
Cell[BoxData[
FormBox[
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}], TraditionalForm]],
ExpressionUUID->"e031a03f-0b27-4cbd-b71c-a8e7bbe9812b"],
". That\[CloseCurlyQuote]s why we say ",
StyleBox["Fold decouples calculation from iteration",
FontSlant->"Italic"],
". ",
StyleBox["Fold", "Input"],
" places no restriction on its accumulator-function argument ",
Cell[BoxData[
FormBox["f", TraditionalForm]],ExpressionUUID->
"0ff9a00e-93a3-4cdc-934b-c698c694600c"],
" other than that it accept an argument of the type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "z"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"67b81c5c-fa4a-477e-bfc0-3fa099658070"],
" of ",
Cell[BoxData[
FormBox["z", TraditionalForm]],ExpressionUUID->
"9e01e919-f2cf-4a0d-b6b8-2e2cfa32180d"],
" in its first position, an argument of the type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "a"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"e3cd03cd-e4cb-4e49-a99d-a5947ff34844"],
" of any of ",
Cell[BoxData[
FormBox[
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], TraditionalForm]],
ExpressionUUID->"398020e0-da04-4333-a6fd-2a8db0b2ae38"],
", in its second position, and produces a result of type ",
Cell[BoxData[
FormBox[
SubscriptBox["T", "a"], TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"bb3a7449-fc1a-42a9-8533-66b1a69e5970"],
"."
}], "Text",
CellChangeTimes->{{3.703627897564636*^9, 3.7036281013370333`*^9}, {
3.703628214280526*^9, 3.703628271644765*^9}, {3.706391520184956*^9,
3.7063915501904993`*^9}, {3.762854898234641*^9, 3.762854900241898*^9}, {
3.924419701247325*^9, 3.924419705367957*^9}, {3.924422494352737*^9,
3.924422537026087*^9}, {3.924422662922558*^9, 3.9244227332992277`*^9}, {
3.924422781899427*^9, 3.9244228588494873`*^9}, {3.9244682892136917`*^9,
3.924468317386553*^9}},ExpressionUUID->"6ef0c628-82c2-4845-a672-\
48d64ad3bf9d"]
}, Open ]],
Cell[CellGroupData[{
Cell["RIGHT FOLD", "Subsection",
CellChangeTimes->{{3.7628550272069793`*^9,
3.762855028796365*^9}},ExpressionUUID->"87b099e7-f88e-43d8-9198-\
d0803ab83131"],
Cell["\<\
It is important to know that there is a dual: the right fold. Left and Right \
folds can behave differently on lazy lists, so be on the lookout! We use only \
left fold in this document.\
\>", "Text",
CellChangeTimes->{{3.703628283798584*^9, 3.7036283431829658`*^9}, {
3.7628549389314346`*^9, 3.762854960735669*^9}, {3.7628550365615587`*^9,
3.762855119152248*^9}, {3.7631109324629526`*^9, 3.763110941310856*^9}, {
3.924419777506917*^9, 3.924419798985585*^9}, {3.924468340891473*^9,
3.92446836952428*^9}, {3.9244684058268147`*^9,
3.9244684363448763`*^9}},ExpressionUUID->"8ec0345b-1119-4b86-9503-\
9afb895b2d3c"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Fold", "[",
RowBox[{
RowBox[{
RowBox[{"{",
RowBox[{"x", ",", "y"}], "}"}], "\[Function]",
RowBox[{"f", "[",
RowBox[{"y", ",", "x"}], "]"}]}], ",", "z", ",",
RowBox[{"{",
RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}]}], "]"}]], "Input",
CellChangeTimes->{{3.7036277976045537`*^9, 3.703627798479802*^9}, {
3.703627828938348*^9, 3.703627875074729*^9}, {3.703628309261767*^9,
3.703628311575758*^9}, 3.924419918713853*^9},
CellLabel->"In[7]:=",ExpressionUUID->"b08724dc-9031-4525-b7f6-4004e64e4bc5"],
Cell[BoxData[
RowBox[{"f", "[",
RowBox[{"d", ",",
RowBox[{"f", "[",
RowBox[{"c", ",",
RowBox[{"f", "[",
RowBox[{"b", ",",
RowBox[{"f", "[",
RowBox[{"a", ",", "z"}], "]"}]}], "]"}]}], "]"}]}], "]"}]], "Output",
CellChangeTimes->{
3.703627875445041*^9, 3.703628312329408*^9, 3.7063915561834393`*^9, {
3.7631109228499*^9, 3.763110944530025*^9}, 3.7631228014144764`*^9,
3.924419924430501*^9, {3.9244687717942753`*^9, 3.924468789980128*^9},
3.924471375815954*^9, 3.924505781111781*^9, 3.924505976634643*^9,
3.924506614155038*^9},
CellLabel->"Out[7]=",ExpressionUUID->"b04c60e1-2e37-45f5-b2ba-b1b8d65e7586"]
}, Open ]]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell["Running Mean", "Chapter",
CellChangeTimes->{{3.670382281644032*^9, 3.6703822840358477`*^9}, {
3.703417921227977*^9,
3.703417921748693*^9}},ExpressionUUID->"2e907cf8-02e7-4eb1-97b9-\
8045ac871b0c"],
Cell[TextData[{
"Write ",
Cell[BoxData[
FormBox["x", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"379bb54f-6d61-4e39-9168-d6671b6574a1"],
" for the mean-so-far, and write a new accumulator function that computes \
the running mean. Its circulating state includes the running mean ",
Cell[BoxData[
FormBox["x", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"638dee21-6102-4fb3-9fc0-c28032f55ef5"],
", the running count ",
Cell[BoxData[
FormBox["n", TraditionalForm]],
FormatType->TraditionalForm,ExpressionUUID->
"40cbe654-a80e-4da0-be1d-42c2fe399b23"],
", and the running ",
StyleBox["sum",
FontSlant->"Italic"],
". This new accumulator function computes the new values of all three state \
variables in the obvious way. Note that all three state variables are \
necessary to track the running mean calculated this way. We relieve that \
situation shortly below."
}], "Text",
CellChangeTimes->{{3.670431465148507*^9, 3.67043148791577*^9}, {
3.670518308010725*^9, 3.670518363776095*^9}, 3.6714946268792133`*^9, {
3.7032571068989577`*^9, 3.70325710732666*^9}, {3.762856628754756*^9,
3.762856678357593*^9}, {3.924423258815722*^9, 3.924423428307579*^9}, {
3.92446846781028*^9,
3.9244684881920958`*^9}},ExpressionUUID->"487e0667-44b9-4f04-8636-\
162ffad41841"],
Cell[CellGroupData[{
Cell[BoxData[{
RowBox[{
RowBox[{"ClearAll", "[", "cume", "]"}], ";"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"cume", "[",
RowBox[{
RowBox[{"{",
RowBox[{"x_", ",", "n_", ",", "sum_"}], "}"}], ",", "z_"}], "]"}], ":=",
"\[IndentingNewLine]",
RowBox[{"{",
RowBox[{
FractionBox[
RowBox[{"sum", "+", "z"}],
RowBox[{"n", "+", "1"}]], ",",
RowBox[{"n", "+", "1"}], ",",
RowBox[{"sum", "+", "z"}]}], "}"}]}], ";"}], "\[IndentingNewLine]",
RowBox[{"Fold", "[",
RowBox[{"cume", ",",
RowBox[{"{",
RowBox[{"0", ",", "0", ",", "0"}], "}"}], ",", "zs"}], "]"}]}], "Input",
CellChangeTimes->{{3.670362262676239*^9, 3.670362403112179*^9}, {
3.670362491967467*^9, 3.670362500108472*^9}, {3.670382335403171*^9,
3.670382392568015*^9}, {3.67043165037262*^9, 3.670431652756393*^9},
3.671494635109106*^9},
CellLabel->"In[8]:=",ExpressionUUID->"d347849b-80e4-4d80-8107-7605d03bf929"],
Cell[BoxData[
RowBox[{"{",
RowBox[{
RowBox[{"-", "0.27947242`"}], ",", "10", ",",
RowBox[{"-", "2.7947242`"}]}], "}"}]], "Output",
CellChangeTimes->{
3.670431662415084*^9, 3.670434305074437*^9, 3.67051082886255*^9,
3.670511022041464*^9, 3.6705156383889513`*^9, 3.670532554456192*^9,
3.6705336411739407`*^9, 3.670534990271755*^9, 3.67054524174933*^9,
3.670568332227562*^9, 3.670603483892761*^9, 3.6707755092871304`*^9,
3.670864839781107*^9, 3.670872521194315*^9, 3.670956957925531*^9,
3.670974672156477*^9, 3.670979363952009*^9, 3.671033133989717*^9,
3.671033181144979*^9, 3.671033258849012*^9, 3.671039609961514*^9,
3.671042461126316*^9, 3.671044042496672*^9, 3.671065160943606*^9,
3.671083427288986*^9, 3.67120853876979*^9, 3.671213360901175*^9,
3.67121764642141*^9, 3.6712183115910378`*^9, 3.671380182692813*^9,
3.671467523179121*^9, 3.671494637345128*^9, 3.671551662879143*^9,
3.671563250369149*^9, 3.671587605369925*^9, 3.671654764499135*^9,
3.671663238288975*^9, 3.6716657335690727`*^9, 3.6716664416776114`*^9,
3.671887645883757*^9, 3.671939612591919*^9, 3.671974959482016*^9,
3.67215491703415*^9, 3.67222181095736*^9, 3.672306126267756*^9,
3.672308486865193*^9, 3.672311740548202*^9, 3.672311893450614*^9,
3.672476728374115*^9, 3.672833720334415*^9, 3.67291158160657*^9,
3.673548773086753*^9, 3.6764784946474667`*^9, 3.7031919932011847`*^9,
3.703238562244113*^9, 3.7032387454674277`*^9, 3.703247642390749*^9,
3.703626685283337*^9, 3.706391595494244*^9, 3.7628571431551175`*^9,
3.763110947655964*^9, 3.763122804772448*^9, 3.924423111748683*^9, {
3.92446877180058*^9, 3.924468789995075*^9}, 3.924471375831674*^9,
3.9245057811262417`*^9, 3.924505976644505*^9, 3.924506614162052*^9},
CellLabel->"Out[10]=",ExpressionUUID->"a93caede-585f-4963-a091-9d7d86eb2edd"]
}, Open ]],
Cell[TextData[{
"Check against ",
StyleBox["Mathematica",
FontSlant->"Italic"],
" built-in."
}], "Text",
CellChangeTimes->{{3.670431675634911*^9,
3.670431683354504*^9}},ExpressionUUID->"68ed2278-ce54-4449-916c-\
7228ebecc711"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"Mean", "[", "zs", "]"}]], "Input",
CellChangeTimes->{{3.67038269040097*^9, 3.67038269418116*^9}},
CellLabel->"In[11]:=",ExpressionUUID->"4f6889ba-e985-4f05-9d17-8e395df44066"],
Cell[BoxData[
RowBox[{"-", "0.27947242`"}]], "Output",
CellChangeTimes->{
3.670382694530546*^9, 3.670431671612389*^9, 3.670434305123046*^9,
3.670510828913335*^9, 3.6705110220913897`*^9, 3.670515638438052*^9,
3.670532554523333*^9, 3.670533641228739*^9, 3.6705349903372498`*^9,
3.6705452418120737`*^9, 3.6705683322778187`*^9, 3.670603491757264*^9,
3.670775509340996*^9, 3.670864839872327*^9, 3.6708725212419643`*^9,
3.670956957976015*^9, 3.670974672207356*^9, 3.670979364000894*^9,
3.6710331340393667`*^9, 3.671033181194551*^9, 3.671033258939073*^9,
3.671039610024391*^9, 3.6710424611766167`*^9, 3.671044042556524*^9,
3.6710651609924498`*^9, 3.671083427371612*^9, 3.6712085388181067`*^9,
3.671213360947366*^9, 3.6712176464875193`*^9, 3.671218311640046*^9,
3.671380182743807*^9, 3.671467523242084*^9, 3.671494642744568*^9,
3.671551662928087*^9, 3.671563250449213*^9, 3.671587605418898*^9,
3.671654764546013*^9, 3.671663238338449*^9, 3.671665733618338*^9,
3.671666441725504*^9, 3.671887645932771*^9, 3.6719396126595182`*^9,
3.671974959530513*^9, 3.672154917084886*^9, 3.672221811006852*^9,
3.672306126318935*^9, 3.672308486914485*^9, 3.672311740597318*^9,
3.672311893509335*^9, 3.672476728440216*^9, 3.67283372037747*^9,
3.6729115816559*^9, 3.673548773148225*^9, 3.676478494696026*^9,
3.703238608087017*^9, 3.703238745517593*^9, 3.703247642481237*^9,
3.7036266853331428`*^9, 3.706391601552067*^9, 3.76311094942712*^9,
3.763122806138283*^9, 3.9244231146740627`*^9, {3.924468771814051*^9,
3.924468789998789*^9}, 3.924471375838191*^9, 3.9245057811326118`*^9,
3.924505976647989*^9, 3.924506614164833*^9},
CellLabel->"Out[11]=",ExpressionUUID->"f450f52e-4472-4b6a-b3d8-738039e94908"]
}, Open ]],
Cell["\<\
Notice how the mean stabilizes as data accumulate, here over a longer and \
random sample:\
\>", "Text",
CellChangeTimes->{{3.762857156081581*^9, 3.762857170812067*^9}, {
3.762857401452814*^9, 3.762857418179927*^9}, {3.924423204604253*^9,
3.924423209718257*^9}, {3.924468513138187*^9,
3.9244685145195*^9}},ExpressionUUID->"8ffb72d3-dbb2-4eb0-bb55-5e97fa788022"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"ListLinePlot", "[",
RowBox[{
RowBox[{
RowBox[{"#", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}],
"&"}], "/@",
RowBox[{"FoldList", "[",
RowBox[{"cume", ",",
RowBox[{"{",
RowBox[{"0", ",", "0", ",", "0"}], "}"}], ",",
RowBox[{"RandomVariate", "[",
RowBox[{
RowBox[{"NormalDistribution", "[", "]"}], ",", "10000"}], "]"}]}],
"]"}]}], "]"}]], "Input",
CellChangeTimes->{{3.762857172632971*^9, 3.762857215053729*^9}, {
3.762857258492292*^9, 3.76285725938229*^9}, {3.7628573040402527`*^9,
3.7628573914448557`*^9}, 3.7628574218163824`*^9, {3.924423084640047*^9,
3.924423121730132*^9}},
CellLabel->"In[12]:=",ExpressionUUID->"c0bbb199-ec16-4eb8-a32e-7a3604937ac4"],
Cell[BoxData[
GraphicsBox[{{}, {{}, {},
TagBox[
{RGBColor[0.368417, 0.506779, 0.709798], PointSize[
NCache[
Rational[1, 180], 0.005555555555555556]], AbsoluteThickness[2],
StyleBox[{
LineBox[{{1., 0.}, {1.014520858478094, 0.024495187660382146`}}],
LineBox[{{15.110163378380461`, -0.01641161101997564}, {
16., -0.0029843018755220385`}, {16.780382639705667`,
0.024495187660382146`}}],
LineBox[{{19.968289281993815`, 0.024495187660382146`}, {20.,
0.021564409640505582`}, {20.1648762403342, 0.024495187660382146`}}],
LineBox[{{21.358721085620544`, 0.024495187660382146`}, {
22., -0.0020426629437883086`}, {23., 0.0198429236295616}, {
23.79266950827018, -0.01641161101997564}}],
LineBox[{{25.52472590355486, 0.024495187660382146`}, {26.,
0.0014803513920023637`}, {27., 0.008275728056574247}, {28.,
0.016838947691791274`}, {28.13875306921605, 0.024495187660382146`}}],
LineBox[{{30.950586718446914`, 0.024495187660382146`}, {31.,
0.02254596762978318}, {32., -0.0012550464301356885`}, {
32.70095329971691, 0.024495187660382146`}}],
LineBox[{{34.673635831807246`, 0.024495187660382146`}, {35.,
0.00956842577803914}, {35.55841385068202, -0.01641161101997564}}],
LineBox[{{47.54813185407351, -0.01641161101997564}, {48.,
0.005400314120802287}, {48.57508488733256, -0.01641161101997564}}],
LineBox[{{49.42267184295004, -0.01641161101997564}, {50.,
0.005601612472996889}, {51., 0.0007784611941787511}, {52.,
0.00548863329500185}, {53., 0.009553344927774708}, {
53.9765548666106, -0.01641161101997564}}],
LineBox[{{54.02542011702231, -0.01641161101997564}, {55.,
0.007487599040239765}, {56., 0.013479117775701792`}, {
56.764069788926015`, 0.024495187660382146`}}],
LineBox[{{61.21573109248921, 0.024495187660382146`}, {62.,
0.005760966374328492}, {63., 0.019970106912478112`}, {64.,
0.0022692154649319412`}, {65., -0.003039567931806891}, {
66., -0.01519693103943239}, {67., -0.004611633866058191}, {
67.51596670854234, -0.01641161101997564}}],
LineBox[{{84.00299972033167, -0.01641161101997564}, {85.,
0.0071204787532308704`}, {86., 0.010126571685312483`}, {87.,
0.014786305907420182`}, {88., 0.000373110257633233}, {
89., -0.0009047917572636881}, {90., -0.00868582544556653}, {91.,
0.001998186682500733}, {92., 0.02019403541090505}, {93.,
0.012830393472714153`}, {94., -0.006254909281102361}, {95.,
0.008601500152884531}, {96., 0.022664346428030866`}, {
96.09356359567265, 0.024495187660382146`}}],
LineBox[{{515.6882765613503, 0.024495187660382146`}, {516.,
0.023676151600687863`}, {516.3668569939858, 0.024495187660382146`}}],
LineBox[{{519.8536070726684, 0.024495187660382146`}, {520.,
0.023928530033706104`}, {520.4450834619917, 0.024495187660382146`}}],
LineBox[{{536.6451189500207, 0.024495187660382146`}, {537.,
0.023700559493736274`}, {537.1781403555344, 0.024495187660382146`}}],
LineBox[{{1057.5830668257668`, 0.024495187660382146`}, {1058.,
0.02410939492212678}, {1059., 0.02426152183786589}, {1060.,
0.024237781966276458`}, {1061., 0.02319359004576142}, {1062.,
0.022859354588217938`}, {1063., 0.023444345969173778`}, {1064.,
0.02448860698689813}, {1064.0031990266868`, 0.024495187660382146`}}],
LineBox[CompressedData["
1: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
sjeJi0xdcZ2FmPZHXC5El0+bHursQ/nPxekPKx+91plM+c/F/HkbL+ye7zT1
fyzl4tkrDb/DP4mVXFzrJ8wYkzVVzZlcuFauXJtUukjN2Vx0Tnv8990bWzXn
cKGbUCgTqSaqOZeLE63FujrrZ6k5n4uaZ6Fc5a5Vai7gYrBV1dBSn/lqLuJi
nXnDrPDh0yj/mfidqe+dtmQm5T8XfyYOdgo9DXX5Mi5ePTDcPDWmn5rLuRg9
7FCPAeGmlP9M/3pst45PHEr5z8Vq/6Q3ocakv5aLc2PMyw3G0f70JRctU+d8
y/pF9tRxcf3Jhc63Qmm/Ws+F1fwT/w4dmqvmBi48shtPaq7xUnMjF5L1yx9t
VdlT/nNx9tpSfsxGa7W8jYteZcbfpo585/g/bufiv+Ntwdf6eVH+p6Lv0Son
LQ0/yv9UdPYeE3PoAbFOKsLPPeAPnk/xqJeKCK0DI6O3Un4YpOLreoO3yiDa
rxqm4sfdSWmR+jRf90uF06qeYwcupPXKKBUfDc99eMEjNklF+4NCT2E5xadZ
Kg4svmw7Wo/i2SIVdoeVC1depv21VSqWTKjc67SB4tE6FSuXRecui6V8sElF
j7kmoqCtyyn/UzF6S+JeDz7lq0MqzgYJmreG0fMMUmE/c3l1nAf5wykVOrPz
HoaC8tc5FfcfzNqztMNUyv9U6Jsfj+8VNJbyPxWHG33EvSJGU/6n4r8Ty8v6
jKB8WJSKFv6LO7+tF1D+p+J9a9cvUWe9Kf9T4Sx78vLkOLLPPxV3nL6dOlNB
/ghIhYtHxQEvT5qfglIhNuqdXaGi/A5OhTnHzWuc4VrK/1Rcr95uecCX8jMs
FaGxZ5fvX2mpjoeIVHjs392p6zN6fopKhefKWXmf5/uqOSYVt8Yf/zH7J+VL
fCpSXq3ZYCtYqebEVBwpHp6X/G6pmpNSMf/B35FhfGJuKuYuHjh9ny09X/JS
cazXKMfRwzeoWZSKToH/eYj/rqf8T0XwvsgK9yv0/KpMxbRjVgdsZmym/Gfi
6+BWg1MhJM9ORe/lh6KcehHnpGKb4bj3plvo+To3FTtstEMuLttO+Z+KhKMf
Knvb76L8T4XpDWfTp6Pp+booFRaj5xdPf07P4yWpMNnhtq3pyQ41lzL5UXV9
78SvVL6MideunTo8OEjtl6fi1bp705wDN6q5MhWLtSYJxcsC1VyVimHb33PH
6GxSc20q0iVtI2vM11H+pzLPdx+96paTf+pScfWa7oycM+S/esYf2tOlpyvW
UP6n4sLvrLHbO9F4Naai16zi71t70Pg0p+LfqzHRX+5S+bZUrBBnHfa5TuPd
norzv6fe3nnVU80aaShfeMg1qN9iNWul4YNbkAQDqL5OGn52nmhoWUr19dLQ
0mmAsdyA4sMgDROmm5206rxCzYZpGFeptLU4Rfb3S8P9EScnudqQPqM07Pvx
wt7akfprkgbudpvZW7W2qtksDe+WLP3uJ6PxtEhDq97dx6NWkP+t0hBzxSW+
+QGNr3UaTNb+y/u5hMbXJg3rt2zemlxIbJeGMdk8z/exNJ4OaajMnHzi7TNi
pGHF1EcLvX7QeY5TGjJ9QgpGGoar2TkNmsalVpEWFB+uaXB/x337iUvlPdNw
edeUMLv1VN47DUXyNTFD6+m8aFEajhdZlZfKd6vZNw1G5xV9nWMj1OyXhti/
0Q67v0Wp2T8NQQE9plcHEAekofRzyZbFS4mD0pB9+syuBSZ0vhichnklw4bs
jKXzrhCm/bGjRyd9oPOssDR0Mh3x4ZQvySPSsCrS+2jxIzrPjEpD58KXBaqR
JI9Jw4Ok05Vh70genwb+bkmPmb2ovcQ0aC+LzpxcR5yUhvSNEw/+fkv1uWkw
3dTfViGm8zVeGjTc7O4d/EjnjaI0LJYsWGQ2hs7jpGnopX8XR2tInzIN0V2j
eOVnqHxmGqIkFl1tr9N5X3YaZju1fHsZR+eBOWlIqG/y57HnkblpiEza0V2L
T/L8NBzu3GGdjEP6Cph461V2rucA4qI0cDZ4DZL8I/0laQg2Wl3YaSjpK2Xy
o9/5xgRj4rI0NFrye/eQEpenQX5F/+VABZ1fVjL6KoMknYbS+XRVGuZoLV13
WYO4Ng33WlaEh3PpfPNlGr5ZRA9sn0L169JgfLfF0nM2cX0a3k8p2zapnOo3
pGG1gzV3y2Q6D29Mw0KPb42BX6l8cxrmLz05qv8bkrelYfJ5jy3BeiRvT8PD
5Xs/mR4i1kiH5X/njA+PJ3u00nGz09Pi9QvIfzrpiL57RqsqgFgvHdvyfu14
yfrXIB1dL25xzUslfxqmQzbrRvukZhrPfulYOV3a79QkikejdCQdsfUe25fY
JB28sKZBz89SPpilY8xlj9ZfXSjeLdKRMfWT9VEQW6WjrPS4xSUVnc9ap+OP
1fCAf0MjKf/T8Sxm+/drv9n8T8cjP79sPwPS75COcx4RrrO2EyMd/NM7ry96
R+yUjv3D7aRXe1J7zuk4kTzh68wdZK9rOpb83HpPcYrywzMda/1Ov+3cgfrr
nQ7//bV3PpZR/C9Kx8igOjwuoXj3TYfGkdqBOxvY8/90WGfJ3m1pJvZn7Bsx
75bKgPIpIB2dRuUfuWFN8qB07HwfeT54PsmD01E074G+aRXZE5KO+dlNZy1O
sfmfjsf9ijY15rL5z/TH50OEOzu/RDH+7XS9XnM91Y9Jx4LEq98e8ql+fDqk
j/ue+8Kj+onpmGH8uV/6A5InpaOh4ovOdynV56aj/coznegzVJ7H+HP0GHm5
PpUXpQOBu3w7TiSWpoN7bHQHVz6NpzIdtg6y45b9SF9mOt48DbUUhxBnp2NC
6X+fYh+S/hzGXkf7tkdO5N9cZjwFN3ka02g88tPRueLTCX8Z1S9Ih1eoY7fo
eGq/KB3vn09btsaD/FGSjuMXCl1ty4hL06E74auvfDfZV5aOsbqDdLrHUf1y
Jh5nbY0SPyKuZPInz2eLSS61V5WOS3vnnu2yhOytTUfW0HerZvUh+16m47qb
oYXLCxrfunRcXTTpWLf+xPVM/W+9O2lXETekQ7Npg1FwO3FjOgrXOvYuqqf+
N6fjJ+e7t5Ep6W9Lxx7JQCeDWuL2dFQ1v/njsZTqa/CQdSH8UFYcybV4iIng
jFdqklyHh8xrS150iCPW40FhGJZ5tIbaM+AhYu2VsnN3aP405OGMbYpZShbN
B/14aHqyJPCVH8mNeNhj99bixjOSm/Bwe8ivnuvZ91NmPBzr8IIbtofYgoeN
f+wflO4mtuKh4Hfqsv0daP615qElvPjTnN3s+z8eSvMd9N07Edvx4NFzodlk
tn0HHqZc4mQNOUZy8KA7aLLd5SBiJx6erN0bvWUP6XfmQXpTmLrdheZfVx6e
8fuMbl5M86cnDz/mKrpdKif25mHwgJmRO+2o/CLG/hjdmd0aiX152H04tZPt
THr/5ceD2brbnSduJPbn4byzW7t8Br0PDeCh5GH8yGujiIN4kOm0Dun8jTiY
GZ/d2zjm34lDeLj6fLxtaDq9Dw7jocdrzUVpA+l9cgQPSTaC0vsLiaOY8ejQ
UZylSRzDQ5fm/uP3su+f43lo7jb86EcQJzL1Q0MGW9wn/Uk8VC99fE7zOzGX
h+ykgsVLXxHzeKjMD/CaoEH1RYy/+q4qWzeD5FKmvZ09/w7hkv1Kxt5DX953
cCJ5Jg+BsWPPypqIs3lwuWk9udKY3pfn8DAp8+OZ6lTiXB4szQfNmDqDOJ+H
MYOSuhgPofftBTycNPXJmahB7+OLeBgq0AmYWELyEh42XfggcV5GXMpDQuml
jc2exGU8eH0fcrZjJ9JfzoPxzzsr/R2IK3nI2WsctsGQuIqHEZW97ri6Edfy
YFva5r9kMvFLHp7nPnwZ8Yh9/8/DhNyHHJcv1F49D6ah32f3Ye1tYOKz7veE
ce1UvpHJV+17N/ZpEzcz9i3RlHS8T/5uY+Lfw2OlTTxxOw9C04CVR4TEGny8
cqt8WDmW6mvxcbiXMq5NSnIdPqa7Rz888JxYj4+/Di6WnA7EBnzYLKs5d7aZ
2JCP+3X9xw/KJu7HR331EV1NR2IjPtrObIjb1kzjacLHoXWT7/ZcR3IzPnQi
/143G0BswYddM+fJtXBiKz6mHFVuWDaE7LXmY/jYTnbf0slfNnx8tZPcqdlD
bMeHaZYyKeUMlXfgI7ZuqVa9FzH4mL9ggqNPM7ETHz/2CS+ELaf6znzY+7/v
c2Q3sSvTfnhjYoMNjYcnHxuVFsdWR5Pcm4/eD+8Pvc62v4iPwc7Fw6ISiH35
uKxMGXxkJbXnx4deR17Ha3uJ/flI5ny9/+E5cQAfJhM3t37xJQ7iY1bC0fQL
J4iD+dB6NuvfgsvEIXyE/pcyqjSX/BXGR87B94VvLcjfEXw8/Nayxbqc5pso
Rl5Zb29mQvkXw0dScXbfPkOI4/no6O1uf2w5lU/kw3v427QVPUiexIdEf7CH
63qSc/lYfHHu5Tv/SM7jY1pj3RezbyQX8aH7yDWnfCr7/p+PndDu2y+Cff/P
R02tyX/3v7Pv/xn/dAo/IPYgeTYfBTW8o/uFJM/h49Mz+dyHj9n9P9Of/YZi
143E+XwY9ryqcXIXze8FfGy4NP7N/AxaD4r4cBs6/kDvdCpfwsdH+RplmBO7
/+cj31T3aFoou//nQ7wJqycISV85HxM3lk7r14PklXyMnubYYx37fFHFR5qn
wurKf9ReLR9Hp2wd4atL5V/ycXDLkSmdphLX8eE+f9PIwBWkv54PV2/+gK7s
7zka+Ngd7pN9w4r0NTLxdTY6a/pt4mY+rCfah7lnUPk2PiZ1CpRqmpO/2vn4
vvRM5bK7pF9DgDXzB1q3R1B5LQGsQztXWfcl1hEgqn0mJ+sIsZ4AnRfdLbo8
gNhAgA3vdHc/DGP3/wIYW+1NGKBN8n4CPDUx+3foLrGRANM9buZOW0BsIkDF
dI/rw/PY9V8AZcemqJoF7PovwN2M2wuE+9j1X4AeL4vsS1+w678ARotbPuml
EtsIsCBu19HMErLHTgDe2f/elQ6h/joIsG++4n3hCCoPAQq9UwR9Y4mdBAi5
oKeoN2LXfwEKHvb8PVmD2FWAoJzcV1P7kz2eAszsHnlz91faD3kz9kY/DP+0
m93/C/BrYw8lNrC//xFg6OvdTQVlVN5PgEpe9eqGYLLXX4BhoucD1+eTPECA
Gyc2dCvOpf1ZkAAPd8wYmPSGff4XYNCdgQGWg9jnfwFsh4j+3thGHCZASsE1
UQprX4QAgzM/1u65TxwlQHr/Yy06LsQxAnTIP3tgfQ3ZGy/Am3dPrO6wz+uJ
Ahg+rRjwy5bsTRIg7+yG2K5SYq4AbSVbhBvmkX94AowsfXPqE49YJEDrwrXe
YSfJn1IBzmqemN6J/T2PkomnO5yRor/EmQKEuk1qnN2Pff4X4M5R1bHZ5lQ/
R4B3r75G72DjI5epX94w7jPr73xmPG/pig9fJC5g/DO7zxuPKPb5n2mf7/z8
4HaKjxIB9o77mlBRyOa/AK95963KTNj8F2Blh7tHzm9g81+AgDqjEsEGNv8F
yKrK6yRYTPZUCWBg1T5jayO1V8vEX8GiE9d7k/wlMz4r9g2KHcjmPxMPe5eU
dmfzvV6Aub1rPp1+T/nbwIz36bq9bzVpPmwUgL89Zc4WZ7KnWQDPCpvRt1h5
mwBjx8+3rwbtP9sZe9ruxj5qJX0aQvj5a3c/05V9/heipGVFrn4C+/wvRLHm
6BCzm+zzvxDczRWTPFZQeQMhIt8kiRc8JzYUwvHmHTOtEGq/nxAueSE9w9j5
zUiIM9oTZg53Y/Of0Wfi19utjfxjJsSDOXt+HOeQPgum/QdFR9zLqbyVEGKf
pdqvWf9YCzG3rrb17QUqbyNE+IWbmb/uU/t2Qhzr9mtxTTixgxDZPVZyxj6g
8xEIoTko7YdeBfnHSYjlex/WXowldhbin//R0FBLqu/K2DdQdHLIXKrvKcSe
W37HinZQeW/G3lGcrB1zqfwiITLDdm8ZNYLYV4iRfzZsuMX620+IblPnPfe9
S3J/ISofr0P33aQ/QIi2eoc/CzVJf5AQubwxbpnfiIOFkE3oZhB6mzhEiOYx
4ZMitIjDhMho9ujrqE/6I4ToO95v6Y57NJ5RQnjuSnUZuJY4Roh5t5YePHCd
7IsX4vt/78uMV7G//xNiWEmTU44xcZIQjd/fvq5i/cMVYutajeVmjaSPx4z/
9YFKoZjGSyRE9YXk9obubP4LMamzb/Osa1ReKcTvMK8GiyjSlymEf7vugiM6
7PovxGeDbOvP49j1X4iEXhlmzJaM8l+IWT6Wsz8VU//zhVh/MfJghwO03ygQ
ovvV7GHKVvJvkRB/loSMN84iLhHi3k7uspcRVL9UiJpzZisDWsm+MiHc4/+a
czls/guxbW2pgeUfsqdSiJiDXV9dnEH2VDHlvcQ+7h1JXiuEUeKPPWP+I/lL
ISL2C8N+zSR9dUKc/12rc8WDXf+FcJsQuuvUU+IGpj8p/hNC55O+RiGCev1q
dwVxsxD23Z/sHXqVyrcJ8df016vns4nbhRjTZd+Yq3PY/Bfh2urCG5mOZI+W
CK7r/5V81CR/6IiQ/fxJXwN3kuuJ0BjZu33+Azb/RShsVvCfJZPcUIQaj9JD
Gy9Q/X4iuMneZN/RIjYS4WHxWO/y2cQmInB3WbrqG5G/zUT4ei5m89IhxBYi
BO68t054j9hKhF3t1wf0Xsz+/leEi6tKbnkOZfNfhNIffTtPX83mvwhzTN/e
CvxGcgcR4u0WDa/aSgwR5vV9saHsKPv8z7Sv/evRSfY8wVkERdGa1o+/2PVf
hBeCW1NX7iL2FOFA4IKSO/E0n3uLEOE5o9J+Pa2Xi0RY1L01mS9g138RfMr0
jUbUseu/CPz8Uw87s+uxvwhD+r7T5KSzv/8V4fdBs55NNuz5nwjR4yo6tN8k
Dhah9nLLxEffqX6ICN3CL5d+9iV7wkRwcs23fFhJ82uECMbVVd66O0keJcL5
0HG6N6cTx4hgdPHCip1nieNF8NPpWy7MIn8kivDvrbxl7jziJMZ/G64lNrDr
J1cE3eT49g/L2fxn7Ll1ZlPBazb/Rfg449GqZH2SS0XYkT9o2IVLJFeKcNv3
4Od3xiTPFGEx527Hva7s+i/CWq7uDnkl+/tfEeImxkw5PoVd/0XIz73Va0sO
e/4vwsulzT7xMyheCpj2vJx3RnZk85/x56aJe5+uofmhRIROi5RfzfsRl4rQ
fenHZ9a7iMtEOOIhrW1dQs835SIcHZmdkK4geaUIYQOcY47FE1eJsP9PbJsl
+zxVK4LBk4XPTgmJX4qgvUz+LSyVuE4Eqe77cjMpcb0IpkWL5igXEzcw9mlO
F1VsIG4UoX3BKJdRVcTNIqRcdSrALvb3/yJMyXuls2cvcbsIA45Ivw94wv7+
X4zsx+EO7deItcTIM9MIn+rO/v5fjB6DeXFD15C/9MRYkNs0QZf9fbeBGPMe
9ztuHc/mvxjeOz6Zv25gf/8vxqTgJ98cfpDcSAzZbJ2tO/tT/pmI8cAr6FIl
m19mYujrmZzV70njZyFGk8nTke7TqLyVGHM6/fKI9yK2FuOw/XPBiF7s/l+M
V1cC8v5cYM//xJj6MNL/3CV2/y+G9bRkk1lP2fwXQ7dclhyRSewkhvuTGcNM
vxA7izEqLaCtjH1/4sr075LmsSfdSe4pxi+V8UXzSdS+txgv4us3v42h9haJ
caxxWMVWMbGvGKfzOF63r7DrP2PP0er9jcPY9V8M7tpIja+5JA8Q49TQo6e/
XST9QYx9fU9M+nyQ/f2/GC0xIwfXjyJ5iBjF/k1z3rDvy8LESLRdNSDkDskj
GObbDLRnz0ejxMhYuv+LXw77+38xSnvnr7pfQxwvxut8p8FyO3b9F8MualXC
tQx2/RfDbG437dGebP6Lcda+Qb6T3d/zxNCONynruJHd/4vxaZunkd8Zdv1n
mPPrjoc26VMy/uLzvrm8YZ//xbhYMvWwbAC7/ovh1fRmw75Udv0XQzjxk/02
c4rPXDFG6Lb3kGxg138xntjPLTtSQfULGP93v+JYUEL1i5h4WrYx8d824hIx
3vf5smg1u18sFcPWtSGd30ZcJsaMzCfjz6dQe+VixHTdfFfZn33/J8bcT6fu
R7D7lyoxLtu+dD0Twa7/Yuj14vV+VM++/xPjqbVpVtQUsrdOjPqqiaVno2n+
qBdj149VJhYr2fwX4+drt6pT09n8F6Pg0K1rkcVs/jP+qE5/p7Kn8542MWpz
C/9Zb2PzX4yoZ4nrCmez+Z+BP/+uRcj3sfmfgdMLw6pGzGTzPwO5ERonNdjz
WT2m/KQ/J67XsN//ZODXXu1PN0KpPcMMaIzw2WH5kOT9MrC7WH7IppXYKAO2
nv5i/a/s9z8ZGJ8vDy3RpvpmGUhy67W0RUpskYFp9sGBXXnEVhng3Wj13vKG
6ltn4OM0rW6nM8lfNhlQHFxydngMsV0GBi48bGDzh8bLIQOCDUNLpmlQfWSg
dl/cvYAbxE4ZuKQz/vYaK2LnDGzLmXZA3oXqu2agMDuvwSqK3f9nQLPydePM
Enb/n4EBRTNPDA1jz/8z4DrFMSY0mT3/z0BT0qYHxbrEfhlYsWvb+Ej2vMs/
A6Mvex3s+5DiJyAD4rEThAuvsfv/DKy7eqR9WhC1H5yBgBv8KRZ6xCEZ6JXw
aMfqPtT/sAxEj/p8y/MAySMysN+zqIP9W9IXxfjLbK3PgzPUXkwGduhw1yov
svv/DORJfu16yc5fiRlwuBVh/+Mjm/8Z2BKxf8hHHdLHzcAh/ovga/XEvAw8
acn9ONqI2hdloMeJlxsvLyW5NAMd2vWWJFiSXJmBvlFLh9okEGdm4FXy1RVx
bL5lZ+DLLf+nLlo0PjkZaO0hil3sRpybgZdNQ/S2sPmQn4FH20cGhk6l+CnI
wPLOvx2zehIXZeB2r/TLK05R+ZIMnMwbPWFRTzo/Lc1Aw1Tjmie2xGVMPK/4
FtfRnbg8A+2+Bm5tj0hfZQYCZ/r7PD1MXMX469e6p+OmENdmYMkkM85bJfHL
DJgl7nNYspS4LgOqApmolY3/+gwcHFb2vPgYtdeQgbRzQ3uO6cye/2cgTmxm
FudG8uYM8M0zN5k/YM//M6AbeOv+8dvs+X8GCnbY6HnVk34NCfqaT71zejPJ
tSQYMH5Kp5Ve7Pm/BB2by8ZMf0bl9SS4df+I5G8NsYEEJWcmTo3pzOa/BNuS
hr5Q/GTzX4LYB0/mPWW/FzSSwMkp6NkyAZv/EnQ6+FKn7xuKVzMJeC4bTJrG
kdxCgpf3s2Qdb5LcSoLe6PB96QRiawk266XMrl5H5W0Y3nS/IriZ2E6C3JQl
WYV9iB0kMI0Nn/nqMdWHBGLfpLmcGcROEnRfVGmyui+b/xIEz/bbuMKf5K4S
TByU+9P8NZv/EgRoDHP6YEjlvSUob9jSfyF7Xr5Igguvj18/fJTK+0rwo8kj
u1iLff8nwen8nLjGIyT3l0DvjV65CysPkKAff/XCCxfZ/JfAR+PZqBnRbP5L
cGhtqGt3L/b9nwThxxNHdjvG5r8EXVdmX3QxI3mEBFuioo3aXdjzfwkmmIYo
ZDdJX4wE2mfKa/NiSR4vgZfzN9cu7PlGogTVc5tcJl+l+SJJAoeTq+Zb9GDz
X4IewRv2maSz+S/Bt8ETHHaNIRZJcCq+16s0dv6SStC0+cSAL8YkVzLxU955
4W/2PCRTAvOR1f+1nmTXfwnyLLt9Hsa+L8iRwGCOcNWJ1TQ/5UrwqzWvQ4sV
u/+XIK00d/hK9vyhQALjq4LO7ux+sEiC4udlZVnt7Pkfkw+d3r6+uIe4VIKV
dq12o///878EuwuP7C7uSfNfOROfPpn5vQ6yz/8SXH8a1PEwez5RJUGD6OAq
M/b3NLUSDDcd2bXiD3v+x8TXIjPnqc/p+axOgoM1s459ZZ9n6iXQ6fD+RjcP
9vxfgvsPt2QeFBI3ShA3p6Sy5hVxMxPfFgs7dM9iz/8liKjOPpVbR9wuwTMx
L61+CLGGFKENHSaOcibuKIWl3tAzi9j9q5YU5w5mP6m6TKwtxdLwrMDxTdQ/
HSn0b22XFy2n8dCV4tLvjLmD2e839aSYi8Cj+jOJ9aV4d8CzLoTd3xlI4ef8
30W3MOKeUrzQGnPTtw97niiFavv+jp2fEPeRwuvvyqhO0ez5ohT91k7JHp1H
8gFSbJuyyzif/f2UkRS79J0nnWaf7wdLMWRi3tnQdez5oxQ3li/eNvIB+dtU
yjwvnh78agf7PCIFf0fc4qU7qP4wKQblroxNYJ//LaR4YO7444aM5JZSrPGq
njtoEHteKUVxds3h3cEkHy3FRWvbI6VOxNZSTBZfD26ppfEfJ4WzQ+mZg3PJ
HhspqqQ17k84xLZS+GrVZ1sH0vO+nRTWutMdbMOJJzH2Wfz4tbqG9DlI8ZOj
3/PtDWJHKXhP/5Zbs/2HFGuPVEcdEBBPl2Kn4QPLBG/2fQjT/tmEn304xLOk
eOTb9/HKoez5iBQJm3ZK5yeR3EWKSWUXr799SPa6SvFvgtzsgS3J3aXM8/GO
xrb3ZI+nFLe0Pyzfu5Ds95JiqiQx+vJgkntL0ffY6NnO/xH7SDH2yYio4hPs
+YoUKyJHHjAII14iRZRmTwPjrlTelxmPFZrNsxaSPculmP/PYrWVmOR+UlTE
DC86upd4lRTJ4TbdDltTeX8pzl8QBywfT7xWinHRv8bc1aT+B0hh3vT6i3kx
9S+Q6W+XLvae1iQPkqLPeEmCsIbic5MUweWmdbFWxMFSjLjYoduxw1R+qxRF
3/QlNez5XYgUeSZvzSpWEW+X4nr/yLEb7rPPd0x+Jh5pq3tD7e+SoiHPN3Ki
A/u8J8XiO2k6G2KpfKQUQ3MzUhO12PMfKTqM6lRxuj+Vj5aiyaFA791y9nlQ
Cvf8wtp5h4jjmP4najVdyGbPh6TM89CfvbNCyH8HpNi8t+K5yXniRCb+kmMc
TzkTH2bsmc+98XgUjVeSFE7htxUei+k8iyPF4cnX5p/Mp/dbXCZfk/L9Th0m
eRoTb/lf/3s3i/19qRT3O+zIi3xK+gRSHHl0w232MGIR05/Ev4d/sd/3Z0jx
Sm/Pi8z+ZI9UCmw3zUsNIrlcCvm+mmOyeJIrpUjfOGBuXxXJj0ox+L359IC/
ZF+mFO2dZm7rm0Dv244z88XQVv2hRezv1aSw9Rp7zzeHfh92Soplczo/cAoh
zpFiTNCKk58ciM9Ksa+2m46bAf3+LJeJ54vXHAM2El+Q4vaRiJs9r9LvHfOl
CFcF9G6fQ3xJCtGtmW2Se/R74wImHlYc3rv+OskLmfhWqr4NLSZ5kRTPlxen
+I+j3y8XM/klzTg2ZQdxiRRGx/KndvtEfEOKxyGf/rw6S/VLmfF/smXugxWk
/7YUuZNPXgiJIHmZFF3HjRLkWVP9e1JwA49rpdrR76PLpfA8EPfp2Gr6vWaF
FIXulTODfOn31ZVS/NUZUqjdgco/luLkgrnP57L1q6SoEUTpbdej8tVSmEz8
uH3XOfp9dy0zv+suUB6YSL8Xfy7FwFLlhqxB7Pf3UpyN3W7mbk/8WoozVW+E
WsXEdVLst0nUiNEifsfY3/XE1cK99Pv/eqa/J7Vv/ouj369/lGK7/pKmhaeo
fAMTD3t7qQ7NIv4ixYTx2jsK91D5RiZ+Jm9SnR9J3w80SXGtl+J65Uf6fXwz
E+8i5+isQST/wdhzSyHqVk3yNikMM5Z1KztO/EuK2vKYLuag7wvamfW2V/nP
FSL6/uCvFJoZjfVrvOj7Cg0ZknzGRPutoe8VOspw5suwyy29qX9aMnT4erOX
1SlqX1uGK9OvSs40kT4dGcy9zHu830SsK4PjZMN+ujPIHj0Z8q+MsBrKtq8v
w86L7rURk6g9AxkyhakB8weQ/p4yhBzsO+PhQapvKMPZhJ29bdaSvI8M4VND
Zup/C6D1X4bv9YvSHZyJB8igl3grSN6X7kcwksGvy43xwaep/mAZTqn2uVlW
0fcnJjI8XjJRWPeE7DGVIVfw20+UTfclmMlwOrkxb/dq0j9MhvtXZ6+U29P3
DRYy8F5N+e9DIJW3lOH3Ou0dgZak30qGY0+7RdzZQ/pHy1AkfVs/lkPlrWVo
WbDwkOVO4nEyrPTe47adldvIsGBAkQ7c6fsJW6Z/+/pcv/VjNa3/MtSZfM1p
fkjjPUmGCYu6OR05Tv13kCHPzrj3vCJiRxlsD9zqvzKI/AsZ3s9a4+SdSOMz
nfHPr3tZgoXETjIM2uLqVahL/pvF6Bf3880LJXaWIV3rxvb/JBQvLjIsPdQS
Oz+W9Lv+33iGpNorid2Z9lv6PfOYSv7zlGHhoNtc95vkLy9GX6vjUS0hte/N
xNO/AWGn75F+HxnE04wbs+3o+5BFjP0LfpR+60q8hPHH5Q5fGmdSfV8Zjhwe
X/1vE8X7chkOPtj6M5jNNz8Znruv/+I/hniVDDebhJPGthH7y9BQ9O7z0P2k
b60MG4IdX0bPIH8GyKBhV3u9YxONV6AMlyzNDu/YQP0LkiH4X1vXPSNp/DbJ
8K7nNg9ZZ+pvsAxKky49rTSo/lYZRk5f1OfhMyofIkMngaiL7WIqv10GnaUn
uE/mEIfJUDz+w/q4fhRfu2QQQHTs7WmyN4IZP0eP/cEO1P9IGQKLPS5OSaX+
RTHjcyc2f1IwcbQMvWOnXAuaTf2LkWHVRR/b9ez4xcmw5ZrzmV8epD9ehtQt
RYibSuUPyFDLE4f9HUv9SZTBab74c6QD1T8sw7BhPRwk1ZRPSTJk/7P6+nsv
2c+RQXugctxrY4pnrgyFR329vHxo/NNk0BUq9f1G0HjzGPuW5Q+JMSQWyBBX
NbYwbx2VF8nwa0jRvYPjiTOYfLA90XlYMPlDKsP8Q+MORaVQfbkM0mKN2HAl
9U8pw0MHrvSqC/FRxr4zFzmH3pP9mTLMsPWLCayk8TguQ+OjkY6rfxBny3DI
rs8Vm/FU/xQTTw8fN5qw37PlMPF57duvH+nbaP1nxnPEXuP3Y4lzZfjapXvx
n+W0flxg5uuQyLkVo+h7qHxmvtr3c1P5GSp/SQarRXN4SxaQ/gLGfv/vF+zS
qf1Cxh/1J+3iK0heJMOJiff/29aRuFiG8e6+gZvf0niVMOM37UPWoM40vjeY
+UFz+MbEVpKXMuwT2XClgsbrNtOfTdZjhh2j+alMhm5lu0qyVBTP92Roq8z2
LWa/TyuX4Uaz9qZzrZQvFTIYDSm4VnSO4qFSBrf8ur49DlD5xzLExt31WvaT
/F8lQ805r7hdelS/WoYhocL0NieKv1oZFIKI9XbKZbT+y7BY9eiGyWs/Wv9l
8P7z4/ymJPqe7rUM1R9vN45aRVwnQ3LUiaRn0+j7xncyTOU9iIk6R/XrZfi7
e+KlLZr0PdxHGfh8bpejttT/Bhl+eNV8mi8k/iKDvFdt/N4PZG8jE99TckJ2
dKX6TTJExdQEXDxP5ZuZ+Mq6HNowmPgHM3+kzZUlzCBukyFLJpy39j7Z90uG
W/M3h1dPJX3tMry8nbqgvpHkf2UI+JfTv9SC5BpyvMj2H/PrIXFHOX7fFJ++
AvK3lhyPK5WCV7/o+z5tOQ59Ehz/VUTldeS4qckbsjWOWFeOzz2fmSc40vjo
yVFdPjRe8JLiQ1+OPZn/Ok8dTP03kCP4p07/7I/kz55ypB6wf/fmBn2PaCjH