aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Cunningham <cc@localhost>2022-01-05 14:01:29 -0800
committerChristian Cunningham <cc@localhost>2022-01-05 14:01:29 -0800
commit3a8ed19bf83f11ff00c4904fab2cc083b7e33478 (patch)
tree9d9a6f92f9d74001e969d23ea79ad26f6227fea2 /src
parentf3ea4cd0c22f351d8dfffb0e937194c4b526b665 (diff)
Cleaned up/ Standardized
Diffstat (limited to 'src')
-rw-r--r--src/boot.S6
-rw-r--r--src/cpu/atomic/swap.h1
-rw-r--r--src/cpu/irq.S82
-rw-r--r--src/cpu/irq.c4
-rw-r--r--src/drivers/uart.h5
-rw-r--r--src/graphics/lfb.c12
-rw-r--r--src/graphics/philosopher_toad.h764
-rw-r--r--src/lib/ll.c6
-rw-r--r--src/lib/ll.h8
-rw-r--r--src/lib/mem.c7
-rw-r--r--src/lib/q.c6
-rw-r--r--src/lib/q.h8
-rw-r--r--src/sys/core.c1
-rw-r--r--src/sys/core.h11
-rw-r--r--src/sys/kernel.S6
-rw-r--r--src/sys/kernel.h8
-rw-r--r--src/sys/timer.c2
-rw-r--r--src/util/status.c2
-rw-r--r--src/util/time.h3
19 files changed, 821 insertions, 121 deletions
diff --git a/src/boot.S b/src/boot.S
index 9128ba0..f21c4fe 100644
--- a/src/boot.S
+++ b/src/boot.S
@@ -59,12 +59,6 @@ irq:
pop {r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
subs pc, lr, #4
-fiq:
- push {r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
- bl a_fiq_handler
- pop {r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
- subs pc, lr, #4
-
.globl io_halt
io_halt:
wfi
diff --git a/src/cpu/atomic/swap.h b/src/cpu/atomic/swap.h
index 3584d4e..cbed62c 100644
--- a/src/cpu/atomic/swap.h
+++ b/src/cpu/atomic/swap.h
@@ -8,6 +8,7 @@
/// https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
/// https://developer.arm.com/documentation/dht0008/a/arm-synchronization-primitives/practical-uses/implementing-a-semaphore?lang=en
+// TODO: Once scheduling works, have a failed lock put thread in waiting state
static inline void atm_lock(unsigned long pid, unsigned long* addr)
{
unsigned long tmp, current_lock_value;
diff --git a/src/cpu/irq.S b/src/cpu/irq.S
deleted file mode 100644
index fbb6ab7..0000000
--- a/src/cpu/irq.S
+++ /dev/null
@@ -1,82 +0,0 @@
-a_irq_handler:
- push {lr}
- cpsid i // Disable IRQ
- // r2 = CORE0_INTERRUPT_SOURCE
- // if r2 & 0b100000000
- mov r2, #0x40000000
- ldr r3, [r2, #0x60]
- tst r3, #256
- beq a_irq_handler.timer
- // r2 = IRQ_PEND2
- // r2 & 1 << 25
- mov r2, #0xB208
- movt r2, #0x3F00
- ldr r3, [r2]
- tst r3, #0x2000000
- beq a_irq_handler.exit
- mov r2, #0x1040
- movt r2, #0x3F20
- ldr r3, [r2]
- tst r3, #16
- beq a_irq_handler.exit
- mov r2, #0x1000
- movt r2, #0x3F20
- ldrb r0, [r2]
- push {r0}
-
- // If 't' was pressed
- // disable timer
- cmp r0, #0x74
- bne a_irq_handler.ttimer
- mrc p15, #0, r0, c14, c3, #1
- cmp r0, #0
- beq a_irq_handler.etimer
- // Disable
- mov r0, #0
- mcr p15, 0, r0, c14, c3, 1
- b a_irq_handler.ttimer
-a_irq_handler.etimer:
- // Enable
- ldr r0, =cntfrq
- bl write_cntv_tval
- mov r0, #1
- mcr p15, 0, r0, c14, c3, 1
- // Otherwise continue
-a_irq_handler.ttimer:
- pop {r0}
- bl uart_char
- ldr r0, =imsg
- bl uart_string
- cpsie i // Enable IRQ
- pop {pc}
-a_irq_handler.timer:
-
- // r2 = CORE0_INTERRUPT_SOURCE
- // if r2 & 0b1000
- mov r2, #0x40000000
- ldr r3, [r2, #0x60]
- tst r3, #8
- beq a_irq_handler.exit
- bl c_timer
- //ldr r0, =imsg
- //bl uart_string
-a_irq_handler.exit:
- cpsie i // Enable IRQ
- pop {pc}
-
-.globl a_fiq_handler
-a_fiq_handler:
- push {lr}
- cpsie f // Disable FIQ
- bl c_timer
- ldr r0, =fmsg
- bl uart_string
-a_fiq_handler.exit:
- cpsie f // Enable FIQ
- pop {pc}
-
-.section ".data"
-imsg:
- .asciz " asm_irq_handler\n"
-fmsg:
- .asciz " asm_fiq_handler\n"
diff --git a/src/cpu/irq.c b/src/cpu/irq.c
index dbd4c10..4a96018 100644
--- a/src/cpu/irq.c
+++ b/src/cpu/irq.c
@@ -2,14 +2,12 @@
#include "../drivers/uart.h"
#include "../graphics/drawer.h"
#include "../sys/core.h"
+#include "../sys/kernel.h"
#include "../sys/timer.h"
#include "../util/mutex.h"
#include "../util/status.h"
#include "../util/time.h"
-extern unsigned long cmdidx;
-extern char cmd[2048];
-
void localtest(void);
void c_irq_handler(void)
diff --git a/src/drivers/uart.h b/src/drivers/uart.h
index 21e8795..b83732f 100644
--- a/src/drivers/uart.h
+++ b/src/drivers/uart.h
@@ -6,9 +6,10 @@
#define PRINTI_DBG(X) uart_char('[');uart_string(__FILE__);uart_char(':');uart_10(__LINE__);uart_string("] ");uart_10((unsigned long)X);uart_char('\n');
extern void uart_char(unsigned char c);
-extern void uart_hex(unsigned long data);
extern void uart_string(char* message);
-void uart_hexn(unsigned long);
+extern void uart_hex(unsigned long data);
+
void uart_10(unsigned long);
+void uart_hexn(unsigned long);
#endif
diff --git a/src/graphics/lfb.c b/src/graphics/lfb.c
index 54bc71c..ffc27de 100644
--- a/src/graphics/lfb.c
+++ b/src/graphics/lfb.c
@@ -1,6 +1,6 @@
#include "../drivers/uart.h"
#include "../graphics/glyphs.h"
-#include "../graphics/homer.h"
+#include "../graphics/philosopher_toad.h"
#include "../graphics/lfb.h"
#include "../graphics/mbox.h"
@@ -90,18 +90,18 @@ void lfb_showpicture(void)
clear_screen();
unsigned int x,y;
unsigned char *ptr=lfb;
- char *data=homer_data, pixel[4];
+ char *data=toad_data, pixel[4];
- ptr = lfb + (height-homer_height)*pitch + (width-homer_width)*4;
- for(y=0;y<homer_height;y++) {
- for(x=0;x<homer_width;x++) {
+ ptr = lfb + (height-toad_height)*pitch + (width-toad_width)*4;
+ for(y=0;y<toad_height;y++) {
+ for(x=0;x<toad_width;x++) {
HEADER_PIXEL(data, pixel);
// the image is in RGB. So if we have an RGB framebuffer, we can copy the pixels
// directly, but for BGR we must swap R (pixel[0]) and B (pixel[2]) channels.
*((unsigned int*)ptr)=isrgb ? *((unsigned int *)&pixel) : (unsigned int)(pixel[0]<<16 | pixel[1]<<8 | pixel[2]);
ptr+=4;
}
- ptr+=pitch-homer_width*4;
+ ptr+=pitch-toad_width*4;
}
}
diff --git a/src/graphics/philosopher_toad.h b/src/graphics/philosopher_toad.h
new file mode 100644
index 0000000..c58d6b4
--- /dev/null
+++ b/src/graphics/philosopher_toad.h
@@ -0,0 +1,764 @@
+/* GIMP header image file format (RGB): philosopher_toad.h */
+
+static unsigned int toad_width = 109;
+static unsigned int toad_height = 110;
+
+/* Call this macro repeatedly. After each use, the pixel data can be extracted */
+
+#define HEADER_PIXEL(data,pixel) {\
+pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
+pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
+pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
+data += 4; \
+}
+static char *toad_data =
+ "P+[BP;_CO+K>N+;:O;O?Q</GP+[BM++6L*[4P+[DR,;LP+[DO;OAO;O?M;/7M;/7"
+ "R,3HR<?KQ,+HS,KRQL7NQL?RR,GTS]#]TM/^T]3_U-7`U-7`UMC`V-L\"U]H!U=?_"
+ "U=?_T]7]U-;^U-;^TM/^U]<!V=D#UM7`U=<#U-8\"U=<#U-8\"T=+_T]4!U=<!TM/^"
+ "T=+_T-'^T-'^T=+_T]4#U-8$T]4#TM0\"T]4!TM/`T=+_T=+_T=+_T=+_T=+_T=+_"
+ "T-'`T-'`T-'`T-'`S]#_S]#_S]#_S]#_T-'`T-'`T=,!T=,!T-'`S]#_S]#]T-'^"
+ "S]#_S]#_T-'`S]#_SL_^S<[]S<[]S<[]S<[]SL_^SL_^S<[]S,W\\S,W\\S,W\\S<[]"
+ "S,W\\S,W\\S,W\\S,W\\R\\S[RLOZRLOZR\\S[R<KYR<KYR<KYR<KYRLOZO[[?N[K;MK76"
+ "L['5M;/7M;/7KZW1IZ7)K:O/L['5NKC<O;O?MK38M[79LK#4L:_3P<#AQL3HQ,+F"
+ "QL;KO[[FP</KPL3LPL7OS<[YT-'\\S]#[S<_WSM#XU-;^U-;]T=/ZT]7]T=/[TM3\\"
+ "T=/[T-+ZTM/^U-7`T-'\\SL_\\S<[YS]#[T-'\\S]#[T]3_U=<!TM/^TM/^T]4!U-8\""
+ "T]4!T]4!T]4#U-8$U=<%T]4#TM0\"T=,!T=,!T=,!TM0\"TM0\"TM0\"TM0\"T=,!T-'`"
+ "S]#_T-'`T-'`T=,!T=,!T-'`T-'`T-'`T-'`S]#_SL_^SL_^S]#_SL_^S]#_S]#_"
+ "S]#_SL_^S<[]S<[]S<[]S<[]S<[]S<[]S,W\\S,W\\R\\S[S,W\\S<[]S<[]S<[]S<[]"
+ "S,W\\R\\S[RLOZRLOZR\\S[R<KYR<KYR<KYR<KYRLOZM+/4L;#1K:S-JJG*I*/$G9R]"
+ "F9BXF)>WFYJZG9R\\JJG)MK75G)N[EY:VH:\"`K:S,JJG)N[K:Q,3EP\\/FM[K<O\\'F"
+ "PL;LPL;LP<3LP<3LP\\;NQ<GOQ\\OQR,SRR<WSRL[TR\\_URL[TS='WSM'YS=#XT=3\\"
+ "TM7]S]+ZS,WXRLOVS,WXS<[YS<[YT=+]U-7`T-'\\S,[VT=/[U-7`U-8\"T=+_SL_^"
+ "S]#_T=(\"T]4#TM0\"T=,!T-'`T=,!TM0\"TM0\"TM0\"T]4#T=,!S]#_SL_^T-'`T=,!"
+ "T=,!T=,!T-'`T-'`T-'`S]#_SL_^SL_^SL_^S]#_SL_^SL_^S]#_SL_^S<[]S<[]"
+ "S<[]S<[]S<[]S<[]S<[]S,W\\R\\S[R\\S[R\\S[S,W\\S,W\\S,W\\S,W\\S,W\\R\\S[RLOZ"
+ "RLOZR\\S[RLOZRLOZRLOZRLOZR<KYJZK*K:S,K*O+I*/!F)>UD(^MD(^ME).QBHJE"
+ "AX>BEI:QHZ*`='.18F%_=G63C(NI?GV;FINXMK?6L+32HZ;&K+'2M+G:L[C9L;79"
+ "L+38M[O?P<7IPL;JO,#DO<'EQ,CLQLKNQLKNRL[TS-#VR\\_US='WS-'XQ\\SSQLGQ"
+ "Q,?OQ,?OQ,?OQ,?OR,OSRLWUQLGSQ<GOR\\_UT];^U=D\"T]<\"T=0\"T-,\"T=0#T=0\""
+ "T-,!T-,!T-,!T-,!T=0\"T=0\"T-,!TM4#T-,!SM#_SM#_S]'`T-,!S]'`SM#_T-,!"
+ "T-,!T-,!S]'`S<_^S<__S<__SM#`S<_^S<_^S<_^S<_^S,[]S,[]S,[]S<_^S,[]"
+ "S,[]S,[]R\\W\\RLS[RLS[RLS[R\\W\\R<OZR<OZRLS[RLS[R<OZR<OZR<OZRLS[R<OZ"
+ "R<OZR<OZR<OZR,KYJZK(K:S*J:G$GY^ZEY>RE)2ME)2MDY.LA(2=?7V6C8VFGY^X"
+ "<W..5E9Q:FJ%@'^=;6V(BXNFL;+/K:[+GZ/!IZO)JJ_.I*G(HJ?(J:[/L[C9NK_@"
+ "NK_@NK_@O,'BP,7FP\\;HQ,?IQ\\OOR,SPQ<GMP\\GLP,;KN;_DN;WAM[O?N+SBN;WC"
+ "N;WCOL'IP<3LOL'IO,#DP<7KR,SRS=#XT-/]T-/_T-,!T=0\"T-/_T-/_T-/_T-/_"
+ "T=3`T=3`T-/_S]+^T=3`T-/_S]+^T-/_T-/_T-/_SM']S=#\\S]'`S]'`S]'`SM#_"
+ "S<__S,[^S,[^S<__S<_^S<_^S<_^S<_^S,[]S,[]S<_^SM#_S<_^S<_^S<_^S,[]"
+ "R\\W\\RLS[R\\W\\R\\W\\RLS[RLS[R\\W\\RLS[R<OZR<OZR<OZR<OZR<OZR<OZR<OZR<OZ"
+ "R,KYHZ\"\\H9ZZFYBRE9*LEI2KFIBOF):MD8^EDI\"GDI\"GIJ2[M[3.DY\"J:F>#?7J6"
+ "E9*N<6Z*@X.>JZO&J:K'HJ.`IZO'I:G'F)RZG)^_K;#0M;C8L+/3L[;6P,/CQ,?I"
+ "O<#BO;W@O+_AP<3FP\\;HP,7FP,3HO,+EMKS?L+76L+76L[?;MKK>M[OAO<'GP\\?M"
+ "PL7MOL+FP,3JPL;LQ<CPR,OUR<SVR\\[ZR\\[ZS]+\\SM'[S=#ZS=#ZSM'[S]+\\S]+\\"
+ "S]+\\T-/]T-/]T=3^T=3^T=3^T-/]S]+\\SM'[S<_^SM#_SM#_SM#`S<__S,[^R\\W_"
+ "R\\W_S,[]S<_^S,[]S,[]R\\W\\S,[]S<_^SM#_S<_^S<_^S<_^S,[]R\\W\\R\\W\\R\\W\\"
+ "R\\W\\S<_^S<_^S<_^S,[]RLS[R<OZR<OZR<OZR<OZR<OZR<OZR<OZR,KYDY\"JDH^I"
+ "DH^IE9.JFYFOH9^UHJ\"TH9^SKZW#L['(P+[5Q,';IJ.];FN'?'F5DY\"L?'F5B(6A"
+ "LJ_-KZ[,J*?%K*W*JJO(H*&^G9Z]K*W,L;+1K:[-L[/4P<'BP\\/DN;G:KZ_0L;'2"
+ "M[?8N;S>NKW?O,'BO<+CM[W>L[C7M+G:M[S=N+S@M[O?O<'GP\\?MP\\?MQ<GOQLKP"
+ "Q\\OQR<STR<STRLWUR\\[XR\\[XRLWUR<STQLGQQLGQQ\\KRRLWUS,_WSM'YS=#XSM'Y"
+ "T-/[T-/[SM'YS=#XSM'YS]+ZS=#\\SM#_S]'`S](!SM#`S<`!S,[`S,[`R\\W\\R\\W\\"
+ "R\\W\\R\\W\\RLS[R\\W\\S,[]S<_^S<_^S<_^S<_^S,[]R\\W\\RLS[RLS[R\\W\\S,[]S,[]"
+ "S,[]R\\W\\RLS[R<OZR<OZR<OZR<OZR<OZR<OZR<OZR,KYC(FCD(VGFIBOI**XJ:>]"
+ "K:N_MK3(P;_3Q,+8PL#7P\\'8P;[8M+'+>G>3@G^;D8ZL>721A'^>KZS*JZC&G)NY"
+ "G)NYGZ\"]FYRYH)^]I*/!J:C&KZ[.N+?7O;S=NKG:M+/4IZ;'J*?(K:W.L;'2L;36"
+ "MKG;M[S=L[C9MKO:M[S;N;[?N+W>L[?;MKK>N[_EN[_ENK[DOL'IP\\;NQ\\KRR,OS"
+ "R,OSR,OSR<STQLGQP\\;NP,/KOL'IP,/KQ<CPR<STS,_WR<WSS-#VS='WS='WR\\_U"
+ "R\\_US='WT-3ZS=#\\S]'`T=0\"T=0#T-,\"S](#SM$\"SL`$RLS[RLS[RLS[R<OZR<OZ"
+ "RLS[R\\W\\S,[]S,[]S<_^S,[]R\\W\\RLS[RLS[RLS[RLS[R,KYR<OZR<OZR<OZR,KY"
+ "R,KYR<OZR<OZR<OZR<OZR<OZR<OZR,KYF9JOHZ2YK:O!N;?-QL3:Q,+8O+K0NKC."
+ "M[7+M;/*N;?.P\\'8N[C2@X\":=7*,B8:@=7*.@7Z:G9JVI:6`C(RGA86@A8:ACY\"K"
+ "DI&QF)>WIJ7%LK'1M;34MK76M+/4KJW.IZ;&K*O,KJS0J:G*JZS)LK/.L[?3LK;4"
+ "M+C6M;G7MKG9M;C8I:C*JJW/K:_4K*[3KK#5L++7M+C<N[_EPL;LQLGQQ<KQQ<KQ"
+ "PL;LPL;LN;WCN+SBPL;LP\\?MP,3JR,SRR,OSRLSTR<ORQ\\GPR,KQS,[USM#XSM#X"
+ "RLOXQ\\CUQ\\CWRLK[S,S]R\\O\\R\\S[S,W\\R\\SYS<[[SL_\\S,WZRLOXR,GVRLOXS,WZ"
+ "S<[]S<[]S,W\\S,W\\S,W\\R\\S[R\\S[S,W\\RLOXR<KWR<KWRLOXR\\S[RLOZRLOZR<KY"
+ "RLOZRLOZR\\S[RLOZR<KYLK#&NKC.OKS2O[W3PL#6P+[4N;?-M;/)J*:]JZF`N;?."
+ "R\\G@MK/-?GN5<F^)AX2>=G./?GN7E)&MFYBT@(\";?7V8@X.>CX^JF9BVF)>UH)^_"
+ "JJG)K*O+JJG)JJG*JJG*KZ[.K:S-JJC,J:C)K:[+L[7-L;+-K*W,LK/0MK?4M[C7"
+ "MK?6IJ;'J:G*JZO.JZO.J*O-J*O-JZ[0L;/8N;O@OL+HO\\/IO\\+JM;G?MKK@M+C>"
+ "M;G?N;WCN+SBN;WCP,3JR<OSS,[UR\\WTQ<?LPL3IQ,;MQ<?NQ,;NQ,7PPL/PP\\3S"
+ "QL?VR,CYR<KYRLOZS<[]RLOXR\\SYS,WZS,WZS,WZS,WZR\\SYR\\SYS,W\\S,W\\S<[]"
+ "SL_^S]#_SL_^S<[]S,W\\R\\SYRLOXRLOXRLOXRLOZR<KYR<KYRLOZR<KYRLOZRLOZ"
+ "RLOZR<KYP;_5Q,+8P;_5N[G/N;?-O;O1O;O1N;?-K*K!IJ2[M;/*S\\WDL:_&?GN5"
+ "<6Z(?WR6>'61>WB4C(FEE)&M?7V8@(\";BHJEEY>RGYZ\\F9BVFIFWHJ&_I*/#H:\"`"
+ "I*/#JZK*LK'/K*O,J*?(JJG)L+#+LK++KK#(J:K'K:W(M+3/MK;1M+/1I*/!IJ7%"
+ "IZ;&J*?'I:3$I*/$I:7&JZO,LK+5MK;;LK39KK#5JZW2JZW2L++7M+;;L++7K:_4"
+ "L++7M+;;P,+IQ\\GPR<OPQ,?IP,/EP,+GP</JO\\'HP\\7MQ,7PQL?TQ\\CWQ\\CWQL?V"
+ "Q\\CUR<KWR,GTR,GTQ\\CSR<KURLOVR\\SWRLOVRLOVRLOXR\\SYS<[[S<[[S<[[S<[["
+ "S,WZR\\SYR\\SWR\\SYR\\SYRLOXR<KWR,GXR<KYRLOZR<KYRLOZRLOZRLOZR<KYO[O2"
+ "O+C/MK+)KZW#K:O\"M++)O+K1P;_6NKC/K*K!MK3+S\\WDIJ2[>':-<6Z(?GN5?7J4"
+ "?'F3BH>AE)&KA8*<BXBBDH^IG)FSFYNVF)BSEY>RG)NYH)^]H)^]HZ*`K*O)J*7#"
+ "I:'\"HZ+#J:C(K*S%JZO\"JJK!J:G$JJB_M++)M;+,L*W'H9ZZHZ\"\\I*&_IZ3\"HI^]"
+ "H9Z\\I*&_J:C(L*_0L;#1JZK+I*+&I*3'HZ/&KJ[1M;78K:W0JZO.L;'4L+#3M[?<"
+ "O+SAP\\/FQL;GQ<7FP<'DO+[CN[WBP\\+JQ\\;ORLGTR<?UQ\\7SQL3RQ\\;QR,?RR,?P"
+ "R<CQRLGRR<CQR,?RR,?RRLGTR\\KURLGTR\\KUS,OVR\\KUR\\KUS,OVS,OVRLGTR\\KU"
+ "SLWXS\\[YS<OYR\\GWR\\GYS,KZS<O[S,KZS<O[S<O[S,KZR\\GYM;'(MK+)M;'(KZO#"
+ "I:.ZHJ\"WKJO%P;[8O+G3L[#*O;O2SLSCG9NR<&Z%<6^&AX6<@H\"7?7N2AX6<D8^F"
+ "A8.:BHB?C(JAD(ZEDY\"JEI.MEI.MF)6QGINWH)VYH)VYI:*`FYBTF)2UFY>XI*&_"
+ "J:>^IZ6[I**XHZ\"ZJ*2[LZ_&L:W%JJ:^G9FSH9VWH9RYIJ&^H9RYH)NXH)VYI:*`"
+ "K*G'KJK+JZ?(I*/$GIV^GIV^JZK+L[+3K*O,KJW.M+/4L*_0KJS0KJW.MK76P<#@"
+ "P<+AN;G:L[/4M+37NKK?OKWEO[[GO+OFN[KEO[[IQ,/LQL7NQ<3LRLGQS\\[VSLWU"
+ "R<CQQ<3MQ,/LQL7NP\\+KQL7NR<CQRLGRR\\KSS,OTR\\KSR,?PR<CQS<SUS\\[YS<SW"
+ "R\\GWS,KZS<O[S<O[SLS\\SLS\\SLS\\S<O[S,KZIJ&XM[+)O[O2N+3,IZ.[E)&KGYRV"
+ "OKO5O;K4M[3.O;K4R<?>I:.Z>7>.=G2+B8>>?WV4>':-@X&8CHRCA(\"8B86=B(2<"
+ "BH:>C8NBE9.JE)&KE)&KFYBRG)FSF)6QG)FUFI>SEI.QEI*SH)VYJJ:]J::ZH9ZR"
+ "FY>NI:&XL:W$K:F`I*\"XFI:NGIJTGYNUI:&[IZ.]I*\"ZHIVZHIVZHZ\"^I:*`IJ+#"
+ "IJ+#GYZ^H)^_JJG)K*O+I*/#J*?'KJW-I:3$HIZ`H)R]IJ+#KZ[,L[+0K*W,J:K)"
+ "K*S-LK+5M+39L;#8JJG1J:C1L;#9NKGAO;SDN[O@PL+GR\\OPSLWURLGQPL'JO+OD"
+ "N;CAN+?@OKWFQ,/LQL7NRLGRS,OTR\\KSR,?PQ\\;OR\\KSS,OTRLGTRLCVS,KZS,KZ"
+ "R\\GYS<O[SLS\\SLS\\S<O[S,KZEY*ILZ[%P+O2N;7-JZ?!E9*LFI>QN;G4P;[8O+G3"
+ "O+G3P\\#:L['(A(*9=G2+@'Z5=G2+='*)A(*9DI\"GB86=C8FAC(B@CHJBC(JADI\"G"
+ "CXVDD8^FFI>QEY2NDH^IFI>QH)VYG9JXG9JXHYZ[JJ:]J::XH9ZPFI6LHI^SKZO\""
+ "J:6\\H9VUF96MGIJTG9FSHY^YIZ.]J*2^J:3!IJ._HZ\"^GYRZG9FZG)BYHI^]IZ3\""
+ "K*G'I*&_FYBVH)V[I*&_FYBVFI6VF92UF9:TG)FUG9VXH*&^I:;%JJO*L;'4L[/6"
+ "KJ[3I:3,HZ+*JJG1L+#5LK+7KJ[1L[/6O+S?Q<7JR,?OP\\+JN;CAL*_8L*_7M;3<"
+ "N;C@N[KBO[[FQ<3LR,?OQL7MR,?ORLGQR<CQQL7PQL3RRLCXR\\GYR<?WR\\GYS,KZ"
+ "S,KZS,KZR\\GYD8FAKZK!N+/*L:W%K:G#G)FSFYBTM;70P+W7PK_9P;[8P+W7M++)"
+ "@'Z5;FR#>7>-<&Z$<W&'B8>=FY>NCXNBD(RCCXJAD8RCBHB>C(JAB8>>CHRCEY6L"
+ "DH^ICXRFG)FSH9ZZHI^]I*&_IZ.]IZ2XIJ&THIVPG9BMH9VTKJK!J*2[GYNSF96M"
+ "GIJTG)BRHIZXGIJTIJ*\\KZK'L*W)JJ?%H)V[F)2UD9\"PGINYIZ3\"JJ?%G9JXDY\"N"
+ "FYBVGYRZF)6SF92UFY:UEI.QCXRHC8VHF9BVHZ3!J:K)L;'2M+37L;'6J:G.IZ;."
+ "K:W2L+#5KJ[1J*C)J:G,KZ_2N[O@Q\\?LQ\\;NO+OCL;#9K:S4KZ[6KZ[6KJW5LK'9"
+ "O+OCP\\+JQ<3LR,?OR<CPQ\\;OP\\+MP\\'OR,;VR<?WQ\\7VR<?WRLCXRLCXR\\GYRLCX"
+ "E(^BH9ROIZ2XK:F`J*2^G9BUHIV\\JZ;%L:[*M[30P\\#:N[C2KJS#?7N2;VV#>WF/"
+ "=7.)<W&'@'Z4CHN?AX28B8::A8*6B(69A(.4B(>8CXVAF9>MCHRBE9.JEY6LF)6O"
+ "HI^YI:*\\IZ6\\IJ*ZI:&XI*\"WHZ\"TH9ZRJ*:\\K:O!JJB_GYVTF9>NG)FSH)VWH9ZX"
+ "FY:SG)FUH*&\\IZ?\"J*.`H9NXFI6TEI.QGYFRI)RUH9FRH9>QF8^IH9FRHYJVGYFT"
+ "HYZ[I)Z[F(^KAX&<DY\"JF9:PH)NXJJ&_JZK(MK75M+/4K:O/L:_3M;/7L*_0KJW-"
+ "JZK(J:C&L*_/M;35N+;:R,/JRL7LN+/<K*K2L:_7J*;.HZ')KJS4MK3<NKC@P\\'I"
+ "QL3JQ\\7IQL3HQ,+JQ\\3RS,CZR\\?YQ\\/TRL;XRL;XR\\?XS,CYS,CYG)>JFY:KFY:M"
+ "I*\"XIZ.]I)^\\I*&_HI^]G)FUI*&]O+G3PK_9NKC/B(:=>':,@'Z4=7.);&I^<6^#"
+ ">7:*<W\"$?'F+?7J,@G^1A(&3B(69D(VAFI:MDX^FFI:NG9FQGIJRGYNUI:&YJJ:^"
+ "JZ>_J:6\\IZ.ZI:&XHZ&WJ*:]J*:]I**YGYVTGIRSH)VWG9VVFIJSHIVZG)FUFYRW"
+ "H:&\\I)^\\I)Z[H)NXF9:RH:\"^HZ\"^G9JXFYBVE9*PHZ\"^J*7#IZ;&HZ\"\\H)RVDHRG"
+ "@W^7CHZED)*JD9&JE9*NFIFWJZK*KJW.J:?+K*K.L:_3KZ[/KJW.J:C&I*/!IJ7%"
+ "IZ;'K*K.OKS@R<?MO[WCL:_5L*[4IZ7+HJ#&I:/)IJ3*K*K0N+;<N[GAP;_CQ\\7I"
+ "R<?OR,7SQ\\/UR<7WR\\?XR\\?XR\\?XS,CYS,CYR\\?XI9VSFI*HDHVDG)BPI:&[J*7!"
+ "JJ?%G)NYBH>CD(VIL[#*Q<+<P+[5CHRC?GR2@'Z4<G\"$;6M_='*&=W2(9F-U;FM]"
+ "=G.%?WR.@G^3AX28D(VAFI:MF)2KGIJRH9VUHIZVH)JSIJ\"YJZ>_K:G!K*K!K*K!"
+ "J:F`IZ>^GY^VEI:MC(RCBHJCD)\"IFYNTHZ.\\IZ>`H9R[G9JVG9VXGINWF9.NG92P"
+ "HIRWGYRVH9RYIJ&^IJ&^IJ&^GIFVI:\"]I*\"ZH)RVGY^XF9:PAX.;=W6,@X6;@HF="
+ "@XB?AXFAC(NKE92TFIFZGYZ_I:/'IJ3(I*/$IJ7&IJ7#H:\"^GYZ^G9R]GYZ_L['5"
+ "Q,+HQ,+HMK3:KZW3J*;,HZ''G)J`EY6[G9O!J:?-LK#8N;?=P\\'ERLCPRL?UQL+T"
+ "Q\\/URL;WR\\?XR\\?XR\\?XR\\?XR\\?XIY^UF9&IDHVDG9>PHY^YJZC$KJW+H:\"^AH.?"
+ "AX2@K*G#Q,';P+[5D(ZE@H\"6A(*8<G\"$;&I^=7.'>7:(9F-U;FM]>7:(@G^/A'^4"
+ "B829D(N@EY*IF).JF92KF)*KF)*KEY&JG):OGYNSGYNSG9JTG)RUG9^WGJ\"XE9>O"
+ "C8^GAXFAB8NCCX^HE96NF9FRG9VVI:\"_H9ZZH:&\\GIFVEHVIF8^KGYFRG9FQJ)JR"
+ "K*\"WJ:\"VHYNQE8VCG92JHI:KI9>MDY\"JDHREB8&:?7B/B(F>A(:<@8.9@X.<CHJK"
+ "A8&BA82DEI6VH:#!G9R]FIFZGIV^GYZ\\GIV[GYZ^FIFYF)>XI:/'MK;9N[O>NKC<"
+ "KZW1J*;*I*+&FYF]EI2XF9>[GYW!JJC.KZW1M[79P;_GR,7SR<7WQL3UQ</SR<;T"
+ "R<;TRL?URL;WRL;WHIJRF)\"HE(ZGGYNUIJ*\\KZS(MK//IJ7#BX:CB82AJZ?!Q,#:"
+ "PK[6DX^GB(2;C(B?=G2(8V%U9V5Y<W\"$:F=Y>'6'?WR.@G^1AH&6B829CHF@D(NB"
+ "DHVDCHF@B82;AH&8DHJBFI6LH)RTF9:PC(REAH>BBXRID)2PD9*MB(FD@X2?B8JE"
+ "DY.NF)BSF9FTFIJUGYRZF9:REI.OEY&NF8^KG9\"MF9\"LCHJDF(^KH)JUGYRXEY>R"
+ "A86@C(FCE8^HG)2LF)*MFI\"JDH.?A7F2C86=AX.;BX>?E8^JDXZMAX*AA8*@D8ZL"
+ "F96VEI6UE).SE).TE9*PFYBVH)R]G)BYE92UFYJ[JJG*M++6N[K;L*_0IZ;'H:#!"
+ "GIV^GYZ_H:#!H)^`JJ7,K:G+L*_0N+;<P;[JQL3TQ\\7UQ,+PR,;TR,;TR,;TR,;T"
+ "R,;VF9.LEI\"IE9&IH9VWJZ?!M*_,M[+/J*/\"DXZKDHVJKZO%PK[8P+S4D(RD@W^6"
+ "B86<<6^%75MQ:&9\\>WB,<&V!=W2(?'F-?7J,@GZ5A8&8B86<B86<D8VDC(B?B(2;"
+ "AH*9D8RCHIVTK:G!HI^YBXNF?G^<@X2CBXZNC8ZK@H.@>WR9A(2?DY.NG9JVG9JV"
+ "FYBTCXRHCXRHD8ZJF9.PHI2TH9*RF8ZMDXZKC)&XE9W#DZ''BIS!=8>L>(:J?8:H"
+ "@(:GG).OG9\"MF(6BC7J7DH6@BX&;D8>CGY6QEI\"MD8NHCHBEBH6BAX*?B82CB(6C"
+ "@7V>CH>GEY*QGIFZG9BYF96VG9F[IZ;'LK'2N;76L:W.IZ/$H9V^HY^`IJ+#J*3%"
+ "JJ;'LJ[0L:W.LZ_0MK38O+GCO[WKPL#NQ,/NR<CSR,?RR,;TQ\\7SQ\\7SDHZFFI:N"
+ "GIJTJ*2^KZK'L:S)L:O(II^_G9BUGIFVM+#*O[O5O+C0BX>?>W>.@W^6:&9]65=N"
+ ";VV#AH*9<FZ%;VN\"<W\"$>G>+@'R3@W^6AH*9AH*9E)\"GD8VDD8VDD8VDC8J>FY>N"
+ "I**YGYRVC8RJ@8*A@8&BAH:IB(FFAXBEBXJHDI&OG)FWFYBTDXZKBX:CCHNGF)6Q"
+ "GIFVIYZ^KY_\"HY.XF(VPG9:XF*#(E:'(B)K!>Y&Y;(*H=8>L>XBK?XBJAH\"=CX6A"
+ "EH6DF8:CHY2PEXJGD82AEHBHFY\"ODHBDCH:?C(2=A'Z7@WV8@'N8>723BH&ADXJJ"
+ "F9*TG9:XGIFZH9R]IZ/$L*S-KJK+K*C)IJ+#I*#!IZ/$HY^`HY^`K*C)M+#1J:;$"
+ "IZ3\"L*_0N;??N;CCN[KCP,+IR,?RR,?RQ\\;QQ\\7SQL3RC(JAGYVTJ*6_KZO%L*O("
+ "K*;#JJ3!IIV]I)^\\IZ*_N+3.O;G3N[?/BH:>>G:-A8&89F1[44]F9&)Y?GJ2;&A_"
+ ":V=^<FZ%>G:-@H\"6@X&7A(*8@7^5DI\"FCXVCD(ZDDI\"FC8J>D8^EEI2KEI.MD9\"N"
+ "C8RMAX>J@X.FBXRKD9\"PEY:TFYBVFYBVFY:SFY:SFY6REY2PGINWGIFXI9R\\KI[#"
+ "G(JQAGJAB8&GEI*SD).SAH^O@H^P?(FHB9*PBX^IBXBB@X\"<B'^=BWR:CWZ=HI.Q"
+ "G(^LFXVMH9.SH92QC'^:AWV7E8NDE(RDBH2=AX&>AH\"=A7J;C8*CE(JMFY&TH)F["
+ "H)N\\HIV^J*/$HIZ_IJ+#IJ+#JJ;'JZ?(G9FZFI:WJJ;'JJ7$DY\"LCXRHI:3$N+;<"
+ "M[;?MKC@OL#EQ\\;OQL7PQL7PQL3RQL3RCXNCH9VUKZO#LZ_)KZO%IJ&^GYJWGYJY"
+ "I:&[L*S&M[/-P;W7M;')D(RD?WN3@W^78EYU3$A?85UT>W>.:F9]:&1[;6E`@'R3"
+ "@GZ5A(\"7@'R3BX>>GIJQB(2;@'R3?GJ1B(2;E)\"GGYNRCHRC@X.<E)2OEI>VBHJK"
+ "BXRIG9Z[G9Z[DY*PB8BFG)N[H:\"`GIV^F)2UDX^QE8^RDXVPI)V_F9*RC(:CCXFF"
+ "B(FHAH>DA(BBA8FCAHJDAXNEBXRICY\"MFY*RH):YBX2FB8*DB8*BB8.@FY6NGIFP"
+ "H)BPG9BOF).HGYJOBXB<D8VDD(NBF9.LDY\"DAX.:AH*:C8BECXRJE)\"QF96VF)2U"
+ "EY.TGIJ[H9V^GYN\\JJ;'FY>XFI:WJJ;'K*G'DH^MC8FJH)^`KZW1KZ[6MK7=P,+J"
+ "Q<3MQ\\;OQL7PQ<3OQ\\7SFI:NHIZVK:G!M+#*L*S&HYZ[G9BUHIV\\K:G#MK+,O+C2"
+ "P;W7MK+*D(RD@7V5@W^78EYU3DIA8U]V>G:-:V=^;&A_<V^&A8&8B86<@W^6A(\"7"
+ "CHJADHZE>W>.>W>.?'B/@W^6BH:=EI*ICHRBBHJAF)BQEI6SB(FFB8FDF9FTF9BV"
+ "C(VJCH^ND9*QDI*SEI:WDI*UCHRPG9N_GIJ^F96WHYZ]JJ7\"I*\"ZI:.ZG9ZSE9:I"
+ "D)&DD)&DD)&FB(B?@'V7?7:8>W27?WF>;VN/:&2&>7:4?'B2<V^'>G:-BH>;E9*D"
+ "C8J<@'V/>WB*@7Z2E(^DC8F@AH*9@W^9AH&>AX2BBH:GC(BIBXBFE)\"QGIJ[G)BY"
+ "E9&RG9FZH9V^I:'\"K*C)JZC&H)V[F96VG9R]J*;*KZ_4M;3<NKSDP+_HP\\+KPL'J"
+ "PL'LQ<3OI:&YI*\"XK*B`M[/-LJ[(HIVZGYJWJJ7$M+#*N;7/OKK4OKK4N+3,D8VE"
+ "A(\"8A(\"896%X5E)I;&A_@'R3=7&(=7&(>'2+A8&8AH*9@GZ5B(2;C8F@AX.:?7F0"
+ "B(2;BX>>?'B0?GJ1C8F@DI\"DE)*HFYRQDY.JAH:?A(2=D)\"KD9\"NAXBGEI:WBXZP"
+ "BHVODI6WHJ3+G)[%EYF^DY.VCY\"ODI*MAH2;?GR2DHZ;IZ&NKJBSH)JCDXV8D8J:"
+ "C(68@'N2@7N@<V^3A8.ICHVUD9&VG)R]B8BF:FJ%4%%F5UAM:FA\\:VIY@G^/@X\"0"
+ "BXB:F)6GD(RDCHJBB(.@A8\"?B(6CBH>EB(6CAH.AD8ZLF9:TEI.QD(VKD(VKGINY"
+ "I*&_IJ/!JJ?%IJ/!FI:WE).TH)[\"JJK/KZ[6M+;=N[KBOKWEO[[GP+_HQ,/NK*B`"
+ "IZ.[K:G!M+#*K:G#HIVZI:\"]L*O*N+3.N;7/O+C2O;G3N[?/EI*JB86=B(2<:F9]"
+ "7UMR=W.*B(2;?WN2?'B/>76,@'R3C(B?D(RCD(RCB86<@GZ5@'R3B(2;BH:=>G:."
+ ">W>.C8J>F):JF9BIF9>KCY\"CA8:9?GN5@X\":AH6CC(NKGI[!GJ'#GJ#%GZ/'GZ+*"
+ "E9B`AHJP@XBI@(2@>WV3969Y9V9U<F=N@G=\\DX>*DX2&@G-Y=VEUAGF+GI\"FHY_#"
+ "IJ3*M[;>S,[VR,OSO;_DM+?7GI^\\='6045-K4E-H8%YRA8*4C(F;C(><BH>;DX^I"
+ "EY*OCXJIBH6DD(RME)&OC8JHB(6ABH>ED(VKE)&OF)6SC8JHEI.QF9:TFYBVJJ?%"
+ "HZ\"^DH^MC8RLG9R]I:7(J:G.L;/8M;7:NKK?O+OCOKWEP\\+KM+#(L*S$L*S$JZ?!"
+ "GYNUGIFVJJ7\"LJW,N;7/MK+,M;'+O;G3O[O3G9FQC(B@BX>?<&R#9&!W>76,A(\"7"
+ "@'R3?'B/>G:-@'R3C(B?D8VDBX>>AH*9AX.:A(\"7?GJ1A8&8@GZ6@W^6E)&EG)FK"
+ "E).DD(^@C(N<BXJ;BH:>?WR6>WB6@X*BBHJMGI[!H*/%EYJ\\>GRD?8&GC9*SCY2R"
+ "<WB-;W\"!;&QW;6QS;EY@5T1&5D)!;E93;5567$=/=%]OH8ZCLZS,H9V_BXNPDI2\\"
+ "I:C0KK+8N[[@RLOJG9Z]6UIX44YH8UYU<FV\"@7R3B(*;C8>BE(^NFI6TEI&RDXZO"
+ "G)BYH)V[E)&MBH>CA8*@D8ZLG9JXH9Z\\CXRJE)&OEY2REI.QH9ZZH9Z\\EI.QD9\"P"
+ "GIV^HZ/$IJ;)KK'3KZ_2M+39M[?<O+OCPL'IO;G1N;7-LZ_'HIZXDX^IG)>TK:C%"
+ "KJG(LZ_)K*C\"IZ.]N[?1OKK2GYNSB(2<AX.;=W.*9V-Z=7&(>76,>G:->76,?'B/"
+ "AX.:@W^6@W^6?WN2AX.:DHZEC8F@?GJ1C8F@C8FACXNBGINOG)FKCHN=B8:8B8:8"
+ "C8J<>W>.=G*,?'F5D8VND9\"QGYZ_D(^P<W*29&*&D)\"QN;K7O+[4JJN\\G)JD@GV\""
+ "=6]P?VMK:5%.94I\">EQ3@F-?>%M>=UUIA&U^:%YW4$IE3$AJ2DIO6UV$9&2)<W&5"
+ "NK;7RL;H@'N:;61`;6-\\6E!I:F!Z=&N'?':3@WV@B8.FB8.FBH2GDHZOEI.QC(FE"
+ "?GN5BXBFG)FWIZ3\"GYRZD(VKF)6SG)FWE)&ODY\"LGINWGINYEI6SFYJZH*#!HZ/$"
+ "I*?'J:G,KJ[1LK+5M[?<O[_DOKK2N[?/M+#(HIZXE9&KHYZ[LJW*K*?&K*C\"HIZX"
+ "F96ONK;0O+C0H9VU@W^7A(\"8=G*)9&!W<&R#<FZ%=G*)<FZ%=7&(@7V4AX.:A(\"7"
+ "@GZ5B(2;C8F@E)\"GB(2;D(RCDHZFEI*II:*VGYRNC8J<AX26AH.5A8*6@GZ5>'2,"
+ ">721AH&BDXVPGYJ[F).R@WZ;B(.@M;+,S,K@RLG8W-KDQ+_\"AGY\\95I5=F):?65:"
+ "A6A7C&M9D&]?B&EC;U576$%*1#5(+R-!+\"9!,BY05%)X<6V1A'ZARL/ER<#>DXFE"
+ "A7F0=&9\\6TQB;5]W<VF#=VZ,AH\"EAX&FB(*GB8.FC8FKEI.QEI.OC8JDD8ZJFI>S"
+ "H)VYE)&MD8ZJF9:RH)VYF)6QD8ZJEI.OF9:TEY:TF9BXFYR[G9Z]G)^_I*3%J:G*"
+ "K:W0M+37O;WBN[?/N+3,M+#(IZ.]GIJTK:C%M[+/JZ;%J:6_G9FSDHZHO+C2O[O3"
+ "I:&Y@W^7A8&9;VN\"75EP;&A_<&R#='\"':F9]9V-Z<6V$AX.:AX.:B(2;@W^6@'R3"
+ "FY>NF96LE9&HD(RDF)2KJ::ZHZ\"TD8Z@BH>;@G^3>WB,?7F0>76-?WJ7B82EG9:X"
+ "E8ZN@WV:;FB#<&A`=&^&@'V/CXV9OKR`R<&`H9>/>FQD@&I<AFQ<CG!9E7%8EG%="
+ "B6E;;U-05S]!6$93=F=Z?W6.>723CHJNIZ'&LZG,PK?8GY6OB'J2B7J.;EUP6DE<"
+ ";E]U<V=`<FB$@WVB?WF>?GB=?7><?GJ<C8JHF)6QEI.MCHNGBXBDCHNGBH>CE)&M"
+ "F)6QHI^[H9ZZG)FUCHNGC8JFEY:TG)NYF9JYF9JYFIZ\\HZ/$J*C)K*S-L[/6O+S?"
+ "N;7-N+3,L*S$G9FSI*\"ZJJ:`L:W'JZ;#JJ7\"GIFVEI*LN+3.PK[6IJ*ZB86<C8F@"
+ ">76-6E9M96%X;VN\"<6V$:&-Z9V)Y<&N\"?7F0?WN2>76,>W>.?GJ1DHZEDHZECHJA"
+ "@'Z5>WF-FYJKH:\"QIJ2ZA(*9;6N\"<W&'>W>1@GV:CXFFDXVJEHVIEHRF=VM`0SA*"
+ ",2E!+21!0CI(:6!FAWU\\GI&)H9&#DH!QCW)AC6Q:BV92C61/CV93C6A7A6-8>UU4"
+ "D'AWMZ.CUL7,U\\O:TL;=T<3?P[7-K:\"S@G!]=V5P@FQW6T9.33E#8$Y=8U1H:EYU"
+ "A':6CH*G=&R4=G&:=W69AX.DEI&PC8:HAX2@@G^;@7Z:>G>1A(&;BXBBFYBRH)VW"
+ "F)6OB(6?B(6?BXNFGYZ\\F)FVE)6TG*\"^HZ/$J*C)J*C)J*C+O[_BMK+*M;')IJ*\\"
+ "DX^IH9VWHY^YI)^\\IJ&^L*O(I)^\\FI:PNK;0O[O3J:6]D8VDEI*I@'R37EIQ:65\\"
+ ";&A_8U]V8%QS:V=^<FZ%=G*)=G*)<6V$=7&(=W.*BH:=CXNBC8F@<&Z%75MO@H&2"
+ "EI2HF9>M>G>1:VB\";6N\"<&R&C8BEF9.PF(^MBX&;F8NC>VZ!44-32#M$6$Q1;F!>"
+ "C'YTA75EC'IEA6]8A&Q3EWAEE7)?DVU7E&M6D6A5BV14AF19AF5=E7AUHH:$L9N<"
+ "NJ:PL9ZPHY\"DG(>7G(B3@FMR?&-H@&9J6T%#2C%!33A!33M(5D56=6I[?W:,<VV&"
+ "<6Z(>7F0>'F.@7^5@'R3?GN5?'F3>G>1='&+=W2.?WR6CXRFF9:PFI>QC(FC@X\":"
+ "@8&<EI>REYBUEYBUFY^]GI^^H*#!H:'\"HJ+#N+C;M+#(LJ[(G9FSC8FCG9FSFI6R"
+ "EY*OH9RYLJW*IZ*_FY>QO+C2N;7-J*2\\E9&HGIJQAX.:8%QS:65\\:65\\7%AO7UMR"
+ ";VN\"<6V$='\"'=W.*=W.*>'2+=W.*BH:=D8VDBH:=:65\\2TE?;VV!B(:<A(*8;6J$"
+ ";&F%;FN'>'.0DHRIG).QDXFEC7^9F8J>DX&0?VUZA7%SD7QZE(!TGHEUD'A?DWA<"
+ "DW-9GWUCEG9@DW!9DVU5EFQ5DFA3BV13D&I>EW5JE7!IC6QDD71MFW]_D79\\?&%I"
+ ">F!DB6UM@V1@?%U7>5M2:$I!94A#6D!!3CA!239!44=185EG9V-S7UUQ:6I_9&1["
+ ":VE_<6^%=G.->7:0>'6/=G.-<6Z(>'6/AX2>EI.MFYBREY2NAX2>?7V8C8VHDY2Q"
+ "G)VZG*\"\\H:+!HJ/\"H:'\"HJ+#L[/6M[/-KZO%G9FSDX^IFI6REI&NE(^LG9BUJJ7\""
+ "H9RYF96OOKK4M[/+HY^WD8VDGIJQAX.:7UMR96%X:65\\9F)Y9F)Z:VE`;6N\"?'B/"
+ "A(\"7AH*9?7F0?GJ1E9\"GE9\"G?7B/75EP4DYF=G**AH*9>W>.:VE`<6Z,=G*4<&F)"
+ "@'J7G)&PEHFDE(6;?VQ^B'1^CWI`FX.$E7YYD7ELB7!;CW-<D7%9H'MGJH1PF7I="
+ "EW59E7!4E&Q1D6=.CV=/D6Q8EW1AF75HE7%BDW-CD7-HAFEB>%M6=EA/>UY1?5Q,"
+ ">EE'=E5#=E=$?F-3;%1)74E!54)!-RQ!2$!.759G3TMB34IF4DYO6U=X:&2%<6^&"
+ ">':->G>1?7J4<F^)>'6/@G^9DY\"JG)BRH9VWC(FC>G>1>WN6A86@E)6PFINXFINX"
+ "FYR[FINZG)R]I:7&M[/-J:6_GYNUFY:SE9\"ME(^LE9\"ME9\"MG9BUF92QF96OO[O5"
+ "N[?/H9VUCHJAG9FP@7Z285YR9&!W;&A_<W&':6=^9&)Y<6^&AX.:CHJAB(2;>76,"
+ "A8\"7G9BOCHF@8EIR241;9%YWB(2>BX>>?WR0<G\"$='&->769<FN-@7J:H)6TEXJE"
+ "@W2(7$I5;UQ?CGIZDX!QD'UKD7]HB75;D'A=B7!3DW5<F'ABF'M<F'E;EW17DVY0"
+ "D&M-D&M-C6I-AV5(@F%1A692A6=0?6%,=UQ*=EM+=EI&=5E\"=5=!=EA!<E9!=%I\""
+ ">F%,:%-!95-$9U5(0S9!2C]$85A>6U5B03M41T)A5$]N:F6\">GB/?WV4@'Z5A(*9"
+ ">G>1?'F3@G^9D8ZHI9^ZI)ZYB86?<&R&:VB\">'61A86@CX^JCHVKD9\"NDY*PF)>W"
+ "F9FZKZO%H9VWFI6RF92QC8BEDHVJDHVJB82CD8RIEY*OG9FSN[?1P;W5I*\"XDHZE"
+ "GYNR?GF.9&%U:65\\<&R#=G2*96-Z75UT=76,C(B@C8FA@GZ6=W&*C8>@G)2M?W>0"
+ "345>1T)9=&Z)D8NHB86<?WR,=72#<W\"*=W.7?GB=C(6HE8RLC8.=<61V95A@<V-B"
+ "B7ITC'B#AW-^@&MY?FAV=F!N=UQL=5AI>%EJ=5)G?%9L@%EMA%MMBF%RD&ATC&1N"
+ "@5QD?V)1@&1/?V-,>5]'=EQ&=UQ(>5])>F!(<E9!<E9!<EA\"<EE#=V%+:E=%:UI)"
+ ":EA)8%)*7$Y\";&!3<FEC4TE32T)45D]@>')_>W>.>'2+=G**>G:.=G*,=G*,>W>1"
+ "A8\"=G92PCX:B=&N'75=R7%9Q:&1^:&1^=7&+D(NHD8ZLE)&OG)FWEY:VJ:6_HIVZ"
+ "EY*ODXZKC8BEEI&NCXJI@GV<C(>DGIFVI*\"ZL:W'P;W5IZ.[EY.JGYNR@WZ39V1X"
+ ";FM_<6^%<6^&8&!W75UV;V^(@W^7AH*:A8&9AH\"9F9.LC86>;&1]44=A7%1L?722"
+ "C(6EB(.:@H\",>WN&=W6+=W.5=W\":@7N@@7J<@'B1<FIZ@G=\\>W)L;V5::5A/5TA\""
+ "2SM!1S9!0C!!2#1!2S9!1S)!3S!!535!7#Q&941+<4]/>UI4?U]3?5U-?V-6@&53"
+ "@&1->U](=5E$<%1!;U-!;E)!<51%;$]!<59&;U5%=5Y-<EQ-<5M-:%1(;5E-;%M("
+ "<6),<F1:8U1:4D956U!??7-[@WZ5>72+=W*)?7>0AH\"9A7^:B(*=C(:CEXJGAWJ7"
+ "?7./>&Z*>7\",?G619F![<6N&CHBEC8>DC8BGF92SE)\"QJJ7\"JZ;#F92QDHVJE9\"M"
+ "H)NZDHVLA8\"?C(>DI:\"]J*2^IZ.]O;G1IZ.[F96LG9FPBH6::&5Y;VQ`<6^%;6N\""
+ "86%X8&!Y8V5]=7&)?GJ2C(B@F9.LI)RU?76.8%9P7%)L9EYV>7\".A7Z>CXJACHR6"
+ "B(>.?WV1=W.4>W2?>W6<>G.6;FB#;VAX@WU`@GMR95]033E!.BA!/BI$,Q]#-B%)"
+ "+QM!/RI,-R)!2\"I#1RE\"3\"Q\"43!\"5S9!7CY!9D=!;$]\";5%%=UI+?F)-@6).@&%."
+ "?U]/?%Q,=UA%;DU#:$I!<55)9TM!9DQ!:U!&;U=,;%1+:U-0=V%5<5Y/8D]*9%)?"
+ "54-<6TQB=&AW>W.);65];V=_>'\")C(2=BH&=C82@C(.AA'63>VR*B7R9E(>DE(JF"
+ "CH2@9EUY<6B$C82BB(*?B(*?EI&PE9\"OJJ7\"LJW*HYZ[AX*?E9\"MFI6RF92QE(^L"
+ "EY.MHY^YIZ.]KZO%LZ_'JJ:^E9&IH)RSC(J>;FE^;&=^:6=^7V1[86=^8FB!;7&+"
+ ">'B1>GJ1B8>>GIJRG)BP=6^(5E!I54]H:&1T;F9^?'2-@7V4C8^=AHR9@H2<=G66"
+ ">W:=?'B<?'>8=G\")54Y>;V9J>&]K9UU45$!!7$=#8DI'5D%!7$M$5$-!43Y!6T1!"
+ "8D9$9TE*9D9(83Y!8#Y!94-\"8T1!7T!!845!94E!<U5*>%I/A61:@5Y7@%U8>E=2"
+ "<E--<U1.<51/;$]*:DY+;E51;E528DI'84M,:U-2;5548TY23CY'3$!+4D91;%QF"
+ ";6)S85EI:F-T?G>*C86;B(\"6D(>=E8R@@76,:EUP?&M\\E(68E(N?A'^68%MR<FI`"
+ "CHF>F).JD8NFCXJGH)NZM[+/M[+/HYZ[BH6BC(>DD(NHE(^LFI6RJ:6_H9VWJ*2^"
+ "N[?1N+3,K:G!FI:NG)BPCXVA:V9]9V)Y9&)Y7F-Z6V%Z9&J#;'\"*9VF!<W6-B8FB"
+ "H)ZUGYNS?7F17EAQ5U%J9F%T<&A`>7&*=W.*=WF'<WF(<W6-;FV.='*8>G::>'25"
+ "<FZ&4DM;7E5;;&%>=FEAAG%MAF]JB7!JA6YEBG9L?VU@?&A<A&QA@VABAVIEAF=E"
+ "@5]>?5M:?5M:>%E5<5).8$1!9DA!:TU$;U%&<$]'<D]*<U!-=5)/>5=4>UE6?5Y:"
+ "?F%>?F)??6%?<5A58DA(5#Y!84E*=5M;=%YA4T)+1SE%33]+9E9@8UAG7E-B9U]O"
+ ">'&\"@GN,=VY`B7Z0GY2E@G2*74YA74M::EQL?72&>W:+7%=J:6)SCXJ?DXZEB8.<"
+ "A8\"=EI&PO[K7NK72J:3!GIFVG)BRHY^YJJ:`M[/-MK+,IJ*\\IZ.]O;G1O;G1JZ>_"
+ "DX^GG9FQE9.I:&-Z6E1M:&9]9&E`96N$9FR%8F:\"8F9`<7:-AXFAF9NSEI:O?WV4"
+ "9F)Z7UMS9&%S=&R\">W.+>'.(:VQ]9FQ]8F=^86&\";&J0=G28>'>7>76/9E]P<69M"
+ "?6]MC'UWFH-^G8)\\GX-YF7UPEG]LCWIDD'IDDG=CEWMNEWEND7-JBFECAV5BB6=D"
+ "B&EEA69@?V!:@V5<?%Y5>EE19T9!9D-!8CY!:$1%=E)2=E13>UE8?%Q<>EQ;>5U="
+ "=%A8:E!08DE-7D1&;%)2<UU@5T9-1SI#23E#7$M27U->9%AC;F1P?'%`?7*!8%5D"
+ "95EF>&QY951E54-07TM67T]9=&EX<6U]5E1B9&!MB827AX*7?GF0>W>1BX:CP;S9"
+ "O+?4L*O(L*S&JJ:`KZO%KZO%M;'+MK+,LZ_)IZ.[MK+*PK[6IZ.[B(2<I:&YFYFO"
+ ":61[4TUF;VR&96F#;'*+9VV(7V-_76-\\;W6.B(ZGH*2^E9>O>WN49F1[9V-Z>72)"
+ "?W>-?72(>72':FM^:&V!96F#:FN*<G*5>WN>?7R<>WB4<VQ_BGZ)DX.%C7EWDWIT"
+ "GX-YHX-SEGAAB&]2AW!0CW97C6]4D75@CG)>AVI;@F)6@6!8A&-=AV9@A69@AF=A"
+ "B6IDAF5=@F%;=%--<$Q,;4E*<$Q/<DY.<DY.=%)2<%!09T=)8T5&9TI-:DU0:5!4"
+ "8$1$8D9&;E598$Q43CY'1#1!5D5,:%MC=FER>6YV?W-^@'1_8%-<5$1-3S](1S5!"
+ "8DU5@6QR=&-J@GA`>79`7%ID9V1L@7J+?WB+?'>.?7>0BH6BMK'.N[;3MK+,MK+,"
+ "K*C\"KJK\"JJ:^K*B`L:W%M;')KZO#N[?/P;W5I:&YB(2>J*2^H)ZU:&)[7%9Q;VR&"
+ "9&B\"9FR':W\".8V>%9VZ)>'^:D9BUHJC#@86?8F)[65=M;&E]?WJ-?'.%=VQ]>W*$"
+ "<F^!;G\"&9&E`9VB#=7:5=WB7?G^>?GN7=6V#DX>6II*:E7^\"DWAPG']RFWAEEG18"
+ "AFI&A&A\"C'!,BVU,BFQ1B&I1A692@F)2?V)5@%]5?EU5>UI2>5A2>5A0?%M3>EE1"
+ "?UQ7?%E6?%A8>E97>555>555?%I9=E96:$A(73]!6S]!7$!!6$!!845%:DY,=U]@"
+ ";UQA5D9/0S-!6DE.?&QUCX**BWZ&AWJ\"CX**@'%W=&-H74Q14CU%>V5IEH\"#?VQO"
+ "DH>,CXJ096)H9&)F?7:&?G>(A8\"3AX*9CXNEJ*.`M[+/NK;0M;'+KJK\"K:G!K:G!"
+ "M+#'KZO#JJ:^LZ_'Q<'9N[?/HY^YD(RFH)RVI**Y8EQW:6-^;FN':V^+9FR';7*0"
+ "7F)`5EMY;W:3BY*PE9RY:V^+555N7%AO>72)B8\"4?W2#=VEW>6Y]=W*%=76,<'**"
+ "<'*(965`9&6\">WR9A82B=W&*BGV0H8V8EG^&D79LE'1FC&A1E7)1D'!(A6A!AFE\""
+ "B6A$AVA*@V-)?F!)>U]+>EU.>5Q/>5A.>%=->E=0=E-,>EA.>%9,@F!6?EM4?EM6"
+ ">%50?%E4>EE3?5M8>UQ8<U93:T],9TM)8$=$6D)!:E%-=EU9?VIH>6AM8U9>33U&"
+ "6TI1=FEQD(.+C8\"(A'=_BWZ&A79Z@W-U:59995!4C'9WEW]^>F9FE(B+EH^58EUB"
+ "6U99?WF&@GN+D8J=C8B=DHREHIVZLJW*N+3.LZ_)M+#(JZ>_J*2[KJK!L:W%HIZV"
+ "JZ>_P[_7NK;0I*\"ZCXNEF96OGYRV8%IU<VV(<F^+7F)^8&6#9FN)8&.#9FN*@XJH"
+ "E)J[C92R7&!^3DYG3$A?5U!C7E-E9EAF<V-L>&IV?'.%<G\"'8V-Z559K6EAO65ER"
+ "<7&,@'^=>G2/>FZ#@6]^>6-OC7)HF'AHCFI1FG93FGE/D7)'BVM%AF1!@V%$>UQ!"
+ "=5=!<U=\"=%=&=5A)>%A,>5E->59/>%9,>UE.?5M.@F!3@%Y1?EQ1>5=,<U)(<E%)"
+ "<E1+<E9,<%5-<UA2<UI4<%=1:E50;UA1=UY8?&=E=&-H;F%I64Q54T-,;%]HAWJ#"
+ "C8\")D(.,DX:.B7I`C7U_=F-E<EY@E8!^DWMX>65CE8:(EHV16U5885A<A'Z)B(*/"
+ "F)&BD(N@D8NDG9BUJJ7\"LJ[(M+#*Q,#8M;'(JZ>^K*B_M;'(IZ.[H9VUN;7-P;W7"
+ "IZ.]B86?FY>QDY\"J95]Z>'*/=7*..CY:35)P6E]^<W:6A(FHEINZBY&R<':72$QJ"
+ "5E9O7EEP7E5I9UIL:UMG;%MB7DY88UAJ:&1[<W&';6Z!65=K65=N9&1_='.1?WJ7"
+ "@W>0?FM_<5MIA6I@I(1TFW=<GWM7GGU1FWQ1D7%+@V%!?UU!>UE!=EA!=UM&>5Q+"
+ "=UI+=U=+=U=+=U5+?%I0?%I-@F%1?%M+?%M+=%-#<E%!:$M!:TY!;5%%;%!$:$U#"
+ ":U-(<5E0;UA/;%A0:5))=%U4=F->9E=;;&%I7U1<3#Q%5$92:EQH=VMVB7Z&DH6-"
+ "AG=]D8&#@&UO@6UMG(>#D7IU?&AFF8J,FY*68EE=;V9HB8*+C8>2GYBHDXZADXZE"
+ "G9BUI:\"]L*S&M+#*Q,#8P;W4J*2[I:&XL:W$GIJQF)2KO;G1P[_7J**]E(ZIF9.N"
+ "F96O;&B\";&B\":VB$24AF7U]`='27;FZ3=7><B8NPBHZR;G&3555V5U)Q5DYG1SU6"
+ "7$UA:%9A=6!F=6%K5$599EYVB8B7A(2+=&R\"6%1K65ET='.4A'ZABX&=B'6'=F%G"
+ "A6MKI8IVG7U5H7U,IX!6I'Q:EW!.B&5!@%U!?UU!@&!&?V%*>UQ(>UQ(?5Y*?%M("
+ "?EU-?5Q,@6!.A&-1?E],=5A';5-#9TU!8D=!9DM#9$Q#:%!'7D=!94Y'95!,:%-1"
+ ":%)6:U56;%A6<5YA9E9B:EMN9%AG6U%;5$Q:2T-165%?>&YZC8&,C'R%E(.(AG-V"
+ "BG5YFH*#DWMX?VIHJ9N;D8B,;&-I:V)F@GN$AW^+CH:6CH>:E8VEE9\"MI:\"]JZ?!"
+ "K*C\"OKK2Q<'8KZO\"G9JNEY.JC8F@E)\"GQ\\/;P+S4J*2^DHZHHYZ[DHRG<6V'9%]\\"
+ "7%EU@G^=E).TI*+&GY_$C9\"REIF[>'N=2TYN45!N3$AB44A>9%AM<%MM?69O@&9J"
+ "BW)Y<%YM8E=I:V5R@7^#?'B%:VAX:6E`<&^/:62+=VR/?VV&=%UP@&9HGX1TF7M6"
+ "GWQ1I'Q7H7A;F7)4D6U,C&A/BFA.B6E3A&51?5Y+?5U-@6%1@&%.AF)1AF)1AV-2"
+ "@V)0?%U*=%=&:U%!8DM!:D]'9TQ$94U$84A\"7$5!7$=#8TU.9$Y1:U1=<%M?>F=I"
+ ">FEP=V9U=F=[?7\"\"@':\"<VM[8EIJ8%AF=FMZC8&,CGZ'DX*)B'5ZB71XGHB)E7UZ"
+ "D7U[IYB:DHF-:V)H;61J>'%Z>W-_@'B(AG^2CH:<EI&NJZ;#K*C\"JJ:^M[/+PK[5"
+ "M+'%FI>KD(RCAH*9EI*JP;W5P+S6K:G#DXZKF).PBX6B?GB5;&>$:&-`HZ\"^L:W/"
+ "R<7IU=#WR\\OLO+_A@X:H2$AI7EMY7UER;6%V@G6'DGJ'EWE`@&)C@&-H<UQG:5AG"
+ "8U=B=VQQ<&]T9&1O:&E\\<'&075B!:E^*=V:)<5UY@6EJFX%SE7=6FWA1HGI8I7E?"
+ "H'9=GG1;EW-<F'-?F'5BD&]=AF96A655B6E9B6E9B612B612AV)0@V!->UQ)<UA("
+ ":5)#84M!:$U%94I$:E%+94U*95!.7TE,9E%78T]7;%5F<5UH?&MT?FYZC7Z1D(*8"
+ "G)&CGY>GEX^?>7&!8%AH:5YMA7F&BWZ'C7R%AG)ZBW9\\H8N,EW]^GHJ(I)67B8\"&"
+ "<&9N<6=O=F]X=6UY>G)`AG^0D(F<EI\"MK:?$JZ6`K:G!LZ_&PK[5OKO/I*&UAH*9"
+ "B(2;JZ>_O;G1P+S6JJ:`GINWFYBT@WR<?GB5>721FI6TNK76R,+ETLSQTLSSS,SQ"
+ "R,?OMK7=EI:[HIZ`I)NYE(B?<V1X;E9C>V!HA&5K@V9K;UIB:EIF=&9R@W9_=')\\"
+ "7EUK86)W=7248EV&8UB!:%=Z9U-O@VQGF'YND'-4DW%,G753J7UAJ'QBHW=>F7-="
+ "FW=@G7IEE75?B6I6AF=3AVA5A693B6-/AF%-@UY*@%],?V!-=%I*:E1&9E)&:$])"
+ "9DU);%11:%)38TY474E38U%>9E5D<%UR?FR!C'N.DH.7I9>MIYNRHIFMGI>JG)6F"
+ "@'F*6E-D4$A88E=F:%QG;%QF<6!ICWR!G8F+DWY\\G(B(H)&5?7-[>&YX=VUW<&ER"
+ ";65Q<VM[@7J+BX27HYJVM:_*L:O$L*K#K*B_P+S3N[C,F9:JAH*:AX.;I*\"XN[?1"
+ "Q<+<KJO'G9JVE)&M=7\"/AX*AF92SPKW<PKW>T<ONV]/YU\\_WT,WYUM/_VMD&T,[\\"
+ "S<CRT,GLN*W,B7N5;UYO=%]MC7:!F(.+CGV&;F)M:U]L=FIW>72'8%MP6U=O;6B'"
+ "85I]5TQM5$5;5T54>6-5D'=BD'-4D&Y)EW%+JG]=JG]>HWA9G75:GWI>H7YAF'E<"
+ "C&]1BFQ1BFQ3AFA/BF51@V!+?UQ'@%],@&-2<UE+9U%%:%9+;EE4:%-/8$Q,6DE."
+ "33U'4$137%%B:V!R?W.,FHZGI9NUJZ&ZK*.YJJ.VFY.IDXNAF).HB8299%]R1C]0"
+ "0#A(13M'3#Y*7E%:DX*'G8F+C7=XG(F+F8V2?')\\?')^>G!\\;V=U:F)R=&M]?'6("
+ "A'R2LJK\"P+C0N[/+L:S#I)^VNK;-LZ_&CHJAI)ZWE)\"HC8FAN[?1P+W7GYRX<G*-"
+ ":&>%>'25GIJ[N[C6Q\\3BPKW>RL3GTLKPT,CPS<?VT,S]RL?[Q<+VR,3UU<[YV<_S"
+ "V,WNM*N_F8R?@G&\">6EUA'F!<VQU8UAG:%MM=6N$:5]X8UMT:F%]:%YZ4T5;23=\""
+ "43Y!<UQ+C')<E7A:EG1/EW%)IX!6J'Y9I'E7FW12FW=4G'I6EW94D')1DG56DW98"
+ "CG!5AV93@F%.>5I'>5Q+?&%1;55(7TM!8D]'95-064E(3T!$4D=/2T-1651G:69Z"
+ ">WF/D8ZHH9ZZHIV\\HY^YGIFNIJ*RG9BKEY*GGYVSE)*H;FQ`2$57/#A(1T%.2D!,"
+ "6$Q7E(.*G8J-A'!PHY\"3E(>/B'Z*>W!_?'%`=FU_<6A\\@7B.@'B0BH*;MZ[$MJ[$"
+ "N+#&L:S#EY*IJJ:^JZ>_HIZVN;/,K:G!DX^IO+G3L:[*?GZ96UIX962\"8V2#<G&1"
+ "C8RLI*#!NK;7U,[QU<_TR\\/KQK_LR,+SQL+VP;[TQL3UO+GEOKC?R<+DQ,#7L:F_"
+ "B'V/855B4DE/:6)H;F1P<V1W<6-[;F!X;6%X=&9^@7*(64A72C=!84Q'@F=7CG%@"
+ "E7=>F'=5F'5,I']3H'E1GG91E&Q'E6])E')-D7!,CG!-D715D7-8B6M2@613@613"
+ "=EM)<UA(>%Y0<%I.8T]%8U!(6$U*2T%!24!&65->:&5U>7J/AHN@D)6JEYVTEIJV"
+ "DY>UDI.NDY*CG9NGHY^NI)^RHJ.XEYJN<W2)3$U@04!155%@44M654Y7CG^%EX2'"
+ "?FILH(V0E(>0D(64>W\"!?W*$=6R\"<&9_B'Z8@7B6DXJHP[K.M*N_MZ_%MJ[$B(.:"
+ "BX>?EI*LKJK$PKS5M[/+EI*LM+'+M[30A(2?=W:4A8:CA(2E96:%9VB'>GF9@GZ?"
+ "JJ3'N;/8NK3;Q+WHNK3AO;GKM[3HO[_PM[;AQ<#GR,/DRLC>QL'8MZ[\"CH201T%$"
+ "85A<9%EA6$=86TI=5$585TA;:5INC'N.7TI85#Y!?F=@E'ALD71ED&]<E7-6EW1-"
+ "H'M0F'%)EFY+FG)-FG1.FG92EG51DW54DW98CG!9@6).?F14A&I:>5]/<5='>6%4"
+ ">F18;EQ1:UI185E83$9'3DE/8%YL@(&4CI.HFZ.YFJ6ZDY^TD9NWG:3\"FIZXE9>E"
+ "CX^8GIRHIJ&THJ2ZH*6ZAHF=6EUQ1$566%5E5U-@75=BB7I`CGM^?6EKE8*%E8B1"
+ "CH.2?G.%@'.&<6>!;6-_BX\"?@WJ:G9.VN+++NK++N[/,LZO$HIJR=7\"'AH*9P;_5"
+ "S\\OCKJK\"D8^FN;;0P+W7H9ZXFYNVK*S'JZO&A(.A962$>7B6>'B1@'V7>7:4@W^A"
+ "GYF^N;+<OKGCO+;CO+?@O[G>P[W:N+++L::UM*RXPKB`N:VN?&AF:U9284M.84Y3"
+ ";%E>95%97$I584]<@&QW6T9.6T5&B7%NEX!OC71?CG);FGU?G'Y=F7A6E'91DW50"
+ "E'95FGQ;F7Q=E'=9DWA<E'IBBW)=?F52A&EAAVQD@6AB:5)->&5@<%Y;85).6TM*"
+ "5$E02T1+34=2;&IXCY\"CH:2XJ:O!I:J_G**[EYRSG9VTG)JPGYRPEI&DGIFLIJ&T"
+ "G)JNI::[FYRQ=7:+0#Y255%A65%?85=CBGJ#EX2)AW)VCWR!GI\"<B'V.;&-U<&5W"
+ "9UUV;6-\\CH6ABX*@EY\"PL:O$M['*O;7.KJ:^FI*J?'>.D8VDN[G-Q\\/;J:6]EI2K"
+ "L*[%PK_9K:K$F9FRH*\"YI*2]A86@>'>5AH:ADI*IAX6<<6Z*85U^>W68E)\"TGYK!"
+ "L*O2J*+'IZ\"`GY>PEHVCCH*-DXB0DH>,CW]^?&A@94U$749!<%I;>&1D<EUA7DI2"
+ "4#Q&8TU85T!'7T=(>F%>BG)ECG1FF7YLHH-OIH9NH(!FFWQ?DG-6DW5<D7-:C7)8"
+ "BW%9C'%=C7-CB'%BA&Q?A6QFCW9RBW1O>&1B@G!O?FYO9%A95TM,4$E07EAA@'R)"
+ "H:\"QIZB[KJ[%M+;,HZ6]GI^ZE)2MEI2KE9&HEI&FC8B;F92GJ*.VF):LHJ.XF9FP"
+ ">'B/2TE?4TYA3T=57%)>AG9_DG^$CGE]F(6*G8^;?W2%8EEK9EMM95MT:%YWA'N7"
+ "@WJ8DXRLL:O$M;#'OK;.L:G!GY>OF).HK:J^OKO/R\\?>P;W4N+;,N;?.OKS3L*[%"
+ "F)BOG9VTI*2[@H*;;&R'<W.,A8:;A8.7>GB/<&V)='&/<V^0;&B)=W*3>7.0>'\"("
+ "=VQ^>&Q[?6QSE(6)DX.$?FIBF'YPG8!QG8%TCW1JB'%JEW]\\D'AY;%994#I!3#-!"
+ ":$Y.BG%NAF]JC'-MG(%WG(!TH(-TE'=FDG5DC&]>C7)BAFM;@6=7@VQ=AFYAA&UD"
+ "@&QD@6QGA&QIAW)PB'1TAG9XA79Z=&EP85=?:&%HCXN8I*\"OJJ>YK*J^KJ[%K*S%"
+ "JJ?!HI^YGYRVF96OEY&JDHVBDXNAC8B=FI6JIJ&VG9NQHJ*YFIJQA(2;:VE_8EUP"
+ "3D9664Y=>6ES@FYVD'M_GHN0EXF5<F=X65!B8E=I:%YW9%IS=&N'<FF'@7J:DX^G"
+ "C8F@F92KG)>NE(^FGIFPKZR`K:J^L*S#M[/*L[''O;O1N[G/L:_%G9ZSIZB]KJ_$"
+ "@X.:65ER7E]T969W<&]`;6N!>'6/@G^9;6J$5E-M2D9>:V-Y9UQM;F)M=FEQ?FIL"
+ "@&QL@W!K?V=<EWMGF'ABIHAQF7UIB&YAE7IPF7YXAVYK7D1$5CQ!94M+=UU=?65D"
+ "=U]<@6EFA6QHEGUWC'%ICW1LCW1LC'5LA&UD@&QBAG)JBG=QAW1O?VUJ?&II=F%E"
+ ";5I=<6!G?7!XA7N%=&Y[;6EXA(&1L;#!O+K.HZ2YDY.LG9VVH9ZZG9BUGIBSF9\"L"
+ "FI*KFI\"IDXJ@D8F?E(RBF).HFI:MGYVTG)RUE)2MCX^HCXVD@'N07E5G95II=65O"
+ "=&!HCWI`H(R4E(:2;&%R5$M=7U1F7E1M75-L;61`<VJ(@WR<?7N2;6F!=&Z'?7>0"
+ "<&N\"<&N\"=7&(;VN\"=7&(='\"'<6^%LK#&P+[4K*J`DY2IGI^TLK/(AH:=7U]V:&E^"
+ ";W\"!9V9U65=K8V%X=7.);VV#8EYU6%-H?'6&;&)N75!88U1:9$Y/6T=%8DU(;%)%"
+ "?5Y*@5Y'FGIBJ8MTDWAFFG]OHX=[H89^>F%=;U939DY-7DA)5D)\"6T=';5E9>65E"
+ "EX.#DGY\\D'QZBW9TAG1Q@G!M?F]K@G-OB7IVB'IZ?W!R=&5G85%:5DE28E9A<F=V"
+ "DXR=DH^ADI\"FEYBMHJ*YI*2]H:&ZGIZYEY>RF)6QFY6RD(JEC(*<C(*;CH*;C82:"
+ "CH6;CX>=CHF@CXNBFI>QE)2MCX^JE)2OH9ZXEY*I=FV!?'&\"A'1`<5UGCGE_H8V5"
+ "F(J6;V1U3T984TA:3T5>6$YG;V:\"?W:4BX2D@'V7<W\"*?'B2CHBC@GR5@7N4B(2<"
+ "CHJBGYNS=W.+7UUTK*K!NKC/H)ZTFINPM[C-L+'&@X.:8V-Z7E]R<G2\"75QK45!A"
+ "4E!F85]U<G\"&=7.'?GN-CH>7@7>#8U9?;V!F>&1D>65E=6%?:E))?6!/C6U7D7-<"
+ "E'ACH89TDG=EAFM;BW%DBW-JEH%]@&QL7$E+3CY!=V9KFHN/FX^4IIJ?H9*8FHN1"
+ "D8*(B'Q_AGI]@G9Y@'9XAWU_C8*'AWZ$?'-Y9EII7E-B=&Q\\AX\"3J*6YHZ&XHJ*["
+ "I:6`IJ?\"J*G&H:*_GI^\\F9BVDY\"LD8NFC(.?B7^8@GB1@G:-C8&8BX*8B(\"8AX&:"
+ "D(RDB8:BA86@@X*@B8BFC(FEC8>@=&M_>W\"\"CGV,;5ECC'=_GHJ2FXV9<VAY3$-5"
+ "2T!244=@64]H:V)^?722A'V=D)\"KC8JFCHFFF9.PD(JEDHRGF96OIZ.]K*C\"@W^9"
+ "?WR6N;;0PL#7GIRSDI*IHJ*YO;[3FYNR=W>.7E]T;W%_9F5S9&-T9&)X9&)X;6N!"
+ "?'J.CXR>BX>7CH:4A7N%F(V5GXR/?&QNAG-UC79QGX-WIH9VGH%PHXAXK9)`IXQ\\"
+ "F'YNC'1GAW!GC'ET?6UL:%E;?&]XK:\"IR;W*O;+!M:V]L*BXKJ.TJZ\"OIINJHIBD"
+ "FI\"<D8J3E(V6G)2@GI:DG)2BB8*3A7Z1F).HI:\"WKZO#H9ZXH*\"[JZO&JJO*JJO*"
+ "E)6TAXBGC8RJC8JFC(BBCXFBB8&9B'^5A'N1BH&7AGV3B8&9B8.<DX^ICXRHC8RJ"
+ "CHVKE).QBXBDEI\"I@7B.@'2)B'>&:U=BD'N#FX>1E(:2;6)S3$-55TQ>7E1M7U5N"
+ "9EUY=VZ,@'F9EI6SEY2RCHFHCXJGBH2ADXVJF).PI:\"]I:\"]@GV:D(VGKZS&P;[8"
+ "L*[%IZ>^IZ>^H*\"WFIJQ>WN48F-X9FAV;VY];6Q];FR\":VE_7%IP<&Z\">WB,;VM["
+ ";VAX>W!_B7V*D8\"%4D-)<F%F@FYNA&EAA&9;CW-GE7UREGQLEWUME7MMDGIMDGYT"
+ "D7]Z@W5S=6MKH)2AN:Z]NK'#KJ:\\KZK!N;')N;')O;3*N[+&M:R`J:*SH)FJGI>H"
+ "HYRMJZ2WKZ>]K:B]KZJ_LZ[%K*B`IZ.]J:;\"IZ2`JJ?%I:;%G9Z]EYBWD)&P@X*@"
+ "BH>CEI*JBH6<A7V3D(B>C(.9AGV3?'2*BH*:C(:?C(BBC8JFBXJHCXZNFIFYC8JF"
+ "H9NTBH&7?G*'@G%`;EIEG(>/G8F3BWV+8UAI3416:5YP;6-\\:5]X:%][>&^-?WB8"
+ "HIZ_FYBTFI:PFI2QEY\"RHYR_G)6WI9Z^F92UA8\"AI)^`KJG(HYZ]JZC$JZC$JZO$"
+ "FIRTBXVE@(\"7<W.*85]V:VE`<V^&='\"';V^(:6F\":&A_:VR!='*&<W\"\"E9&AA'V."
+ "B'Z(54E4?&]XDX*+A'%TB')SH(B%J)&*DGMTE8%WGHM\\F(9WB'INAGQT<FAG=VYR"
+ "LJ>VO;3&K*2\\L*K%JZ;#J:6_L*S#M;##M;')L*S#HI^SG)FKH)VOHZ\"RJZB\\L*W!"
+ "L;'*KZ_(JZO$J::`J*7!J:;\"IJ._HI^[F9BXCY\"OC8ZMBXRKAH6CC8JFCXNEA'Z7"
+ "A7V5DXNAC86;@WJ0:F)Z@7N4BH:@C(>DA8&BD(^PF9BYE).SFYBVH9NVB'R39UEO"
+ ";5MP>&-SI(Z9J)2<C'Z*449734)4;V)U;65[<6F!=&R%@'>5>W24>G:7>7:4?'>4"
+ "?WB8@GN>BH*HAG^BA8\"A;6B)75AY@'N<@7R;:VB&>'61AX2@>7:2@(*:>'J2=76."
+ ";FZ'8%YU7EQS9F)Z;FJ\"?W^:@X.>?7V6;V^&;VV$<&R#BX:;;F9\\=&M_6$U?=6AZ"
+ "AGB(A')]@FYVAW)VA&YOCWEZEH)`G(F$BWETBWQXB'Q]>G%WA7Z'M[+%Q,#7L[#,"
+ "L[+2KZ_0K:[-K:[)JZW%KK#(K*[$H:2XG:\"RHZ:XJ:R^KK'%L;3(JZW%K[')KZ_*"
+ "J:G$IJ._HZ\"\\H)VYFYBTD9*QCH^ND9*QD)&PBHNHB8:BA(\":>'2.A'^4C(2:?'2*"
+ ":6%W755M=W&*@W^9A'^<AX.DC(NLCXZOCHVNEI.QGIBSA'J35TE?8U%F=%]OH(J5"
+ "J)2>AWF%2C]03$%395IL:6%W=FZ&>'\")@WJ8AX\"@9V:';&B):F6$9F&\":V.+;&6/"
+ "<6N2:F2)85M^:6.&<&N,:&2%;6J(;VR*='&/<W\",7U]Z5E9Q7%QW:F>#9&%[75ES"
+ "8U]Y;&B\"='.1?'N9>'>5:&B#965`;FN'BX>A=&Z)=VZ*;V:\"=&J$=FB\"=69\\<%]P"
+ ";EQI95->6TA*9%)1<&%=<&%=BG]\\B7]_@7I`DXV6KJ['N[O6L+/3M+C<L[G>K;/6"
+ "JK#1J*_-JK+*K;7-IZ_%H:F]HZN_I:W!H:F]GJ:\\I*C$J*S(IJ?\"FYNVDY.NF)6Q"
+ "G9JVH)NXF)FVDY2QC)\"NB(RJAH>DAH:AB8:@C(BBC8B=B829<FI`6E)H755M=&Z)"
+ "@7R9@7R;A(\"AB8BIB8BIC8RME)\"QGYFTD(:?64UD9E1I=V)RG(:1IY.=?W%]1CM,"
+ "5TQ>;&%S<VN!C86=AWZ:B8\">D8JJD9\"QEY.TD(NLAH\"CBH.MB(&LD(NUA'^HBH2I"
+ "D8VQCHJLE92UEY:VEY.TG9JXHI^]=G636%=U4D]M;&F%8EUZ75AU7%9S6U5P96&\""
+ ":&>':&>'86!`7%M[6EEY=G*3<&N,;VJ+:V2$:%]_?722G9.MJY^VHI6HA'B'9UQ9"
+ "6U!+54M#4$9!6U),6%-09&!@A(*&HZ.^M;;5M[K<N\\'FN;_DJ[/8J;+4K+77K[;1"
+ "LKG4K[?/I*S\"I*S\"IZ_%GZ>_FJ*ZG*\"\\I*C$IZC%G)VZE)2OE9*NEI.OE9\"MDI.N"
+ "D9*OC9&MC9&MCH^LAH>B@H*;A8*<@G^3>'.(8UYS4TMC8UMS;VF$>G21>W:5?WN<"
+ "AX:FB(BIC8VNC(NKFI6RFY.K9%MQ:EAM>61TF(*.JY>B?G!^1#Q,7U9H<F=Y;V=_"
+ "E(RDBH&=AGV;C(6ECHVNDHZOB(6C@WV@C(6OB(*OAX2N<6^7>72;DI\"T@X.FDY.V"
+ "FYN\\F9FZEI6UJZ?(GINY<&V+55)P<6R+651Q75=T6U5R4TUJ4$MJ5E)S75EZ7UY^"
+ "6UIZ5E5U:V>);6F+<&V+:F6$8UY]>G21CXFDGY>OG)2J?G6)?G=^;6-K7%-93D5+"
+ ".C-!1#Y'7UQF@7^-EY2PM+/1PL/BN[[@M;C:K*_1K*_/K;#0NKO:N;K7M+70IJB`"
+ "I*:^IZG!G)VXF)FTGJ*\\I:;!I*6`F9FTCX^JCXRHC8JFBH6BB8FDB(FDB(FFBXRI"
+ "BXRI@X.>>7F2>'6/;FJ\"8EYU6E5L5T]G;&1];VF$>G21@7R9?WZ<AH6EAH>FB(FH"
+ "@(&>D(VGEI&H95US8E%D<F!OE8&,L9^L@G:%1CU/7%-E:%UO:F)XD8FAAGZ7A7R8"
+ "CHBEF9BVDI*MAX2@@GZ?BX:MB(6O>WJC8F&)<'\"5;6^4='B<D)6VA(FJE)>WGIZ_"
+ "B8BIEY2R<W\".5E%P;&>$65-P75=T8EEW6U)P85IZ:&&!:&.\"8V!^6UIX6EEW:&6#"
+ "9V2\";6J$;VR&:6:\"9F-_4T]I3TMC5E%H241;1#Y;/#93.\"]+.3!,,\"I%2D1A7UIY"
+ "96&\"@7R9IZ*_N[C6KJW-K:S,L*W+M+'-M;#-K*?&JJ7\"K:G#J:6_L:W%M[/-I:&["
+ "GYJWH:&ZH:&ZG)RUE)&KCHNGCHNGCHNGC(FEDH^IB(6A>GJ5;W\"-9F6#75UX659P"
+ "5E-M2TAB1$!:2$);3DAA8%IS8UUV<6N&?'B2A(2?A(2?A(6B@X>C?X\";C8VDD8ZB"
+ "8UYQ7U!C=F1SF822L)ZK@'.%2T)4751F8UMK95YQ?W>-;F9^=&R%?GB3EY>PDY.J"
+ "CXVDBH>CAH2HAH2L<G&986.(:6N2;G*8=GR?@XRNCI>WC9*SAXJJ?W^@CHFF?'>4"
+ "5U)O6%)O5U%N5DUI7%-O751P95MW:6!\\95]Z8U]Y9&%[;6J$='&+<&V'7EQS;&F#"
+ "<F^+>7:2<F^-=7*0<6Z*:&6!6U=[4$QN2$)E24-F34=J5E)T6U=[4E!V:V:%?7J8"
+ "DH^MDY\"NH)NZHIRYJJ&]LZO$M*[+J**]IJ\"YHIRUK:B_L*K#EI\"IBX6>EY.JFY>N"
+ "H)RSH)RTF9:PC8JF@7Z:>7:496%[7UMU7%EU5E9Q34QJ3DMG34ID1T-=14)@0T!<"
+ "34EC5U%J85QS9V)Y=W&*?GJ2@H*9?X&9@X>A@X>A?X2;D)\"GC8J>9V-S85)E?VU\\"
+ "GHF7II2C=6AZ4$=;8UIL:V-S;VAY?WB+<FI`@'B0A'^6?GZ5AXB=E)6JEI.MB8BI"
+ "AX>L;W&8;&Z3866+<GB=@XNPA(ZPE)Z`=7N<;G&3@X.FE(^LB(.@55!M/3=444MF"
+ "341@6U)N:%YZ:%MX9UUW95UV:&1\\;6F!;6N!:&1[8%QS;VV$B(6?DY\"LG)FWHIZ_"
+ "L*S-KJK+L:W.G9VXE)2MCHNEB(6?A8*<:69`7U]Z8&![5E)S34QL7%M[<&R-A8\"?"
+ ">G2/@'B1EXVGGIBSAX&:?WJ1?7B/DXZCI:\"WE(^FD(JCEH^BEI&FF92IEI*IB86?"
+ "='&-85YZ5U1R85MT6U=Q7%=T55)N2$5A1T1@2D9@03U71T9F3$EG651Q85MT8EUT"
+ ";&=^>72+>W>.>GN0>7N1A8JA@XB??8*9BXRA@X*39F-S6DM>@&Y]H(N9G(J9:UYP"
+ "4DE=9%UN;&1T:F-T?G>(@'F,F9&GE(^F='&+@'N0HINLJ:6UB(:<>7J5>W^==G>6"
+ "9&:->'NCEYK$EYS'C9*]:&N3;6^6>7F>BXFOA(.C7%EU.S=144MH3D5C7U5Q;6-\\"
+ "95]\\7EAU7EAU:&-`;FF&8EUZ7EMW;&F%EY6LKJO%M[3.J:;\"HI^[K*G'L[#.L*S-"
+ "IJ/!GINYHI^]IZ3\"JJ?%F)6SC8JHAX2B?WR:<F^-=7*0?WJ7>'.0;6B%;&:!>7.."
+ ">G:0;6F#655O2D9@9V-[=7&);VN#:&1\\;VI_;FE^='\"'<V^':F9`7UQV6E=S8E]["
+ "<F^+='&-<&V)8V!\\659R6UAT6E=S3TQH34ID75IV<&N*<FV*;VF\"=&^$?76-?'./"
+ "=76.?'Z6>X\"7@H>>>X\"5B(F>@'N085IM4D58>&=XGHR9C'N*:%UN6%%D:6)S<&AX"
+ "=F^\"?'6(@GJ0DXZEDHRE;VV#<&Q\\AX&.C8F6AH64<72(<G2,<'\"+7F&!=7B:E)B^"
+ "E)>_A8BP6UZ&86.(='29@7^CA82D8%UW/#A23TEF44MH7E5Q:5]Y9%Y[6U5R75AU"
+ "9%]\\9F%^=&^,D8ZJJJ?#O;K4P+W7M;+,H9ZZFI>SHI^]IJ/!H)R]FI>UDY\"NF)6S"
+ "GINYK:K(J:;$I*&_G)FWG)FWE)&OF)6SBXBFDXZKAX*?A8\"=?7B5>W>19F)\\2D9@"
+ "/3E34$QD85UU4$QD2D9>3DM?7%EM;FJ!<6V%<F^)>7:0=W20>'61;FN':F>#:&6!"
+ ":6:\"<6Z*>WB4=W20:6:\"8%UW:6:\"<F^-=G&.>'*+?GF.A'R4?W:2=W>0?X&9@8:="
+ "A(F@@H2:C(J@@GV27E=J34!3<V)SG8N8BWJ)9UQM8UQO<6I]=6Q^>'&$=V^%=FZ&"
+ "A'Z7@WV6;VU[<&IW>W1]<6QR<W)Y76!J969W;FQ`7E]Z>WR9FYZ^EIB]@8.J5UE`"
+ "65M`<'\"5=725@H&?8%UW.SE01#]<24)B44MH85ER8EUZ8%MX<FV*A8\"=C(>DH)VY"
+ "M[30N;;2L:[(LJ_)K:K&IZ2`JZC$L:[,KZS*IJ/!GYRZG)FWH)V[HZ\"^L:[,KJO)"
+ "HZ\"^DY\"NFI>UG9JXG)FWB8:DF).PF).PEY*OA8\"=@GZ8=7&+8EYX5%!J7%AR=7&)"
+ ":&1\\;VN#=7*&@'R3C8F@B86=@X\":@G^9>'61<6Z*:6:\";6J&=7*.?'F5@G^;B8:B"
+ "BXBDA8*>=7*,='&-=G.1>721?'B0A'^4@GV4>7..='2-?'Z6@X6=@8.;@H*9BXF?"
+ "A'^4759I13I,<F1THI\"=B7B'7%%B95YQ;F=Z=FU_@GN.>W.)=&R$@GR5@7N4>'5]"
+ "=W!Y>7!V:V5H:FAH75]?8&%E7EQH7EQR?7J4GIV[F9>[@8\"H5E5]34QT8&\"%>GF9"
+ "@8&<7UUT/SU414)>2T9E2D5B6%1N:62!=7\"-CXJGI:\"]L:[*P;[:Q<+>MK//KZS("
+ "K:K&JJ?#IZ2`IJ/!I:*`H9Z\\G9JXEY2RF)6SHI^]J:;$NK?5N;;4L[#.IJ/!H)V["
+ "IJ/!FYBVD8ZLD8ZLEY2RF)6SDY\"NCHFF?GF6<&R&7UMU:65_B(2>B(2<E9&IG)JP"
+ "FIBNG)JQE)*IB8:@?GN7<&V);6J&='&-?'F5B8:BC8JFAX2@A8*>B(6AB8:B@X\":"
+ "?7J6>WB6?7B5?WN3@G^3?WJ1=&Z)=G:/?W^8A8>??GZ7@H*9C8F@C8B=9V!S13I,"
+ "<V5UH)\"<?W%_4TA:9U]U:V-Y<FE]A7Z1?'2*=V^'B(*;B8.>:F5J:6!F<&1I;&)B"
+ "6E9,3T]$6E947UA>7UIM=&^$F)*MI)^`E)\"T8EV$1T5K7UV#@H*=A(2;8F!V/3M1"
+ "03Y:3TQJ3TQJ5U1P96)^AH.?I*&]L:[*N+71OKO7O+G5M[30JZC$JJ?#JZC$KZS*"
+ "L*W+K:K(J:;$J*7#H9Z\\GYRZI*&_IJ/!KJO)J:;$J:;$I:*`I*&_I*&_FI>UFYBV"
+ "EI.QE)&OI*&_L:[,G9JV=G./9F-_8E]Y?7J4D(VGCHNEE9*LH)ZUF):ME)*IC8JD"
+ "B(6?AH.?@'V9@7Z:AH.?AX2@C8JFD8ZJC8JFBH>CB(6A@X\"<B(6?A(&=A(&?AH&>"
+ "A(\"8@X\"4?WN2=W.->'B1@(\"9A86>?'F3?WV4BH6<C(2:9E]R0CE+;V-RE(20<F1R"
+ "5$E;;V=]<&A^=FV!>W.)=&R\"<FJ\"AX&:BH2?6E%36DU5<%]H@7-S<&A<8%I+759/"
+ "85=99%IF9UQKA7R0I9NUI9RZ<FN-44UN;VN,AX2>BHB>;F^\"/#U2-S=24E%Q:VJ*"
+ ">7B6CHVKL:[,QL/AQL/AQ,'?P+W;NK?5NK74KZS*K*G'K*G'L:[,LJ_-K*G'I*&_"
+ "H)V[FYBVFI>UH)V[H9Z\\IZ3\"HZ\"^I:*`I:*`EI.QCXRJDY\"NEI.QFYJZD9\"PL*_/"
+ "N+?7BH>C:6:\";&F%AX2@J::`I*&[H)VWHI^YI*2[GIZUF)BQC(REC8JDDY\"LCXRH"
+ "C(FEC(FEB8:BBXBDCXRHD8ZJDY\"LDY\"LC8JFB8:@AX2@B8:DBXBDB(:=A8.7A(*8"
+ "@GZ8?GZ7@X.<A8*<?GJ4?7F1A8\"7@7F/6E-F/35%<65TC7^-:5MK4D=99EYV;65]"
+ "?'\"'=&R\"<6F!<FJ#AH\";B8.>@'1W;EUF8TU88D]1;6%2;651;F1;;U]A8U=87E)7"
+ ";5]K@G6'C(\"5;F5[3TI?:F=[>':-<G\"$:VQ]34YC5U=R=WB7G9Z]L+'0O+O9P\\+@"
+ "Q<3BO[S:M[32MK/1M;+0L*O*JZC&I:*`H)V[GYRZGINYFYBVF)6SF)6SG)FWG9JX"
+ "H9Z\\GYRZIZ3\"IZ3\"IZ3\"H9Z\\F)6SD8ZLE9*PEY2RG9R\\F)>WK*O+EY:V:&6!;&F%"
+ "@X\"<J*7!MK//K*G#K:K$K:K$IJ:_GIZWFYNTE96NF)6OFYBTDY\"LCXRHC(FEBXBD"
+ "C(FEC(FEC8JFE9*NFI>SEY2PBXBBAX2@B(6CBXBDB8>>B(::BHB>B8:@B8FBBXBB"
+ "@X\":@GZ8?WF2BH*:>W.)4TQ?1#U->6Y]BGR*8E9E4DE=6E)J8UER<V=^<VN!=6V%"
+ "=V^(B8.>BH2?D8*&FX>1E7V*>6-FA'1F?7)=@')H@&UP;6!9:%I89%577T]8:5MG"
+ "8UEE2$)/6%5?65=M/CQ02$E:65IMAH>BIJ?&P,'@Q<GGQ,/AP+_=Q<3BP\\+@N;;4"
+ "N[C6OKO9LZ[-L:W.LZ_0M[32MK/1K:K(H)V[EY2RE)&OEY2REI.QE)&OC8JHF9:T"
+ "HZ\"^IZ3\"G9JXF9:TFI>UE9*PFIFYFIFYIJ7%I*3%=766;VR*CXRHH)VYM+'-JZC$"
+ "J::`L:[(JZC\"IZG!FIRTG)RUI*2]IZ?\"H)VYDY\"LE)&ME)&MCXRHBXBDB(6ABH>C"
+ "E)&MF9:RE)&MCXRFB(6AAX2BBH>CBHB?BXF=CHRBCHNEB8FBA8*<>'2.>W60=W&*"
+ "A7V5<FI`2T)66%%A@'6$@')`6T]>7E5I8%AP7U5N8E9O;F9\\=&R$>7&*B8.>AX&<"
+ "<E]A?FILA6]PAV]NBW1ODWQSDG]PC'EG@VUA@VUA?&A><5Y8<F!==FAH:EY?8EA:"
+ "7%IF/#A%6E=G@(\"7FI^]M+K;P\\CGOK_>LK;4NKO:Q,7DP\\+BQ<3DO;G:N+35J*/$"
+ "H9V^G)BYE9\"QGYJ[G)>VE(^NA'^>A8\"?C(FGE9*PGINYH)V[GINYH9Z\\H9Z\\F9:T"
+ "DH^MEY2RGYRZFYBVF)6SHI^]CXZL8F%_AH6CL*_-I:3\"J*?%F9FTEI:QG)RWGY^Z"
+ "G)ZVF9NSG)RUI*2]IJ._GINWEI&NDXZKDH^KCHNGCHNGD(VIC8JFCHNGD8ZJDH^K"
+ "BXNFCXRHCXNECXRFBXVC@H69A(*8DXZEB(6?>G:0;&B\"<V^)>'*+>G**9%MO4D=9"
+ ";&%RAW^+>G-\\8EIH6E%E7U5O5DQF75-M95UU=6V&>7&*A7R8@WV83SI!6$%(:5!5"
+ "?6-GD75UF7YXDWMPBG)EB'%BC'5DC79EAW%BAG1GA7=O@G5P=6II>'9`55)<>'2#"
+ "E)6JIJO)M+K;Q<KIRLOJR,SJQ,7DO;[=MK?6N+?7IJ+#H9V^HY^`E)\"Q@'R==W*3"
+ "@WZ??GF8@7R;?GF8?'>6?GN9CHNIH)V[IJ/!I*&_I:*`H)V[E9*PE)&OE9*PG9JX"
+ "GIV[FYJZE).S>'>745!P=W:6JJG)J*?%K:S*H)^]F9FTEY>RF)BSG)ZVG9^WG)RU"
+ "F9FRG)FUGINWG9BUF).PCXRHD(VIF)6QGINWFYBTE9*NDY\"LD(VIE96PFI>SFI:P"
+ "E)&KBHRB@H2:A(*8BX:=AH.=?7J4;&B\";FB#<FR%=6V%95QP7U9J?W2%EHR8@7J#"
+ "8EIH8%=K:%YW7U5O7%)K8UMT:F)[;65^@'>3AH\";>F-NA6YYCW1^D7-ZE79ZFGMY"
+ "E'5OB&IAAVQ8C'):D7==C75:BW=??VY;@G1J;6!9=W1\\7%9?C8>4IJ2ZL[?3M[W>"
+ "P<;ERLOJQLKHP,3BN+G8L;+1MK75HZ+\"FI:WH)R]CXFL;VJ+96&\";6F*85U^;&F'"
+ "=7*0;&F'<W\".@X\">DY\"NEY2REI.QG)FWG9JXE9*PEI.QFYBVG9RZGYZ^GIV]DY2S"
+ ">7J97EY_@X2CHZ3#FYR[JJO(K*W*H*&^EI>TFINXGI^ZG9ZYF9FTDI*ME)&KFI>Q"
+ "G9FSFY>QE)&MEI.OGYRXI*&]G)FUDH^KC8JFBXBDE)2OF)6OFI:PD8ZHA(:<A(:<"
+ "B8>=BH6<A8*<A(&;>G:0>G2/<VN$:&!X8%=M;&-W?7*#C(*.=VUW5$Q:8%=K<&9_"
+ ";65]9%QT8UMT9%QU9%QU<6N&A'Z9BW1]DGB\"DWA`CW)WCFYPDG!OE'%JD6]EAFA1"
+ "B6M0D713E'I6FH%ABW==E81S>&I@?'5[;F5KI9VIM+'#O+W8NK_>N\\#>O+W:O\\#="
+ "O\\#=N[S9KJ_,K:S,HZ+\"C(NK?GV=9F\"#44MN2$1F14%B/3E:44YL9F.!8V!^9&.!"
+ ">WB6D8ZLFI>UG)FWH9Z\\H)V[EY*QEI.QI:*`I:3\"G9R\\G)V\\EYBW@8*A;&^/@X2C"
+ "IZC'HZ3#JJO*IJ?&EYBUD)&NFINXGZ\"[F9JUE96PE)2OEI.MEI.MFI:PGIJTEY2P"
+ "EY2PG)FUGINWEY2PDY\"LEI.OF)6QD8ZHD(RFD8VGC(FC@H2:A(F>C8VDC(B?B8:@"
+ "@GZ8=W&,;F6!4TEC3$);7U5N?W:,B'V.C8./=VUW54U;8UIN<&A`<6F!9U]U:6%Z"
+ ":V-\\9F![;&:!A'Z;95!494]2;E59?6-CC7!MEG5OFGANGWIPF'ICEG9<F'I9FWU8"
+ "H(-BCG9;EH%M>&99=&AI=FIMK*&HL:JZL+#'L[?3M+C4LK+-M+3/L;',L*_-HZ*`"
+ "F9BVE).S>7667UM\\3TEN7%9[8EY`6E9X5E)S6UIX8%]]65AV7%MY:FF'>GF7A(&?"
+ "BXBFF92SHIV\\GYJYI)^^K:K(JZC&H)^]G9RZC8ZK<'&.6U][>7J7G)VZG9Z[GZ\"]"
+ "I*7\"HJ.`FYRYFINXG)VXEI>RDI*MDI*ME)&KDY\"JEI*LF)2NEY*OEY*OFY:SG)>T"
+ "EY*OEY*OFI6RFY:SDY\"JCHJDCXNECHRCAHB>A8J?BHJAB(2<@GZ8>G2/<6F\"7U5N"
+ "035.3D);<F9]BW^6D(.6C8*1>G!\\7%1B9EUQ;&1\\;65]9EYV<&J#<&J#<&J%>G2/"
+ "DHRI6TE(:%95=&!>>V9BA6YIDG=OF'IQEG5KD'!@CFU:DG!6E7-7G7MADG9?F7]O"
+ "AW%C<&%=?VULK)VAN:^[L[#$M;7.M[?0M;/*J:;\"H9ZZHZ\"\\GYRZE)&OBX>H:&2%"
+ "5E)S;FB-CHBMGIJ^DHZPC8RL@8\">;VZ,7E]\\4U)P7UY\\<G&/A(&?C8JHEY*QF92S"
+ "DXZME8ZNDXZMDXZMG)FUI*2_F)BQA8>?@(*:D)&LBHNF>GN6@X2?E)6REYBUF)FV"
+ "H*&^HZ3!HZ3!G9VXDY.NE9*LFYBRG)BPE9&IE)\"JF96OH9VWHIZXH)RVHIZXH)RV"
+ "F)2NBXBBB(2>B8.<AX6<@(*8>X\"5>GJ1=W.+>G2->'\"(;F)[6DQD1C9/9%1M@G*+"
+ "AWF1BWV3AWJ-<F=V7%%B85AN:6%Z:F1]:&-Z<VV(;6>\"<VV(C(:CFY:S<&%=@'!O"
+ "BWMZB7IVB75SD'MVF8!ZG(%YE7EMEW=KG'AKFG1FFG1FE')EEGELE'IM>61?>F5@"
+ "E(!`LJ6NKZBYJ*:]I:.ZHIZUK*C\"J:3!I)^\\GIFVF92SAX*C7%=X75AYC8>NH)K!"
+ "IJ+&F96WFYJZDY*PAXBE>WR9:6J'8V)`86!^9V2\";6J(>G64A'^>AX\"@E(JMC8:F"
+ "C8:FEI&NFYBRDI*ICY\"EEIFKHZ.\\C(RE>7F2>GJ5=W>2;V^*?W^:EY:THJ.`HJ.`"
+ "G)RWE)2OF9:PHI^YHIZVFI:NE9&IFY>OH9VUH9VUI*\"XK*B`J:6]G)BPDHZFEY&J"
+ "DXVFBHB?A(:<@8:;?H\"6?7N2>G**<&=]5DA>13-*02Y#7$A@=6-ZA'2-F8NECH\"6"
+ ";&%S4TA:5$IC:%][;FB#;FB!=6^*;&:!=&Z)CHFFD(NH:%I88%)09UQ;@')RA75T"
+ ">6=F?FEGE'QYB&UECF]IEG-LE6YHD&EAD6QCD')GG8%UAF]F<UQ5=F%?IYB>KJ:V"
+ "J:6\\IJ*YIJ&VJJ2_LZW(HYVZE8^LF)&QBH.E7UAZ<6J,HIS#J*+)KJK.JJ;(L;#0"
+ "JZS)HJ.`D9*MAH>D<W*08F%_7EMY7UQZ:62#=7\"/>W24?7.6A7N>BX2DCHBCBX>?"
+ "C(J>E)6FH*&RF9FPDY.JBXND@X.<?GZ7?W^:B(BCB(BCA(6B?X\"=?W^:A(2?CXRF"
+ "E9*LEY.KEI*JGIJQGYNRFI:MD(RCCHJAF)2KEI*IAH*9A(\"8CXFBAX&:='*);G\"&"
+ ";G.*;G\"(;VR&;F5[9%AO1C=+02Y#1S%&3SE/7$A@@6^&G(VIC'Z67E-E0C9+1#I4"
+ ":%][=G\"+>'*->7..<VV(=W&,B82A?GF67U5?2#U%4D5-=&EQ>W%[;V5O;V-H=&1F"
+ ";518@&9HDG9TB&MHAFEFBV]MB&YPE'M_B71X;EM@8U-<A7F$IY^OK*>ZHZ&WFYNR"
+ "I*\"XHY^WFY>QDHZHC(>DCXJI:V:'>G66J:7'H9N^H9J\\OKG:N;K9K+#,GZ\"]G)FW"
+ "C(NIC(NI?GN9>7:46%5S9V2\"<VZ-85Q[55!O96\"!>7*4;FB%=7\"%:65U;FIZ<VZ!"
+ "<FZ&>'2,AH*9B(2;>W>.D8VEDX^IA(\":?'>.:V9]>G6,CXJA@GR5>'2,@GZ6B(2<"
+ "EI*JFY>OEI*JAH*:@GZ6BX>?B(2<=7&)=&N'<VV&;FJ!:FA_;&R';V^*<6^&<W&%"
+ "@WJ0@'2+>VR\">V=_9U%I54%94CY6<5]VBWR2;&-W24190#M02$!89UUV@WN4>'*+"
+ "=W&,?':1?WF4A'Z;=W*1?'2\"6U%=5$A3<6=S@'F)>W>&=&QX:%UE8DY6=V)HB&]S"
+ "@&9H?F1FAFQN@6MO>V9L@&QT=&-L:EID<V=T@'B(D8R?H)ZRK*J`GYNRH)RTFY>O"
+ "EY.MCHFFAH&@9F%`@'N<KZO,J*/$I9Z`NK76L[31HZ?#EYBUDY\"NCHVKD9\"NC8JH"
+ "C(FG@'V;?7J8@GV<;VJ)5U)Q44QM7UAZ7%9S651I/3E)0#Q,3TI=34E@6E9M=G.'"
+ "<W\"$9F-W;VN\"?GJ2@'R4:F5\\7EEP5U)I55!GB8.<A'Z7B(2<CHJBGIJRGYNSG9FQ"
+ "DHZFAH*:@7V5=W.+:65]6$]K3$9?2$1;5E1K9&%]9&%]:&1\\='&%AGJ1CH\"8EX6<"
+ "F(2<A&Z$<V!U;%IQ?F^%@G2*7E=J.39*-3)&3$1<9EQV?'2-=&Z'<VV(@'J5@GR7"
+ ">7.0;6B'BX.99%UP3T9:9V)WA(*9C8VDAX.:<6I]8%5D9%9D:%AD<U]I?&=OA7!X"
+ "A'!Z<%]H>6=T?&MZ<6-S95IK6%%B<6Q_CHR@I:.WJJ:]J:6\\HY^WGIJRCHJD=7\"-"
+ "55!M>'.2LZ_0L:S-K:;(NK76L[31I*C$F9JWE)&ODI&OD(^MC8JHBH>EE)&OBH>E"
+ "E9\"OB82C6E5T1#]@44IL7%9S9%]T5$U>5D]@8UQO;&1Z95YQ:6)U:V1W@WR/@GJ0"
+ "=V^%<6F!:6%Y9EYV5T]G1#]6@7N4=&Z'<&J#=W.+@GZ6?'B0>G:.>'2,<6V%;6F!"
+ ";VN#;VN#7UET6%)K7EIQ=W.+BX:CC8>DDXNDI)NQL**ZL*\"YLJ\"WL)VRJ)*HI9*G"
+ "F8J>G(ZDCX:<96!U/#I.,C!&44QC8EAR<6F\";&9_:F1_@7N6AX&<=&Z+;VJ)D8RI"
+ ";&:!3DID8F%_?X*BB(VNA(>G<&^-96%Y2T9=24!4<F5XC7^/D8.3D(*2>6M[8E-G"
+ ":%MN:5UR8UIN5$U@:F5Z@G^3F):JKJK!KJK!I:&XFI:NA8&;9&!Z2$-@;VJ'JJ?%"
+ "L:S+LZS,NK74MK?4J:W)GZ\"]F)6SCHVKBXJHBXBFAX2BC8JH@'V;AX*A<VZ-/CE8"
+ ".3155U!R:6-`>W.)?W:(?G6'?G6)A7R.>W*$<&AX>'!`GI:FG).EC828EXZBGY6N"
+ "GI2MEX^GDXNCGIBQEY&JDXVFFI2MG):OCHBAA'Z7?WF2>7.,>G2-@WV6BH2=BH2?"
+ "D8NDF92KHIRUJ)^]I9J[I9BUJYVWL*\"YJIBOJ)6JIY&FJI2IK9ROH9*FF(J@BH*8"
+ "9V1X0T19-#)(4TYE7E1N;&1];6=`:6-^@WV8BX6@>'*/>G64BXJK:V>)3TMM:&B-"
+ "@XBO@HJR?8*I:V^37V!_/3Q<03Y:>7..G)2LGY:LFHZE@76,6DUH54ME8UER:V-["
+ "7EEP9&!W:V=^>':,CXNBF96LE9&IA(\"8;&B\"4DYH245?=&^,G9JXKZK)MJ_/M[+1"
+ "M;;3IJK&FYRYD8ZLAX:DA(.AA(&?@X\">>7:4>G>5@7R;85Q[,BU,1T)C>'&3AGV;"
+ "C(.9DXB:CX26C7^5CX25>F]`=6IYA7J)D(64G9*CHYBJM:J\\M*C!M*C!L*:_LZG\""
+ "IIZWJJ2]JJ2]J**[FI2MD8NDBH2=B(*;BX6>EI\"IH9NTHYVVH9BTJ:2[KJF`JZ6`"
+ "JZ+\"JYV_JIN[K9VYJIBQJ96MJY6JI9\"BII&CG8R=AWB,=VM`=FZ&7EIQ24I?-S5+"
+ "3DE@6U%K<&B!>'*+;VF$@GR7BH2?@7N8B82CAH6M:6>-3DQR<'*:D)?\"BY2`@8BS"
+ ";W*:4U5Z/S]B2$=H<V^0D(NJFY6RF9\"L@7B48EEW4DEG9%Y[<&J%:&)]75EQ4T]G"
+ "4T]G9F)Z>'2,>W>/9F)\\34EC0#Q634AE>G62GINWM[+/O[G6N+/0M;;3I*C$F)FV"
+ "BXBFB(>EAH6C@X\">A(&?=G.1A(&?C(>F:62#.S95241E<FN-?'.1@7B.C8\"3BGV0"
+ "E(6;GI*A<&1S;6%PBW^,CX.2IIJIJ9RNGI&DJIRVL*2]MZO$L*:_J*\"YJ:&ZIJ\"Y"
+ "GIBQFY6NEI\"ICXFBB8.<BX6>EI\"IFI2MD8NDG)2MFI*JE(^FDXJFD8BHC8*ED(&A"
+ "EXBDDH\"9CWN3AW&&=V)R@FU]?FM]959I54==-\"I#+RE\"0D!724=>6U5N9UUW<&B!"
+ ";&9_>'*-?WF4@WV8A'Z;C(>FD)*Z=72<551\\=7:AEIW*CI?#@XBS;&Z63U%X04-H"
+ "3T]T:&:*@7V?EY*SE(VM@7J:7UAZ3$5E9V*!=&^.?'>4<FZ(8%QV3DID34EC6%1N"
+ "7%AR34EC/3A5/#=46%-P?WJ7HI^[P+O8R,+?N;31MK?4IZO'GI^\\D8ZLC8RJDI&O"
+ "C8JHCHNIA8*@BH>E@GV<6E5T+RQ*+2A)0#E;1SY<5DIA9EEL959J>FA_A7F(9EII"
+ "9EIIA'B%H)2CL:6TJIVOH92GH)*LFXVGJY^XM*C!KJ2^H9FRG):OD8ND?GB1?GB1"
+ "?7>0>'*+>G2-@7N4?':/;FB!=&R%<VN#=&R$>'*-?'.3>F^2@7.5C8\"=>VF\"?6M`"
+ "<EUO8TU;A7!^EX64C'N.?F^%959R2$!93DIB5%!H5T]H9EQV<FJ#;FB!>G2/>G2/"
+ ">W60@GR9@GV<DY2_>7BA551\\<7*=D9C%C).`A(FR;6^63TYV1$-K555Z:VF/A(*F"
+ "FY>YDHVN@GV>7UI[2T9G;FF*?'>6E(^ND8RI>7215E%N0#M803Q90SY;/CE6/#=4"
+ "2$-@:&-`B(.@H)VWP+S6Q\\'>M;#-M+70J:W)I*7\"F9:TDI&OE92RAX2B@'V;@G^="
+ "@X\">>G646E5T,2Y,+BE*.C-5.\"U,0#1+3C]32CA-8$YE9EII95EH6DY=:5UJJY^N"
+ "L:6TH92FLZ:YFXNF<F1^?W&+HI:ODXFC@'B1=W&*:&)[6E)K85ER:6%Z;&1];65^"
+ ";F9_8EIS3D9?5DYG85EQ:6%Y:6-^95Y^8%9Y8E=X;%]\\6$AA<%YS<UYP9U%?DWV+"
+ "KIFII92GFHNA<&!\\1#I424-<65-L6%!I:V%[=&R%:V5^;FB#<&J%=6^*A7^<A'^>"
+ "CI\"W;&Z54U5\\:VV5BHRTD)*ZA(:N;G\"85%=_2$MS6%J!;FV5<G\"8C8NQDHVT@'NB"
+ "7EEZ2D5F:F6&@'N<GIFZHIV^AX*C85Q]0#E;.S1614!A/CE:1D%B34IH;VR*FI>U"
+ "K:C'O[S:O[S:KJO)M[;4L*_-HJ.`F)FVE)&OC(FGAX2B@GV<=7\"/A8\"?>W:55E-Q"
+ ".C=5/#=60SI:13I933Y<4D1>3S]87$UC95AJ<V=V5TM8:EYIHY>DK:&PK)^QLZ:Y"
+ "EXFC75!M4T5G:UU];F%\\7E1M3T5>34-?0SI644AD=&R%@7F2@'B1;65^13U603E2"
+ "55!G95US;F1]65!N5E%R44MN0CE98%%O2SE0>69Z@6Q\\?VEUAG!\\J92DL)VOFHB="
+ ":UQR/2Y*1#96449E7E9O;65^<FJ#:6!^:V6\":6-`=&Z+B8.@E(^LCI&S:&N-5%=Y"
+ "<'\"3C(ROC8VPB8>K=7.77%^!3DYQ6EI]:VN.:FB,@H&BBX>I?WN=6E5V1#]@9%]`"
+ ">W:7DHROFY6XA'ZA6U5X.S17.C17/3=:.S971D%B655V>766I:*`N+/4O[K9O+G7"
+ "KZS*M;32K:S*H:*_F)FVEI6SE9*PDY\"NC8JH?7J8BH6D?WJ97%=V03Y<.C54/S96"
+ "449E75!M64ME5TEA85-I:5YO>&U\\7U5A=VUYK**NMZR[L::XL:6ZG9&J9EEV4T5G"
+ "13=93D%>3T5>4DAB5$IF3D9?4TMD?G:/CH:?B8&:=6V&345>.C)+5$QD64]H6$YG"
+ "3$-A4$ML3DAK0CE954AE23I0?&M^@FU]=V%MBG)_JI2BKYJLFH>;9E1M0C).3T!@"
+ "5TQK65%J8EIR<&B!<VJ&<VV(;6>$<FR)?7>4DHVJBHZL:6V+7E]^=G>6DI&OBXBF"
+ "CXRJ@GV:9V:$44YL6%5S;&B):V>(@W^@BX>HA8&B9F*#34EJ:V>)@GZ@CHJLG)B\\"
+ "B86I655Y.#)7-S%4/3=:.S582D1G7EI[B86FM;'2PKW>OKG:NK;7M+#1M+/1K*O)"
+ "HJ.^F)FTDI&OD(^MCHVKC8JH@G^=CHNI@'N:6E5T/#E7-\"].-\"U-3$%@5$=D23Q7"
+ "5$AA6DYE;6)T>6Y_8UAGAGR(L:>SN[\"_K*&SI)BMD82?9%9V6$IL1SE;34-?6E!I"
+ "5TUG85=S75-M54ME@':0BX&;B7^9>W&+7U5O1#I44DIC6$YG5DED341B2T5H1T-E"
+ "1T!@5$IF33]5?W\"#@W%`;UEEB'!]IHZ=JY2GG(:;:U=S2SA76TIK:5M[:F!Z:6%Y"
+ ":F)Z95QX:6-^;FB#?7>4E(ZKHIVZ@86C<G.28V2#='.1FI>UBH6BD(JGBH2A<FV,"
+ "4TYM6%-R<&R-='\"1BH:HD8VOBHFJ;VN,4T]P<6V/BX>ICXNOH)O\"DHVT651]-C!5"
+ ",\"I/0CQA03M>44MN9V&$HIR_Q;_BO[G<N++5M[+3MK+3M+'/KZ[,J:G$G)VXEI6S"
+ "D(^MBHFGB8BFA(.AD8ZL>G644$EI.S95/CE80#=73D-D23Y=/\"],44=@4$9?;F-U"
+ "<&5V859EDHB4L::UM:J[I)FKF8VDB'N87E!R44-G54IM4$9B75-M2#Y88UEU8%9O"
+ "5DQE?'*+?G2.@GB2>6^)9EQV3$)<4DAB7E%L5TIG3D5E14%C04!A2T9E341@3D)7"
+ "?&U`BGB'<UUIAV]\\I8V<L9FJHHN@=%UZ3#=75D)F8U1T:5]Y9EYV7U=O5T]H7EAS"
+ "9V%\\=G\"+EY&NF).P?7V@>7F<7%M\\:&2&FY6XC8:HBH.EB7^B<6J-4TQO6E1W=W&4"
+ "=W.7AH*FBXFOB8>M<6V.44UN<FZ0C8FKD8VQHIW$G9B_7UJ#,BQ1,2M0/SE>1T%D"
+ "44MN@GR?N++5P[W@NK/6M*[1LZ[/LZ_0KJK+L*_-KJW+HZ*`H*\"[G9VXE)6PD)&L"
+ "B8FDCHNG;FF&0#I7-S!0/SA80SE<4$5F2T!A.\"Y*4TEC44=@<F9[:E]Q95IKGY2C"
+ "LJ>VKZ2UI)BMFX^F=VF)3T%C2#QA5TQO4TAG6$YH/35.65!L54MD64]H@':/?7.,"
+ "@WF3>&Z(7%)L03=1341@64]K3T5A1SY>0#Q@0#YB2$-D.3-./C))95AKAW:'?6=U"
+ "AV]\\HHJ9L)>KGH6;=%UX1S)21#!21C=723]93$1<54UF7E5Q85MV8%IU9%YY<FR'"
+ ">'.0?WVA?GR@5E1X8U^#G):]D8NRB8&I@GJB8ER!2D1I65-Z=6^6;FF0>G6<@H\"F"
+ "AH2J=G*34T]P='\"2BX>ID(RNG)B\\HI[\"9F*&.#180#Q>-S-524-F54]RH)N\\O;C9"
+ "KZK+P[S>O+77M;#1M*_0JZ?(KZO,JJG)H:\"`FIJUGI^ZFYRWDY>QAXBCAH.?8UY["
+ ".S)0,BE),B=*,29)0S593#Y@/\"Y.6$YJ7E1N@7.)<F5X=6AZK:\"RLZ:XJ)NNIYFQ"
+ "GI\"J>&V,5DMN6$QS4$1I4$5D345>/C9/0SI62D%77%-IAGR5@7>0A'J3?W6/7E1N"
+ "/S5/1SY<5TYL4TAG1T!B0#Q@0#YB1D%B.S)..2U&6DQBAG.'C'6&D'B'IHZ?JY*F"
+ "EG^4=F)Z23930S)31CA834-=345>4DIC6U)P2D1=3DAC8%IU8%IU<FZ(?GV>?GR@"
+ "7UM_='\"4G9B_D(JQB8*L@'FC8%N\"2$-J5U)Y<FZ2;6F->G::A8&EBX>K?7R<5U9V"
+ "=724@H&AB8BICHVNHZ+#;VZ/4$QN55%S/#A:4$ML=&^0L:S-N[;7KZC(QK_?N[34"
+ "L*O,M*_0JZ?)JJ;(G9R]F):ZD9&LF)FTE)BRCY.MAH>BB(6A:F2!1CU;1#E:1#9:"
+ "0S-83#QA74UR44-E:EQ\\;V6!C'R5?6Z$B7J.MZB[LJ.VI)6IKIZWHI*M<VB)75%V"
+ "7U-Z3$!E44AH8%=S:%][85AT1CY465%GAGZ4@WN3?W>/BH*;<6F\"3$-?03Q;54QJ"
+ "5DUM349H14%E0S]C1#]@1#I61C=574UH?FM`CG>*F(\"1K92HJ)&FG86<@6^$4D)="
+ "3T!>7%%P;F6!:6%Z6U)N5TYN4DQE65-L<FR'@GR7DX^I>766?7F::F:(BH:JGIJ^"
+ "BH6LAX*K?WJC;VV144]S6EA\\=725=G*4A8&BCHJKCXNLBHFI8F&!?WZ>AH6ECHVM"
+ "D9\"PL;#0AH6E9F*#8%Q]2$1E6E5VG9BYN+/2PKO;P[S<N[72KZC(I)^^L:S-K*C*"
+ "IJ+&EI*VD8^UEY>RFINVDI:PC9&KBHZHDI*M>7.05TYL7E!T:EI_;5V\":5=]=66*"
+ ":%A[<V6%;6-_C7V6@G.)E(69NZR_LJ.VI9:LMZ>`J)BSAWR=?W.8@G:==FJ/:V*\""
+ ">7\",=VZ*9%MW1C]25DYDAW^5B8&9?'2,E(RE@GJ35$MG0SY=2D-C2T)B1T!C2$-J"
+ "14%E/C=9/C101#534T-?9%!H=E]TBW*&IHVAGH:=H(JBAG>*6$IB54AE95IY>W*."
+ "=FV):%]]8UE\\;FB!8EQU8EQUBX6@D8VG@GVFBX:M9V6)>WF=EI6U@H&A?7R:@8&<"
+ "='2/555P5E9Q:FJ%;&N)=722AH6CB8BF?'V88V1_>'F6BXRID9*QE96VIJ;)AH:I"
+ "75M_4$YR4E!T<G\"4K:G+N;77NK;8O[O=K:?*I9_\"H)J]I*#!J*3%HY^`FI:WDI&Q"
+ "D)2PF9VYCY.MB(RF@X>ABXJH=7*03DEJ34)E855\\;F&+:EZ%:EQ^95AU<&-`=6>'"
+ "AWF1@'\")G(VCN:>^P*[%KY^XM:6`J)JTAGN<EHJOG)\"W@W><<6:%=FV)9EUY65!L"
+ "0#A.7E9L@GJ0<FI`;F9\\>G**;V=`4DEE2$)?3$-C5$IM6U1W:F:(9F*$5E%P6E%O"
+ "?&Z(B7F2=&%V<5IMAV]`H8B<G(68EH\"5AW6,3CY73#Y895AS9UUY:V)^;&-_:F1_"
+ ";VF\"8UUV7UER=&Z'=G*,@'NB@GVD7UM_<W*3BXJJ?GV;?WZ<A86@<7&,6%AS6%=U"
+ "8V)`8F%_;FV+?GV;>GF9<7*/4E-P;F^,@8*A@8&BB8FJFYN^>GJ=3$IN/#I>5U9W"
+ "BHFJL*S.K:G+LJ[0N[?9J:3%HYZ_GYJ[GIJ[G9FZFI>UFI>UG)FWEI>TEYNUBX^I"
+ "A(BBA8:AD)\"KA8*@96\"!3$)E34-I4$5N3D)I5$EJ5TUI:EUZ<&*\"@G2,?FZ'HY2J"
+ "NZF`Q++)NZO$NJK%H9.MB7Z?C(\"EB'RC;F*':E]^<VN$<VN$;V:\":V-Y=6V#A7V3"
+ ";65[:V-Y?W>/?W>0;61`;VF&?'.3A'J=A7ZABH:HB86FAX*ACX:DK)ZXH)\"IB'6*"
+ ">F-VD'B)G866H(F<HXVBBWF064EB5DAB:5QW:%YZ9EUY9%MW8%IU54]H85MT;6=`"
+ ";&9_:F9`<&R0<6V16%1V<W*2C8RLBXJHCHVKC(VH=7229&.!962\":6B(9F6%>7B8"
+ "BHFI@8\"@=W:73DUN;FV.@8\"AAH2HDY&UG)J^>7>;2DEJ.CE:9F*$GYN]K:G*I*#!"
+ "KZK+M*_0J:3#HYZ]GIFXG)>VFI6TEI.OEY2PFYBTFINVFYVUE9>OC8^GC8^GE)2O"
+ "D(VK<FV.0SU@0#I?3D9N4$AN4$=G44=C:5][>G\",B'J2@G*+KZ\"VNZF`NZF`N*C!"
+ "OZ_*K9ZZD8:GC8*ECH*I@'29CX2CE(REFI*KFI&M?G:,AGZ4G)2JCH:<C(2:E8VE"
+ "CX>@?G61A7^<C(.CB7^BB(&DBX>ID8VNE(^NDHFGF8NE?FZ':59K:%%DC'2%KI:G"
+ "J9*EI(ZCD7^69E=M74]I9EET9UUY9EUY:%][9V%\\5$YG9F!Y>'*+<&J#<V^)9F*$"
+ ":&2&5E)T<&^/D(^OG)NYG9Z[CY\"M>'F8:VR+<&^/=725<W*3AH6FF)>XCXZO?WVC"
+ "44]U9F2*=7.9AX6KDY&UBXFM:6>+3$AJ1T-E<6V.GIJ[I)^`HYZ]JJ7$I)^^JJ3!"
+ "HIRYG):SG)>TG9FSFI:PDX^ICHJDD)\"GDY.JDI*IB8F@@H*;A86@B(6C;VN,.SI;"
+ ".#183TIS6%)W3TAH3$-?:5]YA'J6DX6=@W.,M*2]O*K!MZ6^L:&ZO:W(LJ._C(&@"
+ "AWR?D(2IBW^DHI>VEHZGF)\"IEHVIBX.9C86;GY>MC86;@'B.?'2,=6V&;&-_9F!]"
+ "9EU]7%)U8EM^9F*$<6V.=W*/<VJ&9%9P;E]U=6)V>&%T>V-TJI*CI(V@I(^AD7^4"
+ ";E]U7U%I851O:5][:%][;&-_;6>\"95]X8EQU:6-\\<FR%@7V7<6N.;&>(55%R8%Q]"
+ "@H&AEYBWGI^^A8:E:FJ+75U^:6F*>'::=W69@7^CCHJNA8&E=&^83$=P3DER4$MR"
+ ";&>.<6V17EI^2D9J-3%31$!A<VZ/H)NZIZ+!I:\"]I)Z[G9>RHYVXG9>RFY6NGIBQ"
+ "H)JSFY>OCXNBAH*9CHRBDI\"FCXVCA(*8=W6,@G^9CXZL@H&A3DYO-C9;1$)J44MP"
+ "44IJ44EB;6-]C(*>C7^9@'\")MJ:_O:O$P*['NJK%MZ?#F8JF8E=V7U1W:EZ#:E^\""
+ "B'V<>G*+A7V6BX*>@GJ0>W.)A'R2<&A^85EO7E9N7%1M6$]K6%)O6E%Q4TEL4TQO"
+ "0CY?0C]=1T-=4$AA7U%I>VR\"FH>;E'V.?F9WHXN<I8ZAHXZ@BWJ-<F-W8%)J7E)K"
+ ";6-_9%MW8UIV8EQW;FB!8EQU7UER=G\")@GZ8>G27;VF,5E)T44UO>7B9CHZOE96V"
+ "='>75E9Y2DIM7EZ!>7>=>7>=>W:=@'NB=W*;9%^)1D%K/#=@-3!944QS4$QP14%C"
+ "/SM=.C56/#=83TII9F%`7EAU65-N8EQW<VV&A'R4AGZ6B(\"8B82;B(.:@WZ3?7B-"
+ ">'.(@7Z0B8:8AX26?GN/:65\\?7J4CXZLAX:F8&.%04%F2$9N4DYR65)R7%1M=FR&"
+ "G9\"K=FB\"@G*-O:W&NZG\"P:_(O:W(MJ;\"A'617E-R75)U7U-X6$UP;V6!7%1L:V-["
+ "=FZ'9U]U8UMQ=&R\":V-Y:&!V:6%Y8UMT6E%M8%IW9EU]9UU`95Y`44UN5%%O5%!J"
+ ":V-\\<F1\\<V1ZDX\"4CG>(CW>&IHZ?M9ZOHXZ@BWJ-=F=[74]E5DIC:V%[7E5Q7U9R"
+ "85MV;&9_;6=`;FB!?GB1?7F3";
diff --git a/src/lib/ll.c b/src/lib/ll.c
index 6d96f45..7f1a47e 100644
--- a/src/lib/ll.c
+++ b/src/lib/ll.c
@@ -1,7 +1,7 @@
#include "../lib/ll.h"
#include "../lib/mem.h"
-struct LL* new(void* val)
+struct LL* new_ll(void* val)
{
struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
ll->prev = ll;
@@ -10,7 +10,7 @@ struct LL* new(void* val)
return ll;
}
-void push(struct LL* l, void* val)
+void push_ll(struct LL* l, void* val)
{
struct LL* ll = (struct LL*)malloc(sizeof(struct LL));
ll->prev = l->prev;
@@ -20,7 +20,7 @@ void push(struct LL* l, void* val)
ll->data = val;
}
-void remove(struct LL* l, unsigned long idx)
+void remove_ll(struct LL* l, unsigned long idx)
{
struct LL* t = l;
for(unsigned long i = 0; i < idx; i++) {
diff --git a/src/lib/ll.h b/src/lib/ll.h
index 4a11620..ab4148d 100644
--- a/src/lib/ll.h
+++ b/src/lib/ll.h
@@ -7,11 +7,11 @@ struct LL {
void* data;
};
-struct LL* new(void* val);
-void push(struct LL* l, void* val);
-void remove(struct LL* l, unsigned long idx);
+struct LL* new_ll(void* val);
+void push_ll(struct LL* l, void* val);
+void remove_ll(struct LL* l, unsigned long idx);
-#define showl(L, TYPE) { \
+#define show_ll(L, TYPE) { \
struct LL* t = L; \
do { \
uart_hex(*(TYPE*)t->data); \
diff --git a/src/lib/mem.c b/src/lib/mem.c
index d738305..2b495ef 100644
--- a/src/lib/mem.c
+++ b/src/lib/mem.c
@@ -73,6 +73,7 @@ void* malloca(unsigned char size, unsigned char amnt)
unsigned long diff = (unsigned long)mem + i + 2;
diff %= amnt;
diff = amnt - diff;
+ diff %= amnt;
if((mem[i] == size) && mem[i+1]==0) {
if(diff == 0) {
mem[i] = size;
@@ -90,7 +91,6 @@ void* malloca(unsigned char size, unsigned char amnt)
diff += amnt;
}
mem[i] = diff-2;
- mem[i+1] = 0;
i += diff;
mem[i] = size;
mem[i+1] = 1;
@@ -116,6 +116,11 @@ void free(void* memloc)
for(unsigned int i = 0; i < size; i++) {
base[i+2] = 0;
}
+ // If it is the last entry, clear it and move the heap top down
+ if (base + size + 2 == rpi_heap_top) {
+ base[0] = 0;
+ rpi_heap_top = base;
+ }
}
void* heap_base(void)
diff --git a/src/lib/q.c b/src/lib/q.c
index 494c712..1f5a871 100644
--- a/src/lib/q.c
+++ b/src/lib/q.c
@@ -1,7 +1,7 @@
#include "../lib/q.h"
#include "../lib/mem.h"
-struct Q_base* newq()
+struct Q_base* new_q()
{
struct Q_base* q = (struct Q_base*)malloc(sizeof(struct Q_base));
q->next = 0;
@@ -9,7 +9,7 @@ struct Q_base* newq()
return q;
}
-void pushq(struct Q_base* qb, void* val)
+void push_q(struct Q_base* qb, void* val)
{
struct Q* n = (struct Q*)malloc(sizeof(struct Q));
n->next = 0;
@@ -22,7 +22,7 @@ void pushq(struct Q_base* qb, void* val)
qb->last = n;
}
-void popq(struct Q_base* qb)
+void pop_q(struct Q_base* qb)
{
if (qb->next == 0)
return;
diff --git a/src/lib/q.h b/src/lib/q.h
index 51ff1a1..cf75c6d 100644
--- a/src/lib/q.h
+++ b/src/lib/q.h
@@ -11,11 +11,11 @@ struct Q {
void* data;
};
-struct Q_base* newq();
-void pushq(struct Q_base* qb, void* val);
-void popq(struct Q_base* qb);
+struct Q_base* new_q();
+void push_q(struct Q_base* qb, void* val);
+void pop_q(struct Q_base* qb);
-#define showq(QQ, TYPE) { \
+#define show_q(QQ, TYPE) { \
if (QQ->next != 0) { \
struct Q* t = QQ->next; \
while (t->next != 0) { \
diff --git a/src/sys/core.c b/src/sys/core.c
index 37cd6a5..97a77c0 100644
--- a/src/sys/core.c
+++ b/src/sys/core.c
@@ -13,6 +13,7 @@
#include "../util/status.h"
#include "../util/time.h"
+#define SYS_CORE_C
#ifndef VERSION
char* os_info_v = "?";
#else
diff --git a/src/sys/core.h b/src/sys/core.h
index fa9e1b5..9e25f9d 100644
--- a/src/sys/core.h
+++ b/src/sys/core.h
@@ -1,6 +1,10 @@
#ifndef SYS_CORE_H
#define SYS_CORE_H
+#ifndef SYS_CORE_C
+extern char* os_info_v;
+#endif
+
extern unsigned long cntfrq;
static inline unsigned long load32(unsigned long addr)
@@ -41,6 +45,13 @@ static inline void setsp(void* in)
asm volatile ("mov sp, %0" :: "r"(in));
}
+static inline void* heap_end(void)
+{
+ unsigned long value;
+ asm volatile ("ldr %0, =__bss_end": "=r"(value));
+ return (void*)value;
+}
+
enum
{
// The offset for the MMIO area
diff --git a/src/sys/kernel.S b/src/sys/kernel.S
index a691ebf..e0333ca 100644
--- a/src/sys/kernel.S
+++ b/src/sys/kernel.S
@@ -2,12 +2,10 @@
.globl kernel_main
kernel_main:
- push {lr}
bl sysinit
kernel_main.loop:
wfe
b kernel_main.loop
- pop {lr}
.section ".data"
.globl cntfrq
@@ -19,3 +17,7 @@ cmdidx:
.globl cmd
cmd:
.space 2049
+
+.section ".bss.heap"
+mheap:
+ .space 0x100000
diff --git a/src/sys/kernel.h b/src/sys/kernel.h
new file mode 100644
index 0000000..e724513
--- /dev/null
+++ b/src/sys/kernel.h
@@ -0,0 +1,8 @@
+#ifndef SYS_KERNEL_H
+#define SYS_KERNEL_H
+
+extern unsigned long cntfrq;
+extern unsigned long cmdidx;
+extern char cmd[2048];
+
+#endif
diff --git a/src/sys/timer.c b/src/sys/timer.c
index 9419f80..3753561 100644
--- a/src/sys/timer.c
+++ b/src/sys/timer.c
@@ -9,8 +9,6 @@
/// Cycles Per Second
#define CPS 10
-extern char* os_info_v;
-
#define SYS_TIMER_C
static unsigned long exe_cnt = 0;
struct Mutex exe_cnt_m = {.addr = &exe_cnt, .pid = NULL_PID};
diff --git a/src/util/status.c b/src/util/status.c
index bd529da..6ab21c0 100644
--- a/src/util/status.c
+++ b/src/util/status.c
@@ -6,8 +6,6 @@
#include "../util/status.h"
#include "../util/time.h"
-extern char* os_info_v;
-
void output_irq_status(void)
{
// Basic IRQ
diff --git a/src/util/time.h b/src/util/time.h
index 13875e2..f6dacb0 100644
--- a/src/util/time.h
+++ b/src/util/time.h
@@ -9,7 +9,8 @@ unsigned long read_cntv_tval(void);
void write_cntv_tval(unsigned long val);
unsigned long read_cntfrq(void);
-static inline void enablecntv(void) {
+static inline void enablecntv(void)
+{
unsigned long cntv_ctl;
cntv_ctl = 1;
asm volatile ("mcr p15, 0, %0, c14, c3, 1" :: "r"(cntv_ctl) ); // write CNTV_CTL