::/ \::::::. :/___\:::::::. /| \::::::::. :| _/\:::::::::. :| _|\ \::::::::::. Feb/March 98 :::\_____\::::::::::. Issue 3 ::::::::::::::::::::::......................................................... A S S E M B L Y P R O G R A M M I N G J O U R N A L http://asmjournal.freeservers.com asmjournal@mailcity.com T A B L E O F C O N T E N T S ---------------------------------------------------------------------- Introduction...................................................mammon_ "An Introduction to SPARC assembly"............................+Spath. "Extending NASM"...............................................mammon_ Column: Win32 Assembly Programming "NASM specific Win32 coding".......................Tamas Kaproncai "More about Text".........................................Iczelion "Keyboard Input"..........................................Iczelion Column: The C standard library in Assembly "C string functions: introduction, _strlen".................Xbios2 "C string functions: _strcpy"...............................Xbios2 Column: The Unix World "X-Windows in Assembly Language: Part II"..................mammon_ Column: Virtual Machines "An Intro to the Java Virtual Machine"............Cynical Pinnacle Column: Assembly Language Snippets "NumFactors"..........................................Troy Benoist Column: Issue Solution "6-byte Solution"..........................................mammon_ ---------------------------------------------------------------------- ++++++++++++++++++++++++Issue Challenge+++++++++++++++++++++ Write a routine for converting ASCII hex to binary in 6 bytes ---------------------------------------------------------------------- ____________________________________________________________________________ ___ .___ __) (__ _____ ______ ``` ._____| \____\ ___/__._) /._) _ (_. \\ | | _\ |_ \ | \/ | |CE , .=|_____|___)\___|(_______|______| |===============[ Introduction ]===. '================================| :==================================' : . by mammon_ The first thing that you will notice about this issue --well, that it is late-- will probably be the section headers designed by iCE. I had to add a top/upper left border to them [the horizontal and slanted lines] in order to make them standout when scrolling though a 100K file such as this one, but other than they are all his: comments, etc welcome. I don't have much to say about this issue: I went overboard with the NASM stuff this month as I have been doing a lot of 'research' work in that area recently; my articles have been supplemented with Tamas Kaproncai's Win32 NASM pointers. Iczelion and XBios2 have both produced --as usual-- 2 quality articles this month, Iczelion's based on his win32 asm tutorial 'the MASM way', and XBios2 once again continuing to replace C with assembler. +Spath. has produced an excellent article on SPARC assembly language; I was hoping to debut the 'other CPU' scene with a MIPS article I had planned but it looks like +Spath has beat me to it. On a similar note, I mentioned on the Message Board wanting to start a Virtual Machines column. Cynical Pinnacle has started the column off this month with an article on programming the Java VM in its native 'assembly language'; in subsequent issues I and perhaps others will be adding articles here as well. A final note, I have not come up with a challenge for the next issue; anyone with good ideas is welcome to post one to the Message Board or to the APJ email address. Enjoy the mag! _m ::/ \::::::. :/___\:::::::. /| \::::::::. :| _/\:::::::::. :| _|\ \::::::::::. :::\_____\:::::::::::...........................................FEATURE.ARTICLE An introduction to SPARC assembly by +Spath. The goal of this article is to introduce SPARC v8 architecture and SPARC assembly ; I hope it can also constitute a good introduction to RISC philosophy. What is SPARC ? ----------------- The principles of RISC (Reduced Instructions Set Computer) are born in the early 80's in two universities (Berkeley and Stanford) ; its philosophy is the quest for simplicity and CPU speed. SPARC (Scalable Processor ARChitecture) is a 32 bits RISC architecture created by Sun in 1987. It's an open architecture, so that any manufaturer can make SPARC processors (like Philips, VLSI, T.I., Fujitsu... already did). Its key features are : - a load/store architecture : this means that only registers can be used in data manipulation operations, and not memory locations. Memory is organised in a linear address space of 2^32 bits which use "big-endian" organisation (the MSB is stored first) ; a word is 32 bits wide (a 16 bits data is a halfword). - a large number of registers : from 2 to 32 sets of 24 general purpose registers are available ; these 24 registers are local registers %l[0-7], in registers %i[0-7] and out registers %o[0-7], all working in an overlapping windows mechanism that will be explained later. The SPARC architecture also provides 8 global registers %g[0-7], 32 registers for floating-point operations (%f[0-31]) and some specific registers (%pc, %sp, %psr, %y,...). - a small set of simple instructions : to avoid translation from machine code to microcode, SPARC instructions are directly implemented in hardware, and therefore are very basic (mainly load/store, logical, arithmetic, branching). All instructions are 4 bytes long, and most of them use 3 registers (source1, source2, destination in that order). Assemblers also provide a set of synthetic instructions, which are more "coder friendly", but does not really exist for the processor (and therefore must be carefully used). These synthetic instructions have most of the time less operands, so that the corresponding real instructions often use %g0, a read-only register stuck at 0 ; here are some aliases : synthetic instruction | real opcode nop <=> sethi 0, %g0 ret <=> jmpl %i7+8, %g0 mov reg_or_imm, reg <=> or %g0, reg_or_imm, reg cmp reg, reg_or_imm <=> subcc reg, reg_or_imm, %g0 Enough with theory, let's see some code. SPARC assembly basics ----------------------- Let's start with an in-season "hello world" style program : '!' is used for single line comments, /* .. */ is used for multiple lines comments). !8<------------------------------------------------------------------------ /* FILE : hello.s */ .section ".rodata" ! read-only initialised datas .MyText: ! define our string label .asciz "Happy new year %i \n"! define a null-terminated string .Year: .word 1999 ! define a word constant .section ".text" ! read-only object code (instructions) .global main ! Make function name globally visible main: save %sp, -112, %sp ! allocate space for stack sethi %hi(.MyText), %o1 ! load higher part of string offset or %o1, %lo(.MyText), %o0 ! add lower part of offset set (.Year), %l1 ! get year address ld [%l1], %o1 ! load year into %o1 call printf ! print the string nop ! do nothing (BDS) ret ! Return to caller restore ! Restore register windows (BDS) Endmain: ! Tell the linker how big the .size main,(.-main) ! procedure is ("." is current address). !8<------------------------------------------------------------------------- Every procedure must save some memory space for itself ; this stack space will be used to store the out and local registers and all the datas needed by the procedure (the minimal space is 64 bytes for %o and %l registers). The stack grows from higher to lower addresses, so that allocating a stack space is implemented by substracting a value from the current stack pointer ; the previous stack pointer is called the frame pointer (%fp). Registers %o0 - %o5 are used to pass the first six parameters to a procedure, because the current stack pointer (%sp) is stored in %o6 and the calling program counter (%pc, used to calculate the return address) is stored in %o7. If a procedure has more than six parameters, the remaining parameters are passed using the stack space (eg for a caller's stack space of 92 bytes, the child procedure can get the seventh parameter at [%fp+92]). As I said before, all instructions are 32 bits long, so that you must use two steps (with sethi and or) to load a 32 bits data. Note that %hi refers to the most significant 22 bits and %lo refers to the least significant 10 bits of a register. Like most RISC machines, a SPARC processor uses a branch delay slot (BDS) to optimize pipeline efficiency : this means that by default, the instruction following a branching is executed regardless of whether or not the branch is taken. So the coder must move (when possible) an instruction from before the branch to after the branch. Another possibility is to use the 'nop' instruction or to add the ',a' suffix to the branch instruction, which annul the next operation. Calling and branching ----------------------- Let's take another example to better illustrate the calling process : this is a recursive implementation of the Fibonacci numbers, which are defined as : fib(N) = fib(N-1) + fib(N-2) fib(0) = fib(1) = 1 !8<-------------------------------------------------------------------------- /* FILE: fib.s */ .section ".rodata" ! read-only initialised datas (constants) .align 8 ! datas must be double-words aligned .MyText: ! define our string label .asciz "Fib(%i) = %i \n" ! define a null-terminated string ! ------- FIB : handles F(0) and F(1) -------- .section ".text" ! read-only object code (instructions) .align 4 ! code must be word-aligned (4 bytes) .global fib ! Make function name globally visible fib: save %sp, -112, %sp ! save stack space mov %i0, %o0 ! 1st parameter may be needed for calling cmp %o0, 1 ! asked for F(0) of F(1) ? ble F1orF0 ! yes : take the branch mov 1, %i0 ! return value = 1 (BDS) call fibcall ! nop ! do nothing (BDS) mov %o0, %i0 ! return value = fibcall return value F1orF0: ret ! Return to caller restore ! Restore register windows (BDS) Endfib: .size fib,(.-fib) ! ----- FIBCALL : calls F(N-1) and F(N-2) ----- .global fibcall ! Make function name globally visible fibcall: save %sp,-112,%sp ! save stack space mov %i0,%l0 ! save N in %l0 call fib ! call F(N-1) sub %l0,1,%o0 ! compute N-1 (BDS) mov %o0,%i0 ! save result in %i0 call fib ! call F(N-2) sub %l0,2,%o0 ! compute N-2 (BDS) ret ! Return to caller restore %i0,%o0,%o0 ! return F(N-1) + F(N-2) (BDS) Endfibcall: .size fibcall,(.-fibcall) !-------- MAIN -------------------------------- .global main ! Make function name globally visible main: save %sp,-112,%sp ! save stack space call fibcall ! calculate fib number 7 mov 7,%o0 ! (BDS) mov %o0,%o2 ! result is second parameter sethi %hi(.MyText),%o0 ! load higher part of string offset or %o0,%lo(.MyText),%o0 ! add lower part of offset call printf mov 7,%o1 ! number is the first parameter (BDS) ret ! Return to caller restore ! Restore register windows (BDS) Endmain: .size main,(.-main) !8<-------------------------------------------------------------------------- All procedures share the global registers (%g[0-7]), the remaining registers %l[0-7], %i[0-7], %o[0-7] constitute the register window. When a procedure starts execution, it allocates 16 registers (input and local), the output registers are overlapped with the subroutine's input registers. Here's what happens if procedure A calls procedure B which calls procedure C : proc A in | local | out | | | proc B | in | local | out | | | proc C | in | local | out As you see, for each procedure, the parameters passed to and received from a subroutine are stored in %o registers. The same way, the parameters taken from and passed to the calling procedure are stored in %i registers. The current window pointer (CWP) identifies the current register window : it is stored in the least significant 5 bits of %psr, and is modified by the 'save' and 'restore' commands. The condition code register (another part of %psr) contains four flags : Z (zero), N (negative), C (carry), and V (overflow) ; contrary to x86 assembly, these bits are not updated by standard arithmetic operations, but by special instructions (with 'cc' suffix, like 'cmp' which is in fact a 'subcc'). For instance, you have these equivalences : SPARC x86 subcc r1, r2, r1 <=> sub r1, r2 ; keep result and flags subcc r1, r2, %g0 <=> cmp r1, r2 ; discard result, keep flags sub r1, 0, r2 <=> mov r2, r1 ; keep result, discard flags As last example, here's a simple anti-cracking method : a checksum on our own code : !8<----------------------------------------------------------------------- /* FILE: cksum.s */ .section ".data" ! read-only initialised datas (constants) .align 8 ! datas must be double-words aligned .CRCError: .asciz "Wrong CRC !! \n" ! .section ".text" ! read-only object code (instructions) .align 4 ! code must be word-aligned (4 bytes) cksum: save %sp,-64,%sp ! save minimal stack space mov %i0, %l0 ! %l0 is the base address sub %i1, %i0, %l1 ! %l1 is the decreasing index mov %g0, %l2 ! %l2 is the running sum loop: ld [%l0+%l1], %o0 ! fetch the next element add %l2, %o0, %l2 ! add it to the running sum subcc %l1, 4, %l1 ! one fewer element bge,a loop ! if %o0 >= 0 get next element ! (delay slot result is annulled) mov %l2, %o0 ! store the result in sum (BDS) ret ! Return to caller restore ! Restore register windows (BDS) endcksum: ! Tell the linker how big the .size cksum,(.-cksum) ! procedure is. !-------------------- MAIN ------------------------- .global main main: save %sp,-64,%sp ! allocate space for stack set main, %o0 ! start address for cksum sethi %hi(EndOfCRCZone),%o1 ! high part of end address call cksum ! calculate cksum or %o1,%lo(EndOfCRCZone),%o1 ! low part of end address (BDS) EndOfCRCZone: set 0x10954, %o1 ! load precalculated checksum cmp %o0, %o1 ! is checksum correct ? be End ! yes : exit nop ! do nothing (BDS) Error: ! no : display message sethi %hi(.CRCError ),%o0 ! load higher part of string offset call printf ! print the string or %o0,%lo(.CRCError),%o0 ! add lower part of string offset (BDS) End: ret ! Return to caller restore ! Restore register windows (BDS) EndMain: ! Tell the linker how big the .size main,(.-main) ! procedure is. !8<----------------------------------------------------------------------- Tools and references ---------------------- Here are the tools I use when I play with SPARC assembly ; some are SunOS specific tools, some are multi-platforms ones. The code you read here has been tested on various Sun workstations (using SPARC and UltraSPARC processors). With very little modifications, it also worked on ISEM, a SPARC emulator for Linux (see below). - assembling : I use gcc for that job, which itself uses as and ld (assembler and linker) to create ELF executables. CC and cc also work well ; these 3 compilers can also be used to generate ASM source code from C source code with the "-S" option, which is IMHO a great method to learn assembly on a new platform. - debugging : I use adb, which is very basic but also very powerful, but gdb and dbx may also work. - reversing : all the previous tools are useful ; I also use a disassembler (SunOS dis), but some exist for other platforms (see Bruce Ediger's homepage). If you plan to give a try to SPARC assembly, here are some links : http://www.cs.unm.edu/~maccabe/classes/341/labman/labman.html ISEM (Instructional Sparc EMulator) homepage. http://www.csn.net/~bediger/ Bruce Ediger Homepage http://www.cs.earlham.edu/~mutioke/cs63/ a good introduction to SPARC with plenty of links. http://www.sics.se/~psm/sparcstack.html a very good overview of SPARC stack and registers. Final Words ------------ If you use a SPARC based machine, give a try to assembly, it's quite fun. If not, remember that the best you know your processor, the best you can code ASM. ::/ \::::::. :/___\:::::::. /| \::::::::. :| _/\:::::::::. :| _|\ \::::::::::. :::\_____\:::::::::::...........................................FEATURE.ARTICLE Extending NASM by mammon_ Programmers transitioning to NASM from a commercial assembler such as MASM or TASM immediately notice the lack of any high-level language structures -- the assembly syntax accepted by NASM is only slightly more sophisticated than what you would find in a debugger. While this has its good side --smaller code size, nothing hidden from the programmer-- it does make coding a bit more tedious. For this reason NASM comes with a preprocessor that is both simple and powerful; by writing NASM macros, the high-level functionality of other assemblers can be emulated rather easily. As thw following macros will demonstrate, most of the high-level asm features in commercial assemblers really do not do anything very elaborate; they simply are more convenient for the programmer. The macros that I will detail below provide some basic C and ASM constructs for use in NASM. I have made the complete file available at http://www.eccentrica.org/Mammon/macros.asm The macro file can be included in a .asm file with the NASM directive %INCLUDE "macros.asm" Comments on the usage of each macro are included in the file. Macro Basics ------------ The fundamenal structure of a NASM macro is %macro {macroname} {# parameters} %endmacro The actual code resides on the line between the %macro and %endmacro tags; this code will be inserted into your program wherever NASM finds {macroname}. Thus you could create a macro to push the contents of each register such as: %macro SAVE_REGS 0 push eax push ebx push ecx push edx %endmacro Once you have defined this macro, you can use it in your code like: SAVE_REGS call ReadFile ...which the preprocessor will expand to push eax push ebx push ecx push edx call ReadFile before assembling. It should be noted that all preprocessing takes place in a single stage immediately before compiling starts; to preview what the pre- processor will send to the assembler, you can invoke nasm with the -e option. The %macro tag requires that you declare the number of paramters that will be passed to the macro. This can be a single number or a range, with a few quirks: %macro LilMac 0 ; takes 0 arguments %macro LilMac 5 ; takes 5 arguments %macro LilMac 0-3 ; takes 0-3 arguments %macro LilMac 1-* ; takes 1 to unlimited arguments %macro LilMac 1-2+ ; takes 1-2 arguments %macro LilMac 1-3 0, "OK" ; takes 1-3 arguments, 2-3 default to 0 & "OK" The last three examples bear some explanation. The "-*" operator in the %macro tag specifies that the macro can handle any number of parameters; in other words, there is no maximum number, and the minimum is whatever number is to the left of the "-*" operator. The "+" operator means that any additional arguments will be appended to the last argument instead of causing an error, so that: LilMac 0, OK, This argument is one too many will result in argument 1 being 0 and argument 2 being "OK, This argument is one too many." Note that this is a good way to pass commas as part of an argu- ment (normally they are only separators). Providing defualt arguments after the number of arguments allows a macro to be called with fewer arguments than it expects. %macro SAVE_VARS 1-4 ecx, ebx, eax will fill a missing 4th argument with eax, 3rd with ebx, and 2nd with ecx. Note that you have to provide defaults starting with the last argument and working backwards. The parameters to the macro are available as %1 for the first argument, %2 for the second, and so on, with %0 containing a count of all the arguments. There is an equivalent to the DOS "SHIFT" command called %rotate which will rotate the parameters to either the left or to the right depending on whether a positive or negative value was supplied: Before: %1 %2 %3 %4 Before: %1 %2 %3 %4 Before: %1 %2 %3 %4 %rotate 1 %rotate -1 %rotate 2 After: %4 %1 %2 %3 After: %2 %3 %4 %1 After: %3 %4 %1 %2 So that rotating by 1 will put the value at %1 into %4, and rotating by -1 will put the value of %1 into %2. High-Level Calls ---------------- Perhaps the buggest complaint about NASM is its primitive call syntax. In MASM and TASM, the parameters to a call may be appended to the call itself: call MessageBox, hOwner, lpszText, lpszTitle, fuStyle where in NASM the parameters must be pushed onto the stack prior to the call: push fuStyle push lpszTitle push lpszText push hOwner call MessageBox Using NASM's "-*" macro feature along with the %rep directive make a high-level call easy to replicate: %macro call 2-* %define _func %1 %rep &0-1 %rotate 1 push %1 %endrep call _func %endmacro The %define directive simply defines the variable _func [underscores should prefix variable names in macros so you do not mistakenly use the same name later in the program] as %1, the name of the function to call. The %rep and %endrep directives enclose the instructions to be repeated, and %rep takes as a parameter the number of repetitions [in this case set to the number of macro parameters minus 1]. Thus, the above macro cycles through the arguments to call and pushes them last-argument first [C syntax] before making the call. Overloading an existing instruction such as call will cause warnings at compile time [remember, the preprocessor thinks you are doing a recursive macro invoke] so usually you will want to name the macro "c_call" or something similar. The following macros provide facilities for C, Pascal, fastcall, and stdcall call syntaxes. ;==============================================================-High-Level Call ; ccall FuncName, param1, param2, param 3... ;Pascal: 1st-1st, no clean ; pcall FuncName, param1, param2, param 3... ;C: Last-1st, stack cleanup ; stdcall FuncName, param1, param2, param 3... ;StdCall: last-1st, no clean ; fastcall FuncName, param1, param2, param 3... ;FastCall: registers/stack %macro pcall 2-* %define _j %1 %rep %0-1 %rotate -1 push %1 %endrep call _j %endmacro %macro ccall 2-* %define _j %1 %assign __params %0-1 %rep %0-1 %rotate -1 push %1 %endrep call _j %assign __params __params * 4 add esp, __params %endmacro %macro stdcall 2-* %define _j %1 %rep %0-1 %rotate -1 push %1 %endrep call _j %endmacro %macro fastcall 2-* %define _j %1 %assign __pnum 1 %rep %0-4 %rotate -1 %if __pnum = 1 mov eax, %1 %elif __pnum = 2 mov edx, %1 %elif __pnum = 3 mov ebx, %1 %else push %1 %endif %assign __pnum __pnum+1 %endrep call _j %endmacro ;==========================================================================-END Switch-Case Blocks ------------------ One of the most awkward C constructs to code in assembly is the SWITCH-CASE block. It is also rather difficult to re-create as a macro due to variable number and length of CASE statements. NASM's preprocessor has a context stack which allows you to create a set of local variables and addresses which is specific to a particular invocation of a macro. Thus it becomes possible to refer to labels which will be created in a future macro by giving them context-dependent names: %macro MacPart1 0 %push mac ;create a context called "mac" jmp %$loc ;jump to context-specific label "loc" %endmacro %macro MacPart2 0 %ifctx mac ;if we are in context 'mac' %$loc: ;define label 'loc' xor eax, eax ;code at this label... ret %endif ;end the if block %pop ;destroy the 'mac' context %endmacro As you can see, the context is created and named with a %push directive, and destroyed with a $pop directive. NASM has a number of preprocessor conditional IF/ELSE statements; in the above example, the %ifctx [if current context equals] directive is used to determine if a 'mac' context has been created [Note that the 'base' NASM conditionals include %if, %elif, %else, and %endif; these carry over to the %ifctx directive, such that there is available %ifctx, %ifnctx, %elifctx, %elifnctx, %else, and %endif; all %if directives must be closed with an %endif directive]. Finally, %$ is used to prefix the name of a context- specific variable or label. Non-context-specific local labels use the %% prefix: %macro LOOP_XOR %%loop: pop eax xor eax, ebx test eax, eax jnz %%loop %endmacro The SWITCH-CASE macro that follows uses the syntax: SWITCH Variable CASE Int BREAK CASE Int BREAK DEFAULT ENDSWITCH Which could be implemented as follows: card db 0 ;card_variable Jack EQU 11 Queen EQU 12 King EQU 13 ... SWITCH card CASE Jack add edx, Jack BREAK CASE Queen add edx, Queen BREAK CASE King add edx, King BREAK DEFAULT add d, [card] ENDSWITCH Note that SWITCH moves the variable into eax and CASE moves the value into ebx. ;===========================================================-SWITCH-CASE Blocks %macro SWITCH 1 %push switch %assign __curr 1 mov eax, %1 jmp %$loc(__curr) %endmacro %macro CASE 1 %ifctx switch %$loc(__curr): %assign __curr __curr+1 mov ebx, %1 cmp eax, ebx jne %$loc(__curr) %endif %endmacro %macro DEFAULT 0 %ifctx switch %$loc(__curr): %endif %endmacro %macro BREAK 0 jmp %$endswitch %endmacro %macro ENDSWITCH 0 %ifctx switch %$endswitch: %pop %endif %endmacro ;==========================================================================-END If-Then Blocks -------------- While the preprocessor provides support for if-then directives, it is a slight bit of work to cause that to generate the equivalent assembly language 'if' code [ the preprocessor 'if' is resolved before compile time, not at run time]. Using macros, you can create if-then blocks with the following structure: IF Value, Cond, Value ;if code here ELSIF Value, Cond, Value ;else-if code here ELSE ;else code here ENDIF An example being: IF [Passwd], e, [GoodVal] ;e == equals or je jmp Registered ELSE jmp FormatHardDrive ENDIF The trickiest part about this macro sequence is the 'Cond' parameter. NASM allows condition codes [the 'cc' in 'jcc' that you findin opcode refs] to be passed to macros; these condition codes are simply the 'jcc' with the 'j' cut off -- 'jnz' becomes 'nz', 'jne' becomes 'ne', 'je' becomes 'e', and so on. The reason for this is that the condition code is appended to a 'j' later in the macro: %macro Jumper %1 %2 %3 ;JUMPER Reg1, cc, Reg2 cmp %1, %3 j%+2 Gotcha jmp error %endmacro The above code appends %2 to the 'j' with the directive j%+2. Note that if you use j%- instead of j%+, NASM will insert the *inverse* condition code, so that jz becomes jnz, etc. For example, calling the macro %macro Jumper2 %1 j%-1 JmpHandler %endmacro with the invocation 'Jumper2 nz' would assemble the code 'jz JmpHandler'. The condition codes can be a bit tricky to work with; it is advisable to add a sequence such as the following to the macro file: %define EQUAL e %define NOTEQUAL ne %define G-THAN g %define L-THAN l %define G-THAN-EQ ge %define L-THAN-EQ le %define ZERO z %DEFINE NOTZERO nz so that you could call the IF macro as follows: IF PassWd, EQUAL, GoodVal ;if code here ...etc etc. Note also that the IF-THEN-ELSE macros put the passed values into eax and ebx for compatison, so these registers will need to be preserved. ;===========================================================-IF-THEN-ELSE Loops %macro IF 3 %push if %assign __curr 1 mov eax, %1 mov ebx, %3 cmp eax, ebx j%+2 %%if_code jmp %$loc(__curr) %%if_code: %endmacro %macro ELSIF 3 %ifctx if jmp %$end_if %$loc(__curr): %assign __curr __curr+1 mov eax, %1 mov ebx, %3 cmp eax, ebx j%+2 %%elsif_code jmp %$loc(__curr) %%elsif_code: %else %error "'ELSIF' can only be used following 'IF'" %endif %endmacro %macro ELSE 0 %ifctx if jmp %$end_if %$loc(__curr): %assign __curr __curr+1 %else %error "'ELSE' can only be used following an 'IF'" %endif %endmacro %macro ENDIF 0 %$loc(__curr): %$end_if: %pop %endmacro ;==========================================================================-END For/While Loops --------------- The DO...FOR and DO...WHILE do nothing differnet from the previous macros, but are simply a different application of the same principles. The syntax for calling these macros is: DO ;code to do here FOR min, Cond, max, step DO ;code to do here WHILE variable, Cond, value It is perhaps easiest to illustrate this by comparing the macros with C code. for( x = 0; x <= 100; x++) { SomeFunc() } Equates to: DO call SomeFunc FOR 0, l, 100, 1 Likewise, for( x = 0; x != 100; x--) { SomeFunc() .386 _DATA SEGMENT PARA PUBLIC USE32 'DATA' _DATA ENDS _TEXT SEGMENT PARA PUBLIC USE32 'CODE' ASSUME CS:_TEXT, DS:_DATA PUBLIC RLE_Draw_ RLE_Draw_ PROC xor ecx,ecx cld buc: mov cl,[esi] mov al,[esi+1] not al or cl,cl jz end mov ebx,ecx mov ah,al shl eax,8 mov al,ah shl eax,8 mov al,ah shr ecx,2 rep stosd mov ecx,ebx and ecx,3 rep stosb inc esi inc esi jmp buc end: ret RLE_Draw_ ENDP _TEXT ENDS END €€€ggg€™€gNg€€€gggggg€€€ggg€™€gggg€€€gggg€€€€gggg€€€€ggg€€€€gg€€g€€€€ggg€€€gg€€€g€gg€€€ggg€gg€€ggg€€€€gggg€€€ggg€€€ggg€g€€€€ggg€€g€€ggggg€€€ggg€™€gg€€gg€€€€ggg€€€gg€€ggg€€gg€€gggg€€€€gNg™™€gNg€™€gg€€gNg™™€gg€€€gggg€€gg€€ggg€€€€gg€™™€NN€™€ggg€€gg€€gg€€€g€ggg€€€€ggg€€€€ggg€€€€ggg€€€g€€€ggg€€€€gg€€€g€€€€gg€€€€€€ggg€€€€g€€ggg€€€€Ng€™gggg€€€€€€ggg€€€€ggggg€€€gggg€€€€ggg€€€€€ggg€€€€€ggg€€€€€gggg€™€gggg€€€€ggg€€€€€g€gg€€€€ggg€€€ggg€€€€€€ggg€€€gggg€€€€€€ggg€€€€€NNg€€€€ggNg€€€€gNg€™€ggg€€ggg€€€ggg€€€€€gNN€™™ggNg€€€€g€g€€ggg€g€€g€ggg€€g€€ggg™€ggNg€€€gggggg€€gNg€€€gggg€™€gNNg€™gg€€™g5N€²€Ng€gNN€™™gN€€gN€²²g55€²€NN€€ggg€€ggg€€gNg™™€ggg€ggg€€€gNg€€g€€€ggg€€gg€€ggNg€™gggg€€€€€ggggg€€€ggg€€€ggg€gg€€€gg€€€ggg€€€gggggg€€€ggg€€ggg€€€gg€€g€g€gggg€€€ggg€ggg€€€ggg€€€g€€gg€€€ggg€€ggg€€€ggggggg€€€gggg€€€€gggg€™€ggg€€gggg€g€g€g€g€ggg€€€ggg€€€ggg€€gNNg€€€gggg€€€gNNg€€€gggNg€™€gNN€€€€gggN€™€gNg€€€gg€€g€€€ggg€€€gg€ggg€€€gNg€€€€ggg€€€gggg€€€€ggg€€gggggg€€€gggg€€€€€ggg€€€€gggggg€€€ggg€€€€€€ggg€€€gg€€ggg€€€€€€€ggg€€€€ggg€€€€€ggg€€€ggggg€€€ggg€€€gggg€€€ggg€€€€ggg€€€ggg€€€gggg€€€ggggg€€€gg€€€€gggg€€€€ggg€€€gggg€€€g€g€€€€ggg€€€ggg€€€€€€gg€€€ggg€€€€ggg€€€€€ggg€€€gggg€€€€€gg€€€ggg€€€ggg€€€€gggg€€€g€€€€€ggg€€€€€ggg€€€€gggg€€€€€ggg€€€€gggg€€€€ggg€g€€€€€ggg€g€€gggg€™€gggg€€€€€€gg€€€€€ggggg™€€ggg€€€€€ggg€€€€gg€€€gg€€€gg€€€ggg€€€ggg€€€€€€ggg€€gg€€€€g€™€gg€€€gg€€ggg€€€€gggg€€€gggggg€€™€gNg€™€ggggggg€™€gNN€™™ggg€€gg€™€ggg€€€€gg€€€ggg€€ggg€™€ggg€€€gg€€€gg€€gNg€€€ggg€€€gg€™€gNg™™€ggg€€ggg€€€gNg€€€€ggg€gg€€€€gNg€™€NN€™€NN™™€NN™™gNg€™ggg€€€g€€€gg€€€gg€€€gg€gg€€™gNg€™€ggg€ggg€™€gN€€€gg€™€gNg€€g€€gNg€€€€€gggg€™™€NNg€™€g€ggg€€€€gg€€€ggg€€€€Ng€€€€€gggg€€gggg€€€gg€€€€ggg€€€ggg€€€ggggg€€gggggg€€€ggg€€€ggg€€€€€€gggg€€ggg€ggg€€€gNg€€€g€gggg€€€ggg€gg€€€gNg€€€gggg€g€€€gN€€€gN€€€gNg€€gNg€™gNg€€gg€€ggggg€g€€€gNg€€€gg€g€g€€€ggg€€€Ng€²™N5N€²€N€™™55g™™€Ng€gNg™™gggg€gg™²™55€™€gg€€g55€²™gNN€™€g€€€5N™²™N5g™™gNg€ggg€€™gNg€€€gg€g€gg€€ggg€€gNg€™€gg€€ggg€gNN€™€NN€€€Ng€™€NN€™€gg€€gNN€²€NNg€gg€€²€55€€gNg€™gNN™™gN€™€NNg™²€gNggg€™™€NNN™²€gggggg€™€N5g™™€gg€€€ggggg€€€ggg€™€gg€gg€€€€gNg€€€gg€™€gg€ggg€€™gNg€€€€€gggg€™€gNg€€™gggggg€€gggg€€ggg€gg€€ggg€€€gggg€€g€€gg€€€€€€g€gg€€€€€gggggg€€€gggg€€€€ggg€€€€€gggg€€€€gNg€€€€ggg€€€€gggg€€€ggg€g€€€€€ggg€€€€gg€€€€€€€ggg€™€€gggg€€€€€ggg€€€€gg€gg€€€€€€€€gggg€€€€gg€€€€€ggg€€€g€€€€gggg€€€€€ggg€€€€ggggg€€€€gg€€€€g€€€g€ggg€€€ggg€€€€€€€€€gggg€€€ggg€€€g€€€g€g€€€€g€€€gg€€€€g€€€ggg€€€ggg€€€€€€€ggg€€€€€gggg€€€€€ggg€€€€gggg€€€€€€gg€€€€ggg€g€€€€€€gggg€€€€€ggg€™€€ggg€€€€ggggg€€€€€€gg€€€€g€€€€g€€ggg€€€€€€ggg€€gggg€™™€gNN€™™€gggg€€€€ggg€€€€gg€€€gggg€€€€ggg€™€gggg€€€€ggg€€€€gNg€€€€gNNg€™™€ggg€€€€€ggg€€gg€€ggg€€€€€€gNg€™™€ggg€€€€€ggg€€€ggg€€€g€ggg€€€ggg€€€€€€gNN€™™gNg€€€gg€€g€€€g€g€€€gggg€€€ggggg€€€€gg€€€ggggg€€™€NNg™™€gNN€€€€gggg€€€gNg€€€gg€€€ggg€€€€€€ggg€€€ggg€€€g€ggg€€€ggg€gg€€€€gggg€€gg€€€gg€€gggg€€gggg€€€gg€g€€€€ggg€€€€ggggg€€ggg€€€gg€€gg€€€gNg€€€gg€gggg€€gg€€€gNg€€€gg€€gg€€€gg€€€gg€€gg€€ggg™€gNg€€€ggggggg€€€ggg€€€€g€gg€€€gg€€ggg€€€€gggggg€€€gNgg€€g€gggggg€€€ggg€€€€€ggg€ggg€€ggg€€gg€ggg€gg€ggg€€€gNg€€ggg€€€Ng€€gNg€€€g€€ggNg€€€gg€ggg€™€gNg€€gg€™€gNN€™™gNNg™€g€™€55€™€gNg€ggN™™gN€€€gN€™™gN€g€gg™€€5N€™™ggggg€€™gNNg™™€€gggN€™™€NNg€€€€gNNg™™ggg€€ggg€€ggg€€€Ng€™€gg€€€gg€€ggg€€€Ng€™€NNg™€g€™gNN€€€€gNg€g€€g€€€gg€gg€™€NN€€€g€€€gg€€€€ggg€™€ggggg€€€gNg€€€ggggg€€€€gg€™™gNg€™€gg€gg€™€gNg€™™€ggg€€€€€ggg€€€€ggg€€€€€ggg€€€ggg€€€€ggggg€€€€gg€€gN€™€ggg€€€g€€€gggg€€€€ggN€€€€ggg€€€€€ggg€™€gg€€€gg€€€gg€™€gg€™€gg€€€€g€€gg€€€ggg€€€€€€ggg€™€gg€€€g€€€ggg€™€gNg€™€ggg€€€€€€€€€€€€ggg™€ggg€™€€ggg€€€€€€ggg€™€ggg€€€€€€€ggg€€€€ggg€€€€€gggg€€™€€gg€€€€g€€€g€€€€ggg€€€€€g€ggg€™™€gNg€™™€gggg€€™€gNg€™€€ggg€€€€€€ggg€€€€€€ggg€€€€gggg€€€€ggg€€€€€€ggg€€€ggg€€€€€gggg€€€€€€€ggg€€gggg€€€€€ggg€€€€g€€€€gg€€gg€€€€€€€gggg€g€€€€ggg€€€€€gggg€™€gggg€€€€€gNg€€€€gggg€€€€€€g€€€gg€€€€€€€ggg€ggg€€gg€€€€ggg€€€€gggg€€€€ggg€€€€ggg€€gg€€€€gggg€€€€ggg€€€€gggg€€€€ggg€€€€gggg€€€ggg€€€€gggg€€€€ggg€ggg€€€gggg€€€€gggg€€gggg€€€€ggggggggg€€€ggg€€€gggg€€€€gggg€€€gggg€€€€gggg€€€g€€€ggg€€€g€€€ggg€g€gg€€g€€gggg€€€gggg€€€€ggg€€€g€g€ggg€€ggg€€€€gNg€™€ggg€€gg€€€gNg€€gNg€™€NNg€€€€gggg€€€gg€gggg€€€Ng€€€g€€€gggg€€€g€g€Ngg€™gggg€gg€€€ggg€g€ggg€g€€€ggg€€€gggg€€€gggggg€€ggg€€€Ngg€€€€€gggg€€gggg€€€gggg€€€gggg€€€€gggg€€€ggg€€g€ggg€€€€gggg€€ggg€€ggg€€ggg€€ggg€€€g€gggg€™gggg€gg€€€gggg€g€gg€g€€€ggg€€€gggg€€€NN€€™€gggggg€™€gNg€™€gg€€gg€€gNg€™€ggg€gggg€ggg€€ggg€€€NNg™™gNN€™gg€²€55€™€€NN€ggN€™ggg€€gN€™€NN€€€€gg€gNg™™€gNNg€™€€gNNg™€€€ggg€€™€gNgg€€€ggg€gg€€ggggg€€ggg€€€gg€™€gg€€g€€€g€€ggg€™€NN™²g€€gggg€™€Ng€gg™gg€€NN™™NN€€gg€g€™gN€€Ng™€€€gNg™€N€™€gNN€™™gg€gg€€gg€€gg€€€€ggg€€€€ggg€gg€™€ggg€™™g€€€gg€™™gN€™€ggg€€gg€€€g€€€€€g€€gg€€€gggggg€™™€NNg€€gg€€€gN€™™€Ngg€€€g€€€g€g€€€gg€€€€ggg€™€ggg€€€€€ggg€™™ggg€€€€€€€€€ggg€€€g€€gggg€™™gNN€™€€g€g€g€€€€€g€€€g€€€€€€ggg€™™ggggg€€€€gggg€€€ggg€€€ggg€€€ggg€€€g€€gg€€€€ggg€€€ggg€€€g€€ggg€™€gNg€™€gg€€€gg€€€ggg€€€ggg€€g€€€€€€€ggg€€€€gggg€™€ggg€™€gNg€™€ggggg€€ggg€€€gNgg€™€gggg€€€ggg€€€ggggg€€€ggg€€€ggg€€€€gggg€€€€gggg€€€€€€gg€ggg€€€ggg€€€€gggg€€gggg€€ggg€€€gg€ggg€€g€€€€gggg€€€gggg€€€€ggggg€€€gggg€€€gggg€€€€gg€€€ggggg€€€ggg€€€ggg€€€ggggg€€€€gg€€€gggggg€€€€gg€€€ggggg€€€gg€€€ggNg€€€€€ggg€€€ggg€€€€g€ggg€€€ggg€€€€€€€ggg€€gg€€€gg€€€gggggg€€ggg€€€gg€€€gg€€ggg€€€ggg€€€€€ggg€€€ggg€€gggggg€€€ggg€€€gggggg€€€€ggg€€€ggggg€€gggg€€€gggg€€€gggg€gggg€€€ggggg€™€ggNg€€€g€ggg€€€ggN€€€€ggg€€€€ggg€€€€gggg€€€gggg€€™€ggg€€€gg€€€gg€ggNg€™€gNgg€€€€ggg€€€gg€g€gg€g€€g€gggg€€€€gggg€€€gggg€€€gNg€€€ggg€€gg€€€ggg€€€gg€€€€g€gg€€€gggg€€g€€€ggg€™€ggg€€gg€€€gg€€ggg€€ggg€€€g€gggg€€€gNg€™™€ggg€€gg€€ggg€€ggg€€gg€€ggg€€€gN€€€€gg€€€g€€ggg€€ggg€€€€gg€€€g€€ggggg€€€ggg€€€€€€gNg€€€€gNg€€gg€g€gg€€g€gggg€€€ggg€™™€g55€™€g€€gNNg™²gNNg€€gN€™™gNN€€€€€€N5N™™€€€NNg™²™N5N€™€€gg€gNg€™€€gg€€€ggg€€€ggg€€€€ggg€gg€€™gNN€™€NN€™€ggg€€€Ng€€gg€g€€€gNg™™€5N™™gN€™™gNg™gg€gg€€gg€€gg€€€€€ggg€€€gNg²™NN€€gg€g€™gN€™€g€€€€gg€€€gg€gggg€™€gN€™€€gg€€gN€™€ggg€™™gg€€gg€€™€N€™€€€€Ng€€€€€€€ggg€€€€gN€™€gg€€gNg™™gg€™ggg€™€ggg€g€€€ggg€€€gg€€gg€€€€ggg€€€€gg€€gg€€g€gg€€ggg€g€€€ggg™™€g€€€g€€€€gg€™€ggg€™€ggggg€€€ggg€€€g€€ggg€€€€gg€€€gg€€€gggggg€€€€ggg€€€gggg€€€€gggg€€ggg€€€g€gg€€€ggg€™€gNg€€€€€ggNg™™€NNg€™€gggggg™€€gNg€™€gg€€€gggggg€™€gNgg€€€€gggg™€€NNg€€€gg€€€g€€ggggggg€€€€gggg€€€€ggg€€g€€ggg€™€gNg€™€ggg€€€€ggg€€€ggg€€€ggg€€€g€€€gggg€€€€gggg€€€€€€gggg€€€€g€gg€€ggg€€€ggg€€€ggg€€€ggg€€gggg€€€€gg€gg€€€€ggg€€€€€ggg€g€€€g€€gggg€g€€gggg€€€gggggg€€€ggg€€€€gggg€€€gg€€€gggg€€€€ggg€€€ggg€€€€€ggg€€€ggg€€€€ggggg€™€€ggg€€€gggg€€€g€gg€€€€ggg€€€€gggg€€gggg€€€€gggg€€ggg€€€ggggg€€€gggg€€€ggggg€€€€ggg€€€€ggNgg€€€ggggg€€€gggg€€€g€ggggg€€€€ggg€€€€gggg€€€ggggg€€€€gg€€gg€gggggg€€€€ggg€€€€gggg€€€€ggg€€€ggg€€€€ggg€€€€ggg€€€€gg€€€€ggg€€€€ggg€€€ggg€€g€€€ggg€€€gggg€€€g€g€€€gggg€€€ggggg€€€gggg€€€ggg€€€g€€gg€€gggg€€€gggg€€€€€ggg€€€€€€€gggg€€€ggg€€€gg€€€€€gg€€€€ggg€€€€ggg€€€€gg€€€€ggg€€€ggg€€€€g€€g€€ggg€€€€gNg€™™€gNg€™™€gggg€€€€€ggg€€€ggg€€gggg€™€gg€€ggg€€gg€€gg€€ggg€€gg€™gNNg™™™gggNN€™™ggg€™gN€²™N5€€€gg€²€55€™€€™€€gNg™²gNgg€€€g€™gg€€€gggg™gN€€€g€€gg€g€€€€€gNg€€€€Ng€€€€g€€€gN€™€ggg€€€g€€€gg€€€™gNg€€€€g€€€g€€gg€gg€™€gg€€€g€€€NN™²gN€€€ggg€²gNg€€€ggg²€N€™€ggg€€gN€™€€€gN€™€€€€NN€€€€€gg€gg™€ggggg€€gg€gg€€g€€€ggg€™™gNg€€gg€€€gN€™€€g€g€g€€€€gN€€€€€€gNg€€€g€€ggg™€€€ggg€€€€€gggg€™€gg€gg€™€gggg€€€€€gg€€gg€€gg€ggg€€gg€g€gggggg€€ggggg€™€gggg€€€€€gNN€™€€gNgg€g€€gggg€g€g€€ggg€€g€€€gNg€™€g€€ggNg€€gNggg€g€€€gg€€€gg€€€gg€€€gg€€€ggg€€€€€ggg€€ggg€€€gNg€€Ngg€€gg€€gggg€€€€gggg€g€€ggggg€€€€gggg€€g€ggggg€€€ggg€€€ggg€ggg€€ggg€€€ggg€g€g€ggg€€€ggg€gggg€€€gggg€€€gggg€€€€ggg€€€g€€gg€€ggg€€€ggg€€ggg€€€gg€€gg€€ggg€€€gNg€€€ggg€gg€€ggg€™€gNg€€gg€€€gg€€€gNg€€g€gggg€€ggN€€€€gg€€€€gggg€€€gNg€™€ggg€€gg€€€ggg€€€gg€€gg€€ggg€€ggg€€€ggg€gg€€€ggg€€€g€€ggg€™€€gg€€€€ggg€€€gggg€€€€ggg€€€€ggg€€€gggg€€€€€ggg€€€€gNg€™€ggg€€€€ggg€€€ggg€gg€g€gg€€€gggg€€€gg€€€€ggg€g€€g€ggg€€€ggg€€€€g€gg€€ggg€€€ggggg€€€gggg€€ggg€€€€gggg€€€ggg€€™€gggg€™€gggg€€€ggggg€€€€gg€€gg€€€gggg€€€€gggg€€€gggg€€€€ggg€€€ggg€€gggg€€€gggg€€€€€ggg€€€€gg€€€gggg€€€€gggg€™€gNNg€€€€gggg€€€gggg€€€gg€€€€ggg€€€€ggg€€€ggg€€€€gggg€€€€gNg€€€™€gggg™™€gggg€€€€€ggg€€€€€€€gNg€€€ggg€gg€™€gggg€€€€€NN€€€€gg€gg€€€€ggg€€g€™€ggg€€€gg€€gg€€€€gg€€gg€g€€€ggg€€™ggg€g€€€€€ggg€€ggg€€€gg€€€€gg€€gg€€€€ggg€€€€g€ggg€€™€gNNg€™€gggggg€€€gggg€€€€gg€€gg€€€€€€€ggg€™€gggg€€€€ggg€€€€€gg€€€gg€™€gg€g€€g€€€ggg€™™Ng€™€gg€€€g€€€€ggg€™€gg€€€€g€€€ggg€€gg€™€gNN€™™gNg€€ggg€€€g€ggg€€gg€€€gNg™™€NNg€™€gg€ggg€€€gNN€™€€gggg€€€gNg€gg€€ggg€€€gg€€gggg€€€€gggg€€€ggggg€€g€gggg€€gggg€€€g€gg€€€ggNg™€€ggNN€€€€ggg€€ggg€€€€gg€™€€gNg€€€€gNg€€g€€ggggg€€ggg€€€€NN€™€g€ggg€€€€gg€ggg€€g€€g€Ngg€™gggggg™€€€NNg€€€€ggg€€€€€ggggg€€€gggg€gg€€€NNN€™€gNN€g€g€€gggg€g€€ggg€g€€ggg€€gg€€€gg€€€gg€€ggg€€€gNg€€€g€ggg€€€€ggggg€€€€gNNgggg€€gggg€€g€ggg€€€€gNg€™gNg€ggg€€gNg€€ggg€ggg€€€ggg€€€gg€€€gg€€gNg€€gNg€€gggg€€€gg€€gNg€™gNg€™gN€€gNg™™gNgg€€g€€€gNg™€ggg€€gg€€€gN€€€ggg€™€gN€€€gg€€ggg€™€NN€™€ggg€ggg™™gNg€€gg€€gNg€™€gg€€€gg€€€g€gggg€™€NNg€€€gggggg™™ggg€€€gg€™ggg€€€gg€€gN€€™€ggg€gg€€€€gg€€€gg€€€ggg€€€€€gggg€€€€€€ggg€€€€gggg€€€€€ggg€€€€ggggg€€€€ggg€€€€ggg€€gggg€€€€gg€€€€ggggg€€€€ggg€€€€€g€€g€€€gg€€€ggg€€€ggggg€€€ggg€€€gg€€€gg€€€ggg€g€g€€€ggggg€€€ggg€€€gg€ggg€€€gNg€€€€gggg€€™€ggg€€€€€€ggg€€€gggggg€€€ggg€g€gg€€ggg€€€gggg€€€€ggg€€™™ggNg€™€€gggg€™™€gggg€€€€€g€€gg€€€€€gg€€€€€€€gNg€™™gNg€€€€€ggg€€€€gggg€€€ggg€€€€g€€€gggg€g€€€€ggg€™€ggg€€€€g€gggg€€€gg€€gggg€€€ggg€€€€€€ggg€€€€ggg€€€€ggggg€€€€gNg€€€€gggggg€€€€gg€™™€gggg€€™€€ggg€€™€€gggg€™™€gggg€€€€gg€€€g€€€gggg€€€€€gggg€€€gg€€€gg€€€ggg€€€€gggg€€€ggg€€€gg€€gg€€€gg€€€€ggggg€€€€€€g€€ggggg€€€ggg€€€gggg€€ggg€€€gg€€ggg€€€ggg€€€ggg€€€g€€€ggg€€€g€€€ggg€™€€€€N5™™€Ng€€g€€gggg€€€gg€™™€NNN€™™™gNNg™²™g55g€™€ggg€€€€gNN€™™€NNg€€€€gNg€€™€gNg€€gNg€€€gg€gggg€€€NNg™€ggNggg™™€gNg€€gggggg€€€gNg€€gNg€€€Ng€€gNg€™gNg€™€gg€€gg€€ggg€€gNg€€ggg€€gg€™€gNg€gg€™€gNg€™€gggg€€€€gg€g€N€€€gg€€€gN€€€€g€g€ggg€€€ggg€gg€€€gg€gg€€€ggg€€gg€€gggNg€™€ggggg€g€€gggg€g€€€ggggg€g€€€gggg™€ggNgg€€€€gNg€€gg€ggggg€€€Ng€€€ggg€€€gggg€€€€gg€€gg€€gg€€ggggg€€ggggg€€€gg€Ng€™€gggN€€™gggg€gg€™gNg€€ggg€€ggg€ggg€€ggg€€gNg€™gNN€™€NN€€€Ng€€€gg€™€NN€™€ggg€ggg€€ggg€€g€gg€gg€€€ggg€€€gg€€€€gg€€€€€gNgg€™€gggg€€€€€gg€€€gg€€€ggg€™€€€gggg€™€gNg€€€€ggggg™™€Ngg€€€€€€€gg€€€€ggg€€g€™€gg€€gg€€€€€€€gg€€gggg€€gg€€ggg€€ggg€€€ggg€€€€ggg€€€€€ggg€€€€€ggg€™€ggg€€gg€€ggg€™€gg€€€gg€€ggg€€€gg€gg€€€€gg€€€€€€€ggg€€€€g€ggg€™€€ggg€€€€€g€€€gg€€€€€g€€g€€€€ggg€€g€€€€ggg€€€€€€gg€€€€€g€€gggg€€€€g€€gg€€™gg€€€€€€€ggg€€€€€ggggg€€€ggNg€™€€gggg€™™€ggg€€€€€€gg€€€€ggg€€€€€€ggg€€€€€€ggg€€€€ggg€€€€€€€€€g€€€€g€€€gg€€€€gg€g€€€€€ggg€™€gg€€€€€€€€gggg€€€€gggg€€€€ggg€€€€gggg€™€gggggg€™€gNgg€™€€gNgg€™€€gggg€€™gggggg€€€€ggg€gg€€€ggg€€€gggggg€€€ggg€€€ggg€€€€ggg€€€gggg€€€€ggg€€€gggg€€€€ggg€€ggg€€€€gggg€€€ggg€€gggg€€€ggg€€ggg€€€gggg€€€€gggg€€€gggg€€€ggg€€€€ggg€€€gggg€™€ggg€€€€NNg€™€ggg€€€gggg€€€€ggg€€ggg€€€€gggg€gggg€gggg€€gggg€g€gggg€€€gggg€€gggg€€€gggg€gggg€g€ggggg€g€g€€ggg€€€€gNg€™ggNg€€€ggggg€€€gg€€€ggg€€ggg€ggg€€€€€gggg€€€ggg€€€Ngg™€gNg€€gNg€€€€ggggg€€€gg€€ggg€g€gggggg€€€ggg€€€gggg€gggg€gg€€ggg€€ggg€€gggg€g€€€€ggg€€g€€€ggg€€€ggg€€ggg€€gggg€€ggg€€g€€€€ggg€€ggg€€g€gg€gg€€€gggg€€€€gggg™€gg€g€gg€gggg€€ggg€gg€€€gN€€€gN€€€gg€€€gg€€€gN€€€€gg€ggg€™€NN€€€€gggg€€€€gggg€™gNN™™ggN€™ggg™€NNg€ggg€€gg€€€gg€€€ggg€€gg€€€Ng€€€Ng€€gg€ggg€gg€ggg€€€€gggggg€€€ggg€™ggg€€gggg€€ggg€€€ggg™€ggg€€€€g€€gg€€€ggg€€g€€ggg€€gNg™™gNg€€€gg€€ggg€€€€gg€€€gg€g€€ggg€€€ggg€€gg€€€ggg€€™€ggg€€€gg€gg€g€€€€gg€€€€€€ggg€€€g€€gNg€€€€gg€€€gggg€€g€€€ggg€™€ggg€€€€€€gggg€€€€gNg€™€€g€€€gg™™€gggg€€€€€ggg€€™™€gggg€€€€ggg€€€€€gg€€€€€€€€€g€€€g€€€€€ggg€€€€€g€€g€€€€gg€€€g€€€€gg€€€ggg€€€g€€€€gg€€€g€€€€gg€€€ggg€€€gg€€€ggg€€™€ggg€€€€€€ggg€€€gg€€€gg€€€gg€€€gg€€€€ggg€€€€ggg€€€ggg€€€ggggg€€€€ggg€gg€€€gggg€€gggg€€€€gg€€ggg€€€€ggg€€€€gggg€™€ggg€€€€g€ggg€€€ggg€ggg€€€ggg€€€€ggggg€€€€gg€€€€€ggg€€€€gg€€€ggg€€gg€€ggg€gggg€€€€ggg€€€€gggg€€€€gggg€€€€€€ggg€€€gggg€€€€gggg€€€g€gggg€€€ggggg€€€€ggg€€€ggg€€€gg€€€gNg€€€€ggg€™€ggNg€€€gggg€ggggg€€€ggg€€€ggggg€€€gggg€€€ggg€€€ggg€ggg€€ggg€€€gg€g€ggggg€€€gggg€€€gggg€€€€ggg€€ggg€€gggg€€ggggg€€€€gggg€€€gggg€€€gggg€€€ggg€€gggg€€g€€ggN€€™€ggg€€€€gggg€€€gg€€€gggg€€€€gggg€€gg€g€gg€g€€ggg€€ggg€€ggN€€€€g€€ggg€€€ggg€g€€€€ggg€€€€€€gggg€€ggg€€g€gg€ggg€€gggg€€ggg€€€€ggg€€€gNg€€€€ggggg€€€ggg€€€g€€€€gggg€€€€€gggg€€€gggg€€€gggg€€€gggg€€€€gggg€€€gggg€€ggg€gg€€€€ggg€€gg€€€g€€€ggg€€g€€€gg€€€gg€€€gg€€€gNg€™€Ng€€€gg€€gNg€€ggg€€ggg€€gg€€€gggg€€€g€gg€€€€ggg€€gg€€€ggg€€gg€€gNg€™€gggg€€€€ggNg€€€€ggg€g€€€gg€€g€ggg€€gg€ggg€€€€gg€€€g€gg€€g€€€ggg€€€gg€€€€€gg€€€€gg€€ggg€g€€€g€ggg€€ggg€gg€€€gg€€€gg€€ggg€€g€gg€€€g€gg€€gg€€€€ggg€€g€€gg€€€ggg€™€Ng€€ggg€€€gg€€gg€€€€g€€€ggg€€gg€™€gg€g€€€g€€gg€€gg€€ggg€€€gg€™€ggg€€€gg€€€g€€€€ggg€€€€ggg€€€€g€g€gg€€€€gg€€gg€€€gggg€€€€gggg€€gg€€ggg€€€gg€€€ggg€€€ggggg€€€gggg€™€gg€€g€€€€ggg€€€€€€g€€gg€€€ggg€€€€gg€€€€€€g€g€€€ggg€€€€€€ggg€€€gNg€€€€€€ggg€€™€gggg€™€€€gggg€€€€€gNg€™€€ggggg€€€gggg€€€€ggg€€€g€€€€g€€€ggg€€€NNg€™€ggNg€€€gggg€ggg€€€€gggg€€™gNgg€€€ggggg€g€€ggg€€gg€€ggg€€g€gggg€™™€gNNg™²€Ng€™€NNN€™€gggNN€™™g55€²™ggg€€g€€€gg€€gg€€€gNg™™gNg€™€NN€™€NNg€€g€€€NNg™™ggg€€gg€€gg€€€gNg™™gNg€€€ggg€€gg€€€€€€ggg€€€gg€€ggg€€€gg€gg€€€gg€€€ggg€€€ggggg€€€ggg€€€gg€€€gNg€€€ggg€€ggg€€€€ggg€€€ggg€€ggg€€ggg€€€gNgg€€€€€ggNg€€€gg€€€ggg€gggg€€€gggg€€g€g€€g€g€€g€g€€g€g€g€ggg€€€ggg€€gg€€€€ggg€€€€gggg€€€gggggg€€€ggg€€€g€€ggg€€€gg€€€gg€€€g€€ggg€€€gg€€gg€€€ggg€€€€€€€ggg€€ggg€€€ggg€€€gg€g€€€€gggg€€g€g€ggg€€€€ggggg€€€€ggg€€€€€gggg€€€gggggggg€€€gggg€€€€ggg€€€gggg€€€gggg€€€€g€g€€€ggg€€€€gggggg€€ggg€€€gg€€gg€€€gg€€€ggg€€€€g€ggg€€€ggg€ggg€€€gg€€€g€€€€€ggg€€€€gg€€€€€gg€€gggg€€€gggg€€€€€€ggg€€€€ggggg€€€€ggg€€€€€ggg€€€€gg€€g€€€€€gg€€g€€€€ggg€€€€ggg€€€€gggg€€€€ggg€€€€gg€€€ggg€€€€gg€gg€€€gggg€€€ggg€€€ggg€€€€gggg€€€€gNg€™™€gg€€€€€€ggg€™€ggg€€gg€€€gggg€€€€gg€€gg€€€€gg€€€gg€€€gg€€€gg€€€gg€€€ggg™€gg€€€€gg€€gg™€ggg€€€gg€€NN€™™NNg€€€€€ggNg€™€gggg€€€€€ggg€€€g€€g€g€€€gg€€€ggg€€€€g€gg€€€g€€€€g€€€gg€™€ggg€™€€€€ggg€€€ggg€€ggg€€gg€€€€€gggg€€€ggg€gg€€€ggg€€€€€€ggg€€€€ggg€€€€g€€€ggg€€gg€€gg€€€€gg€€€€€€gg€gg€™€gNNg€™€gggg€€€€€Ng€€€ggg€ggg€€g€€g€€€gg€€€ggg€€€gggg€€ggg€€€€g€€gggg€€€ggg€€g€gg€€ggg€€€ggg€€ggg€€gg€€€gNg€€€gg€gg€€€gNgg€€gggggg€€€gggg€€€€€€ggg€€€gggg€€€€ggNg€€€Ng€€€Ng€€€Ng€€€Ng€€€g€€€gNgg€€g€€ggg€€€€gggg€g€gNN€€€g5g€²€gNN€™gNg™™N5N™²gggg€Ngg™€€g€gNNg™²™N5N€€€gg€€NNg²™gNN€€gN€™€gNN€™€NNg€™€ggggg€™€gNg€€€gg€€gg€™€NNg™™ggg€€gg€€ggg€™€NNg€€€gg€ggg€€gNg€€€ggg€€g€g€gggg€€€€€€gNN€™™™ggNg€€g€€€ggg€€gg€™€5g™™™ggggNg€²€g5N€™™€NNg€€€€ggNg€™™gNgg€™™€gNg€™€gggg€€€€€ggg€ggg€€€gg€gggg€™€gggg€€€€ggNg™€gNg€€gg€€gNg€€€€gg€ggg€€gg€€€ggg€€gg€€€ggg€€gg€€ggg€€€€ggggg€€€€gggggg€€€gggg€€€€€gggg€€€€gggg€€€gggg€€€€ggg€€€€gggg€€€€gNgg™™€ggg€€€€€€€€€ggg€€€gggg€€€€€gggg€€€ggg€€g€g€€ggg€€€€gg€€gggg€€€€€€ggg€€€gg€€€€€gggg€€gg€€€€€ggg€€€€ggg€€€€ggg€g€gg€€€€€ggg€€€€gggg€€€€€gg€€€gg€€€€€gggg€€€gggg€€€€€ggg€€€gg€€gg€€€€gg€€gg€€€€ggg€€€€€ggg€€€g€€€gggg€€€€€gNg€™™€gggg€€€€€ggg€€€€g€g€gg€€€€ggg€€€€€gg€gg€€€€gg€€€€ggg€€€€gggg€€™€ggg€€€€ggg€€€€gggg€€g€g€€€€gggg€€€€ggg€€€€gg€€€gg€€™€gggg€€€€€gggg€€€€ggg€€€€€€g€€€€gg€€€ggg€€€€gg€€€€g€gggg€€ggg€™™€ggg€€g€€ggg€€€€gggg€€€gggg€€gg€€€gg€€€€ggg€€ggg€€€gg€€€€€€€gg€€€ggg€€€€€€gg€€€ggg€gg€€€gNg™€ggg€€ggg™€gN€™™gNN€€€gggg€€€ggg€€€gg€€€ggg€€ggg€€€gg€€ggg€€€g€€€ggg€€ggg€€€ggg€g€€€gg€€€gg€€€gg€€€ggg€€gNg™™gggg€€g€€gNg€€€ggg€€gggg€g€€€gNg€€€ggggg€™™gNNg€€ggggg€€gg€€€€ggg€€€€ggggg€€€ggg€€€€€gggg€€gggg€€ggg€€ggg€€g€€€gggg€€€gggg€€€€gggg€€€€gggg€€€gggg€gg€€€€ggg€€€gggg€g€€€ggg€€gg€€€Ng€€€NN€€€Ng€€gg€€ggNg€gg€€€€NNg™€ggg€ggN€™™gNNg€™™gNNg™€€€€g5N™™€Ngg€gg€€ggg€€ggN™™€NN€€g€g€€gNN€€€€gggg€g€€g5g€™€gNN€€g€€€gNg€€€€ggNg€™€Ngg€€ggg€€ggg€€gNg€€ggg€gg€€gg€€€€ggNg€™€N5g™™NN™™N5g€€€gg€€gg™€NNg™™g5N€²™NNg€™gN€™€NN€™€€gggg€€€€gNN€™™€gggg€€€gggg€€€€€g€€€gg€€€€ggg€€€€gNgg€€€€gggg€€€€ggg€™€gNgg€€€€gNg€™™€gNg™€ggg€€€gg€gg€€€€ggg™™ggg€€€€gggg€€€gNg€™ggg€gg€€€€ggg€€g€€ggggg€™€ggg€€€gg€€ggg€€€gg€€€ggg™™€ggg€€€€gggg€€€€€gg€€€€ggg€™€€gg€€ggg€€€gg€€ggg€€€€gggg€€€€gggg€€€€ggg€™€ggg€€€€€€€ggg€€€€ggg€€€€€€€ggg€€™€gggg€€™€gggg€€€€ggg€€€€€gg€g€€€€gg€€€g€€€€gg€€™€gggg€™€€gggg€€™€ggg€€€€gg€€€€€€€€gg€€€€€€gg€€€€€€€€gg€€€€€ggg€€™€€ggg€€€ggg€€€€€gg€€€€€€gg€€€€€gg€€€€€gggg€€€€g€€€€g€€€€€€€€€€€€€€€gg€€€gggg€€€€€gNg€™™€ggg€€€™€gNg€™™€gggggg€™€€gggg€€€€€gg€€€€gg€€gg€€€gggg€€€€ggg€€€ggg€€€€€€€ggg€€gg€€€gggg€€€€€€ggg€€€gggg€€€ggg€€€€ggg€€€ggg€€ggggg€™€ggg€€€€ggggg€€€€€ggg€€€gg€€€gNg€€€ggggg€€€ggg€€€gggg€€€ggg€€€ggg€€€€ggg€€€€gggg€€€€gggg™€gNg€€™€gNgg€™€gNNg™™€gNg€€€€gggg€™€gNg€€€gN€€€€gNNg€™€gNNg€€€€gNg€€€ggg€€ggggg€€€ggg€€€€ggggg€€€NNg€€ggg€€gg€€€gg€ggg€€€ggggg€€€€ggggggg€€€ggg€€€gggggg€€ggg€€gg€€ggg€€gg€€€g€€gggg€€€gggg€€ggg€gg€€€g€€gggg€€ggg€€gggg€€€gggggg€€ggg€ggg€€€ggg€€gggg€€€€ggg€€€€gggg€g€€€€gg€€€ggggg€g€g€€g€gg€g€€gNg€€ggg€g€g€€€gNg€€€gg€gggg€€gg€€€ggg€€gggg€ggg€€€ggggg€™€NNg™€g€€g5g€€€gN€ggg€™ggNg€€€NN€€™Ng€€Ng™™gN™²™NNNg€€€gggNg€™™€N5N™™€g€gNg™²€NNN€€€™€gNN€™™€NNg€€€g€€ggg€€gg€ggg€€NN™²€55€²€N€€gggg€™N5g™€€gg€€NN™²g5g™€g€€€€€gg™€g€€€€™N5€²€Ng€€€gg€™gg€€gg€€g€™ggg€€€€gg€gg™™€ggggg€€€€ggg€€™€gN€™€g€€€gg€™€ggg€€€g€€€gg€€€€gg€€gg€™€gg€€gg€™™gNg€€€gg€€ggg€™€€gg€€€€€ggg€€€g€€€gg€€€ggg€™€€ggg€€€€€€gg€™™€gg€€€g€€€€gg€€€€€€g€€g€gg€™€gNg€€€g€€€€€€€€€g€€€ggg€™€€€ggg€™™€gNg€€€™€€ggg€™€ggg€€€€€€gg€€€gg€€€€€€ggg€€€€gg€€€ggg€€€gg€€€€€€€ggg€™€gNg€™€gg€€€gg€€€ggg€€€gg€€€€gg€€€g€€€€gg€€€€ggg€™€ggg€€€g€€ggg€€€gg€€€ggg€€€€g€ggg€€€ggg€™€€ggg€€€€gg€™™ggggg€€€€gNN€™™€gggg€€€€€ggg€€gg€€€ggg€€€€gggg€€gggg€€€€€€gg€€€gggg€€g€€€gggg€€€€gggg€€€€gggg€€€gggg€€€€gggg€€€ggg€€€gggg€€€ggg€€€ggg€€€€gggg€€€gggg€€gggggg€€€gggg€€gggg€€€gg€€€ggggg€€€gggg€€€ggg€€€€gggg€€gggg€€€€€€ggggg€g€gggg€€gggggg€g€€€€ggg€€€ggg€€gggg€€gggg€€€gggg€€€ggg€€gggg€€€€gggg€€€gggg€€ggg€€€ggg€€€gggg€€€€ggg€€ggggggg€€€ggg€€ggg€€g€€€ggg€™€gNg€€ggNg€€€ggg€€gggg€g€g€€g€ggg€™€ggg€€€ggggg€g€€€gg€€€gg€€€gNg€™€gNg€€gg€€€€gNg€€gggg€g€€€€gggg€€€ggg€€ggg€€€ggg€€ggg€€gNg€€ggg€€€gg€€ggg€€ggg€€€ggggg€€™€gNg€€gg€€€gNg€€€ggg€€g€€€ggg€€€gggg€€g€€€gggg€€ggg€gggg€€ggggg€€€ggg€€€€gg€ggg€€€gNg™™€Nggg€€€€g€g€€ggg€€g€€€€gg€™€ggg€g€€gNNg™™ggggg€€ggggg€€gNg€™€gNN€™gN€²€55g²²gNN€€ggg²™ggg€€gN€²™N5€™€g€™€N5N™Ë™55€€€ggg€€N5g²™ggg€€gg€€€ggg€€€g€ggg€€gg€€€ggg™™gNg™™ggg€™€gN€€€ggg€€€gNg™™gNg€™gNg™™gNg€™€ggg€€€g€€€ggg™€€€€NN€€€g€€€NN™²gN€€€€gNg²€Ng™€€gg€™™gN€€gg€€€€gN€™€gg€€€gN€™€gg€€€€€€€€Ng€™€€ggg€g€™€gN€€g€™€€ggg€™€€ggg€€€™€gNg™€gg€€ggg€™€ggg€€€€g€€gg€€€€€gg€€€™€gg€€g€€g€€€g€€€€€g€€€g€€gg€€€€gg€™€gg€€€€gg€€gg€™€€ggg€€ggg€€€€€ggg€€€€€gg€€€€ggg€€€€ggg€€€€ggg€€€€€ggg€€€€ggg€€€€g€€ggg€€ggg€€€g€€€gg€€€ggg€€ggg€€€gg€€gg€€€gg€€€gg€€ggg€€€€ggg€€€gg€€€€ggg€€€€ggggg€€€€NNg€™€gggg€€€€€ggg€€€gg€€€ggg€™€ggNg€€€€ggg€€€ggg€€€€€ggg€€€ggg€€ggg€ggg€€€gNg™€gNg€€€gg€€ggg€ggg€€€ggg€€€€ggggg€€€ggg€€€€ggggg€€€ggg€€ggg€€€gg€€€gg€gg€€€€ggg€€g€€ggg€€€€ggg€€ggg€€€€ggggg€€€ggg€€€gggggg€€€gggg€gg€€€gg€€ggg€€€gggg€€€€ggg€€€g€€€gggg€€€€€gggg€€€ggggg€™€€Ngg€€€ggg€€€€gggg€€€gggg€€€gggg€€€gggg€€€€gggg€€€gggg€€ggg€€g€gg€gg€€gggg€€€€gggg€€€€ggg€€€€ggggg€€€€ggg€€g€€€gggg€€gggg€€€gggg€€€ggg€€€gggg€g€ggg€€€€gNg€€€gggg€g€€ggg€€€€gggg€€€gggg€€€gggggg€€€ggg€€gggg€€€ggg€€€€ggg€€€gggg€g€€gggggg€€gggg€€gggg€€€€ggg€€€gNgg€€ggg€g€€ggg€€€gggg€gg€€€gg€€€gNg€€€€gggg€™™gNg€™€ggg€€gg€€€ggg€€€ggg€€€€gNNg™™€NNg€€€€€ggg€™€gNg€€€ggg€€€€gggg™€€gggg€€€€ggg€€™€gNg€€€€gggg€€€ggg€€€€gg€€€€ggggg€™€Ng€™€€€gggg€™™€ggNg€™€ggg€™gNN€™g€gggg€™€N5€€€™™ggggg™™gNg€€€gg€™€Ng€€€ggg€€g€€€gggg€™gNg€€€gg€€€€ggg€€€g€€€ggg€€ggggg€€™€gNg€€€€gg€€€€€€€gg€€€€g€€€€€ggg€€™€N5€²™NN€™€gN€²™NN€™€€gg€€€g€€€g€€€€gN€€€g€€€€gg€™€Ng€€€€gg™™Ng€€€€gN€²Ng€€€€gg™€NN™™€€gg€€gg€€gg€gg™€g€€gg€€€g€gg€€g€€gg€€g€€€€€gg€™€€ggN€™€€€€gggg™™€g€ggg™™€ggN€™€g€g€™gg€€gg€€€€gg€€g€€€gg€€€€€€€€gN€€€€ggg€€g€™€gNNg™™€€gNg€€€€€g€€gg€€gg€€€ggg€€€g€gggg€€g€€ggNg€€gg€g€g€€€gN€€€ggg€€€gggg€€€ggggg€€€ggggg€€€gg€€€gggg€€€NNg€€€gggNg€€€gggg€€ggg€€€gNg€€€€€gNg€€€ggggg€€ggggg€€€ggggggg€€ggg€€gggg€gggg€ggg€€ggg€€ggg€€€€€ggNg€€gNg€€ggg€ggg€€€ggggg€€€ggg€€ggg€™ggg€€ggg€gg€€gggg€€ggg€€€ggg€€gg€€ggg€€€gNg€€gg€€ggg€€€gN€€€€gg€€€€g€gggg€€ggg€€€€gggg€™€gNNg™™ggg€€gg€€€gggggg€€€ggg€€gg€€€€ggg€€gggg€g€€€€ggg€€€ggg€gg€g€gggg€€gggg€€€ggNg€€€gNg€€€gg€ggg€€€gggg€€€ggg€€€gggg€€€ggg€€€ggg€™€ggg€€€gggg€€gg€€ggg€€g€gggg€g€€ggg€€€ggg€€€gggg€€€ggg€€ggg€€€ggg€€€€ggg€€ggg€€€€gggg€€€ggg€€ggg€€gg€€€€gg€€€€ggg€€€€ggg€€€gg€€€€€€ggg€€€ggg€€€€€ggg€€€€€gggg€€€ggg€€€ggg€€gg€€€€€gggg€€€€gggg€€€€ggg€€€€ggg€€€€€g€€€€€gg€€€€ggg€€€€€gggg€€€ggg€€€ggg€€€€ggg€€€€€ggg€€€€ggg€€€€gggg€€€€€gggg€€€€€ggg€€€€gg€€g€€€gggg€€€€€gggg€€€gggg€™€€gggg€€€€€gg€€€€ggg€€€€€€g€€€ggg€€€€gg€™€€gggg€™™€ggg€€€€€€ggg€™€€gg€€ggg€€€€€€gg€€€g€€gg€€™€gNg€€€€€gggg™™€€ggNg™€€gg€€ggg™€€gggg€€€€€ggg€™€€gggg€™€€gggN€™™€Ng€€€gg€™€gg€€™ggg€€ggg€™ggg€€€ggg€€€€€ggg€€€€€ggNN€²²€N5g²²gN€™€gNg™²€N€€™€Ng™™€gNg€™™€ggg€€g€²™gNg€²™gN€™€€€NN€™€g€gg€€N€²€Ng€g€™€g€€g€™gg™™gg€€ggg€™™N5€™€€ggg€€g€™€g€g€€gg€€€€€NN€€€™€N5g™€€€€gggg€™€Ng€gggg€€€ggggg€€ggg€Ng€™€€gNN€€€€ggg€gNg€ggg€gg€gg€€gg€ggg€gg™ggggg€€gggNg€™€€g5N€™€ggNgg€€€ggN€€ggg€€gggggg€€€€NNNg²™gN5€€€€g€NNg€€gggggggggggggggggg€€€gggg€g€ggNg€€gNg€€€g€gggg€€ggggggg€€€gNNg™€Ng€™gNgg€gg€ggNg™™€NN€™€NNg€€Ng€€gNg€€gNg€€ggg€€ggg€€ggg€€€gg™€gNg€€Ngg€€gggggg€gg€€ggg€€€ggg€gg€€€gggg€™gNg€€g€€€gNg€™€Ng€€€ggg€€gg€€€gNg€™€Ng€€ggg€€ggg€€gNg€€€ggg€€€€ggg€€gg€€gNg€™gggg€€ggg€gg€€ggg€€€ggg€€€gg€€gNg™™ggg€€gg€™€NN€€€Ng€€€gg€€€gg€gggg€€ggg€gNg€™€gg€€gg€€€ggg€€gg€€€ggg€€€gg€ggg€€€€€gggg€€€gggg€€€€€ggg€€€€gg€€€gggg€€€€ggg€€€gggg€€gg€€g€€g€€g€€gg€€€€€gggg€€€€gg€g€€€€ggg€€€€ggg€€€g€€g€€€gggg€€€gggg€™€gggg™€€gggg€€€€€ggg€€€€ggg€€€€gg€g€€€€€gg€€g€€€€€gg€€€€€ggggg€€€g€€€€€gggg™™€gggg€€€€€NN€€™™€gggg€™™€gggg€€€€€€gggg€™€€€gg€€€€€ggg€€€€g€gg€€€€€gg€€€€€€€€€g€€€g€€€€€g€€€€€€€€™€€ggg€™€gg€g€€€™€€gg€€€€€€gggg€™€gg€€€€€€€€ggg€€™€g€€€€€€€€g€€€€€€€€€g€€€€g€€€™gggg€€™€ggNg€™™€€gg€€™™€gggg€™™€ggNg€™€€ggg€€€€€€€ggg€™€€ggg€g€€™€€gg€™ggg€€€€g€gg€€€€€ggg€€™€gNg€€€g€€€€Ng€™€ggg€€gg€€™gNg€™™€gNg€€€€g€€gg€€™€ggg™™ggg€€€gg€™€gN€€€gNg™gNNg™™€ggggg€€™™™gN5g™™g5gg€Ng€€€gggggg€€€€€N5N€™™€NNg€€™™gNggg€€€ggNg™™gNg€€™€gggg€™€gNgg€€€gggggg€ggg€€€gNg€€™NNNg€€€€gN5g€™™gNNg€€€gNNg€™€ggggg€€€€gNg€€ggg€€ggNg€€€gggNg€€€ggg€gg€€ggg€€ggg€ggggg€€€gNgg€€€€gggg€€€ggg€€ggg€€€g€gNg€€€ggggg€€€Ngg€ggggggg€€ggNg€€€gNggggg€€gNNg€™€gggggg€gggggggg€€€gggggNg€€€NNgg™€ggNgg€€gggNgg€gg€gggg€€€gggg€gggg€ggggggg€€ggg€€gg€€ggg€€gggg€€gggggg€ggg€gg€€€ggNN€€€ggg€€gg€€€Nggg€€€ggggg€€ggg€€ggg€€NNg™€NNg™™gNg€€ggg€€ggg€€gg€€ggg€€ggg€€gggg€€€ggggg€€ggg€€gNg€€€ggg€€ggg€ggg€€€gggggg€€€gNg™€gN€€€gNg€€gg€€gNg€™gNg€™€gg€€gN€™™gNg€€gg€™€gNg€€€gg€€g€€€ggg€€gg€€gg€€€gg€€€€gg€™€gNg€€gg€€€gg€™€ggg€™™€gggg€€€€ggg€€€g€ggg€€€€gg€™€ggg€€ggg€€€g€€€€g€€€gg€€€€€€gg€€€g€g€€€€€€€ggg€€€€gg€€g€€€€€gg€€€€€€€€€gg€€€€€g€€gg€€g€€€€€g€€€ggg€€€€€€€gg€€€€€€€€gg€€€€€g€€g€€€€gg€€€g€€€ggg€€€€€€€€gg€€™€ggg€€€™€€ggg€€€€€gg€€€€€gg€€€€€g€€€€€€gggg€™€€€€g€€€€€€gg€€€€€€ggg€€€€€g€g€€™€€€gg€€€€€€ggg€™€€gg€€€€€€€ggg€€€€g€€g€€€€€€g€€€€gg€€€€€€€€€g€€€€gggg€™€€gggg€™™gggg€€™€€ggg€€™™€€ggg€€€€€ggg€€€™€ggg€€€€€€€g€gg€€€gggg€€€gg€gggg€€g€€€€gggg€€€ggg€€€g€€€€ggg€€€ggg€gg€€€ggg€€€€€€€ggg€€€gggg€€€€gggg€€€€ggggg€€€ggggggg€€€gggg€€€€gggg€€gggg€€gggggggg€ggggg€€gggg€€€€gggggggggg€€gggg€€ggggg€€gggg€€€gggg€€gggg€€gggg€gggggg€g€gggg€€€gggg€€€€gNg€€€gNgg€g€gggg€€gggg€€ggg€€gggg€ggg€€gggggNg€™gNNg€€gggggg€€ggNg€€€NNg€€gggg€€g€gggg€€ggNg€€€ggNg€€€gNNg™€€gNg€€€€ggg€€ggg€€gg€€gNg€€€NNgg€€€ggggg€€gggg€€€g€€€gN€€€ggg€€ggg€€€gg€ggg€€gggg€gg€€€gggg€€€€gggg€€gggg€€g€g€gg€gg€g€g€€€€Ng€€€Ng€€€g€€ggN€€€€gg€€ggg€ggg€€€gNg€€€gggg€gg€€€NN€™€gN€™€gNg™€€gg€ggN€€ggg€gggg™gggg€ggg€™ggg€€ggg€€g€g€™€gNg™€ggg€ggg€€€gNg€ggg€ggN€€g€€g€g€Ng€€gNg€™€Ng€™gNg€€gg€€€gg€gNg€€ggg€€ggg€™gNN€™gNg™€gNg€€ggg€g€€€gg€gg€€gg€€gg€€€gNg€™gN€€€gggg€€€ggg€€€€gggg€€ggg€gg€™€gg€€ggg€€€€ggg€€€€€gNg™™€ggN€™™€€ggg€€€™€Ng€€€g€€€gg€g€€€€gNg€™€€€ggggg€™€gNg€€™g€€ggg€€€™ggg€€€€€gggg€€€€€€gg€€€€€€ggg€€€€€€€€€g€€€€€€€€€€g€€€gg€€€g€g™€gg€€€g€g™€gg€™€ggg€€€g€™€€gg€€€g€€€€g€€™™€gg€€™€€€ggg€€€™€g€€€€€€€€€N€€€€g€€€gN€€€€€€gg€€™€gg€€€€€€€€ggg€€€€g€€€gg€€™€ggg€€€€g€€g€€€€€gg€€€gg€™€gggg€€g€gg€€€g€€€€g€€€ggg€€€€gggg€€€€€ggg€™€€gg€€ggg€€€gg€€€€g€g€g€€€€€g€gg€€g€€€g€€€€€ggg€€€gg€g€€€€gggg€€€€gggg€€€€€ggg€€€gggg€€€€ggg€€€€€ggggg€€€ggggg€€€€ggg€€€ggg€€gg€€€gggg€€€€ggg€€€€gN€€€gggg€gggggg€€ggg€€€ggNg€€€gggg€€€gNgg€€ggg€€ggggg€€€ggg€€€gNgg€€€gggg€€€ggg€€€gggg€€€gggg€€€gg€€€ggNg€€™€gNNg€™€gNg€€€€ggg€€€gggg€€ggNg€€€ggNg€€™€gNg€€€ggg€€€gggg€€€gNgg€€€gggggg€€€gggg€€ggggg€€ggN€™€gNgg€€€€gNgg€€ggg€€ggg€€gggg€€€€gggg€€€gg€€gggg€€€gg€gg€€€gggg€gggggg€€€ggg€€€€ggggg€€€gggg€€€g€ggggg€€€€gggg€g€€gggg€€€gggg€€€gggggg€€€gggg€€g€€g€gggg€g€€gggg€ggg€€ggg€™™ggg€€gg€€€gNg™€ggg€€gg€€gggg™€ggg€€ggg€€ggg€gg€gggg€€€gg€€€gg€€€€Nggg€€€€ggg€€€ggg€€€gg€€€g€€ggg€€€ggg€€€€€ggg€€€€gggg€€€€ggg€€g€g€€ggg€€ggg€€ggg€gggg€€ggg€ggg€€€ggg€gg€€€ggg€€€€gggg€€€gggg€€gg€€g€€€gg€€€gg€ggg€€ggg€€g€€€gg€€€gg€€gg€€€g€gg€€€€€ggg™€ggg€€€gg€€gg€€€gNg™€ggg€€€€g€€ggg€€€gg€™€gg€g€€€gg€gg€€gg€€€€gg€gg€€€ggg€€€€gg€€€gg€€ggNg€€€gggg€€€€ggg€€g€€™€gg€™€€€€€g€g€™€€gggg€€€g€€g€€gg€™gg€€™€gg™€ggg€g€€g€g€gg™€€€g€g€g€™€gg€€€€€€€€€g€€€€g€g€€€€g€€€€g€€€€g€€€€€€€€g€€€€g€€€€ggg€€g€€€€ggg™™€gg€€€g€€ggg€™™€€gg€€€€g€€€gg€€€€ggg€™€€gg€€gg€€€€ggg€€€gg€€€Ng€™€gggg€€€g€€€€ggg€€ggg€™€gN€™€ggg€€€€€gggg€€€ggg€€€€€gg€€€g€€€gNg€²€gNNg€™€gg€™™g5N™™€gg€€gg€™€N5g™€€€g€€gg€™€ggggg€€€€NN€™€gNN€™€gg€ggg€€gg€€€NNg€™€gNNg€€™gNNN€€€€ggggg€€€€€gggggg€€€gNNg€€€gg€ggg€™€NN€™€gggggg€€€gNg€€ggg€€€gg€€gg€€ggg€€ggg€€€ggg€gggg€€€ggggg€gggg€€€gg€gggg€€gggg€€gg€€€ggg€€€€ggg€€€€gggg€€€gggg€€ggg€g€gggg€ggg€€gggg€€€gNg€€ggNg€€€ggggg€€€gNg€™€ggggggg€™€gNg€€€€gggg€€gNg€€€gNgg€€€€gggg€€€gg€gg€€€gggg€€€€gg€€g€ggg€€€ggg€€ggg€gggg€€ggg€g€€ggggg€™€gggg€€€€€gggg€€€gg€gg€g€€€€g€gggg€€€ggg€€€ggggg€€€ggg€€gggg€€€€gggg€gggg€€€ggg€€€g€€€g€gggg€€€gg€€gggg€€gg€€€€ggggg€€€g€€g€ggg€€g€gggg€€€€ggg€€€ggg€g€gggggg€g€€€€ggg€€ggg€€€ggg€€€gggg€€€€gggg€€€gggg€€€€ggggg€€€gggg€€€ggg€€gggg€€€ggg€€€ggggggg€€€ggg€g€gggg€g€€€€ggg€€€gg€€€g€€€gggg€€ggg€€€gg€€€g€€€ggg€€€ggg€€€g€€ggg€€€gggg€€€€€€gg€€g€€€€gg€€€ggg€gg€€€ggg€€ggg€€€gg€€gg€€€€gg€€€gg€€€ggg€€g€€€ggg€™€ggggg€€€€gNN€™€€ggg€gg€™€gggg€€€€€€gg€€g€€g€€g€€€€€€€g€gg€€€€€€g€€€gg€€€€g€€€gg™€ggg€€€€€€€gg€€€€ggg™€gg€€€gg€™€gg€€€g€€€g€€€gg€€€€ggg€€€€€€gN€™€€ggg€€€€€€ggg€™™€ggg€€€€€€gg€€€€€€g€ggg€™€€gNg€™g€€ggg€€™™gNg€™™€gg€g€€™€€ggg™™€gg€€€€g€€€€€€€€gg€€€gg€™€€gg€€€€€€g€€€€€€€ggg€™™€gg€™™ggg€€€€€€€ggg€™€ggg€€€€g€gggg€€€ggg€€€g€€€ggg€™€€ggggg€€€gg€€€€gggg€€€gg€€€gg€€€Ng€™€ggg€€€€€€gggg€€€€ggggg€€€gggg€g€€ggg€€€gN€€™€N5N€™€g€€gNg€™€Ngg€€NNN€€gNNgN€²²€€™™ggggN5g²²€N5g€€gg€€g5N€²™N5g™™gNg€€gg€€gNg€™€NNg€€gg€gggg€€gNg€€€ggNgg€™€NNg€€€€gggg€€gNg€™€gNg€€gg€€gNNg™™€NNg€g€€™ggNg€€gN€™€gNg€€gg™™gN5€™™€Nggggg™€gNNg™™€Nggg€g€€gNN€™€NNg™™€€€gNg€²€N5g™€gg€€€gg€€€Ng€™™g5Ng™€€€gNNg™²™N5g€€ggg€ggg€™€NNg™™€gg€gNg€™€Ng€€€gggg€€€€ggNg€™€gNg€gg€€ggg€€€ggg€gggggggg€€ggg€€€€gggg€€€€gggg€€€ggggg€€€ggNg€€€gg€€€€gggg€€€€ggggg€€€€gggg€€€ggg€€€€ggggg€€€€€gggg€€€gggggg€€€ggg€€gg€€€gggg€€g€g€€gg€€€ggg€gggg€€€gggggg€€€gggg€€€€gggg€€€g€€€ggg€€gggg€€€€€ggg€g€gg€€€gggg€€€gggg€€€€€gggg€€€€€€ggg€€€€gg€gg€€€€€€g€gg€€€ggg€€€€g€ggggg€€€€€gNg€€€ggg€€€€gggg€€€ggg€€€ggg€€€ggg€€€€gg€€g€€€€€gg€€€€ggg€€€€€gggg€™€gggg€€€ggg€€€€ggg€€€gggg€€€€ggg€™€ggg€€€ggg€€€gg€€€™€ggg€€™€€ggg€€€€€gg€€€€€€g€€g€€€g€€€€€gg€™€€g€g€€€g€€€€€€™€gg€™™€ggg€€gg™€€gg€™ggg€€€€€€g€€€€€€€€gg€€€€ggg€€€gg€€€€g€€€g€€€€€g€™€€gg€€€€€€€gg€€g€€gg€€€€€gg™€g€€€€gg€™€gg€™™€gN€€€g€g€€g€€€€ggg™™€gg€€™€gg€€™€g€€€gg€€™€ggg€€€€g€€€gg€€€€€ggg€€€gg€€gg€€€€ggg€€€€g€€gg€™™ggg€€€€€gggg€g€€€€gg€€€gg€€€ggg€€€€gggNg™™€Ngg€€gg€€€gg€ggg€€€ggg€ggg€€ggNg€€€gggggg€€€gNg€€€ggg€€gg€€€gNg€€€€€ggggg€€€gNg€€€€ggggg€€€€ggg€€€gggggggggggg€gggg€€gggg€g€€ggNg€€ggggggg€€gggggggg€ggg€€ggNgg€gg€gNg€™€gNg€ggg€™gN5g™™™g5Ng™€g€€g5N™™g5N™™gNN™€gNg™gNNg™™€gNgg€€g€€gN5€™™g5Ng€€€€gNN€™€gggggg€€gNg€g€g€€NNg™€Ngg™€gNg€€gNgg€gggg€gggg€g€€€gggg€€ggN€™€gNg€€gN€™gNg€€gggg€€NNg€€gg€€gNN™²€NNg€gg€€€ggg€™€gN€™€ggNg€€€gggg€€€g€ggg€€€ggg€€gNg€€€g€€€gNg™€€Ng€€€g€ggNg™™€gNg€€€gg€€gg€€€gNg€™€ggN€€€€gggg€€™€ggg€€gg€™ggg€€ggg€€gggggg€€€gNN€™™gNg€€€gg€ggg€™€gNg€€€gg€gggg€€gNg€€€gg€€€g€€€gg€€€gN€™€€€ggg€€™€gNg™€€ggg€€gg€€g€€g€€gN€™€€gg€™€gg€gg€€€€ggg€™€€gg€™€g€ggg€€€€ggg€g€€€g€€€ggg€€€gggg™€€gggg€€€€€gg€€€€gg€€€€€g€€gg€€g€€g€€gg€™€€ggg€€€€€gg€€€€€gg€€€€€€€€gg€€€€€g€€€€€€g€€gg€€€€€gg€€€€gg€€€™€gggg€™™gg€gg™€€g€g€™€™€gg€€€€€gg€™™€ggg€™€€g€g€€€€€€gg™€€€€g€€€€€€€€€€€€ggg™™€ggg€™€€€g€™™€€ggg€™€€€gNg™™™€gg€€€™€€€€gg™€€€€€€€gg€™€€€gg€€€€€g€g€€€€€€€€€€€gg€€€€€€€€gg€€€€€€€€€g€€€€gg€™€€gg€€€€€€€€g€€€€ggg€€€€€€€ggg€€€€gg€g€€€€€ggN€€™€ggg€€€g€€€ggg€™™€ggg€€gg€€ggg€€€gg€€€ggg€€gggg€gg€ggggg€€g€ggg€€€gNNg€€€gggg€€€€gNN€™€ggNg€€€€ggggg€€€ggg€€ggg€€€€gggg€€€gggggg€€gNNg™™gNg€€ggg€ggg€gNgg€€€ggNNg€™€gNN€€€ggggggg€€ggg€€gNg€€€gNggggg€€ggg€€ggggggg€€gNg€€ggg€€ggg€€gggg€ggg€€ggg€€gggggg€€€gNgg€€ggggggggggg€€€ggg€€gNgg€€ggggg€€€ggggg€€ggg€ggg€€ggg€€ggg€€gg€ggNg€€gggggg€gggggg€g€gg€gggg€g€gg€gggg™ggNN€€€gN€gggN€€€gN€€€gg€€gNN€€gNg™€gNN€€€gg€gggg€gggg€gNgg™™NNN€™gg€€g5g™gNg€€€Ng™€gNg™€gNN™²€N5€€ggg€€€N5€™™gNNg™€gN€€gNg™™gNN€™€gN€€Ng€™€gNNg™™gNg€ggg€€€NNg™€ggg€€ggg€™Ng™™NN€™™NN€€€N€€€ggg€€€g€€gNg™™gNNg™€gN€™g5N™™gNN€™€gN€™g5g™€gNgg€€Ng€gNg™€€ggN€€ggg€€ggg€€gNg™™Ng€™€gg€€ggg€€€gg€€€g€€ggg€™€NNg™™gg€€ggg€™€NN€™€gN€€€gg€€gg€™€gNg€€€gg€€ggg€™€Ng€€€€g€€€gg€€€€gg€€ggg€€™€ggg€€€€€€ggg€€€€gg€€€€€g€€€ggg€€€€€€ggg€™™€gNg€™€g€g€€g€€€€g€€g€€€€€€€ggg€™™gg€gg€€€€€gN€€™€gg€€€€€€€€€gg€€€€€€€€gg€™€€€€gg€€€€g€€€€€€€€€g€€™ggg€™€gNg™™€€g€€€gg™™€ggg€™™€€g€gg€€™€g€€€gg™€g€gg€€€™™gg€€€€€€€€gg€g€€™€gggg€™€€g€€€€€€€€€€gg€€™€€€€€g€€™€ggg€€™€g€gg€€€€€€gg€€€€€€€gg€€€€€€€gg€€€€€ggg€€€€ggg€€€€gg€€€€€ggg€€€€gggg€€€€ggg€€€€gg€€€€€ggg€€€gg€€€€gggg€€€€gggg€€€gggg€€€gggg€€ggg€€€gggg€€€€ggggg€€ggg€€€gg€ggggg€€€€€ggggg€€€gggg€€€€ggg€g€gggg€€€gNNg€€€ggg€€€€€ggggg€€€ggggg€€ggg€€€gggggggggg€€€gNN€€€gNgg€€€gggg€€€ggNg€€€gggggg€gggg€gNNg€™€gNgg€€€ggNgg€€gggggg€gggg€g€ggg€€ggg€€g€g€€ggg€€ggNg€€€gggg€gggg€g€€€ggggg€€€€gggg€€€gggggg€€€ggg€ggg€€€gNN€€€€NNg€€€€€ggg€g€g€€€€ggg€€€€gNgg€€€gggg€€g€g€€gggg€€€gggggg€€€gNg€€€gg€gggg™€gNg™€€gg€ggg€™gNNg™€ggg™€ggg€€gg€€gg€€ggg€ggg€™€gNg€™€Ng€€€gg€€€g€€€gN€€€€g€gggg€€€Ngg€€ggg€€ggg™€ggN€€€€N€€g€€€€g€g€€gNN€€€gggggg€€ÿNg€€€€€gggg€€€ggg€€gggg€g€€€€NNg™²€N5g™™gg€™g5N€²€gNg€€Ng€™€Ng€™g5g™²€5N€™gg€€gN5€²²g5N€™€ggg€gN€²€gNN€€€€ggg€g€€ggg€€ggg€€Ng€™€Ng€™gNg€™ggg€™ggg€€€g€€Ng€™gNg€™€NN€™gN€™€gNg€™€gNg€gg€€€gNg€€gg€NN€€€€Ng€™gN€€gg€€g™€NN™™Ng€€g€gg€™gNg€gg€€€€€5N²™€Ngg€€gg™€gNg€€™gg€€€g€™™€ggg€€€™€gNg€€€™gg€€gg™€gggg™™€€€gNg™€€€€gN€€€€€€g€gg™™€g€€g€™™gggg€€€€€™ggg€™€€gg€€€€€€€€€gg€€€€€ggg€€™€gg€gg€€€€gg€™™g€€g€€€€™€gg€€€€gg€™€g€gg™€€g€€g€€€€€ggg€€€€g€€€€g€€€€g€€€gg€€g€€€g€€€€gg€€€€€€€€€g€€€g€€€€€g€€€g€€€gg€€€g€€€gg€™€ggg€€€g€€€€gg€™€gg€€€gNg™™€ggg€€€€€€ggg€€™€ggg€€€€gggg€€€gggg€gg€€gg€€ggg€€€ggg€€ggg€gg€€€gggg€€€€gNg€™€ggg€€€g€€gggg€€ggg€gggg€€€€ggg€€€€gggg€€€€€ggNg™™€NNg€™€€gggg€€€gggg€€€gg€€€ggg€€€ggg€€€€gggg€€€€gNNg€™€gNNg€€€€gNg€€€€gggg€€€ggg€€ggg€€€gggg€€€€gNNg€™€gNN€™™€gNg€™€€gNg€€€gNg€€€gggg€€ggNg€™€gNNg™™€gNNg€™€ggNg€€€€NNg€€€€ggg€€€€gg€€€€ggg€€€€ggg€€€ggg€€ggg€€€gggg€€€gg€€€€ggggg€€€€€€ggg€€€gNgg€€€gggg€€ggg€€€gNg€€€ggg€€€€gggg€€€g€ggg€g€€gggg€€€gggg€€€gNgg€€€ggg€€€gg€gggg€€ggg€€gggg€€€ggg€€™€ggg€€€ggggg€€€ggg€€€g€g€€€g€gggg€€€€ggg€€€€gNg€€€gggg€g€gggg€€€€gg€€ggggg€€€€gNg€€€gggggg€€€gNg€€€ggg€€€ggggg€€€gggg€€€€ggggg€™€ggg€€€g€€ggg€€ggNg€€€Ngg€€€€gggg€™€ggg€€€€gggg€€€€ggg€€€€gggg€€€ggg€€€gggg€€ggg€€gg€€€Ng€€€g€€€gNg€™€gggggg™€gg€™€N5g²™gNg€ggg€™gNN™™gg™gNN€²™g5N™™€ggg€€gg™€NN€™€gNg™€gN€€ggg€€ggg€™ggg€€€€gg€€gg€€€gNg€™gNg€€gg€€€ggg€€€€ggg€€g€gg€€€ggg€€g€€€gg€€ggg€€gNg™€Ng€€g€gN€²€5g™€€€N€™™NN™€gg€€€™gN€€€g€gg™€N€™€Ng™€€€gN™²gg€€g€€gg™€gN€€g€gg€€5€™€€g€g€€5€™™gN™g€€€€g€gg™€€g€€€€€€€ggg€€€€€™ggg™€€€ggg€€g™™€gggg™™€€ggN€™€™gN€gg€€™€€gNg€™€ggg€€€€™€gg€g€™€g€€€gggg€€€gg€gg€€€™€NN€™™™€Ng€€g€™€€gNg€€€€€gg€€€g€€€€gNg€€€™€gNN€™™€ggggg€€€€ggg€g€€g€g€gggg€€€€ggg€™€€gNgg€€€gggg€€ggg™€gg€€ggg€€ggg€€g€€€ggg€™ggN€™€gg€€€g€€€NNg™™€ggg€€g€€€g€gÿggg€€gg€€€gg€€€gggggg€gggg€g€ggg€™€ggNg€€€gggg€€€ggg€€ggggg€€gNg€€€ggg€€€g€g€ggg€€ggg€gg€€€gNg€™Ngg€€€€gggg€€ggNg€€€Ngg€€gggg€€€ggggg€€€gggg€gggg€gg€g™€ggg€gg€€€Ng€€€gN€€™gNg€™€gg€€€gggg€€™€gNN™€gNg€€gg€gggg€€€ggg€€€gg€€gg€€€ggg€€€gggg€€gggg€€€€gggg€g€€ggg€™ggNg€ggg€€€€gg€€€gNg€€€ggg€g€€€ggg€€€gg€€€€gggg€€€gggg€€gg€g€g€€€gggg€€gggg€€€€€€gggg€€€ggg€€€ggg€€€gggg€€€gggg€€€€ggg€€€gggg€€€ggg€€€€€ggg€€€€gg€€€ggg€€ggg€gg€€€€ggg€€g€€€gggg€€ggg€g€€€€€ggg€€€€ggg€€€€€gggg€€€gggg€€€gggg€€ggg€€€ggg€€€€gggg€€€€ggNg€€€€gggg€€€gg€€€€€ggg€€€ggggg€€€gggg€€€ggggg€€€€ggg€€€€€€gg€€€€ggg€€g€€€ggg€€€g€€ggg€€€€gggg€™€gggg€€€€€ggg€€€€ggg€€€€ggg€€€€ggg€€€€ggg€€€€ggg€€€€gg€gg€€gg€€€€ggg€€€€ggg€€ #include "pump.h" #include #include #include "rle.h" #define NUM_GFX 32 byte *gfx[NUM_GFX]; byte *endlogo; #define NUM_SHUFFLES NUM_GFX #define TIME 15 void EPILEPSIA_Do(void) { int time, delta, mode = 0; int i; char buf[256]; for (i = 0; i < NUM_GFX; i++) { sprintf(buf, "grt%d.rle", i+1); gfx[i] = fload(buf); if (!gfx[i]) BASE_Abort("Load grt%d.rle", i+1); //printf("Loaded %s, ", buf); } // Shuffle el orden de los letreros { int i, j, k; for (i = 0; i < NUM_SHUFFLES; i++) { j = RND_GetNum() % NUM_GFX; k = RND_GetNum() % NUM_GFX; if (j != k) { byte *tmp; tmp = gfx[j]; gfx[j] = gfx[k]; gfx[k] = tmp; } } } //puts(""); for (i = 0; i < NUM_GFX; i++) { //printf("Logo %d is now 0x%X, ", i, gfx[i]); } //puts(""); endlogo = fload("endlogo.rle"); if (!endlogo) BASE_Abort("Load endlogo.rle"); while (!DVTInfo->semaphores[4]); DVTInfo->semaphores[4]--; VGA_PutColor(0, 0, 0, 0); VGA_SetBorder(0, 0, 0); VGA_PutColor(255, 63, 63, 63); VBL_VSync(0); time = 0; while (!LLK_SpacePressed) { RLE_Draw((byte *)0xA0000, gfx[mode]); delta = VBL_VSync(1); if (mode & 1) { VGA_PutColor(255, 0, 0, 0); VGA_PutColor(0, 63, 63, 63); VGA_SetBorder(63, 63, 63); } else { VGA_PutColor(0, 0, 0, 0); VGA_SetBorder(0, 0, 0); VGA_PutColor(255, 63, 63, 63); } time += delta; if (DVTInfo->semaphores[4]) { //printf("Mode era %d, ", mode); DVTInfo->semaphores[4]--; time = 0; mode++; if (mode == NUM_GFX) mode = 0; //printf("Ahora es %d\n", mode); } if (DVTInfo->semaphores[6]) { DVTInfo->semaphores[6]--; break; } } //puts(""); RLE_Draw((byte *)0xA0000, endlogo); time = 0; for (;;) { time += VBL_VSync(1); if (time > 70) break; } VGA_GetPalette(VBL_Palette, 0, 256); VBL_DestPal = NULL; VBL_DestRed = 0; VBL_DestGreen = 0; VBL_DestBlue = 0; VBL_FadeMode = VBL_FADEFAST; VBL_FadeStartColor = 0; VBL_FadeNColors = 256; VBL_FadePos = 1; VBL_FadeSpeed = 1; while (VBL_FadePos); for (i = 0; i < NUM_GFX; i++) { free(gfx[i]); } } gg€€gg€€€ggggg€€€€NN€™€gggggg€€€gggg€€€ggggg€€€€ggggg€€€ggg€gg€€€ggNg™™€gggg€€g€€gg€€gg€€€€€€€€€€€€gg€€g€€€€g€€ggg€€€€gg€€€g€€€gg€€€g€€€gg€€€€g€€€€€gg€€€€€€gg€€€™g€gg€g™€€gN€€€™€€gNg€™€g€gg€€™g€€€€Ng€™™gggg€g€€€™ggg€™™€g€gg€™€ggg€€g€€€gg€™€€gg€€ggg™™€€g™€ggg²™€gN€€€€g€€ggg™™€€gg™€€g€€g€g€€€€€€€g€€€€€€€ggg™™€gNgg™™€€ggg™™™€ggg€™€€ggg€€€ggg€€€€g€€€€€€€ggg€™€ggN€€™€ggg€€€€€€gggg€€€gg€™™€Ng€€™€ggg€€€€€€€gg€€€€gg€€€g€€€€gg€€g€€€€€ggg€€€ggg€€€gg€€€ggg€€€€gg€€€€€€€ggg€€€€€g€ggg€€€€gg€€€ggg€€€€ggg€€€gg€gggg€gggg€€gggg€€€gggg€€€gggg€€€€€ggg€€€€g€gggg€€€€gggg€€€ggggg€€€€€ggg€€€€€gggg€€€€gggggg€€€gggg€€g€gggg€€€g€€€ggg€g€€€gggg€€€ggggg€€€gggg€€€€ggggg€€gggg€€ggg€gggg€€ggg€€ggg€€€ggggg€€€gNgg€€€ggggg€€€ggg€ggg€€€gggg€€€€gNgg€€€gggg€€€€gNgg€€€ggg€gggg€gg€gg€g€gg€€€gggg€€€€g€gggg€€€gggggg€€€ggggg€€€€ggg€€ggg€ggg€€€gg€€€€gg€€€ggg€g€g€€€ggg€€€gg€€gg€€g€ggggg€™€gggg€€€g€€ggggg€€gggg€€€g€€gggg€€€ggggg€€ggNg€€€ggg€€ggggg€€€gggg€€€g€gg€g€€ggg€€g€ggggg€gggg€€€gggg€€€gg€gg€€€ggg€€ggg€€€gg€€€€g€gggg€€g€ggg€g€€€gg€€€gg€€ggg€€€ggg€€Ng€€gNg™€gNg™€ggg€gg€€€gNg€™ggN€™€gg€€gN€™™gNg€€gg€€ggg€™€gNN€€€ggg€€€€ggg€€€gggg€€ggg€€€gg€€gNg€€€ggggg€€€gg€€€€€gggg€g€€€€ggg€€ggggg€€ggg€€€€€ggg€€ggg€€€€€ggggg€€gg€€€gNg€€gg€€ggg€€€€ggg€€€€€€ggg€€€ggg€€g€€€€ggg€€€€g€€€gg€€€ggg€€€€gg€€€€€€g€g€€€€€€ggg€€€gg€€™gg€€€g€€€ggg€™€ggg€€€€€™€gNg€™™€ggg€€€€€€gNgg™™€gN€€€€g€€€gN€€™€g€g€€g™g€gg™€™€g€N€N€™€€NNg™™€€g€ggg™™€gg€€€€€g€ggg€€€€g€g€€g€€g€€€gg€€™™gNNg™™€gg™™g5N²²€NNg€™gg™™€€NNg™²€€ggg€€€€€€gNN€²²€Ng€€™€g€gNg€€™€ggg€€€€€€€ggg€€€€ggg€€ggg€€ggg€€€g€gg€€™€gNg€€€€ggggg€€€€gNN€€™€gNgg€€€gggg€€gg€€ggggg€€€gNg€™€ggg€ggg€™™ggggggg€€€™™€N5N€™€gggggg€™€gNgg€gg™™€N5gg™™€gNg€€€€€€gNNg€™™€NNNg€™€ggNgg€™€gNNg™€Ngg€€gggggg€€€ggg€€€ggg€€€gNNg€€€€gNg€€€gggggg€gggg€€€gNg€€€gggg€€€gggg€™€€gggg€€€ggggg€gggg€ggg€g€€€€gggg€€ggg€€€gNNg€€€€gggg€€€€gggg€€€gggg€gggg€€gggg€€€ggggg€€€gggg€€€gggggg€€€ggggg€€€gg€€gg€€€ggggg€€€ggg€€€ggg€ggg€€€€gggg€€€gg€€g€ggg€€ggggg€€€€€gggg€€€gg€gg€g€gggg€gg€€€gggg€g€€€€gggg€€€gggg€€€gggggg€€g€ggg€€ggggg€gg€€€€€ggg€€€€€gggg€€€gggg€€€€ggg€€ggg€€g€€€€gg€€€gggg€€ggg€gg€€€€€g€€gggg€€€€ggg€€€€ggg€€€€€ggg€€€€gggg€€€gggg€€g€g€€€€gggg€€gg€€ggg€€€gNg€€€Ng€€€g€€€ggg€€€gggg€g€€€g€gg€€€€ggg€€gg€€€ggg€€€€€gggg€€€€Ngg€€€€gg€g€g€gggg€gg€ggNg™™€Ng€€€gg€€€ggg€€€€g€€gg€€™€gggg€€ggg€€€g€€gggg€€€gg€€€ggg€€€ggg€€€€gggg€g€€€€gg€™€ggg€€ggg€€€€g€€g€g™€€ggg€€€gggg€€€€gg€€™€gggg€€€ggg€™€€gggg€€€€€gg€€€g€€€€gg€€€€gggg€gg€™€gggg€€€gggg€€€€€€gg€€™ggg€€ggg€€€€ggg€€g€€™€gNg™™€gggg€g€€€ggg€™™ggg€€€€g€g€gg€€€g€ggg€€€gg€€€gN€€€€g€€™ggg€™€gg€€€€g€€€gN€€€€g€g€€g€€€€gg€€€€€€g€g€€€gg€€€€€g€gggg€€€€gg€™€€g€€€gg€€€€gg€€ggg€€€€g€€g€€€€€ggg€€€€€€g€gg€™™€N5g™™gg€™gNNg™™€NN€gg€€€€€gggg€™€NNgg€€€™™N5N€Ë™gNN€€€€€€ggg€€€€g€gNg€€€ggg€€ggg€€ggg€™ggg€€Ng€™™gNg€™€€€gNg€™€gNN€€€gg€gggg€ggg€g€gggg€™€gNN€™™gNgg€gg€ggg€™€NNN€™€gNNg€€€€gNN€€™gNg€€gg€€€ggggggg€gggg€€€€NNg™™€gNggg€€ggggggg€€€gNgg€€ggggggg€€€ggNggg™€€NNg€™€ggg€g€gg€g€€gggg€g€gg€g€€g€g€€ggg€™ggNg€€€gggg€€€ggg€€€€gNg€€g€gggg€€€gNg€€€g€gg€g€€ggN€™€€NNg€™€ggggg€€€ggggg€€€ggg€€€ggg€€€ggg€€€€gggg€€€€g€ggg€€€gggg€€€€€ggg€€€ggg€€ggg€€ggg€€€ggg€€ggg€€€ggg€€€€ggg€€€€€ggggg€€€ggg€€€gggg€€gg€gg€€ggggg€€€gggg€€€€ggg€€€€ggg€€€€gggg€€€gggg€€€€g€gg€€€€gg€€€ggg€€€€gggg€€€gggg€€€ggg€€€€gggg€€€gggg€€g€g€€ggg€€ggg€€€gNg™€ggg€€€€gggg€€€€ggggg€€€ggg€™€€ggg€€€gggg€™€gNgg™™€gggg€€gggg€€€€ggg€™™€gNg€™€€ggg€€™€gNg€€€€ggg€€gNgg€™€gggg€€€gggg€€€ggggg€€€ggg€€€ggg€€€ggg€€€g€€ggg€€€ggg€€€ggg€€€ggggg€€gg€gg€€€€€NN€™€ggg€€gg€€ggg€€€gg€€€ggg€™€gggg€€gg€€gg€€€€ggg™€g€€ggg€€™€NN€€™€gg€€€g€€€gg€€€gg€€€g€€g€€€€g€€€€g€g€€€€€€€gg€€€gg€€€g€€€€gg€€€€gg€€€€gg€™ggg€€€gg€™€€g€€g€g€€€€ggg€€ggg€™€gg€€gg€€€€ggg€g€€€€ggg€€g€gg€€€€€€ggg€g€€€€ggg€™€€gg€€€gg€€€gg€€€ggg€€€gggg€€€€€ggg€€€€€gg€€g€€€€ggg€€gg€€€ggg€™™€€gg€€€€€™€gg€€€gg€€ggg€€€€NNg€€€gg€€ggg€€€ggg€€€gg€€ggg€™€gggg€€ggNg€€€Ng€€€Ng€™€NNg™€€€g€€ggg™€€€ggg€g€™ggNg€€€g€ggN€€™™€55€²™g€€NN€€™€g5g€€g€€NNg€€g€Ng™™gNg€€€ggg€gN€™™ggNN€™™€NNg€€g€™gNN€™™€ggNg€€™gNgg€€€gggg€g€ggg€€€ggg™€ggNgg€™€gNN€€€N€™€N5€²€N5€™€NN€™€gN€€ggN™™gNN€™€gN€™gNN™™gNN™™g5N™™€gg€€NN€™gN€€gggg€gg€€g5g€™€Ngg€gN€™™gNg€€€ggg€gg€€€gg€€€NN€€€gg€gggg€€ggg€gggg€€ggN€€€€gg€g€Ng€€€ggggggg€€gggg€€€€gggg€€€€gggg€™™€NNg€™gNg€€gg€€€gg€€™gggg€€€gggg€€€ggggg€€€gggg€€€ggg€€€ggggg€€€ggg€€ggg€gg€€gggggg€€€ggNg€€€gggg€ggg€€g€gg€€gg€€gggg€€€g€€gg€€€gggg€€€€gNg€€€€gggg€€€€ggg€€€ggggg€€€€ggg€€€ggg€€ggg€€€gg€€€€€g€gggg€€€gNg€™€gggg€€€ggg€€€€gggg€€€€ggg€€€gNg€™€ggg€€gg€€€€€€ggggg€€€€ggg€€ggg€€€gggg€€€€€gg€€€gggg™™€gggg€€gggg€™€gggg€™€€gNNg™™€€gN€€€€€gg€gg€€gg€€€ggg€™€gggg€€€€€ggg€€€€gg€€€€gg€€g€€€€€ggg€€€€gg€€g€€€gggg€€€ggg€€€€€gg€€g€€€gggg€€gg€€€ggg€€€€gg€€€€€€€€ggg€™€gggg€€ggg€€gg€™€€g€ggg€€™€gNg€™™€gg€€g€€€€ggg€€€™gg€€€gg€€€ggg€€€€g€€€gg€€€ggg€™™gggg€g€€€€Ngg€™€ggN€€€€€€€gg€™€ggg€™€€gggg€€€€g€gg€€€€ggg€€€gN€™€gNg€™™gg€€€gg€™€gNg€™€ggg€€€€g€€€€gg€€gg€™™€ggg€€g€€€gggg€g€g€g€€€€€ggggg€€€€ggg€€€€ggg€€€€gg€ggg€€€gg€€ggg€€€gggg€€€€ggg€€€€gggggg€€gggg€€€g€€ggggg€€ggg€€gggggg€ggg€€ggg€€gg€™€gNg€€gNg€€gg€€€gN€€€ggg€ggg€€ggg€€gg€€ggg€€ggg€€€gg€€€ggg€€€g€€ggN€™™€gggg€€gggg€g€g€gg€€ggggg€€€ggg€€€gg€g€€g€g€gNg€™€gNg€™€gNN€™€€g€NNg™™gNNg™€gN€gg€€€N5g€²™gN5g™™€ggNNgg™€N5Ng™™€ggg€€gg€€NNg™€gNg™€gNg™€NN€€€€ggg€gNgg€€Ngg€™ggg€€Ngg™€Ng€™gNg€™gN€€gNg™™NNN™€ggg™€NNg²gNg™€gNg™€NNg™€gNg™€€Ng€ggg€€ggNg™™gNg€ggg€€€gg€€ggg€€€gNg€™€g€€gggg™€€Ng€€ggg€€€NN€™€gg€€gNg€™€NN€€€g€€€NN€™€gggg€g€gg€€€ggg€€gg€ggg€€ggggg€€gg€€gg€€€gNg€™€ggg€ggg€™gNN€™ggg€€ggg€™€gg€€€gg€€gNg€€gg€€€Ng€™gggg€€gg€€ggg€€€gg€€gg€€€ggg€™€gg€gg€€€€€NN€€€€ggg€€€€€ggg€€€€€ggg€€€€€€gg€€gg€€€€gg€€gg€€€gg€€€gg€€€ggg€€€€€gg€€g€€€ggg€™€€gg€€€€g€€€gg€€€€gNg€€€€gggggg€™€€ggg€™€€gggg€€€€€ggg€€€€€€ggg€€€€€g€€€g€€€gg€€€ggg€€€€gg€€€gg€€gg€€™€ggg€€€gg€€€gg€€€gg€€€€g€g€€€€€ggg€€€gg€€€g€€€€ggg€€€€€ggg€€€€€gg€g€€€€€gNg€€™€ggg€™€€g€€ggg€™€€g€gg€€€™€€ggg€™€ggg€gg€€™€ggg€€€€gg€€€€€€€€gNgg™™€€Ngg€€€€gNg€™™€gggg€€€€gggg€€™€ggg€€g€€€€gggg™€€€gg€€€€€ggg€€™€gNNg€™€ggggg€€€€€gggg€€€€ggg€€€€€€ggg€™€ggg€€€€€€g€€€€€ggg€€€€g€gg€g€€€€€€ggggg€€gggg€™€gNg€€€€g€gggg€€€ggg€€€€€gggggg€€€gg€€ggg€gggg€€€€gg€€€€ggg€€€gg€€ggg€€ggg€€ggg€€€€€gggg€€gggggg€€€€gg€€€ggg€€€ggg€€ggg€€€ggg€€gggg€€€gggg€g€€gg€g€ggg€€€gggg€€€gg€€€ggg€€€ggggg€€€gggg€€gggggggggg€€gggg€gggg€€€gg€gggggggg€€gggg€€€€gggg€€€ggg€gg€€gNgg€€g€gggg€€ggg€€g€ggg€™gNgg€€€€gggg€€€gNgg€€€€gggg€€€€gg€€ggg€€g€€ggg€™€€5Ng™™gg€€€5g€™€Ng™€gg™€€g€€NNN€²™€5Ng™™ggg€€Ng€™™gNg€€ggg€€gNg™€NN€™€gNg€€gN€€ggN€€ggg™€NNg™€ggg€€gNg€™gNg€™NNg™™ggggg€€€gNg€™gg€€€NN€€€NN€€ggN€€€gN€€€gg™€gNg€€€N€€gNg€€€ggg€€gN€€€€gg€€€N€€ggg€gg€g€€g€g€gg€€€NNg™™Ng€™NN€™™NNg™€gg€€gNg€™gNN€™€ggN€gNg€€ggg™€NN€™€ggggg€€g€€gNgg€€€gg€gg€™€Nggg€€gg€gg€™gN€€gg€€gg€g€€g€ggg€€g€€€ggggg€€€ggg€€g€€€g€€gg€€€€€ggggg€€gg€€gg€€g€€€€ggg€™€ggg€€™€€€gg€™™€gN€™€€g€€ggg™™gg€€€€g€™€gg€€€€€gggg€™€€g™gg€€€€€NN€€™€g€€€Ng™™€NN€€€g€€ggN€™™€€ggg€€€€gg€€€g€€™ggg€€€€g€€g€N€€™€gg€€€€€€€gg€€€€ggg€€€€g€€€€ggg€€€€€€gg€€€€€g€€g€€€gg€€€€gg€€€€€€€g€€€€ggg€€€€gg€g€€€€gg€™™€Ng€™ggg€€€€€€€gg€€™€NNg™™™gN€€€€ggg€€g€€€ggg€™€gNg€™€€ggg€€€gggg€€™€ggg€€€€ggg€€€€gggg€€€ggg€€™€gggg€€€gg€€€€ggg€™™gNNg™™€gggg€€€€€ggg€€€gggg€€€ggg€€€€gggg€€€ggg€g€gggg€€€gggg€€€€ggg€™€gNNg€™€€ggggg€€ggg€€€€€ggg€€gggg€€€€€€gg€€ggg€€™€gNgg€€€gggg€€€gNg€€€gggg€€€€ggg€€gggg€€€€gggg€€€ggggg€€ggggggg€€ggg€€€gggg€€gggg€€€€ggg€€€€NNg€€€gggg€€€gggg€€€gggg€€€€gg€€€gggg€gg€gggg€gggg€€€€gggggg€€€ggggg€€€gggg€€gg€€€g€gggg€€ggg€€€gggg€€gggg€€€gggg€€€gggg€€€€gNgg€€€ggg€€€€ggg€€g€gggg€€ggNg™™€NNg€€€€gNg€™™gNgg€€€€ggNg™€€gNgg€€€ggggg€€€gggg™€ggg€€ggg€€gg€™€NNg™€ggg€€ggg€€N€€™€N5g€²€gg€€ggg€€gg€gggg€™™NNN€™€€gg€gg€™€gNN€™™g5g™€ggg€€gNg™€€ggg€ggg€€g€€gg€€€€€gg€€€ggg€€ggg€gg€€€ggg€€€ggggg€€€ggg€€€€gNg€™€gNN€€€€g€ggg€™€ggg€€€gggg€ggg€€gNg€™gNg™€NNg€€ggg€€Ng€€€gg€€ggg€™€5N€™€gg€€gNg€™€NN€€gg€€ggNg€€ggggg€€€ggg€€€gg€€gg€€gNg€™€gNg€€€g€€€ggg€€€Ng€€gg€€€gg€€gg€™gNg€€€€gg€€gg€™€gggg€™€g€€g€€€€gNgg€€™€gggg€€€gg€€€€gg€™gg€€€g€g€™€gg€gg€gg€™€N€g€€€€N€gg™€™€ggN€™€€gggggg€™€gNgg€™€€gg€g€€€€gggg™€™€Ngg™€g™€™NNg€²€€gggg€€€€€€N€€€€g€gg€g™gg€g™g€€€™gggg™€€€g€€€gg™€€ggg€™€g€g™gg€€™gg€€™g€€gg€€ggg€€€€gN€™€gN€€€gg€™€gNg€€€gggg€€ggg€€€gg€€g€€€€ggg€™€ggNg€€€€gggg€€€€gNN€™™gNN€€€gg€™€€gg€€gg€€€Ng€€€ggN€€€€ggg€€€€€ggggg€™€gNg€™€ggg€€g€€€€gg€€€g€g€ggg€€g€€gggg€™€ggg€€gg€€€NNg€€€gg€ggg€€gg€€gNg€™€ggggg€€€gNg€€€€gggg€g€ggg€€gggg€€€€gggg€€€ggg€gggg€€€€€ggggg€€ggggggg€€€ggg€€gggg€gggggg€g€gg€g€€ggggg€€€gggg€€€g€€g€gggg€€€€gggg€€g€€€ggg€€€gggg€€€gg€g€€g€€g€€ggg€€€€gg€ggg€€€€ggggg€€gNg€€€ggg€€€gggg€€€€ggg€€€g€gggg€€€gg€g€€ggg€€€€€gggg€€€ggg€€€ggg€€€gggg€€€gggg€€€ggggg€€€€gNg€€€gggg€g€g€g€€€gggg€™€gggg€€€€€gNg€€€gggggg€€€€ggg€gg€€€€gg€€€gg€g€g€€€€gg€€€€€€€ggg€€€g€€gggg€€€g€€€€g€€€gg€gggg€€€ggg€€€gg€gggg€€€gg€ggg€€€ggg€€€€gg€g€€€€ggg€€€€gggg€™€gNNg€€€ggg€€€€€ggg€€€€ggg€€€ggg€€€€gggg€€€ggg€€€€gNg€€€gggggg€€€gNg€€€gggggg€™€gNg€™€Ngg€gg€™€NN€™€gN€™€gNg™€gg€€ggg€™€gg€gg€™™gNg€™€ggg€€€€€ggg€€€gg€€€gg€€€gg€€™gNN€™€ggggg€€™€gNg€€€ggg€€g€€€g€€€gNg€™™ggNgg€™€€ggg€€€€Ng€€€€gggg€€™€€gNg€™€gNg€€€€ggggg€€€€gg€™gNg€™€ggg€g€™€gggg€™€NNg€€€€ggggg€€ggg€€€€€€€g€€€€ggg€€g€€gNg€€€ggg€€gg€€ggNg€€€g€€ggg€™€€g€gN€€™€€€g€gg€™€Ngg€™™€Ng€€g€€€€ggg€™€ggg€g™€g€g€€g€g™€g€g€gg€™™gN5™€™€gggggg™™€gNNg€²€ggg€€€€g€€g€gg™€™ggg€€gg€€™gNgg™™€gNg€€€g€€ggg€™€€gg€€€€g€€€€g€€g€€€€ggg€gg€€€g€ggg€€€gg€gg€€™€€Ngg€€€ggg™€€N€™€gNN€™€gg€€€€g€g€€g€g€€€€ggg€€€ggg€€€gggg€g€gggg€€€gN€€€gg€€€g€€ggg€ggg€€€gg€€€ggg€€€ggggg€€€gNN€€€€gggg€€€gggg€€€ggg€gggggg€€€€NN€€€€ggNgg€€€gNN€™€gggggg™€gNg€€ggg™€€ggg€g€€€ggNg€€€ggg€€€€€gNN€™™€Ngg€€g€gg€g€€gggg€€€gNg€™€ggggg€™€gNN€™™gNg€€g€€€gNg€€ggg€€€€gg€€€€gggg€g€€ggg€€€ggg€€€€€€gNg€™€ggg€€g€g€€€ggggg€€€€gggg€€€€ggggg€€gggg€gggg€€€€gggg€€€gg€€gggg€gggggg€€gggg€€€g€€€€ggg€€g€€€gggg€™€gggg€g€€€ggg€€ggg€€€ggg€€€ggggg€€€€ggg€€€€gggg€€€€gg€€€€gg€€g€€€gggg€€€€€ggg€€€€gggg€€€€€ggggg€€€ggggg€€€€g€gggg€€€gg€€€ggg€€gg€€€gg€gggg€€gggg€€€g€€ggg€€€ggg€€gg€g€€€€gggg€€gggg€€€€€€ggg€€€gggg€€€€€ggg€€€gggg€g€€€€gggg€g€€€gggg€€€ggg€€€€€€ggg€€€€€ggg€€€€ggg€€€ggg€€€ggg€€g€g€€€€ggg€€€gg€€€€ggg€gg€€ggg€€€ggg€€€ggg€€gg€€€gggg€€€€ggg€€€€€€€ggg™€ggg€€€g€€ggg€€€€gggg€€€€™™gNNg€™€ggg€g€€™€gNg€™€€g€gggg€€€€gggg€™™€ggNg€™€gg€gg€™™€gNg€€€€€g€€€€€€NNg€™€ggg€g€€€ggg€g€€€€€ggN€€™€ggggg€™€€gNgg€€€€gNg€™€€gggggg€€€€g€€g€g€€€€gggg™€€gg€€€gg€™€gN€€€g€€€€ggg€™€ggg€€€g€€€€Ng€™™gg€€€gNg™™gNg€™€gg€€€ggg€™€gN€™€€gg€€€gg€€€€g€™€gNg€€€gg€€gg€€€€€g€€€€€€€ggg€€€€€ggg€€€€gggg€€€gggg€™€ggggg€€€€€ggg€€€€€€€gg€€€gg€g€g€€€€€€gNg€™€ggg€€g€g€€g€gggg€g€gggg€g€€€gg€g€€g€gggg™€€NN€€™gggg€gg€€€gggg€g€gggg€€g€€€ggNg€€€ggg€€gg€™€NNg€€€€ggggg€gggggg€g€€gg€€gNg€™€gN€€€ggggg€gg€€€gg€€ggg€€€€ggg€€€ggg€gg€€ggg€gg€€€ggg€€gggg€€€gg€g€gg€ggg€™gNNg€€€€ggNg™€gNNg€€€ggggg€™€gNN€€€€gggg€g€g€gg€gggg€€€gNgg€€g€gggN€€€€ggg€gg€€gNg€€€gg€€ggg€€€gg€€ggg€€€€ggggg€€€gggg€€€gg€€€ggggg€€€ggg€€€€€€gg€€ggg€€€€gggggg€€ggg€€€ggggg€g€€ggg€€€ggg€€ggg€€gg€€€gggN€€Ng€€gg€€ggg€€ggg€€gggg€g€€€gNgg™€ggg€gg€™€gNg™™gNg€€ggg€€gg€€ggg€€gg€€ggg€™ggN€€€€€€gNg€™€gNg€€€€€€gg™€ggg€€€gg€€gg€€€gNg€™€ggg€ggg€€ggg€€€g€€gggg€€g€€€€ggg€€ggg€€€gg€€€ggg€ggg€€gg€g€€ggg€€€€ggg€€€gggg€€€€gggg€€€€gggg€€€gggg€€€€ggg€€€€ggg€€€€€€ggg€€€gg€€€€gg€€gg€gg€€€€ggg€€€€€€gg€€€€gN€€€€gg€€g€€€€€gg€€€€€€gg€€€€ggg€€€€g€€€€€€€€€gg€gg€€€g€g€€€gg€€€€€€€€gg€€g€€g€€€g€€gg€g€€€gg€€g€€ggg€€€g€gg€€€gg€g€€€€€€gg€€€€gggg€€€g€€gg€€€€gg€€€gg€€€€gg€™€€€gg€g€€€€gggg™™™gNg€€€€€gggg€™€€gNg€™€g€€€gg€€€€gg€€€gg€€€gg€€™€ggg€€€€€€gg€€™€gg€€€€€€g€€€€€gg€€€€gg€€€€€€€ggg€€€€gg€€€€gg€€€gg€g€€€€g€gg€€€gNg™€€ggg€€€gggg€€€€€gNg€™™gNN€€€€€gggg€€€ggggg€€€€€€€gggg€€€ggg€€€gggggg€™€gNN€™™ggNg€€€€€ggg€€ggg€gg€€ggg€€€gNgg€€gg€g€€ggggg€€€gggg€€€gggg€€€€gggg€€€€gNg€™€€gNg€€€€gg€€gg€€gggg€€€gggg€g€€€ggg€€g€€ggggg€€€€gNgg€™€gNg€€€g€€ggg€€€ggg€€€€gggg€€ggggg€€€ggg€g€€ggg€€ggg€€gg€€gN€gggg€gNg€™€Ng€€€ggg€g€g€gggg€€ggg€€g€€€NN€€™gNg€™€Ngg€ggg€€gN€€€ggg€ggg€€ggg€€€NNg€€ggg€gN€€€gNg€€€g€gggg€€gg€€€gN€€€gg€ggg€€gggggg€€ggNg€€€gggggggg€€ggggggg€€ggg€ggg€€€gggg€gggg€€ggg€€ggg€ggg€€€ggg€€€gg€€g€€€gNg€€€ggg€€€gg€€ggg€€€ggg€€€gggg€€€€€gg€g€gg€gggg€€€€ggg€€€€€€gNg€™€ggg€ggg€€g€ggg€™gggg€€€g€€€g€gg€gg€€€gN€€€€gggg€€€ggg€€€gg€€gg€€€€gg€™gNg€g€€€g€ggg€€€€ggg€€g€€gg€™€ggggggg€™€ggNg€™€ggg€€€N€™€gg€g€gg€²g5™²™€gNg™€g€€gg€gg€€g€€gg€€g€gg€€gg€™€gNg™™€Ng€€ggg™™€ggg€€€€€€€gg€™™€gNgg€€€€€gg€€€€g€€€gg€™™€ggg€€€™€gNg€€€€g€€gg€€€€€€€€€g€€€€€€€ggg€™€gg€€ggg™™ggg€™€gg€€€gg€€€€gg€™€€€™€gNN€€€€€ggg€™€€gNgg€™™€ggNgg€™€€ggN€€™™€€gggg€™€€Ngg™€€€g€€g€g€€gg€€€ggg€™€ggg€€g€€€€€€gg€€€€€€€ggg€™™ggg€€€™€ggg€€™€€ggg€™€g€€€€ggg€€€€g€€€€€€€ggg€™™€gNg€€™€ggg€€g€€ggg€€™€ggg€€€gg€€€ggg€€€€€gggg€€€gNN€€™€gggg€€€€€gggg€€€€€ggggg€€€gggg€€€€ggggg€€€ggg€€€€gggg€€€€ggg€ggg€€€ggg€€€ggg€€€gg€€€ggg€€€ggg€€€€€gggg€€ggg€€€ggg€€€ggg€€€g€g€€gggg€€€ggg€€gggg€€€gg€€€€ggg€g€€gggg€€gNg€€™ggggg€€€gggg€€gg€gggggggg€€ggg€€€ggg€gg€€€gggg€€gggggg€€€gggg€€gggggg€€ggg€€gggg€€gggg€€gggggg€€€ggg€€gg€gggg€€gg€€ggg€€ggg€€ggg€€ggg€™€ggg€€g€€ggNg™€gNN€€€€g€gNg€™™gNN€™€gg€€gg€™€gNg™€gNg€gg€™€NN€™™gggggg€™€Ng€™€Ng€€g€€gggg€€ggg€€€€ggg€gg€€gggg€€€gNg€™€gNN€€€€gNgg€€€gNggg€€€ggg€€€gg€™€gg€€gg€€€gNg€€gg€g€gg€€ggg€€gNgg€€€€gggg€™€€Ngg€€€€gggg€€€gg€€€ggg€€€€g€ggg€€€gNg€™€ggggg€€€gNNg€™€gggggg€€€gNg€™€gg€€€gg€€ggg€ggg€€€gg€€ggg€g€gg€€€gggg€€€gg€ggg€€€gNg€€€ggg€ggg€€ggg€€€gg€€€gg€€gg€€€gggg€€gggggg€€gggg€gg€g€gggg€€€gggg€g€€ggg€€€ggg€€ggg€€ggg€€gNg€€ggg€€€gN€™€g€€g€€gg€€gg€gg€€gg€€g™€NN€™€€g5g™ÿ€²™gN5€²²€5g€€gg€™²€55g²™€€€€gNg™²™gggNg€™™€€NNg€€™€€Ngg€™™gNg€€€g€€€ggg€€€gg€€€€ggg€€€gNg€€gg€€™gg™™ggg™€ggg€€€g€€g€g€€€€g€€g€€€€€gg€™€NNg™™€gNg€€€€™€€Ngg™™gggg€€™g€€€€ggg€™€€€gggg€™™€gNN™²™ggg€€€€€gNg€€€€gg™™€€ggN€™™€gNg€™€€€€ggg€€€gg™™€gNg€™™€ggNg€™™€gNN€€™€€gN€€€€gg€€€g€gggg€€€ggg€™€ggg€€€€€gg€€€€gg€€€gg€€€gg€€ggg€€€gggg€€€€ggg€€€ggg€gg€€€gggg€€g€€€ggg€€€ggg€€€€g€€gg€€€€g€gg€€€ggg€€€ggg€€€€€gggg€€€ggggg€€€€gggg€€€€ggg€€€gg€gggg€€€€gNgg€€€gggg€€€€gggg€€g€€€ggggg€€€€ggg€€€g€€ggg€€€gggggg€€€ggg€€€ggggggggg€€€€ggg€€€€€gggg€€€gggg€€€€gggg€€€€gggg€€€gggg€gg€g€ggggggg€€€gggg€€€ggg€€€ggg€€€€ggg€€ggg€€€ggggg€g€gggg€€€ggggg€€€gNgg™€€gNg€€€gggg€€€ggg€€€ggggg€€ggg€gg€€€g€gggg€€gNg€€gNg€™gNNg€™€€gggg€€€ggg€€€Ng€€€€ggg€g€€ggg€gggg€™gNNg€€€ggg€€g€ggg€€€ggg€€€€gggggg€€€gg€€€g€€ggg€€€gg€€€gg€€€€g€€ggg€€€ggg€€€€ggg€€€€gN€€€€ggg€€€€gggg€€€ggg€€€€gg€ggg€€€gNg™€ggg€€ggg€€gg€€gg€€€gg€€€gg€™€gNg™€ggg™€ggg™€ggg™€ggg€€€gg€€gg€€€€gggg€€€€€gggg€€€g€gggg€€€NN€€™ggggggg™™€Ng€€€g€€gN€€€gg€€€gg€g€€g€ggN€™™gNg€€€g€€€gg€€€gggggggg€gg€€€gggg€€gg€€gg€€€ggg€™€ggg€€€g€€€gNg€€€g€€ggg€€€gNg€€€€€g€ggg€€€gggg€€€gggggg€€€ggg€€€€g€€gg€€€€€gg€g€€ggg€ggg€™ggg€™€Ng™€ggg€™€NN€™€€g€€€gg€€Ng€€€g€€€€Ng™™™N5N²²gN™™™g5N²ägg€€€²€Ng™NN™™€™€N5™™€€€NN€™gg™™€€gNg™™€ggN€™€gg™™gNN€Ë™g5g€™™gg™ggg™™™€NN€€™€gNg™™€gg€€€gNg™€gg€™™€NN€™€gN€™€NN€²€NN€™™gNg™™€ggg€™€g€™€gggg€€gggg€€gN€™€ggg€™ggg€€€€g€ggg€€gg€€€€gg€ggg€€€gg€™€gNg€€€g€g™gg€€€gNgg™€€gNgg€€€€ggg€€g€€€gg€€€€g€€€€€gggg€€€ggggg€€€gg€€ggg€€€gNgg€€g€gggg€€€€gggg€€€gggg€€€€gggg€€ggg€€€gggg€€€€ggg€™€gNg€€€€ggNg€€™gNNg™™€gNgg€€€€gg€€ggg€€€ggg€g€€€gggg€™gggg€€€€gggg€€ggg€€€gNgg€€€€gggg€€€gg€g€€ggg€€€€gggg€€€ggggg€™€gNg€€€€gggg€€€ggg€€ggg€€ggg€€gg€€€ggg€€€gg€€ggg€ggg€€gNg€€€ggg€ggg€€gggg€€ggggg€€€gNNg™™€gNg€™€ggNg€€€gggg€g€gggg€€€ggg€€€ggg€€€€gggg€€€gNgN€€€€ggg€™€gNg€™™€gNgg€™€gNgg™™€gNg€™€gggg€™€ggNg€™™€NNg™™€€gNg€™€gNg€€gggg€€€€€ggg€€€gggg€€€g€ggg€€€ggg€€€ggggg€€€€ggg€€€€gggg€€€ggg€€€ggg€€gg€€gg€€€ggg€€gg€€ggg€€€gg€€€gg€€€gggg€€€€€ggg€€€€ggg€€€€€ggg€€€ggg€€ggg€€€ggg€€gg€€€gg€€€gggg€g€™€gNg€™€gNgg€€€€gNg€™ggg€€€gg€€gg€™€gNg€€€gg€g€gg€€ggg€€€ggg€gg€ggg€€g€ggggg€€ggg€€€€€ggg€€€€gg€gg€€€€ggg€™€gg€€ggg€™gg€€g€€€€ggg€€€€ggggg€™€ggg€€€€€€ggg€€€€€ggg€€€€ggg€gg€€€€gg€€€€€gg€gg€€€ggg€€€g€€€€g€g€€ggg€gg€g€€€€€gg€€€€€g€€€€€€€€g€€g€€€€gg€€€gg€€€€€€gg€€€€€€g€g€€€€gggg™€€gggg€gg™€€gg€g€€g™g€Ng™€€gg€ggg€²gNN€€™€g€g€gg™€™ggg€™€gg€€ggg€™€gg€€€€Ng€²™NN²²gg€€€gNg™²g5Ng€²²g5g™gg™™€™€Ng™™€€gNg™€NN€™™€N5g™€gNg€€g€™™g55€²²g5g€™™€gg€€Ng€™²gNN€²€gNg€€€N€™€gNg€€™ggN€™€gNg²²g5N€™€Ng€€gNg™™€Ngg€€€€€gg€€€g€g€ggg™€Ngg™€gNN™€€Ng€€€gNg€€gg€g€ggg€€gg€ggg€€ggg€€gNg™™gNNg€™€gg€ggg€€ggg€€ggNg€€€€gNNg€™€gNgggg€€gg€€€€g€gg€€gNN€™€gggggg€€€€NNg€™€ggggg€€€gNg€€€ggg€€gg€ggg€€€NgNg€€€gggg€€g€€ggg€€€€g€€gggg€g€ggN€€™€Nggg€g€gggg€€ggg€€€ggg€€gg€gggggg€€ggg€€€ggggg€€€€ggg€€ggg€€€€gggg€€ggg€gg€gggggg€gggggg€€ggg€€€gg€€€ggg€€gg€€ggg€€€gg€€€gg€€€Ng€™€gN€€€gg€€€gggggg€€€ggg€€€g€€€ggg€™™ggggg€€€€€gg€€ggg€€€g€€€€ggg€€€€gg€€€gggg€€€€g€g€ggg€€€gggg€€gg€€€€ggg€€€ggg€€€€gggg€€€€ggg€€€gggg€€€€ggg€€€gg€€€gggg€€€gggg€€€gggg€gg€€€gggg€€gg€€ggg€€€€ggggg€€€€ggg€€€gg€€gggg€€€€€ggg€€gggg€gg€€€ggg€€€ggg€ggg€€€€g€€g€€€€gggg€™€gggg€€€€gggg€€€€ggg€€™€ggg€€€€g€€ggggg€€ggggg€€€gggg€€€€ggg€€€€ggg€€€€€€gggg€€€€gNg€€gggg€€€€gggg€€€€gg€€€ggg€€€gggg€€gg€€gg€€€€gg€€€€gNg™™ggg€€€gg€€€gg€™™gNg€€ggg€€€gg€€gggg€™€gg€€€g€™€gg€€€™€gg€€gg€€™€NN€€€€€g€€gg€€™€gNg€€€€€€€ggg€€€€gggg€€€€gg€ggg€™€ggg€€€g€€€gN€€€€gggg€g™€g€€€g€€€€gg€™€gg€€€€gg€™€ggg€€€gg€€€ggg€™€gg€™€€Ng€€€gg€€€gg€™™€NNg™™€g€g€gg€€™€ggN€€€€ggg€€g€€€gg€€™gg€€€gg€€€€g€g€g€™€ggg€€€€€€ggg€€€€gg€€€€gg€€€€€gNg€™™€N5g™€g€€™g55€Ë™gNN€€€g€™€€gNg€€€™€gNN€€™€gN5N€Ë²g5N€€€€g€gggg€€€€NNg€™€gNg™™gNN€€€€gg€€gg€€€€Ng€™€NNg™™gNN€€€€gggg€€€g€€€NN€™€NNgg€g€€gNg€€€ggNg€€€€ggg€€ggg€€ggggggg€€ggNg€€€€ggg€gg€gg€g€gggg€gg€gggg™€g5N€™™NN€€€Ng™€g5g™€g5g™€gNg€€Ng€€gN€€€NN€€€Ng™™g5Ng™™gggggg™™€gNggg€€€ggggg€€€gNg€g€gggggg€€ggN€€€gg€gggg€€gg€€gggg€€gg€€ggg€€ggg€€€ggggg€€€gNgg€€€gNggg€g€€ggNg€g€g€€g€ggg€€gggggg€€€€Ng€€€gggg€g€€€€Ng€€€ggg€€gg€€ggg€€€ggg€™ggg€€€gg€€g€€€€gg€€€gg€€gg€€€ggg€€ggg€€gg€€gNN€™€gg€€€gg€€€Ng€€gNg€™€ggg€gg€€€gNg€™gNg™€Ng€™€gNg™ggg€€gg€€€gg€€€gg€€ggg€€ggg€€ggg€™ggg€€€gg€€ggg€€€ggg€€gg€g€€€€€€gg€€g€€ggg€€€ggg€€ggg€€€gg€€€gg€€€€gggg€€€gggggg€€gggg€™€gg€€€€gg€€€g€€g€gg€€€ggg€€€gggg€€g€€€€ggg€€€ggg€€€ggg€€€€€€€gg€€€ggg€€€gg€€€gg€€€€ggg€€€gg€€€€ggg€€€€€€€gg€€€€gg€€€€€€€€€g€€€€g€€€€€€€g€€€€g€€€€gggg€€€ggg€™€ggg€€€€€™€gN€€™gNg€€€g€€g€gg€g€g€gg€€g€g€gggg€™€€ggg€€€€€g€€€€€€€gg€€€€g€g€€€€g€€g€€€€g€€€€€€g€€€€g€€€€€g€g€€€€€€g€g€€€€g€€g€€€gg€g€€g€€€gg€€€€ggg€€g€€g€gggg€g€€g€gggg™€€gg€€€€g€€€€g€€€€g€€€€ggg€€gg€g€€€€ggg€€€gggg€™€ggg€€€ggg€€€gg€€ggg€€€gg€€€€gggg€€€€gg€€€€€ggg€€™€ggg€€ggg€€€€gN€€€€g€€€gN€™™gNg€€€g€gggg€€€gggg€€€gg€€ggg€€€gg€€€g€€gggg€€g€g€gg€€€NNg€™€€gNNN€™€gg€€€NN€™™gNgg€g€€€g5N™™€ggggggg™€ggg€€gg€€ggg€ggg€€€gNg€€ggggg€€€€gNg€™€gNg€™€NNgg€™€ggNg€™™NNgg™g€gggg€€gggg€g€gg€€€gg€€€Ng€€€gggg€€gNg€€gNg™€gN€™€NN€™€gN€€ggg€€gNg€™€NN€€™gN€€™NN€™€NN€€™NN€€™gNgg€ggg€€ggg€€ggg€€Ngg€€ggNg€€€Ng€gNg™€€NN™€gNN™€€NN€€€5N€™€Ng€€gN€€€gg€€€gNg€€€gggg€€g€€gNN€€g€€gNg€€€€Ngg€€€€g€€ggg€™ggg€gg€€€ggggggg€€€€g€g€€g€€€gNgg€€g€ggg€™€€gggg€€€ggg€€gg€€€ggg€€gNg€€ggggg™€€gNg€€€g€ggg€™gggg€g€g€€ggg€g€gg€€gggg€g€g€gNg€™ggg€ggg€€€ggg€€gg€ggg€€g€ggg€€€€ggg™€Ngg€€€€g€gN€™™Ngg€™™€Ng€€€€€gggg€€€gg€g€™€g€€€€gg€€€€€ggg€€€€€ggg€€€€€ggg€€€€g€€gg€™€ggg€€€gg€™€ggg€€gg€™€NNg™™€ggg€€€ggg€€gg€€€€g€g€€€g€€€€gg€€gg€€g€€g€€€€gg€€™ggg€™gg€€™€€gg€€€g€€€€gg€™€ggg€€€gg™™€Ng€™™€g€€€gg€€™€ggg€€€€gg€g€€g€€™gN€€€gg€™€gg€™™gNg™™€Ng€™™gg€™€ggg™™€gg™€€ggg€™€g€g€€gg€™™€gg€€€€gg€€€gg€€€€€€€€€gg€€€ggg€€€g€g€€€gg€€gg€€€gg€€€€gg€€€€gg€€€g€€€€€€g€€€€€€€ggg€€€€g€gg€€€€€gg€g€€€g€€€€€gg€€€€gggg€€€€ggg€€€€€g€€€gg€€€ggg€€€€€€gggg€€€gggg€€ggggg€€€€€ggg€€€ggg€€€ggg€€ggg€€€gg€gg€€€€gggg€™™€gNgg€™€€gggg€€€€ggg€€gg€€€ggg€€€€€gggg€€€ggggg€€€ggggg€€€€gggg€€ggg€ggg€€€gggggg€€gggg€€€gggg€€€€gggg€€€€gggg€€€ggggg€€gg€gggggg€€€gNgg€€€gNgg€€€€gggg€€ggg€gggg€€€€ggNNg€™gggg€€ggg€g€€€€ggg€™gNNg™€€gggNg€™€gNg€€gggggg€€gNg€™€ggNN€€™€gNNg€€€gggg€gg€€gg€€gNN€™™gNgg€€€€€ggg€™™€Ngg€€gggggg€€€gNg€€€Ng€€€gg€g€gg€€€gggg€€gNg€™€gNg€€ggg€gg€™™g5N€™€Ng€€gNN€™™gNg€€ggg€€ggg™€NN€€€gg€€€NNg™™gNg€€gg€€€NN€™€NN€™€ggg€ggg€€ggg€€€€€€gg€€€gg€€€gg€ggg€€gggg€€€gggggg€™€€NN€™™gg€€ggg€€€gN€€€gg€€ggg€€gNg€€gggg€€€gggg€€€gggg€gNg€€gg€ggg€gg€€€€ggg™€g€gggg€g€€g€ggN€€€€ggg€™gggggg€g€€ggg€gg€€€gggg€€gg€€gNg€™€gNN€€€g€€ggg€€™ggg€€€€g€€gg€€g€€€gg€€€€€g€gg€€€g€€€€€€gg€gg€€€gggg€€€ggg€€€g€€€€gg€€™gggg€™€gN™™€gN€€€€N€€€€g€€™Ngg™€g€g€€g€g™€g€g€€€€g€€€gg€€€gg€€€gg€€€g€€€gg€™€gg€€g€€€€ggg™€ggg€€€gg€€€g€€€€ggg€€€€g€gg€€™€ggg€€€€€€Ngg€€€€g€€g€g™€€€Ng€€™g€€€gNg™™™gggg€€g€€™gggg™€gg€€€ggg€€€€gggg€€€€€ggg€€™€gggg€€€€€ggg€€€ggg€€€gg€€€gg€™€€g€€€gg€€€€gg€€€€€g€€€€€€€€ggg€€€gNg€™€ggg€€gg€€€ggg€€€ggg€€g€€€€ggg€€€€€g€gg€€€€ggg€€€€gg€€€ggg€€gg€€€ggg€€ggg€€€ggggg€€€gggg€€€ggggg€™€gNg€™€ggg€€gggg€g€€gggg€€€gggg€€€gNNg€™€gggg€€€€gggg€€€gg€g€ggg€€€gggg€€€€gNNg€™€gNNg€€€€ggg€€€gggg€gg€ggg€€ggg€€€ggg€€€€€ggg€€€€gggg€€€gggg€€€ggg€gggg€€€gg€gg€€€€ggg€gggg€€ggg€€€€€gggg€€€gNg€€€€g€gggg€€€ggg€€gg€g€g€€€ggg€€€ggg€€ggggg€€€ggg€€€g€€gggg€€€ggg€gggg€€gggg€€€€gggg€€€g€ggg€€€€ggg€€€gNg€€€ggg€€gg€€€ggg€€ggg€€ggggg€€€ggg€€€€ggg€€€€€ggg€€™gNN€™€ggg€€ggg€ggg€€€gNg€€€gggg€gg€ggg€gggg€™€gNNNg€€€™™gN5g™™€NNgggg€€g€gg€gg€™€€ggggg€€€NNg€™€ggggg€€€gNgg€™€gNNg€™™€€gggg€€€gNN€™™€gg€g€g€€gg€€€g€g€€gg€ggg€€€™gggg€g€€ggg€™€gg€g€€€€gggg€€€ggg€€€gg€€ggg€€€ggg€gg€€€€gggg€€€g€ggg€€€ggN€™€g€™€NNg™€gNg™€NN€™€NNg€™gNg™€Ng€™ggg€€gg€™€gNg€€€Ng€€gg€™€ggg€€gNg€€€g€ggggg€€gNg€™€gg€€gg€€ggg€€€€ggg€g€€€€ggg€€€€€€gNgg™€gggggg€™€gNN€™™g€g€gNg€™™ggNg€€™€g€ggg€™€€€ggg™€€gg€ggg€™ggg€€€€gg€ggg™€€ggg€™€gg€ggg€™€™gNgg²g€gg™€€N€Ëg5N™™™gg™€€gg€€™€Ngg™€gg€™€€NN™€™gN€€™gNg€™gNgg™™€gg€€€gNg€™€ggg€€€gg™€ggg€™€gNg€™™ggg€€g€€€€ggg€€ggg€€™€gg€€ggg€€€gg€€€ggg€™€NN€™™€gNg€€€€ggg€g€€€€gNg€™€ggg€€€ggg€€€€€ggN€™™€NNg€€€€€€gg€€€gg€€€gg€g€€€€ggg€€€gggg€€€€€gNg€€€ggg€€€€gggg€€€ggg€€€ggggg€™€ggg€€€gggg€€€€gNNg™™€NNg€€€€gggg€€€€gg€€€€ggg€€gggg€€€gggg€€€€€ggg€€€gggg€€ggg€gg€g€g€ggg€€€€gNgg€€gggggg€€€gNg€€gNg€€€Ng€€gg€€€€N€€€gN€€gN€™€gNg€€€Ng€€gNg™€gN€™€gN€™€gNg€€gg€€€gg€€€gNg™€gg€€ggg€™€gNg€€€gg€€ggg€€g€g€€ggg€€gggg€€g€€gg€€€ggg€€g€€€gg€€€gggg€€€€ggg€€€ggNg€€€gggg€€€€gggg€€€ggggg€€€g€gg€€€€€gggg€€ggNg€€€ggg€€gg€€€ggg€gg€€€ggg€gg€€€ggg€™€ggg€€€€g€€g€€€gggg€€g€€ggg€€€€gggg€€€€gggg€€ggg€€€ggg€€€ggg€€g€gggg€€€gg€€ggg€€gg€€€ggg€€€€gggg€€€€ggg€€ggg€€gggg€g€g€gg€€€€ggg€gggg€€€gg€€ggg€€€€gggg€€€gg€€™€ggg€gg€€€gg€€€g€€€ggggg€€€gggggg€€€gg€€€gg€€€ggg€€gg€€ggg€™€gN€€€€ggggg€€€ggg€€™ggg€€gg€€€gg€€€gg€€gg€€€ggg€€€gg€€gg€€€gg€€€gNg€™€ggg€€€€€ggg€€€€ggg€€g€€gggg€€€g€€€gg€€€€gg€€€gg€€€ggg€gg€€€gg€€€€€gggg€€€gggg€ggg€g€€€ggg€€€g€€g€g€€€€gggg€€€g€€gg€€™€gNg€€€ggg€€gg€™€Ngg€€€€g€gggg€€€€gggg€€€gg€g€€g€€€gN€€€€gg™gN€€²gNNg²€ggg™gggg²€ggg™g€€g€€€€g€g™€g€g€g€€g™gg€N€€™™g€gg€g™€€€Ng€€€N™g€€€gg€€€€g€N€g€€g™g€gN€™€g€N€™€gg€™g€Ng€€€gg€€€ggg™™€gg€€€€g€€€€€gg€™€gg€€€€gg€€€ggg€™€gNg€€€gg€€€gg€€€€gg€€€gg€€€gNg€€€ggg€€€€gg€g€g€€€€gg€€€g€€ggg€€€€g€gggg€€€ggg€g€g€g€gg€€ggg€€€gg€ggg€€€gggg€€gggg€€gg€g€gggg€€€€gg€g€€€gggg€€€gggg€€€gggg€€€€ggg€€g€gggg€g€€gggggg€€€gNNg€€€€€ggg€€€gggggg€g€€€€gNg€€€gggggg€€€gggg€g€gggg€gggg€€€gg€g€€€€gggg€€€€ggggg€€€gN€€€gggg€€gg€gggg™€€NN€€€€g€ggNg™€gNg€€ggg€€gggggg€g€€€gg€™€ggNNg€™™ggg€™ggNg™™€NggNg€²™N5N™™€gg€€gg€™€N5g™²g5N€™€NN€™€NN€™ggg€€€gNg€€€gg€€€Ng€€€€g€ggNg™€gg€€€g€™€gNg€€ggg€€gN€€€gg€€€ggg€€gggggg€€€gNg€€€gg€€€g€€ggN€™™ggg€€€€€€gggg€™€gNg€€€gg€€€€€ggg€€gg€€€gg€€gNg€™™€ggggNN€™€gNg€€€g€€ggggg€€€€ggNg€€€€€gggg™™€ggggggg€€ggg€™€gNgg€€€ggg€€€€ggg€€€€€€€gggg€€€€gggg€€€gggggg€™€NNg€€€€ggg€€€€ggggg€€ggg€€€€gg€€€€ggg€€€€gggg€™€€gggg€€€gg€€€€g€ggg€€€ggg€€€gg€€€gggg€€€ggg€€€€€gggg€€€ggg€€€€€ggggg€€€€gggg€€€€gggg€€€€€ggg€€€€g€€gg€€€€ggg€€€€gg€€€€gggg€€€€€ggg€€™gggg€€€€€€gggg€™€gg€g€€g€€€gg€g€€€gg€g€€€€€€gg€€€g€€g€€g€€gg€™€™€gg€€g€™gg€€gg€€€€g€€gg€™€€ggg€™€g€gg€gg€™€gg€g€€g€€€gg€€€€€gg€gg€€g€€gg€€€€€g€€€€gg€g€€g€ggg€€€€ggg€€€€gg€g€g€€€€€€€€€€gg€€ggg€€€ggg€g€€€€€gg€€€€gg€€€€€ggg€g€gg€gg€€€gN€€€€g€€ggg™€€gg€€™€Ngg€€g€€€gN€²€NN€™™€Ng€gg™€ggNg™™€Ngg€™€gg€€g€€g€€ggg€€€gNg€™€Ngg€™ggN€g€€€€gggg€€€€Ngg€™€€Ng€€gg€€ggN€€€gggg€€ggg€€gggg€ggg€€€ggg€€€€gggg€€€gNgg€€€ggg€€€ggg€€€gggg€€™ggNgg€™€gNN€™€gNgg€™€ggNg€™€gggg€€€g€€gg€g€ggg€€ggg™€gggggg€€€gNgg€€ggggggg€€€gNg€€€gggggg€€€NN€€™gggg€gg€€€gg€€€ggg€€ggg€€NNg™€ggg€gggg€gggg€€ggg€gg€€€€gggg€ggggggg€€€ggg€€ggg€€ggN€€€gg€€€gg€g€gg™€gNg€€€g€€€Ngg™€ggg€€ggg€€gNg€™€gNN€™™€NNN€™€€€gNN€™€ggggggg€€€€g€g€Ng€™™g5N€™gggggggg™™gNN€€ggg€€gNg€™€gNg€€ggg€ggg€€€gNg€€€gggg€g€€€gNg€™™NNg€€€€gNN€™™gNg€€€ggg€gg€™€ggg€™€gg€€gg€™ggg€™€gN€™€€gggg€€™™€Nggg€€gg€gN€™€gg€€€gg€™€ggggg€€€€€Ng€™€gNN€™€€ggg€€g€€ggg€€™€ggg€gggg€€€g€€gg€€€€gg€g€€€gg€gg€€€€ggggg€€™€gg€€€€€gg€g€€€ggg€€€ggg€€€€€ggg€€€gg€€€€g€€€gg€€g€g€€€ggg€€€gggg€€€€€ggg€€€€€ggg€€€ggggg€€€€€ggg€€€€€€€ggg€€€€gg€€€€€€ggg€€€gggg€€€gg€€€€gggg€€€€€ggg€€™€ggg€€€€g€€ggg€€€€gg€€€gg€€€gg€€€€ggg€€g€€€€€gg€€€€ggg€€€€g€g€€g€€€€€€g™gg€€€€€gg€€€€gg€™€N€€€ggg€€€gg€€€€gg€€€g€€€€€ggg€€€g€€ggg€€€€gggg€€€€g€g€€€€€ggg€€€€gg€€gggg€€€€€gg€g€€€gg€€€€gg€€gggg€€gg€€gggg€™€ggg€™€ggg€€ggg€€€gg€€€gg€€€ggg€€€gg€€ggg€€€ggg€€gg€€€€ggg€€€€Ng€gg€€€€gNg€™™€gNggg€€€€ggggg€€€€gg€g€g€€ggggg€€€ggg€€€€€€€ggg€€ggg€€€gg€gg€ggggg€€gg€gggg€€€ggg€€gg€gggg€€€gggg€€gggg€€€gggg€€€gggg€gg€€ggg€g€gg€gggg€gg€€€ggg€€€gggggg€€€gNg€€€ggg€€ggg€€g€gggg€€gNgg€€€€gggg€€€gggg€€g€gggg€gggg€€€ggggg€€€ggNg€€€gggNg€™€ggg€€ggg€€g€gggg€g€€g€gg€ggg€€€ggggg€€€gNg€€€g€ggNg€€€gggg€g€€gggg€ggg€€gggg€€€g€gggg€€ggggggg€€ggg€€€gggg€€g€€€gg€€€ggg€€gg€™€ggg€€gg€€ggg€€ggg€€ggg€€€gNg€€gg€€€gg€€€Ng€€€gg€€gNg€€gg€€gg€™€ggg€€€gg€ggg€€€gNg€™gN€€€NN€™€NNg€™€gN5g€gg™€5N™™€NNg™€NN²²5g™™gNg€™gNN™€g€€ggggg™™gNg€gg€€€gN5€²™gNgg€€g€€€Ng€€€€gg€gg€™€gNg€™€ggg™€ggg€€Ng™€gg€€ggg€™€gg€gg™™gNg€™€gNg™€gg™€g€gg™™gNg€€€€Ng™™gg€gg™™gg€g€€gg™™gNg€€™€Ng€€€€€€€€NN™™€Ng€€gg€€€Ng€€™€gg€™ggg€™€€N€™€€g€€g€N€™€™Ng€€™gggg€€€gg€€€gg™€€gg€€™gg€g€gg€€™ggg€€g€g€€g€g€gg€€™ggg™g€€€€ggg€™g€gg€g€€€€gg€€€€€€ggg€€€ggg€€€€g€€ggg™€€gg€™ggg€€€€gg€€€gg€ggg€€€€gggg€€€ggg€g€€g€€gg€€€€g€€€gg€€€€gg€€€g€€€€gg€€gg€€€€€ggg€€€€gggg€€€€gggg€€€€gggg€€€€€€gggg€€€€gggg€€€€gg€€€€€€gggg€€€€gg€€g€€€€€ggg€g€€gg€€€€€gg€€g€ggg€€€€€€g€gg€€€gggg€€ggggg€€€ggg€€€ggg€€€gggg€€€gggg€€€ggggg€€€gg€€gg€€€gg€€€ggg€€gggg€€€gggg€€€gg€€€€ggggg€€€ggg€€€ggg€€€ggg€g€€ggg€€€€gNg€€€€gggg€€€ggg€€gg€€€g€€€gg€€€gggg€€€ggggg€€€ggg€€€ggggg€€gggg€€€gggg€€ggg€ggggg€ggggggg€€€ggg€€€g€gggggg€gg€gggg€€€gg€g€g€€€ggg€€ggg€€gg€€€ggggg€€€gNNg™™€gNg€€€€€ggg€€€ggg€€€€ggg€€€ggg€g€€€€ggg€€€gggg€€€gNg€€€gggg€™€gNg€™€gNg€€€€€gggg€€ggg€€gNg™€gN€™€gNg™€gNg€€gg€€gNN€™€gNg€€gg€™€gN€€€gN€€€gNg€€ggg€€gN€€€gNg€™ggg€gg€gggg€€€ggg€€€gggggg€€€ggg€€€ggg€€ggg€€gg€€€gNg€€€gggggg€€€gg€€€ggg€€€g€ggg€€€€gggg€€€ggggg€€ggg€€ggg€€€€g€gg€g€€€gg€€€ggggggg€€€gg€ggg€€ggNg€€gN€€€gN€™™g5g™™gN€€gNg€€€gg€™gN€€€€ggg€€g€€€gg€€€g€™€55™Ë€Nggg€€g€™g5g™€g™™N5€€g€™gg™€NN€€€€gNg™€g€™€g€gN€²€NNg€€€g€™€NNg™™™g5g€™™ggg€gNg™™€Ng™™€Ng€™ggg€™™gNg€€€ggg€€gNg€²€NNg²™gNg²€NNg²™gNN€™€gg€™€gN€™€€N€€€™gggg™g™gN€€€gg€€™gNg€²€ggg™€€g™€€gg€€™gg€g€€€gN€™™€ggg™€Ng™™™NNN™²€gN€€g€N€™€€Ng€€€gg€€™ggN€€™€gNg™€gg€™gggg€€€€€gg€€€€€€€€ggg€™€gg€€€€€€€gg€€€€€gg€€€gg€€€€€€ggg€€€€€ggg€™™ggg€€€€€€€€€g€g€€€€€€gggg™™™gNNg€™€ggg€gg€€€gg€€€g€€€€ggNg€™€ggggg€€™€gNg€€€€ggg€€€gggg€€€gggg€€€gggg€€€ggggggg€€gg€€gggg€€€gg€ggg€€€gNg€€€ggggg€€€gg€gggg€€€ggg€€€g€ggggg€€gg€€ggg€€€gNg€€€g€€gggg€€€€ggggg€™€ggg€€€gg€€€ggggg€€€ggg€™€ggg€€€gggg€€gggg€€ggggg€€€gggg€€€ggg€€€gggg€€€€gggg€€€ggg€€€€gggg€€€ggg€€€ggg€€€€ggg€€€€gggg€€€ggg€€gg€€€gggg€g€g€gggg€€€€gNgg™™€gNg€€€gg€€€gggg€€€gggg™€ggg€€€gggg€€ggg€€g€gggg€g€gg€€ggg€€€€gg€€€ggNg€€€gggg€€€gggggg€€g€gggg€€€gNgg€€€gggg€€€€gg€g€€€€€gNg€€€ggg€€€ggg€€€ggggg€g€€ggg€ggg€€€ggg€€€ggg€€€gggggg€€€ggg€™€ggg€€€gg€€gg€€€gg€€™ggg€€gg€€ggg€™€ggg€€ggg€€gg€™€gNg™™€gNg€€g€€€ggg€€€gg€€€gg€€€gg€€€gg€€ggg€€€g€€ggg€€€gNg€€€ggg€gg€€€gggg€€€gggg€€€g€ggg€€ggg€€ggg€€gg€€€ggg€€ggg€€g€€€€ggg€€€gggg€€€ggg€€€gggg€€€gggg€€€€ggg€€€gggg€€€€€gg€g€€€NN€€™€ggg€€€g€gg€€€g€€g€€€g€gg€™€ggg€€™€ggggg€€€€ggg€gg€€g€€gg€€€€€5N™™€g™€ggNg™²€NN€€€g€€™€55g™™€€gggNg™™€€€NN€™™€€gN€€€€€™€N5N²²™NN€™€gN€™™N5g™™™NN™™Ng€™™gNN€²€gN€™€g5€²™g5g€™™gNg€²ggN€Ë€NNgË€€Ng²€€Ng™€™gg€€€gg€€€N€g€€™gg€g€™€€€™gg€€€€€€g€gN€™€g€g€€g€™€€Ng€€™gg€€gN€™™€Ng€€€g€€€ggg€™™ggg€€€€€€gNg€€€€€ggg€€€€€€€ggg€™€€gNgg€€€€ggg€€€€€€gNg™€€€gg€g€™€gN€€€€€€gggg™€gg€€ggg€€€ggg€gg€€ggg€g€Ngg€€g€€gg€€gggg€€€ggggg€€€€ggg€€€€gg€g€gg€g€€gggg€€€ggg€€€€gggg€€€€gggg€€€gggg€€€ggg€€€ggg€€€€€gggg€€€gggg€€€€€ggggg€€ggN€€€€Ng€€€gggggg€™€gNg€€€g€ggg€€ggg€™€gNg€€€g€€ggN™™€g5g€€€g€€ggN€™ggN€™€gNg™€gg€€ggg€€ggg€€ggg€€€gg€€ggg€€€gg€€ggg€€€gg€€€g€€ggg€€ggg€€gggg€gg€€€gggg€€ggg€g€€€gggg€€€gggg€€€ggggggg€™€gNg€™™gggg€gg€€€gg€€€€Ngg€€g€gggg€€€Ng€€€€ggggg€™€ggg€€€€gggg€€™€gNg€™€gNg€€€gggggg€€€€gggggg€€ggg€€ggggg€€€gggg€€€gNg€€€ggg€€€gggggg€€€ggg€€€ggg€€€gg€gg€€€€ggg€€€ggg€€™€ggg€€€ggg€€€€€€gggg€€€€ggg€€€ggg€ggg€€€g€g€€€ggg€€€g€€ggg€€ggg€€gg€€€€gggg€€€ggg€€gg€€€ggg€€€ggg€€€ggg€€€€€ggg€€€gg€€ggg€€€€gg€€€€ggggg€gg€€gg€€€€ggg€€€€€g€gg€€€€€gg€€€€€gg€€gg€gg€€g€€ggg€€g€gg€€€g€g€€€€gggg€€€gggg€€€ggg€€gg€€g€€€€ggg€€€ggg€™€gggg€€€ggg€€gg€€gg€€€€gN€€€€gg€€gN€™€ggg€€€g€€ggg€€€€g€€€gg€€€€gg€€gg€€€ggg€€gg€g€g€€€gg€€gg€€€g€€g€gg€™™ggN™€€gg™€€N5™²€NN€€€gN€²€NN€€€™™gggg€™€g€™€Ngg™™€gN€™€€gg€g€Ng™™€gg€€™gN€™€€g€€€€gN€€€ggg€™€N€€™gNg€€g™€€NN€€™€NgN™€g€€€€Ngg™€gg€€€ggg™€gN€™gNg™²€NNg™€ggg€€gNg™™€gg€™€gN€™€ggg€g™€ggg€€€€N€€gg€€€€Ng€™€ggg€™€gg€€gggg€™€gg€€ggg™™€NN€€€gg€g€gg€€€g€gg€€€€ggg€gg€€€ggg€€gg€€™NNg€€€€gggg€€€€gggg€€€€gNg™™gggg€€g€€€gggNg€€gg€ggg€€€ggg€gg€€€g€€g€ggg€€€ggggg€€€€gNg€™€ggNgg€€€€gg€ggg€€€€ggg€gg€€€gNg€€€€gNN€™€€Nggg€€€gN€g€gN€g€g€€gggg€€€€ggg€€€g€gggg™€€NN€€ggg™ggg€€gNg€€ggg€ggg€™gg€g€gg™€€Ng™€g€€ggN€€€NN™™€gN€g€g€™€gNN™€™NNg€™gg€€€gg€€€gNgg€€ggNg€€€€ggg€g€€€gNNg€€gggg€g€€€ggg€™€NNg€™€gg€gg€€€ggg€€gg€€ggg€™€gNg€€€gg€€€gg€€€gg€gggg€gggg€€g€g€gg€gg€g€€ggg€€€gg€™€€ggg€€€€€€gggg€€€ggg€€€g€€ggg€g€€€€ggg€€ggg€gggg€€ggg€€ggg€™€gg€€ggg€™€gN€€€gNg€€gg€€€gg€€€gg€€€gg€€€ggg€ggg€™€ggg€€gg€™€gg€€ggg€ggggggggg€gggg€ggggggg€€€gg€€€ggg€€ggg€€ggg€€€gg€€€€€g€€€€€€€€€€€€€€€€€gg€g€€€€€€g€€€gggg€gg€€€€€ggggg€€€ggg€gg€€gggg€€€gggg€gg€€ggggg€€g€€€gggg€€€g€g€€€gg€€€€€€€ggg€€€ggg€€€gg€€€€g€€€ggg€€€€€€ggg€€™€gNgg€™€€€ggg€€™€gNg€€€€€gggg€€€€€gg€€g€€€€ggg€€€€€gggg€€€€€ggg€™€€gg€€€€€€€€€€€€ggg€€€g€€€€g€€ggg€™™€Ng€€€gg€€€Ng€€€gggg€g€€€™€€NNg€™™ggg€€™™gggNg€™€€€gNg€€™gNg€™€€gg€™gNg€€€g€€™gN€™™gNN€™™€gNgg€€€€€ggN™™™gNg€€€gg€€€gggg€€€€€€gg€€™€ggNg€™™gggg€g€™€gNg€™™gg€€€€gg€™€Ng€€€ggg€€Ng€€ggg€™€€g€gg€g€€€gg€gg€€€€gNN™™€gNg€€gNg€€€g€€gg€€gg€€€ggg€™ggggg€€€€gNg€™€ggg€€€ggg€€ggg€€€gg€€€€gN€€€gNg€€€gggg€€€€ggg€gg€€€gggg€€g€€ggg€€€gNgg€gggg€€€€ggg€™™€N5N€™™gggggg€€ggg€€gNN€™™gNNg€€€ggggg€™ggNg€€€€ggg€€€€Ng€€€g€gN€€€ggg€ggg€ggg€€ggN€g€€g€gNg€™€ggNgg€€g€ggg€™€€Ng€ggg€€gggg€ggg€™gNg™€€gN€ggg€€gNgg€gg€g€gg€€€gggg€ggg€€€gNg€€g€g€gg€ggg€€ggg€€g€g€€€gg€ggg€€€ggg€g€€€ggggg€€€gggg€ggg™gggg€g€€g€gg€€€gg€€€gN€€€NN€€€gNgg€€g€ggg€€€€gNg€™€gNg€€€gg€€ggg€€gNg€€ggg€€gg€€€gNg™€gggg€€€€€gg€g€gg€€€gNg€€€gg€€ggg€€g€€ggg€€€ggg{$A+,B-,D+,E-,F-,G+,I-,L+,N-,O-,R-,S-,V-,X+} UNIT Menus; (* Copyright by Jare/Iguana in 1993, but given to the public domain. *) (* Want more comments? Write'em! *) (* Nice simple menus. Nothing impressive here. *) (* Modified in XMas'93 by Cesar Alba so that options not available *) (* are shown in grey and the cursor skips them. Thank you Cesar! *) INTERFACE TYPE TMenuIt = RECORD Text : STRING[60]; Val : WORD; END; PMenu = ^TMenu; TMenu = RECORD mi : ARRAY [1..20] OF TMenuIt; util : ARRAY [1..20] OF BOOLEAN; ni : WORD; END; FUNCTION DoMenu(VAR m : TMenu; def: WORD): WORD; PROCEDURE ClearMenu(VAR m : TMenu); PROCEDURE AddItem(VAR m : TMenu; it : TMenuIt; outil: BOOLEAN); VAR mm : PMenu; (* Menu var provided. Another quick hack. *) (* ========================================= *) IMPLEMENTATION USES Output, Gfx; FUNCTION DoMenu(VAR m : TMenu; def: WORD): WORD; VAR k : WORD; pos, i: INTEGER; BEGIN pos := 1; FOR i := 1 TO m.ni DO IF (m.mi[i].Val = def) THEN Pos := i; REPEAT FOR i := 1 TO m.ni DO IF i = Pos THEN DumpLine({' '+}m.mi[i].Text, 1*16+15, i-1) ELSE IF m.util[i] THEN DumpLine({' '+}m.mi[i].Text, 0*16+11, i-1) ELSE DumpLine({' '+}m.mi[i].Text, 0*16+9, i-1); k := GetKey; CASE CHAR(k) OF #0 : CASE HI(k) OF 72 : DEC(Pos); 80 : INC(Pos); 79 : Pos := m.ni; 71 : Pos := 1; 81 : IF (Pos <= (m.ni-5)) THEN INC(Pos, 5) ELSE Pos := m.ni; 73 : IF (Pos > 5) THEN DEC(Pos, 5) ELSE Pos := 1; END; #27 : BEGIN DoMenu := $FFFF; EXIT; END; ' ', #13, #10 : BEGIN DoMenu := m.mi[Pos].Val; EXIT; END; '8': DEC(Pos); '2': INC(Pos); '1': Pos := m.ni; '7': Pos := 1; '3': IF (Pos <= (m.ni-5)) THEN INC(Pos, 5) ELSE Pos := m.ni; '9': IF (Pos > 5) THEN DEC(Pos, 5) ELSE Pos := 1; END; IF (Pos > m.ni) THEN Pos := 1 ELSE IF (Pos < 1) THEN Pos := m.ni; IF NOT (m.util[Pos]) THEN CASE CHAR(k) OF #0 : CASE HI(k) OF 72,73,79 : REPEAT DEC(Pos); IF Pos<1 THEN Pos := m.ni UNTIL m.util[Pos]; 80,81,71 : REPEAT INC(Pos); IF Pos>m.ni THEN Pos := 1; UNTIL m.util[Pos]; END; '8','1','9': REPEAT DEC(Pos); IF Pos<1 THEN Pos := m.ni; UNTIL m.util[Pos]; '2','7','3': REPEAT INC(Pos); IF Pos>m.ni THEN Pos := 1; UNTIL m.util[Pos]; END; UNTIL FALSE; END; PROCEDURE ClearMenu(VAR m : TMenu); BEGIN m.ni := 0; END; PROCEDURE AddItem(VAR m : TMenu; it : TMenuIt; outil : BOOLEAN); BEGIN IF (m.ni < 20) THEN BEGIN INC(m.ni); m.mi[m.ni] := it; m.util[m.ni] := outil END; END; BEGIN New(mm); ClearMenu(mm^) END. €€€gggg€€€€gggg€€g€g€€€€gggg€€gggg€€€€ggg€€gggg€gggg€ggg€€€ggg€€ggggg€€€€ggg€€€ggg€€€ggggg€€gg€€€gg€€€ggg€€€€ggggg€€€ggg€gg€€gg€€€gg€€ggg€€ggg€€€gNg€€€€ggg€€€€€gggg€€€ggg€€€€ggggg€€€g€€€ggg€€€€gg€gg€€€gggg€€€gg€€€gg€ggg€€€gg€€€€ggg€€€€gg€€€ggg€€ggg€€€gg€€€gg€€€€€g€€gg€€€ggg€€gg€€g€ggg€€€€€gggg€€€ggggg™™€gNgg€€€€€gggg™€ggg€€€gg€™gggg€™™gNg€€€g€€€gNg€€™ggg€€g€€g€€ggg€€€€gg€€gg€€€€gg€€€€ggg€€g€€€€ggg€€€ggg€€€€g€€g€€€€gg€™€€gg€€€gg€€ggg€€€€g€gg€€€€g€€ggN™™€gN€€€€N€€™gNg€™™ggg€€g€g€€ggN™™€€Ngg€™g€gg€g€€™™gggg€€g€€gg€€€€€€€ggg€™€€gggg€€€€g€gg€€€€g€g€€€€ggg€€€ggg€€€€€€€ggg€€€€gggg€€€€gggggg™™€gNg€€™€€gggg€€€gggg€€™€ggggg€€€€ggg€€g€g€€gg€™€gggg€€€€€gggg€€€ggg€€g€€€ggg€™€gggg€€€gggg€€€g€ggg€gggg€g€ggggg€€ggg€€€ggggg€™€gNg€€gg€™gNN€g€€ggggg€™€gNg€€™Ng€€ggg€€gNg€™€gNNN™™€gg€NN€™™N5g™™NN€™€NN€€€Ng€™€N5g™€gNNgNg€™€gNNgg€€€€N5g™™gNg€€gN€€€ggg€ggg€€€NN€™€Ng€€€Ng™™€5N€™™NNg€™g€€€gNg€™€NNg€€g€gg€€€gg€€€g™€gNg™€gN™€gNN€²™N5€™™gNN™²g5N€€gNg€™gNg€€€ggN€€€g€gNN€™™gNg€€gg€€gNg€€€gNg™™gNN€™€gg€€ggg™™gN5€€€gggggg™€gNN€™€gNg€€gg€€€gg€€€€ggg€€€€€gggg€€€ggg€€ggg€™ggg€€ggg€€g€gggg€€€gNg€™€gNg€€€ggggg€€ggg€€€g€€ggg€™€gNg€€ggg€€gg€€ggg€™€gNg€€€€€gggg€€€Ng€€gg€€€€Ng€™gggg€€ggg€€gg€€€gg€€€gg€€gg€€™€gg€g€€€€ggg€€€ggg€€gg€€gg€€gg€€€€gg€€g€€€g€gg€™€ggg€€€gg€ggg€€€€€gggg€€€gg€€g€€€€€ggg€€€€gg€€gg€€€€gg€€€€gg€€gg€€€€gg€€€€€gg€€€€€€gg€g€€€gg€€€€gg€€€€ggg€€€g€€€€gg€™€gg€g€€gg€€gg€g€€€gg€gg€g€€€€g€g€€g€€€g€g€€€€g€€g€€€€€gggg€€€€gg€€€g€€€ggg€€€€€gg€€€€gg€€€g€€€€gg€€€ggg€€gg€€€€gg€€€€gg€€€gg€€€g€€€€gg€€€€gNg€€€g€g€€gg™€€ggg€™€gg€€€€gg€€€gg€€€ggg€€€gg€™€gNg™™ggg€€ggg™™€gNg™™€ggg€€€g€€ggg€™™€Ng€™ggg€€€ggg€€ggg€€ggg€€€€gg€€€€ggg€™€gg€€gg€€€ggg€€ggg€€€€gg€€€g€€ggg€™€ggg€g€€€€gggg€g€€€ggg€€€gg€ggg€€™ggg€€€gg€€€gg€€€€gggg€€€€g€€ggg€€€gNg€€€€gg€€€gg€g€ggg€€ggg€€gggg€€€ggggg€€€ggg€€€€gggg€€gggg€€€gggg€€€gggg€€gggg€€€gggg€€€€gggg€€€gg€€€ggggg€€€gNg€€€€gggg€€€ggggg€€gNg€€ggg€€€g€gggg€€€Ng€€gg€€gNN™™€N5€™€NN™€gNg™€gNg™€gNg™€ggN€€ggg™€gNN€™™€NgNN€™™gg€ggg™€gNN€€gNg²€55g™€NN€™€NN€€€gggggg€™™€gNNg€€€€gNNg€™€gNN€€€g€€Ngg™²gN5g€€€ggggggg€€€NNg€™ggg€€ggg€™gNg€™gNg€™gNgggg€™gNgg€€€gg€gg€™€gNN™€ggg™€Ng€™gNNg™€€gN€€gg€€€ggg€€€gg€ggg€€ggg€€€gN€€ggg€™gNN™²€NNg™€gN€™€Ng€€€gg€€ggg€gg€€€NNg™™€g€€gNN€²™N5€™™gg€€€Ng€€gg€™€gg€€ggg™™€NNg™™€Ng€€Ng€™€gNg™™€gggg€€gg€gg€€ggg€€€€€€€gg€™€gg€™€gg€€€€ggg€€g€€€ggg€™™€gNg™™€ggg€€€€€€€g€€g€€gg€€gggg€™€gggg€™€€€ggg€€™€ggg€€€€gg€€gg€€€€€gg€gg€€€€gg€€€€gg€€gg€€€ggg€€€gg€€€gg€€€€g€€€gg€™€ggg€€€€€€gg€€€g€€€gNg™™ggg€€€g€€€gggg€™€€gggg™€€€ggg€€™€ggg€€€€€€€ggg€€€€gg€g€€€€€€€gg€€€€€€€€€€€g€€€g€g€€€gg€€€€gg€€€g€€€ggg€€€ggg€€€€gg€€€gg€€€g€€€gg€€€€€gggg€€€€gg€€€€€€€ggg€€€€€€€ggg€€€€g€€g€€€€ggNg€€™€ggg€€g€€€ggg€™™€ggg€€€€€€ggg€™€ggg€€€gg€ggg€€€€gg€€€€gg€€gg€€€€€gggg€€€ggggg™™€gggg€€g€€€ggg€™€ggNg€€€ggggggg€€€ggg€™€€gggg€€€€ggg€€€ggg€ggg€€€gg€€€ggg€€€€gggg€€€gggg€€€ggg€€€gggg€€€€ggg€ggg€€€gg€€€gNg€™€ggg€€gg€€gg€€€€gg€€ggg€g€€€€gN€™€gNNg€€€€ggggg€€ggg€€ggg€€€€gggg€€€gggg€€€€gggg€€€gggg€€€gggg€€€€gggggg€€gggg€ggg€€ggg€€gg€€€gg€€g€gggg€€™€ggg€€€€g€ggg€€€ggg€€ggg€gggg€€ggg€€€ggg€€€g€gggg€€€gg€€€gg€gggg€€gNg€€€gggg€€g€N€€€€gg€€g€€ggg€€€€gggg€€™€ggN€€€€gg€g€g€€€ggg€gg€™™gN5g²€gg€™NN€™€gggg€gg€™™gNg€™NN™²™55€€™€g€€g5N™²™5g€™gNg€€NN€™™gNg€€gg€€€€gg€€gN€€gNN€™™gNg€€gg€€€gNg€™€ggg€€gg€™gNg™™g5g€™gN€€ggg™€gNg™€gN€™€NN€™€Ng€€gg€™gNg€€€gg€€gN€€€gg€g€ggg™€Ng€€gNg€™€NN€€€gg€€€gNg™™ggg€€ggg€€NN€™€ggg€€ggg™€gNg€€gg™™gNN€€€gg€€gg€™€ggg€€€g€€gNg™€€€gNNg™€€€ggg€g€™€gg€g€™™ggggg™€€€€gNg€€™€gN€€gg€€€g€gg€€gg€€€€gg™™ggggg€g€ggg€€€€gggg€€€€ggg€€€€gg€g€g€€€€gNg€€gg€€™NN€€²ggNN™€€g€™€gNg™²€gN€€€€gg€€gggg€€€g€€ggg€™€€gg€™™ggg€€€€g€€ggg™™gNg€™€gg€€€g€€€gNN€™™ggg€€g€€€gg€€€€g€€€€ggg€€€€g€gg€€€€gggg€€€€gg€€€€€gg€g€€€€€g€€€€gg€€€€g€€€€ggg€€ggg€€€gg€€ggg€€™€gg€€€€gg€€gg€€€€gg€€€ggg€€€Ng€€€gg€€€gg€€€€ggg€€€ggg€€€€ggggg€€€ggg€™€ggg€€€g€€ggg€€€€Ng€€€€ggg€€€ggggg€€€ggNg€€€gNg€€€€gggggg€€€ggg€€€ggggg€€€€ggg€€gggg€™gNg€™€gggg€€€gg€€€€€ggg€€€€ggg€€€ggg€™€€gg€€€€€€ggg€€€ggN€€€gNgg€€gggg€g€€g€gggg€g€€g€g€€g€€€€Ngg™€ggg€€€gg€€€€g€gggg€€ggg€€€ggg€€€gggg€€ggggg€g€ggggggg€gggggggg€€gggg€gggg€€€gggg€€gggg€€€gggg€gg€€€ggg€g€gggg€€€€€g€€g€€€€€g€€€€g€€€€gg€€€€g€€€€g€€€€gg€€€gggg€€€gggg€€€gNg€€€ggggggg€gggg€gggg€gggggggg€€gNgg€€gg€g€g€€g€g€€€€Ngg€™g€gggN€€€€N€€€gg™€ggN€™€gN€™€€Ng€€€g€€ggN€™€ggg€€gg€€ggN€€€gg€ggg€€gggggggg€€gNNg€™€N€€€€Ngg™™g€€gNN€™€gN€™€gg™²€NN€²™g5g™€gg€™€NN€™€gN€€ggg€€ggN€€€ggg€€gg€€Ng€€gNg€€ggg€ggg€€gggggg€™€gN€€€€gggg€€€gggg€€€gNg€€€€gNg€€€ggg€€Ng™™gNg€™€gN€€€ggg€g€g€€€gg€€€g€€ggg€€Ng€€€ggNg€€gg€€g€gg€™€Ng€€€€gg€€ggg€€€€g€€€NN€™€€NN€€€g€€ggg€€€€g€gggg€€€ggg€€g€€ggg€€€€g€€g€€€€ggg€€gg€™€Ngg™™€ggg€€€€€gg€gg€™™g€NN€™™gg€€€ggg™™ggg€g€€g€€™gg€N™€€gg™gg€g™™€g5€€™€ggg€gg€™ggNg€™€g€gg€€gg€€€€ggg€™€™ggNg™€™™ggN€€™™gggg€€€€g€gg€€™€ggg€€g€g€€g€ggg€€€€€gggg™€€gg€€€€g€g€€€€g€€g€€€€ggg™™gNg€™€gg€€gg€™€ggN€™™gggg€™€gg€g€€€€€€gg€€€€gg€™€gggg€€€€ggg€€™€gggg€™™€NNg™€€gg€€gg€ggg€€€gg€€€ggggggg€€€gggg€€€gggg€€€gggg€gg€g€€€€ggg€€€ggg€€€€gggg€€€€gggg€€€gggg€€€gg€€€ggg€€€ggggg€€ggNg€€€ggg€€gggg€g€€ggNg€€€gg€ggg€€€gg€€ggg€™€gNg€€gg€€ggg€€ggg€€ggg€€gg€€€gg€™€ggg€€ggg€€gg€€ggg€€€gg€ggg€€€gNg€€ggg€€€ggg€€g€€gggg€g€g€€ggg€€€€gg€g€g€€€ggg€gggg€€€ggggg€€€ggg€€€€ggg€ggg€€gg€€gg€ggg€g€€gg€ggg€€€€€ggg€€€€ggg€€gggg€€€€ggg€€g€gg€€€gg€gg€€€€€gggg€€g€€g€g€€€€ggg€€€€gg€€€€ggg€€€gggg€€€gggg€€€gggg€™€gggg€€€€gggg€€€€ggg€€gggg€€€gggg€€€ggggg€€€ggg€€€€€ggg€€€€gNgg€€€gggg€€gNg€€€g€gggg€€€ggg€€€ggg€€€€€ggg€™€gNg€€gN€™™€g€€€NN€™™gNN€™€€€gNN€™€ggg™€gg€€€gN€€€gggg€€ggggg€€gNg€™™gNgg€€€€€gNg€™€gggggg€™™NNg€™gNg€€€€gggg€€€€gNg€€™€gggg€™™€NN€™€gg€™€gg€€€ggg€€ggg€€€Ng€™ggg€€€gg€€€ggg€€€€€€gg€€€€€gg€€€gg€€€gNg™™gNg€€€gg€€€gg€€ggg€€€ggg€€€€€gggg€€€€€gNg™€€ggg€€€g€€€gg€€€€gg€gg€€€g€g€g€€€€gg€€€g€€gg€€€gg€™€ggg™™gN€™€gNg™™€Ng€€€Ng€€™gNgg€€€€€€gNg€™™€ggNgg™™€gggg€™™€Ngg™€€€™gg€€g€€€g€gg€€gg€€g™€Ng€€gg€g€€gg€™€g€ggg™€g€€€gggg™€ggggg€€g™™gNg€™™™gN€gg€™™ggNN€€™€€g€€€g€€€ggNg™™€gNg€™gg€€€Ngg€™€€ggg€™€ggg€ggg€€€€g€€€gg€€€gg€€™ggg€€g€g€€ggg€€€ggg€g™€€Ng€€g€€™ggg€€€€ggg™€€gg€€ggN€€€€g€€ggg€€ggN€€€€gggg€€€€ggg€€€€gggg€€€gggg€€€NNg™€€ggg€€€€€ggg€€ggN€€€ggg€gg€€ggg€€ggg€€gggg€g€€€€ggg€€gggg€gg€€™gggg€gggg™ggNg€g€€€€Ngg€™ggNN€€™€gggggg€€€gg€€€gg€€€gg€gggg™€NNg€€ggggggg€€€gggg€€€€ggg€€gggg€€€gggg€€ggggg€€€€ggg€€ggg€gg€€€ggg€€€ggg€€g€€€ggg€€€ggg€€€€€gggg€€€gg€€€gg€€€gggg€€€g€€ggg€€g€g€€gg€€€gggg€€€gg€g€€€€ggg€€€ggg€g€gggg€€€gggg€€gggggg€€€ggg€€€ggg€gg€gggg€€€ggNg€€€ggg€€ggg€€gg€€gg€€€ggg€€gg€€€€ggg€€€€gggg€€€ggg€€€€€gggg€€€gggg€€€ggggg€€€ggg€€€gggg€€€€ggg€€€€€gggg€€€ggg€g€ggg€€€gggg€€€€€ggg€€€€ggg€€€€ggg€€€€gNgg€™€gggg€€™€gNg€€€€€€ggg€€€gg€€ggg€€€gg€€€€gggggg€€€€ggg€™€€gg€€ggg€€gNg€™™gNgg€€€€€€ggg€€™€gg€€€g€€€€ggg€€€gg€€gg€€™€gNg€™€gg€€g€€€ggg€€€gg€€€€gg€™€gggg€€€€gggg€€€€€ggg€€€€gg€€g€€€€€gg€™€ggg€™€gg€€gg€€™™€NNg€€€gN€™NN€²€€Ng™€g€™€g€NN€™€€ggN€™€€™€NNg€™™gN€gg€™€Ng€g€™€gggN€²™gggg€™€€€gNgg€€™€Ng€€™€gg€™€ggN™™™gN€€g€g™€€5€™™™ggN€™€€g€€g€g€™€ggg€€™€Ngg™™€gN€€g€€€€€gNN€™™gNg€€gg€™€ggN€€€€ggg€€g€€€€g€N€€€€gg€€€Ng€™€gN€™gggg€€€€€€gNg€€€g€ggg€™€ggg€€gg€€ggg€€€ggg€€€ggg€™gggg€€€gggg€€€gggggg€€€gggg€€g€€€gg€€€g€€€ggg€™€€N5g€™€ggNg€€€g€gggg€€€gg€g€ggg€€€€g€g€gg€€€gg€€€gg€€gg€gggg€€€ggggg€€€ggggg€€€gggNg€€€ggg€€Ng™gNggg€€€€gggg€gggggggg€gggg€€gNg€™ggN€€ggg€gg€ggg€€ggg€€€ggg€€gggg€€gggggg€g€€gggg€€€gNgg€€ggg€€gg€€ggg€€ggg€€€Ngg€g€g€ggg€€€ggggg€€€ggNg€™™gNgg€€€€ggNg€€€gggg€€gggg€€€gggg™™ggg€gg€€€ggg€€€gg€€ggg€€gg€€gggg€€gg€ggg€€gggg€gggg€€€gggg€gg€ggg€ggggg€€€ggg€€ggg€ggg€€ggg€€€g€€ggg€€€ggg€€€gggggg€€gg€€€gggg€g€gggggg€€€ggg€€€ggg€g€€€gggg€€€gg€€€€gNg€€g€€€gNg€™€Ngg€€g€€€gNg™™ggg€€ggg€€gg€€gNg€™ggg€gg€€€gNN™™€gNg€€gg€€gNg€™€€gg€€ggggg€™€€€ggggg€™gNg€€™™gNgg€€€gg€€ggg€g€€€€€gg€™™€gNN€™™€ggg€™™€ggg€€€€ggggg€€€€gg€€gg€€€ggg€€€€gg€€€gg€€gNg€™€gNg€€€g€€€ggg€€€€ggg€€€gg€€ggg€™™gNg™™€gg€€€gg™€gNg€™€ggg€™€gg€€ggg€€€gg€™€ggg€€™ggg€€€€gg€€gg€€€ggg€™€gg€™€€gggg€€€€€ggNN€™™€€€€™NNg€™€gNg™€gg™NNNg²²™€ggNg€€™™ggN€g™™™€gggg€g€™€NN€™€€g€€gNg€²€€NNg€€€€€€€ggg€€€€gg€€ggg€€€gNg™™€ggg€™ggg€™€gg™€gg€™€gNg€™€gg€€€€gg€€€€€€€€gg€€€€ggg€™€ggg€€€€€€gg€€™€ggg€™€€gg€€™€ggg€gg€€€€gg€™€Ng€™™ggg€€€€€€ggg€™€ggNg€™™€gNg€€ggg€ggg€€€ggg€€€gg€€gggg€€€g€gg€€gg€€gggg€€€gggg€€€ggg€€€gggg€€€ggggg€g€g€ggg€€gg€gggg€€gggg€€gg€ggggg€€ggggg€€€gggg€€€€€€gggg€€€ggg€ggg€€ggNg€€ggggggg™™gNNg€™™gggggg€€ggg€™ggg€€€€ggNg€€€NNN€™€€gg€g€€€€gNg€™gNg€™gggg€g€€€€gggg€g€g€ggg€™gNg€™€NgN™g€€Ngg€€N€g™€Ngg€€g€€€gN€€Ng€€€Ng€€€NN€€€Ngg€™NNg€€Ng€€€gg€€€g€€gggg€€€gg€€gNg€€gggg€gg€€€gggg€€€ggggg€€gNg€€€ggg€€gggg€ggg€ggg€€€gNN€€€ggggggg€€gggg€ggg€€gg€€ggg€€€gg€€€g€€gg€€€g€gggg€g€g€gg€g€€g€ggg€€ggggggg€€€ggg€€€gggg€gg€g€gg€g€gggggg€€€€ggg€€€€€gggg€€€ggggg€€€gg€gNg€€€ggg€gg€€€gggg€€€€gggg€€€ggg€€ggg€gg€€€gNg€™€gggg€™€gggg€™gggg€€€gg€gg€™€Ngg€™™ggg€€€€g€€gg€€€gg€€€gg€€€€€ggg€™™€ggNg€™€gg€€€gNg™™€Ng€€€g™²gN™™™€gg€€gg™€gggN€™€€ggg€™€ggg€€€gg€€gNg™€€Ng™™gNg™€€ggg€€€€™g€gNg€™€ggNg€€™™€gg€€g€€™€gNg€™€€gg€g€™™€gggg€€€€€gg€€€€€€€gg€™€gg€€gggg€€€€€€g€€€™€gg€€€ggg€™g€€€€Ngg™²™™€gNN€²€€gg€gg€™²gNNN™™€g™gggg™²€gNgg€™€€™€gNg€™²g5N€™€€€€€gNg™™™€NN€™€€€€g€gg€™€€€gg€€€g€€€€gg€™€€€gg€™gg€g€€gg€™€ggg€™€g€™€€gg€™gg€€€€gg€™€gg€g€™ggg€€€€gg€gg€™€€gNg™™€gggg€€€€€ggg€€™€Ng€€€€€ggggggg€€€gggg€€gg€€ggg€€€Ng€€€€€gggg€€€ggggg€€€€ggggg€€€gggg€€€€€ggggggggg€€€ggNg€€€gggg€gg€€gggg€€gggggg€g€€gggggg€€gggg€gggggg€gg€ggg€€€€gg€€€gggg€gg€€ggg€gg€€™€gNNg€€€€gggg€€€ggg€€gggg€€€gggg€€€€NNg€€€ggggg€€€ggg€€€gggg€€€€ggg€€€gggg€€€gggggg€€ggg€gggg€ggg€€ggg€€ggg€€gg€€€gg€€ggg€€ggg€€ggg€€g€€€gNgg€ggg€€gg€€€N€€€gg€ggg€€€gN€€€gN€€€€N€€€g5€™™g5g€™€5€€€g5€™™gg™™€Ng€g€N€™€g5€™™€5g€™€Ng€ggNg€™€NN€™™gNN€€gg€€N€€€€ggg€€g€€€ggggg€€€ggg€€€g€ggg€€ggg€€ggg€€ggg€€€ggg€€€€gggg€€€gNgg€€gggggg€€ggg€€ggg€€gg€€€ggg€€ggg€€gg€ggg€€€ggg€€gg€€gNg€™€NNg™€g€€gNg€€gggg€gg€€€gN€€€gg€€€gNg€€ggggggg€€€gNg€€gg€€ggg€™€g€€gg€ggggg€€gNgg€™€NN€€gg€€gggg€€€gg€g€€gg€€g€€g€€gg€€g€€g€€gN€™gg€€gg€g€™gNg€ggg€€€gNg™²€Ng€€gg€™gNN™²€gg€g€€gg™€gg€g€™™Ng€g€€gNg²€g€NN€²gN€²™g55™ä™5N™€ggg€™²g5N€™™€g€€gNg™™€€€NN€€²™€gN€g€™™€gNNg™™ggg€€€g€€€ggg€€€gg€€™€gN€™™€gg€€€gg™€€gg€™€gg€™€€gg€€€€€ggg€€€€€g€€g€€€ggg€€™gNg™²™€NN€™™€gg€€gg™€€gg€™€gg€€™€NN€™™€ggggg€™™€gNN€™™gNgg€€€€€gg€™€ggg€™€€€gNN€™™€gNg€€gg€€ggg€€gg€™™gNNg€™€€gNgg™€ggNgg€€™€ggg€€€gg€€gg€g€€€€€ggg€€€gggg€€€€ggg€€€€ggg€€€ggNg€€€€ggggg€€€€€gg€€gggg€€€ggg€€€€gggg€€gggg€™€gNNg€™€gNg€€€€gggg€€€€ggg€€ggg€€€€gggg€€€gggg€€g€gggg€€€€gggggg€€ggg€€€€g€gggg€€g€g€ggg€€ggg€€€€gggggg€€ggggg€ggggg€€€gggg€™€ggggg€€€ggg€€€ggg€€ggg€€gg€€€ggg€™€gggg€€€€€NNg€€€€gg€gggg€ggg€gg€€€gNg€€€gg€gggg€€ggg€€€gg€€ggggggg€€€ggg€gg€g€gg€€€gggg€€ggg€€€€gg€g€g€€€€ggg€™€ggg€€€€g€€gg€€€€g€gggg€€€ggg€€g€€€gNg€€€ggggg€€€g€gggggg€€ggggg€€g€€gggg€™€ggg€€€€gggg€€€gg€gg€g€gggg€€ggg€€gg€€ggg€€ggg€€€gg€ggg€€€€ggg€€€€ggg€€€€ggg€€g€€gggg€€€ggg€€€gg€€gg€€ggg€€ggg€™€gg€€ggg€€€gg€€€gg€ggg€€gNg€€€gg€€ggg€€ggg€€ggg€€€gg€ggg€€€ggg€€ggg€€€€g€€ggg€€ggg€€€g€€ggg€€€gNg€™€gggggg€€€ggg€€ggg€ggg€€g€€€gggg™€€gggg€™™ggNg€€€€€ggg€€€€gggg€g€€g€€ggg€g€€gg€€g€€g€€gg€™€g€gg€€g€™€gggg€€€€€€gg€™™gNg€€g€™€€gg€™™gg€gg€€g€€ggg€€€€gg€€€g€€ggg€€€g€€ggg™™€gg€ggg€™€ggg™gg€™€NNg™™€gg™€ggg™€€gN€€g€€€€Ng™€€Ng€™²N5N™²€g€€™gNg™Ë€5NN€™Ë€NgNg€™™€™€NNg™™™€NN€€€€€€€™gNg€™™€NNg™€€g€€€N5g²²€NNg™²€gg€€g€€€™gNgg™™€NN€™™€Ng€™™gg€€€gg€™™NNg€™€NN€™€NNg²™g5g™™€NN€™™gNg€™€€Ngg™€€gg€€gg€™™ggNg™™gNg€€€g€€gg€g€€€gg€€€€Ngg™€gNg€™ggg€€gNg€™€ggg™gggg€ggg€€gggggg€g€g€gggggg€€ggg€€€gg€€€NN€™™€Nggg€€€€ggg€€€g€ggg€€ggg€€€gNg€€€ggg€ggg€€ggg€€€gg€€gggg€€ggggggg€€ggg™€gNg€€ggg€gggg€€ggg€€€€ggggg€€€ggg€€€gg€g€gggggg€€ggg€€ggg€€€gg€gggg™€ggNg€€€ggggggg€gggg€gggggg€€ggggg€€gggg€€€gg€ggg€€ggNg™€ggggg€€g€ggg€€€ggg€g€gggg€gg€g€€€ggggg€€€gggg€€€€gggg€g€€gggg€gggg€€€ggggg€ggg€€gggg€€g€gggg€€g€g€gg€g€€€gggg€€€gggg€€g€€€gg€g€€€€€€ggg€€€ggg€€gggg€€ggg€g€€€gggg€€gg€€€g€g€g€€€€gg€€ggg€€€ggg€€€gg€€€gggg€€gggg€€€gggg€€€gggg€€€ggg€€€ggg€gg€€€gNg€™€ggg€€€€€€ggg€€€g€g€g€€€ggg€€ggg€€€ggg€gg€€€€gg€™€ggg€gg€€€ggggg€€€NNg€™€ggg€gg€€€ggg€™€gNg€€€€ggg€€€gggg€€€€gggg€€€ggg€€€€ggg€€gggg€g€€€gggg™€ggNg€€€gg€€gg€€ggg€€€gg€€€€ggg€gg€€ggg€€€gggggg€€€€gggg€€ggg€€ggg€€€€gggg€€€€ggggg€€€gggg€€€€ggg€g€€€gg€g€€€€g€€€ggg€€€ggg€€€€g€ggg€€€€gg€€g€€€gg€€€€€€ggg€€€g€€€€€gg€€€€€€€€gg€™€€gggg€€€€g€€€gg€€g€€€gg€€€€€gggg™€™€ggg™™€€g€€ggg™€€gg€€€€g€€€gg€€™€N€€€gg€™™g5g™™€€g€€ggg™™ggg€™™€Ng™€€g€€€™gg€€€gg€€²€5€Ë™gNN€™gg€²€NNg€™²™gNgg€™€g€™€gNg™™™gNggg€€€™™€NNg™²™g5N€™€€€€€g5N²²€NNg€™€gg€ggg€™™™NNg™™ggg€€gg™™ggNg€€€€ggg€€gg€™€NNg€™gg€€gNg€™€gNN€€€gggggg€ggg€™ggg€€ggg€€gNN€€€gNg€€g5g€™€Ngg€gNg€€ggg€gggggg€ggg€™€gggg€€gggggggg€gg€g€gggg€€€€gNNg™™€gggNg€™€gggg€€€ggN€€€gN€€g€g€gNg€™gggg€gg™€€5N€€™gg€€Ng€€€5g€™€Nggg€g€€ggg€€€€ggg€€gg€ggg€€gggg€g€€€gNN€™€gNg€€ggg€€ggg€€ggg€€gg€€€gNg€€ggg€€ggg€€gg€ggN€€€gNN€€€gg€gggg€€€ggg€€€€ggggg€€gggg€€€ggg€€€€g€€ggg€€ggg€€ggg€€gg€€€gg€gggg€gg€g€gg€g€€ggggg€gg€€€gg€€€gg€€€gggg€€€g€€gggg€€€€ggg€€ggg€€€ggg€€€ggg€€€€gggg€€€€ggg€€€€gg€€€gg€€ggg€€€ggg€€€gg€€ggggg€€€ggg€€€ggg€gg€€€€NNg™™ggg€€g€€€€ggg€€€gg€g€g€€g€g€€ggg€™€gggg€€€€€gggg€™€gNgg€™€€ggg€™€ggg€€€€ggg€€€ggg€€€€gg€g€€€gggg€€€ggg€€€€gggg€€€€ggg€€€€€ggg€€€€€ggg€™€€ggg€€€€gggg€€€€ggg€€€€ggg€€€€gg€€€€gg€€€ggg€€€gg€€€gg€€€€gg€€€g€€€ggg€€€ggg€€€€ggg€€€€€gg€€€gg€€€gg€€€gg€™€gg€€€€g€€€gg€™€gg€€g€€€€€€€€ggg€€€€gg€g€€€gggggg