From 07402847e0d96d25ff59bd13c571c277be0e781d Mon Sep 17 00:00:00 2001 From: portasynthinca3 Date: Sun, 22 Dec 2019 01:05:30 +0300 Subject: [PATCH] Toss out the bootloader; lay down the foundation of UEFI and x86-64 support --- .gitignore | 4 + README.md | 23 +- bochsrc.txt | 55 - build/1stg.asm.bin | Bin 512 -> 0 bytes build/2stg.asm.bin | Bin 1289 -> 0 bytes build/lds | 13 - build/neutron.img | Bin 1474560 -> 1474560 bytes build/obj/a20.s.o | Bin 600 -> 0 bytes build/obj/acpi.c.o | Bin 5068 -> 0 bytes build/obj/ata.c.o | Bin 3572 -> 0 bytes build/obj/cbuild.o | Bin 46468 -> 0 bytes build/obj/diskio.c.o | Bin 3688 -> 0 bytes build/obj/gfx.c.o | Bin 10272 -> 0 bytes build/obj/gui.c.o | Bin 17640 -> 0 bytes build/obj/isr_wrapper.s.o | Bin 1392 -> 0 bytes build/obj/pci.c.o | Bin 3100 -> 0 bytes build/obj/pic.c.o | Bin 2720 -> 0 bytes build/obj/pit.c.o | Bin 2216 -> 0 bytes build/obj/ps2.c.o | Bin 5312 -> 0 bytes build/obj/ps2_kbd.c.o | Bin 2008 -> 0 bytes build/obj/quark.c.o | Bin 12892 -> 0 bytes build/obj/stdgui.c.o | Bin 11252 -> 0 bytes build/obj/stdlib.c.o | Bin 9680 -> 0 bytes build/obj/usb.c.o | Bin 4076 -> 0 bytes build/quark.bin | Bin 38308 -> 0 bytes builder.py | 166 +- bx_enh_dbg.ini | 26 - gnu-efi/inc/efi.h | 61 + gnu-efi/inc/efi_nii.h | 78 + gnu-efi/inc/efi_pxe.h | 1743 +++++++++++++++++++++ gnu-efi/inc/efiapi.h | 967 ++++++++++++ gnu-efi/inc/eficompiler.h | 30 + gnu-efi/inc/eficon.h | 306 ++++ gnu-efi/inc/efidebug.h | 620 ++++++++ gnu-efi/inc/efidef.h | 220 +++ gnu-efi/inc/efidevp.h | 582 +++++++ gnu-efi/inc/efierr.h | 67 + gnu-efi/inc/efifs.h | 116 ++ gnu-efi/inc/efigpt.h | 68 + gnu-efi/inc/efiip.h | 459 ++++++ gnu-efi/inc/efilib.h | 1036 ++++++++++++ gnu-efi/inc/efilink.h | 177 +++ gnu-efi/inc/efinet.h | 348 ++++ gnu-efi/inc/efipart.h | 61 + gnu-efi/inc/efipciio.h | 399 +++++ gnu-efi/inc/efipoint.h | 115 ++ gnu-efi/inc/efiprot.h | 1424 +++++++++++++++++ gnu-efi/inc/efipxebc.h | 482 ++++++ gnu-efi/inc/efirtlib.h | 179 +++ gnu-efi/inc/efiser.h | 136 ++ gnu-efi/inc/efisetjmp.h | 10 + gnu-efi/inc/efishellintf.h | 94 ++ gnu-efi/inc/efishellparm.h | 63 + gnu-efi/inc/efistdarg.h | 33 + gnu-efi/inc/efitcp.h | 391 +++++ gnu-efi/inc/efiudp.h | 272 ++++ gnu-efi/inc/efiui.h | 58 + gnu-efi/inc/libsmbios.h | 132 ++ gnu-efi/inc/pci22.h | 193 +++ gnu-efi/inc/romload.h | 41 + gnu-efi/inc/x86_64/efibind.h | 392 +++++ gnu-efi/inc/x86_64/efilibplat.h | 26 + gnu-efi/inc/x86_64/efisetjmp_arch.h | 22 + gnu-efi/inc/x86_64/pe.h | 595 +++++++ gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o | Bin 0 -> 2616 bytes gnu-efi/x86_64/gnuefi/libgnuefi.a | Bin 0 -> 29842 bytes gnu-efi/x86_64/gnuefi/reloc_x86_64.o | Bin 0 -> 29696 bytes gnu-efi/x86_64/lib/boxdraw.o | Bin 0 -> 31048 bytes gnu-efi/x86_64/lib/cmdline.o | Bin 0 -> 38400 bytes gnu-efi/x86_64/lib/console.o | Bin 0 -> 32608 bytes gnu-efi/x86_64/lib/crc.o | Bin 0 -> 37864 bytes gnu-efi/x86_64/lib/data.o | Bin 0 -> 37104 bytes gnu-efi/x86_64/lib/debug.o | Bin 0 -> 30032 bytes gnu-efi/x86_64/lib/dpath.o | Bin 0 -> 109600 bytes gnu-efi/x86_64/lib/error.o | Bin 0 -> 33352 bytes gnu-efi/x86_64/lib/event.o | Bin 0 -> 34632 bytes gnu-efi/x86_64/lib/exit.o | Bin 0 -> 29736 bytes gnu-efi/x86_64/lib/guid.o | Bin 0 -> 38824 bytes gnu-efi/x86_64/lib/hand.o | Bin 0 -> 52128 bytes gnu-efi/x86_64/lib/hw.o | Bin 0 -> 34336 bytes gnu-efi/x86_64/lib/init.o | Bin 0 -> 38184 bytes gnu-efi/x86_64/lib/libefi.a | Bin 0 -> 1122718 bytes gnu-efi/x86_64/lib/lock.o | Bin 0 -> 30456 bytes gnu-efi/x86_64/lib/misc.o | Bin 0 -> 63552 bytes gnu-efi/x86_64/lib/print.o | Bin 0 -> 83552 bytes gnu-efi/x86_64/lib/smbios.o | Bin 0 -> 38264 bytes gnu-efi/x86_64/lib/sread.o | Bin 0 -> 42064 bytes gnu-efi/x86_64/lib/str.o | Bin 0 -> 48808 bytes gnu-efi/x86_64/lib/x86_64/callwrap.o | Bin 0 -> 1688 bytes gnu-efi/x86_64/lib/x86_64/efi_stub.o | Bin 0 -> 2792 bytes gnu-efi/x86_64/lib/x86_64/initplat.o | Bin 0 -> 28960 bytes gnu-efi/x86_64/lib/x86_64/math.o | Bin 0 -> 30184 bytes gnu-efi/x86_64/lib/x86_64/setjmp.o | Bin 0 -> 2104 bytes neutron.nbuild | 37 +- src/{quark-c => }/a20.s | 0 src/{quark-c => }/drivers/acpi.c | 8 +- src/{quark-c => }/drivers/acpi.h | 0 src/{quark-c => }/drivers/ata.c | 0 src/{quark-c => }/drivers/ata.h | 0 src/{quark-c => }/drivers/diskio.c | 2 +- src/{quark-c => }/drivers/diskio.h | 0 src/{quark-c => }/drivers/gfx.c | 2 +- src/{quark-c => }/drivers/gfx.h | 0 src/{quark-c => }/drivers/pci.c | 0 src/{quark-c => }/drivers/pci.h | 0 src/{quark-c => }/drivers/pic.c | 0 src/{quark-c => }/drivers/pic.h | 0 src/{quark-c => }/drivers/pit.c | 4 +- src/{quark-c => }/drivers/pit.h | 0 src/{quark-c => }/drivers/ps2.c | 0 src/{quark-c => }/drivers/ps2.h | 0 src/{quark-c => }/drivers/ps2_kbd.c | 0 src/{quark-c => }/drivers/ps2_kbd.h | 0 src/{quark-c => }/drivers/usb.c | 8 +- src/{quark-c => }/drivers/usb.h | 0 src/{quark-c => }/fonts/font_neutral.h | 28 +- src/{quark-c => }/gui/gui.c | 2 +- src/{quark-c => }/gui/gui.h | 0 src/{quark-c => }/gui/stdgui.c | 0 src/{quark-c => }/gui/stdgui.h | 0 src/{quark-c => }/images/neutron_logo.xbm | 0 src/{quark-c => }/images/power.xbm | 0 src/{quark-c => }/images/system.xbm | 0 src/{quark-c => }/isr_wrapper.s | 70 +- src/muon/1stg.asm | 128 -- src/muon/2stg.asm | 241 --- src/muon/gfx_driver.asm | 87 - src/muon/nfs_driver.asm | 223 --- src/muon/stdlib.asm | 166 -- src/{quark-c => }/quark.c | 59 +- src/{quark-c => }/stdlib.c | 28 +- src/{quark-c => }/stdlib.h | 24 +- src/test.c | 7 + 133 files changed, 12187 insertions(+), 1220 deletions(-) delete mode 100644 bochsrc.txt delete mode 100644 build/1stg.asm.bin delete mode 100644 build/2stg.asm.bin delete mode 100644 build/lds delete mode 100644 build/obj/a20.s.o delete mode 100644 build/obj/acpi.c.o delete mode 100644 build/obj/ata.c.o delete mode 100755 build/obj/cbuild.o delete mode 100644 build/obj/diskio.c.o delete mode 100644 build/obj/gfx.c.o delete mode 100644 build/obj/gui.c.o delete mode 100644 build/obj/isr_wrapper.s.o delete mode 100644 build/obj/pci.c.o delete mode 100644 build/obj/pic.c.o delete mode 100644 build/obj/pit.c.o delete mode 100644 build/obj/ps2.c.o delete mode 100644 build/obj/ps2_kbd.c.o delete mode 100644 build/obj/quark.c.o delete mode 100644 build/obj/stdgui.c.o delete mode 100644 build/obj/stdlib.c.o delete mode 100644 build/obj/usb.c.o delete mode 100755 build/quark.bin delete mode 100644 bx_enh_dbg.ini create mode 100644 gnu-efi/inc/efi.h create mode 100644 gnu-efi/inc/efi_nii.h create mode 100644 gnu-efi/inc/efi_pxe.h create mode 100644 gnu-efi/inc/efiapi.h create mode 100644 gnu-efi/inc/eficompiler.h create mode 100644 gnu-efi/inc/eficon.h create mode 100644 gnu-efi/inc/efidebug.h create mode 100644 gnu-efi/inc/efidef.h create mode 100644 gnu-efi/inc/efidevp.h create mode 100644 gnu-efi/inc/efierr.h create mode 100644 gnu-efi/inc/efifs.h create mode 100644 gnu-efi/inc/efigpt.h create mode 100644 gnu-efi/inc/efiip.h create mode 100644 gnu-efi/inc/efilib.h create mode 100644 gnu-efi/inc/efilink.h create mode 100644 gnu-efi/inc/efinet.h create mode 100644 gnu-efi/inc/efipart.h create mode 100644 gnu-efi/inc/efipciio.h create mode 100644 gnu-efi/inc/efipoint.h create mode 100644 gnu-efi/inc/efiprot.h create mode 100644 gnu-efi/inc/efipxebc.h create mode 100644 gnu-efi/inc/efirtlib.h create mode 100644 gnu-efi/inc/efiser.h create mode 100644 gnu-efi/inc/efisetjmp.h create mode 100644 gnu-efi/inc/efishellintf.h create mode 100644 gnu-efi/inc/efishellparm.h create mode 100644 gnu-efi/inc/efistdarg.h create mode 100644 gnu-efi/inc/efitcp.h create mode 100644 gnu-efi/inc/efiudp.h create mode 100644 gnu-efi/inc/efiui.h create mode 100644 gnu-efi/inc/libsmbios.h create mode 100644 gnu-efi/inc/pci22.h create mode 100644 gnu-efi/inc/romload.h create mode 100644 gnu-efi/inc/x86_64/efibind.h create mode 100644 gnu-efi/inc/x86_64/efilibplat.h create mode 100644 gnu-efi/inc/x86_64/efisetjmp_arch.h create mode 100644 gnu-efi/inc/x86_64/pe.h create mode 100644 gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o create mode 100644 gnu-efi/x86_64/gnuefi/libgnuefi.a create mode 100644 gnu-efi/x86_64/gnuefi/reloc_x86_64.o create mode 100644 gnu-efi/x86_64/lib/boxdraw.o create mode 100644 gnu-efi/x86_64/lib/cmdline.o create mode 100644 gnu-efi/x86_64/lib/console.o create mode 100644 gnu-efi/x86_64/lib/crc.o create mode 100644 gnu-efi/x86_64/lib/data.o create mode 100644 gnu-efi/x86_64/lib/debug.o create mode 100644 gnu-efi/x86_64/lib/dpath.o create mode 100644 gnu-efi/x86_64/lib/error.o create mode 100644 gnu-efi/x86_64/lib/event.o create mode 100644 gnu-efi/x86_64/lib/exit.o create mode 100644 gnu-efi/x86_64/lib/guid.o create mode 100644 gnu-efi/x86_64/lib/hand.o create mode 100644 gnu-efi/x86_64/lib/hw.o create mode 100644 gnu-efi/x86_64/lib/init.o create mode 100644 gnu-efi/x86_64/lib/libefi.a create mode 100644 gnu-efi/x86_64/lib/lock.o create mode 100644 gnu-efi/x86_64/lib/misc.o create mode 100644 gnu-efi/x86_64/lib/print.o create mode 100644 gnu-efi/x86_64/lib/smbios.o create mode 100644 gnu-efi/x86_64/lib/sread.o create mode 100644 gnu-efi/x86_64/lib/str.o create mode 100644 gnu-efi/x86_64/lib/x86_64/callwrap.o create mode 100644 gnu-efi/x86_64/lib/x86_64/efi_stub.o create mode 100644 gnu-efi/x86_64/lib/x86_64/initplat.o create mode 100644 gnu-efi/x86_64/lib/x86_64/math.o create mode 100644 gnu-efi/x86_64/lib/x86_64/setjmp.o rename src/{quark-c => }/a20.s (100%) rename src/{quark-c => }/drivers/acpi.c (94%) rename src/{quark-c => }/drivers/acpi.h (100%) rename src/{quark-c => }/drivers/ata.c (100%) rename src/{quark-c => }/drivers/ata.h (100%) rename src/{quark-c => }/drivers/diskio.c (98%) rename src/{quark-c => }/drivers/diskio.h (100%) rename src/{quark-c => }/drivers/gfx.c (99%) rename src/{quark-c => }/drivers/gfx.h (100%) rename src/{quark-c => }/drivers/pci.c (100%) rename src/{quark-c => }/drivers/pci.h (100%) rename src/{quark-c => }/drivers/pic.c (100%) rename src/{quark-c => }/drivers/pic.h (100%) rename src/{quark-c => }/drivers/pit.c (92%) rename src/{quark-c => }/drivers/pit.h (100%) rename src/{quark-c => }/drivers/ps2.c (100%) rename src/{quark-c => }/drivers/ps2.h (100%) rename src/{quark-c => }/drivers/ps2_kbd.c (100%) rename src/{quark-c => }/drivers/ps2_kbd.h (100%) rename src/{quark-c => }/drivers/usb.c (88%) rename src/{quark-c => }/drivers/usb.h (100%) rename src/{quark-c => }/fonts/font_neutral.h (80%) rename src/{quark-c => }/gui/gui.c (99%) rename src/{quark-c => }/gui/gui.h (100%) rename src/{quark-c => }/gui/stdgui.c (100%) rename src/{quark-c => }/gui/stdgui.h (100%) rename src/{quark-c => }/images/neutron_logo.xbm (100%) rename src/{quark-c => }/images/power.xbm (100%) rename src/{quark-c => }/images/system.xbm (100%) rename src/{quark-c => }/isr_wrapper.s (75%) delete mode 100644 src/muon/1stg.asm delete mode 100644 src/muon/2stg.asm delete mode 100644 src/muon/gfx_driver.asm delete mode 100644 src/muon/nfs_driver.asm delete mode 100644 src/muon/stdlib.asm rename src/{quark-c => }/quark.c (77%) rename src/{quark-c => }/stdlib.c (94%) rename src/{quark-c => }/stdlib.h (86%) create mode 100644 src/test.c diff --git a/.gitignore b/.gitignore index e032565..58d9eb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ .git/ .vscode/ +build/ +.gitignore usb.vmdk +createusbvmdk.sh usbvmdk.sh bochsout.txt +bx_enh_dbg.ini diff --git a/README.md b/README.md index 7315a26..0d6c635 100644 --- a/README.md +++ b/README.md @@ -9,35 +9,16 @@ This project is **not** intended to do some crazy stuff like replacing the giant # Who is involved? * Me, Andrey Antonenko, the creator, maintainer and programmer * Sasha Kulichkov, booted this on his PC several times; created the logo -# What parts does this consist of? -1. First stage loader, called Muon-1 -2. Second stage loader, called Muon-2 -3. The monolithic kernel. So monolithic in fact, that all the system processes, even the graphics, are integrated. It's called Quark. -4. The font converter. Written in C# -5. The custom builder. Written in Python. # Where does it work? In theory, it should work on any modern system. Here are the minimal requirements: * CPU: Pentium 4 or later * RAM: 32 MB -* Buses: PCI, ATA -* An empty internal hard drive to boot from. You will be able to boot from external USB sticks, disk drives, floppies, etc., but -as the kernel only has ATA support right now, it woudn't be able to read any data from any drives except ATA drives or SATA -drives in ATA compatibility mode (can almost certainly be enabled in the BIOS) -* Legacy BIOS system or an UEFI system with legacy emulation mode -* A video card supporting VESA 1.2 standard (integrated CPU graphics should also work)\ +* An UEFI system. Neutron up to version 0.1.11 was a legacy BIOS system, but I had switched over to UEFI for future expanadability. \ Also, there are some detected problems: * Some very modern systems only have UEFI support, totally eliminating the legacy BIOS standard. Neutron can't be booted on those systems. # Show me the screenshots! -Okay, there you go!\ -![boot1](https://github.com/portasynthinca3/neutron/blob/master/screens/boot_1.png "boot1")\ -*Boot screen 1*\ -![boot2](https://github.com/portasynthinca3/neutron/blob/master/screens/boot_2.png "boot2")\ -*Boot screen 2*\ -![desktop](https://github.com/portasynthinca3/neutron/blob/master/screens/desktop.png "desktop")\ -*Desktop* -![shutdown](https://github.com/portasynthinca3/neutron/blob/master/screens/sdown.png "shutdown")\ -*Shutdown prompt* +They are in the `screens` directory # Okay, what do I need to be aware of? Keep in mind that the system is unstable. I am **not** responsible for **any** kind of damage. However, please tell me if you have found a bug, especially if it's dangerous enough to do any damage. That would be very nice! diff --git a/bochsrc.txt b/bochsrc.txt deleted file mode 100644 index 0f28dd8..0000000 --- a/bochsrc.txt +++ /dev/null @@ -1,55 +0,0 @@ -# configuration file generated by Bochs -plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, gameport=1, iodebug=1 -config_interface: textconfig -display_library: x -memory: host=32, guest=32 -romimage: file="/usr/share/bochs/BIOS-bochs-latest", address=0x0, options=none -vgaromimage: file="/usr/share/bochs/VGABIOS-lgpl-latest" -boot: floppy -floppy_bootsig_check: disabled=0 -floppya: type=1_44, 1_44="build/neutron.img", status=inserted, write_protected=0 -# no floppyb -ata0: enabled=0 -ata1: enabled=0 -ata2: enabled=0 -ata3: enabled=0 -optromimage1: file=none -optromimage2: file=none -optromimage3: file=none -optromimage4: file=none -optramimage1: file=none -optramimage2: file=none -optramimage3: file=none -optramimage4: file=none -pci: enabled=1, chipset=i440fx -vga: extension=vbe, update_freq=20, realtime=1 -cpu: count=1:1:1, ips=4000000, quantum=16, model=bx_generic, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0 -cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU " -cpuid: mmx=1, apic=xapic, simd=sse2, sse4a=0, misaligned_sse=0, sep=1, movbe=0, adx=0 -cpuid: aes=0, sha=0, xsave=0, xsaveopt=0, avx_f16c=0, avx_fma=0, bmi=0, xop=0, fma4=0 -cpuid: tbm=0, x86_64=1, 1g_pages=0, pcid=0, fsgsbase=0, smep=0, smap=0, mwait=1, vmx=1 -cpuid: svm=0 -print_timestamps: enabled=0 -debugger_log: - -magic_break: enabled=1 -port_e9_hack: enabled=1 -private_colormap: enabled=0 -clock: sync=none, time0=local, rtc_sync=0 -# no cmosimage -# no loader -log: - -logprefix: %t%e%d -debug: action=ignore -info: action=report -error: action=report -panic: action=ask -keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none -mouse: type=ps2, enabled=0, toggle=ctrl+mbutton -sound: waveoutdrv=alsa, waveout=none, waveindrv=alsa, wavein=none, midioutdrv=alsa, midiout=none -speaker: enabled=1, mode=sound -parport1: enabled=1, file=none -parport2: enabled=0 -com1: enabled=0 -com2: enabled=0 -com3: enabled=0 -com4: enabled=0 diff --git a/build/1stg.asm.bin b/build/1stg.asm.bin deleted file mode 100644 index 5efb1c9f687d304d2151b946421f787c6acf37da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmeyhgMqp4g5iN6gSUnU`fl_c=zGxj;>AJ+!`oZ=cb%+x(aNwRfT8bz;q479Q3l@( z-fm>t!gN-+;SWQptl@37Zg$&+uS?W+FJRcpv+HBci*SZr|7uNRDflcI^udkm0YG7y=k}J1{~_5M|gUTKj?@s9bIb!;Zcio&566 zhnWtyU+&^>zufSXp@i+l)BjGd-yb%-ZFus(^b diff --git a/build/2stg.asm.bin b/build/2stg.asm.bin deleted file mode 100644 index a1358297862a66da89b53ab8bc83668d6ecf3491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1289 zcmY*YT}&KR6h3!$Iy-1(HU-vg(!glUS`(wYRcVdp@+X)W4f~VG{-hS{?zmLS(q$G+ z^kK+6>eTJQnEs3noyGNL7DX+at9Y-wW8!MEspp_WN!|z|BV$}&xjWpo^TH-hMgxPN6yfnd?_P?xYxaV?<0=+N33DjvVr$GMlPt$q*AQrxxXp4(hcU)!0&+3FtTGN`#RwagcY z<*@=kg@@w^-*Wb#j27_tOkes^sMKN#lw#dp(r9N!G4}M9c_(a- zFYg5PA!{fY4rrcy8IbpkU4ARE)Q^FOzd!p~zMIbIK!g15CGx|)Acv~4IGX}q)mfZQ zokC6Oc7@F7q*U$!AWs@J#p@^Q_cESvFX8Nmz$;rIKayGO{}%XQ>Poe6&O@5fizpyh zrmlEZP1Ju32LoDZTt@%PzdOH9Qs5k@>fbU9`H=E`y^pkj@{gDlN05AA#3nni^n$&| z(r3eTA$u(NG$&iIQ7cI|!2!UJ~MLg-fbxjfUFnOA1(i#B2bYglXJ@~Aa)E#?vE zCKPQ>X`uWdU2EYh`#zASmTk@fdnGut&i&w|$74OF#XL3|nTOU=aC3QPMw%kFTtTB7 zM5Q_g`5K%NRE??W-yRlZq>)yvx8BVOdGTe z+o*2w38Il%!<^PPCAj2D;&9z+)FK`4&(>x8}$|Qtz89;`b>z?|1^P7q)F|Pdr6w~G`!}Q z@*)AadmY89M5Ux|gIw-fL$k^qhioyq{7Idm8#1%U{8y<%bGZ*a^XzlAhmSnp(Ae}+ zb4x?F7)>PN2{C^Bcrp=E{#_hC;#B;Fl`rdT}Q zYex2UMxt@?WIPguaNp5r;>~z(RHSvo-AChzlO0_pSDiUUNeqLkv$OQ(sQzFU9xkD) HKmqMPZR`B1 diff --git a/build/lds b/build/lds deleted file mode 100644 index c71673d..0000000 --- a/build/lds +++ /dev/null @@ -1,13 +0,0 @@ -ENTRY(main) -SECTIONS -{ - .text 0x00000F00 : - { - *(.text.main); - *(.text*); - } - .data : - { - *(.data*); - } -} \ No newline at end of file diff --git a/build/neutron.img b/build/neutron.img index e816e9aa583935356c427b83adfbca1ddc92819d..8f621d27969e33d6a187bad1426a23ff17739aef 100644 GIT binary patch literal 1474560 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs o0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U_`enSFG@v6^8f$< literal 1474560 zcmeFa3wTu3`R~8yl4Jq=er~zY0!XyL)9CG8T5=deQA&JQZq6JBu zpxKUNIn|%GzuHs#tM%BM+G+!$)ky*wv|2%Jy+GS|-(k?=4I?7+|GsPQNhaiS+Vh;} z{GW54cVK4i{jPW2K5MOaUG|#EiQSUvo&&Q&Md=^U3f=SOJ)wL0?orjBNwW_9!M5jx zt?CYGw^zC+H0#h4=2hv((?9;5@hRiWXSSY{n$MecXnG*&nx92{)1P@r`h#`Pr(4zK z(wC?XhlCvmvVS+I~6fP-Vy2(`PmQT-sA7x`z;tV6S2P~VQWee+Y>He=+= zo+Zuob(hU@tuA*plsEcZ^;NFA>x!>;RhKup)>T&4xte?sS5`=i>&q)#m5q({jdNYn zI$SqxxT&t(*W6esRcvV5=vsLBb&`l{wyR=8Mcu_dS7l4(`et9HlrP*3bvL;*f9e1K zS1Yox0`CcUXHLY&zxgWt)z2ckrNnyghP(IQ^Jex#l9c^lwFasao4VGZ zrW*fXi%9B9$v+@9FRBjRn=~t`er!SmdBUu=m=dc)-%py}n`oB|Ns#@)tX^qSn~XwQ zrO1*ry-Jy4mZo=1w@BG{O{q0Z@0c<{>fcFirrE4sWs02I^N<-yMUA#c6U&x+i>j6t z-~Hx2>hAwEtN$=$w`SKFq~-$Uwd}xxl5>a#gW< zNYb^PRZmMsNqSDQeEx7w+X>0I+0k}HGDcopUA1!6iW_f8vi)+mLF$RSlcXL&V7GMi zNyE!$)p(~>J?#X}=RPpkP;#F?T=jG!-G6JQn^~{k^R~?}MUv!cHdm<1zu#cHAhg>q zp$i?*I#CsvUMD@c;tVO>`;#M*%_2pk(aA>F@E3&H#}jJ}t-fjAqGeB61R!*_CxiC?BmlL3`)-mZxQ)*>{}(0c*5|M@fpeT@|i1EH(IiL6M;A~MYx7j z;nrwE(}ZPD+b@3i)XK=cNvl?_UeV*-JwZ~x7uESXva8y%C5!asZ~yMof*T_el!|8^ zQeTfLIsHB6?7QxiEdGc&yW`HA4fFlqoar-0R1saWq^3m?WLdHLX)MHyS%-mqUcS_R( zXSJP(Mt!qe|D02#7D%lpUCpjX4Zf5|?LKFA)zwoPOq=c5Xpjx2?C&S~Oxe*ZeWq3Z zusO0XJ21s(Qqd}k6L%Z0Q(kL*CFfj(6X>H#;Wb+w%)GH-ex$Ge`_cqMjCq1)XwRIlze`w3T>+VXk+8aeQ<~;uiOQYJO zz7nO}7Tr7R)u$hlzWOxBKXA_0MAahgc1mBpbMLC2wacDLd|Hw^oxi{C3B&62LoeIQ zQA5j$lpdw0@~+F3*DCI^W%f5)ao0Le@=eUii+o6RogV6eABl{Sf0Ez{Lr>M(s#%As z_IPub6j$wbsgk7ij+f7BbX57jk$iIc$A(v0zjpde#PYB|j2043pt4q#_oUC7{oRZ! zuDmL9PHx_OPkupeoo0bu_3PKe@K(6CRBx!Qbk)K%lX+d%T;8}*x>l-(f*9xzBlne2SM&bPD zE9i4@fAETQwvZl?AkZsD2>62uFaajO1egF5U;<2l3H(1x04unqmCe4!`Z`xhWs}cU zQ2hUFQMq6v323XVk@AQCLy~Aiscv2KhT4je{)yOKDH|zf$^T^pf{Wc||NFyv%bF-ZOB1WY1xAb1TVTdJ;U0hfVS|6$;c45i4Tq2FVVV#7Pg!jDbt$hX&9D1E zN%o&I+wSjD{;Yhhd}cY={9l1>hyBq>r0{2dbgHKKY5NP!it=^)3%B_w;JIf$yPI5I0={kbk>`cUExH}o!1Gur^2HMGRNZSe*&KYoYZ5fy0?z1&* zJ8qyo84hVX;KDfzj;=igm*H-=rtQQHw9kb@+9`11oCinOo{GzG_bg4@g&SyJ0Ee{Q zaN%48N7tT?%W!wLrk#o#XkP+{wA0|ixeSi3JrkGV?rSyeblgCDHXPEZ-onI8ysExHe5m*-BQUjR)vk& zb3JM;Qh$sG1L%#vG^00G=1S5x)J>(D2K5Das703xUs!TU{Z6{L#${B^!gbJJi2ZBD z>{gFJE9n36Ztd=qtLX0M`duIHsE3EhAhc#mw)U4Pvfs>vQimP;-3R-X{d;CZ=09q# zrpRleH9qX$!#|Mvel)tQ$g6IeMUgmb5N{{q^{PKbVJM@vp#KFSxCa7tcAh4k8uY&> zqy$C%Qy4_N8d--ClMB+XoD;0f32R1cu^|pI#+9|R-yVV zsg}Yd1E=osIZD^o^K6g=n@_`lgGA;bdORD75<}X>Mw*}Df|Mp z?wp}^u!HQ3`fwTw=y6-ZC?W;~JdVLj{TZYORTNn?h^Wt zcfNYJ>qvs_@e;RZSaiRGzliRy>eIL!jIIXHBnAswrAKxV67=s)TYbZg*Y_aFQgvqr z3G9(0fNNI^k-xT{fgno%YK^H#eM)o`d*l?cH>+qa@O}&40iWBxffRSos*~!&=##Ik#Kn*4Vr`A2K7kAWUUNBa4C>E^Zj9>vLpLT> z8M-m6TZe8ER5ZR=1c~app_?SNbm+#S77pD^P_G`kNmgeL-Aq)^AG)!sj-i_~)TE&s zSv`UNq~}^zKaSm0?c7=ARj&q@Cw}{3g-Ukki37NRJ(J#F3ojQ*4nhL6Dpjqp8b4gC zT1oa8WF{f&dB5UOWAh1e489XRm=*btI@Kj;z6qP|M(t4Vwy0b2Xag0c!wG?E}x&}MpeqmN0EFDV8z0EBi3 zFBmb{>aRX~?5l&pWl` zL_)5>Vs{#{oNhCC+{w0GfA4zFq`Yk^aa(P>Jnqyg#YnEZ3ImZc(2azfmJJ2 zVo%kbhk7EXgz-sNpM_^z@0;)qhu+5k6ee~Oj7^%9HG$j|{oYA##Ni)Eu(kgYmqLl?ZZ!+1$Rf(T(n>R1ycD2T-kNYw!Q?q$b%VUw za8D*YCjEExJ3J;g*zWVVQQpOF+m2Ul|IyR_mhbi*QQMANQ8WInZinPc*h95MH6Jw3 zy@s9?+wQ1@WKN0OY4fkfRj_@oboB8kGU*gWad@Tv`H&m#&p{gfnYavx4x`wJBt^+o z2H-jk1L5vI$P}aU90Bw1O(%|M#bh(=>X+X{qisFEP!Ouwq6f#sfr11k&*+}>S1FLVizUOn>)Nf$VYYajEtD9-S`aoDed*nxPK1YSmpLCynJ;eZTK^@s` zoon3Ipf`%dk~&f*DF-5-Df?IVXr+46Oby|c4isXI+hu!vjXR}SwEz&B5dus?S1hiP zyvpb5Z!{rH2TbGgGQ?~}3XbDlre>@}j7pe#(&xVbvg2Kb<})yT5t6FUe-Vl3o)1Uf z0ZNNH7l|gUqBIw4oo~)to2gwpBh#qs!`c@wQ+m_~v=k#UdYP%iVeqSl9idx369Y1| z%{GIx2aU`eFxvJjM(q+q=0C;N$AkA(nxN|Ap5@S{_GqQXQ}y|#8wYhh0WJg$t}xg- zrS^~y9XsT$?nkAmZ;4!3ls6;qtQPu5>CRFf1BPGbO}Eh1f+s$8w30CLd(SQfjQ~o!_E?m$==EJ)8sciFT9&WWo~e zIOIE1c{@;K@!x8Zn!i%=EDD;OuL< zntwO^TeBuf&0i`9V#c&48B^R3F)GyDtlCg=F+bDPu_CrCx}4QgKEr(@?K4m^gEJjjF7Zxl3&3=w$nO{Vs^a|x0oy-_5Y@M zq`+e$)QdFr?+JhVqvqy?w$8JagZ_7Hp(Ey?;|D?OvJM*}a@aa24;PcLBN?C0)4UwZ z&}5w*Qyw+?F0^$fwTD`g#kkO4Kvf>H`unzbBx#ZiNVKaN$8Key{Xp~md$7MC z&3K!9Omj|bozMym$@k;P?IH{PEmVy(w?X`lUUNDu8@lj~RO8ece~Z8gFSoKVW>!nfh>36`Ov4)sIAkSL?%=#TvxwYl*qC@7b&LbC9-vv zxD))J88Db3fkfMXgxb5CAKOE%Tg!Tqp7jLD_s7V8ilid<#`5jd@@=7f2h8rCK!&?V z{Tu~LI1@P!hgSRo#>5`TgUy0*&a>0}rN=)o+n4AcsPIkbfvAE+aN$UiPpGr07aS*( z{;D6f=U+zhpg&ivW9DNK6b_XlQp`2Np%U#vwVhAX?{N28+$%=)O#Rj(Zo~c+6a`*E z|8m3voa#52Xof>B3Z7$0?ai5hcQW1+qrFl=Z;kxMx;yn%bt}A+T z&iD1^T!8xvaqotE5#G~reKFptxSj#`61*?PI}P`j!JP^Ba=7Wp_AI<-UJc9mQ?|b6u8ys+O@b&#cF~kB@MXu;XV`h zS(G&=vL;j3(73C@ISye*sa;FTet(xC=m>SaYg7)H?xmayv-%MXgH@SLBbw4^hT~8g zEo3Z|Mk|~YrBO`hltu^c+)ASpPO8$F0w+yrbOl6ALF)@)&t1ZN8xAP`5{i6p7FzK2 zf`$4p+HYG=NgG-&I_4aq;49Md^&;gfqbTV3lCo*?nydV`I;7^0o~PTuuPLL-*Zwec zUI;q=KtkoO{;g+WM0j_Gx@XQk?`3MH<5ojtby&nqI+6dzGdO`J2y`XxiUQj($FQ^_z(7G__c$tDz;BX!)-8A3q-|NEU zMQe#p^}^4n0$$rLNf>e+umwu5Xp*AUdBpfd4N|eX)#G1^CYgAem)<6`iqr^#qcDq= z0-AFbDg{W37Qz|v@3I;LZnM~uy|5;{k&@$sy z3J9>Crxi+pL(dwV5~aZ2Ti`^C93_`Vk;^ONaw*K^=f^0EKfeuGbg1v68>8kj6q@d5 zVcrTS6H^g5If|F2Kpw?w*P?eLzQMP*#)R86^$pB%{CiWy-ikwgK*YU(;s zA_l%|bo>g~fK%@dJ+whfUw)$hhfI%bBEM4{q!jG9D(NMc%C5*GCz|0E{g zM-tH|kw7&1$;50DE5iHy zYo5pH*66!|rS`xAt0^&6RJ*ZVeUeI3*_4svs=rx*AQ4>Hx-zJg(BB5s?p8( zZ&_BP{^UDQz0PWqgSm#lb#~KIb8wl}zt<6Mc4#^%+w>GzC|C@PAJJyXtKK>dVU}A> zQvwB+OKEuM>gu0n*ne;!=rI~#Lac%1c2k)-P+)~`s?yt~PBR=6zE(0Yh@(cr76htM z?3<|vrV4ib&!eRW@~y~rzXvr2h9h%En-|hx&i-+(D5&l60*f}k!BJ3*E=U=Udt_)T z7qw6ay-~8CQut9zZy8J@6@*Z;{pVBe>g@h)lEHTsK8>~=GKn^sN5+6$3c#gE!wY&8 z{v9;fK)xBJ8>LdP(L%d2S}4jKs^)Ah;mExNBHw;mAxCAS)S_zR_&k3O%2(@7hdeb< zW)&mzD8;3<7@9HC6%~R^-$4P#)Et5{5dg!eWb9)|NWkBnDAJ(5f;7{EC8?*hrWdHQ z1{Wuo(6W#pkw-l-6!aV<78eO($OtY<#MVTbAVmd;iwOIn!No~KF%7mO#IzML5$k63 zc+H}xsB6x^(mL$B1sU|Y(~l?Gn_;<9!~prUnX+Br#A+%~=P)6Q`M9tLOU>xq;e9Sl z7^BTjoHzC=->6Ma(sf|9`HU9K8q6`HnWY8_(6^je#Nj4QbR7f%OJQmea4rR0>ImH6 zM7s=>!5CBT(qlbuG*6fA`CHBN89aqV(t}}R-tS-!FtF4b%rypXum_8c6!B&}9f>xl zh#a?Q4d{5H(bgWKD3&@*q<&miM;W_B8E-; z?EI$>#``iJkWvev{n?oQ$h;5f|3ufH7pFfm-$VMFbbZ>#(l_ze_tV&O<`w|P7(yeL zK8_fDlV~)twI4wt^?j_sZT9w8n-hB%IHkzZ08P7cv~dNEho&sJCrgcGF9fKcwP=F@ zL%53;H-Sk&GH4=VUA0oPFW4=atSymRGo|JV0ao8>h1dGl?M|t=v}1wOzugSJb;v%p zD&3SK5^|yYiAT5LkVps{Y9isu=!>b;tOE4Z_AOO7aAJz~3QrFdqy)-b znAIs|PFNRP`+bPW|NIJS*|zql@HuA}-Pqdck#y_xVujm$?jRbUEgULC?V{SyeV_s( zV=Ax)3y;IF1Xmct`$PfrrSLvcH>LE{jM}?yBr0Ko{d--gWCwaW#YXF7ifzY1#5QUZ zaz;19RM^p$M5n(1Q7BElfEE-15B8_77 z*0cGXW}2zmj#51cCKxib`n%MQn6y@YDO$UP5-5|DTyuX&RB^0C?Fv%Xy!Cpwn;quY~2X-&#?Aww7GY{FDLgo}Q+Z}6> zmb!0HgqZr5Q1S)zfJKV@M!kP93QXxE&xY?5l?=cBi=Zb4hf`uW!6!xs8W1cfmo_wD zKpCYX#YmxdWn}1wPQ5a1?O$TPptX!%$)N0_b*q>|pk0=!d03`UH=K%eu~(~nZRF^{*Iv^(@d{_mrUdP(Ww}&9`4IB5i&n@=g`n5grXk z*25K*1lIw)$O~lw+p&PBJvN{OFjR^Cn`nbQHnPGMt2!kjsu8U>k}on~!oCGEP~}Go z26Sk15Z@m2!7+!r`i!O>lw-y0_P1Ej;U33L!0etQGN#$ZaIcmFOo`2VXsD;udtB5c z@zf;RjyhO)N9g>Kk?G4;jaHRJe76nC)0`mWNu zh7|PL@Kk8wfvywc8I?Szd;51<|ESrY$w9}f0f8cD-l>QfV{4a~nG3v2my~Vo*HQ+5NwLxy29d#gDT7!T+=kdMg;ft091vrxh#5y>DC&R(QPX*t z>&K2-9Amkatkh9Fy`upwiY%-ZuGltE_nn8tUq<5UGq}>Sho?3je#)GG?^ZE$@AXrD z2=;kYxL~dOqEa2AIuR9!je{EO(RL_R26PNCydDE zB62-Y6$1TqFwisqTA)eJ)2LhqG`yDi<+<+$oBT;@A%|}D23Y7XtJxibL%|W9h ztVL8=t!NjhEE+x6Q;gQX!5FNhE90nfzX3ZEUrpo1?H-DI9mV*6`}!k{m@Rf@c3k7yoY9J zEGj)nZVSH(zdus@6Ezdb5AUl+t5CX4rRV|`xU_YyGu2jLmIBM?-eI1u|Ne)THU3r$!ZBL8&mu8^!+ zjiE+6npbm1&D7=UB@vuKsHJ_Y)Zmjj&%nTzs?Wjf0*M1Ktu*zZ=K@a)Xk7>U_uvtf zumT#FGL)L88}_1Q%hjb=HHibY92SD;8+piU`EPv)qu#5dUjFnlDTm6Tu_Hw z0EgT~y1P_&i*&b4cUS4|4Z6EdcdK+4t&3)H9(NrT$E9vTqr)t*#?YlYXgESM3Sn?3 zn;7)DFDX;sJfz!2(f9O|Hy$|}mX_qXn(@@TseD~6o`F}o*4+}$vAXbmi*SyezH)&l zU`WCOAQclevVR$>?cqb9qS9+`BkszRyE#g zl52gcPc)^YNS2Vc=FPWhk{tCWKaDd5JTfcK zZ&C#fR1%9s(7h6!Ug-{p8mOY|gcf6<>e8jPLW)sS%vpMAfzbb3iYm7fORQ@cS3Vg}rspbGT@=-IsF~p18Hr+5!*w zWz*)J3S|I?W45|&@KFY`Otw4!jBKO-&Gc0ID&fvv@7quZ_sW~_+b(eDHu^UB;AU^A zuWN#v=fanl;1=YTM~;>Q&#taI1Ik zxn=6tZvcCSTm78o3g7xaKqe2U^s5YeEr5AD>HyG@?e-sF)CcXLzZ%xktM)*jCNXH8 zh^QNsjI&p`~;~lUxqf7j>9~uUjMs>B0773uV_3e za_NffiH)R3|3axhxE`^U;3!{bw_e3vB3%QeYioZSIcaTitni(&o3?jibA4#j0D#tn z_T*JBNBOkY5}@+7Wr|+~(axMi{v@>MiJ?Lz7Wx zW_i_AFh^Wi0Vnu-U6F$U-!)F24wE42<4o^THaf^evX0Ar%Innd3dqOH29kVMra z>b@HyeEq>UAsp(^e8Zu3?Ls_d48BfyuMxq8{45DyoWWzpv&?X9ySl?&6suyu7f!-m zl%_Jt_INi|*k1KIbbIRN6tMyugJTEuEZVGQib&OR$|hw1^ZG1gAY>y`*W<=q|E`K7-J`6S4;DsSzcy?+LxX{D1JP_%y%DXNTKC;TH;Z&J1yE@tO4yrlx5(J! za9GRO*>hgpY*8{ga8w}j9=eEjs^G&fkW%>6T7<@?fo&IBxVjBd=%H~+$M*PKpd)+E zfo;<JfOJ%*$w=3BE(FYS8%jx zSDL%H6wB1V0tO0;xa8u}qUCBY?rpm;jAOzg6jmVLP{8TZIk?9edMXDVRL2f((4poQ z%v%zEcq3XF>>pB0Bg=tnJ93bT6tif@2IxG*M*a3AnkCpNpY_wJ3*^kxb;RitTQGXP z;2f;&@pF~8am1Mp5K_prdxKsBD!0o2b<&o3%7Gc5%{j5{C=D{E*G?SoHu!cyHK!}$ z^gV_P%UBWRAfm`0M2rV!9Gf$+HA(plJ5*+|Lv<;#j4c$$wy7vU2E-XS0O=I$JJz^O z*i7;CZx!Wt#+Bc#w!k(d{E!9#Dl?t6!Q>8UWPwEv?y1~XxP@?2)Ne7J!G#0SIq^0N zlM-2D>r6?cRIswbAeLyrg38vJHU)*TpI(?3Aw-Sct3*1^Rlez1gG|@V4+P*P|p^ZnZ?q zDCQNSt6?OtJ#IwY?x4?p!uA~S1U)(58bVaMUXOdC6e&j`({UWz=L$NmvUPR^(%j*F zT8qU%e*j_4z>=<{-Hu$gq9QM~b@seAfCKWq;{`}VfXK@j>?hJ-KQUp8i-!4$NX%*& zz!wt2-DF`*;HFhpgWf8_WAI(fH9fl{c|% zi*Yo8&c51g&mG80ZvIOk!|e}SBJcUdaY4->P{%=>&aeUPSPJKwY0gdiaM~AC#CAf& zDFpsri*n-Xb8a&#=UjcW`8JbsvpIMxC2|%ea$c6v=g3O-y$;ix7qxi*X~n*=Z}<4Nur-bj{2WYuXKpBx~3AVa|irG+n})XgcJ`_|Pse2yVIi+C<0Zae;XrO2V=ttsP8t`$V z4QfVytJ^)Nd+XVA{~f7e6Yf2oN-(ViWCq)q0m>a>?= zEP7=n+Rt+AXDeaRN+Rh>x9#!22CWaw=ngs_7@7f?47g&~2@@gBIkx3BtwFe& zl4zzb(PocT^hKI`IMiqVL`l>liEt>0UW+GW&57uAm`2bhCm3Q`{8J1OXpna0Gt<3? z5eYh7I7H+8)%K>#MAieE949<5+|UjQ_B(9|Wq4B4cd3(5fXE}5$d;++p%Kl{J?xR^ z)%~cW1a(C$3uKmXSY7=ci4O{KAJXcjZMHvPL!+(xj}X$t+T7J=ZVNpGPa1eECY?*|%AR_p#&_s_r?Fqy)1xK^rF)JP$9ohhHdy#sL z$SBHMg9TfnSEWbMsOsuj_+}~1rXe~PB3tKFTW17Ky~bRs{#F=R3uV!4c%x&1+%@2! zBhU+MHO5l)`|#~eO7C4@z}q;pcY!G#o;WJrvB2EB07o$te=2INe&d6l||-2p+#9_!Sj73&#D}tm9f<==D}7q{RN`ehy5HhHn(!@ zqLWl=)RGGbCmf)wl&*ItYFAGDJl})^v^mh~tscO(llmicaG2YZbo~IXl~4Wez#XSC&apf5cl#MA z9nA%#{=4DVw)Z!<6gCjk7c+i(b~k-%yJzMK)CA~LeU+DPD3e}`?swtf4Gk@y-~*2Bt{sXr3^`4DWH|4$EL%+mY31smZ7 zur!B?VKM0O=~J-rNCi87lA4Y%!GZ)j$%(H3ya*rc822JS$0>q6xJN0n9P~2_Ct6QL zZ1;7yA8fuNYlAMhUlYtyzP5DvW@lyL7F#<#w)^M{6G@`_Bi7xN62>?xR&2Bp8x4_9 z#VS2=L@QRRn!S&heu9l0%mQg@PE&I1nP9J=Ox=UJ!h8U?nA3HAVD`T(3Ry_iyO#=i zTcT}O6!WD{wRE}q3QTXTkk>*bSU@XRvKfvd;-EeTgmk9n0>nX0QA0qGPwOi$gt@B7J0zaY4=pNv%Q+id?C_GBz73edZ;*wC=R-pJ!#7%Y&+Dr zkm+-TCU!!EK+Ac8kl7=LsNdPub4Az}y+DEO0wj1A{P$4XQa*j{-3bTuT7bt(Fe93s z*FyGT&~NM6ITZ2`6b3_n_3HWEBJ8V02)lDItU3q1FJUD@`CGk6#^B#sLaFJ4R6s;} zwHB$fCZlG)T7s|-oP!)bKx0+^hHi_mFMoyZMBgY^F-b*Ht-6&7Aj-Dh|3PtLd8*`|9*uNL-8kVV@ds}+3`58M%!AS3KM!p9!z z2AJrRSk2%Y0i>YXwRp0OTWCTlhDMmF@IGQ*8V*w}ED!gJSguq%5ep2@caTQu^5~W7 zBicPyvD*FpS}OGTVB+yEi*NezE|;(T3<(Lr%4f_-I*y$KyKfZ?tTiT0HzeUUJ&?ZR z_$^E6pcR@jHZ;Wja_wHkr@V;GZ}?<(*p>bMKHC1s>M-^%K-?&=7JcNW!p`Cbu|^(M zkN4y2*S(F8s~_V6huX+PNs9bbJ*Ig)qJA{!kpYkUh1vP}bJVtq7t^ZbT;Rjmt8ljy z7gZDSMfi{x$22slS51ep4u|Zx6&vOFmR|ylfv{=eZY}KOaF-Sq`!K-Vh~(bC785VpFTl4xZCYEs7?G3O$JCfl!3*v8JrNWQ2&)Wjze?wU+9OO=sy}*fPy`2eRj6`jY+KhR8=^Hh{LI zH}g!@E3zRW8+eo=%tQ+|xK!HGL1%S@QHrfz()snsKp@H z)?+H9#xIGA{oW^Hj64pA>K#ZH<0XwD>aE)KF}kkPuEiGOI$XyM8%|XcQ9iK%eSkLk zvDrWdu=-;Pcm*kcXrS3~$Pj|1oX{&CiPCOSpLqhNqQ_{$FN-)ei@!O2=B$~sW=UoG z@2%6%ue&xh;UTP)ot^E{f3bb$%$csNtSli~ShvBqp}cm(t@NAi-r~z=5Bks(UV6F< z@qAit(o(Z&(05q4-1**xgFf@?>#8=~)Z9oR7nBakJ@|R}^MzJXWmBb3#Js7#8NUjT zzyE>1;V~@6_4T#*t@x(()s>qnrQF)u`t{{nfXYqvjkma};JIZ(T}AztCW+G6fKs@` z@6Q)kH~S#2la^Ow!?L2@bxVD-YfE{Z&*iJf?L4Wda$SABPb$8p$yd1vKUZH~cN20T z?pz{O?I-Lj^_%Oim9m=aHr63ZNGd9`rTN~{%WkTyt87H3@#jif)>k(8@U&aXuWQ~! z!qbRJE>~)PAqcLoufw^L+SzjTQLgBxq$r4Tm1~SBgLSf<}e|0iyP$*l(J88|!P( z!e+W=r_Y*`=E|+Z&hjmAd}t_j8|$Ugx~ArahI;zbF!YB5>hMQoDqA+7+EAGy<}_E+ z#tjV(050JV3ZRXo&Tv(gF%xu6LhvbeHN{Jn$9I-D7z_OWSGd0j=5 zE7eyGgqt?pREpX9z|`z4d5 z=~FBjv!yE+E=-4|#6u)Wa=P={u(6oucH*ZXj2O=(izVA)!DyKyuIW;uOKGh$5ue$) zx!IDGx1B`mmMtuhqziHvUI`m*v4Gfh3m49kq^w2snLFzY#E-P#Td;7(R0MG2E#c<} z@Ul2A$b|qeXkOqzD#m3KkU&=6sx^{y+oVaifxifg6feNFNEZ@>+CE_d#>VX2WjEtm zq??<&9rD~< zSePzJ>4k-WjZbK1mXvrzx=5?Aq$CSE7E1$|+=`%5&Rhz+-JS{^{A|#cUSwfT0;*u>!rEoUP&$F=yqtaxINqQGyA# zQ!9Xk?1=n3CA)==Bx4vwS{udQn@f!UYsj?^X0`$%-fB-Y zHn-SK#%7-jDuknP2`NjV7w%e*rZjMwi&lM?x_g@3~DqtQIw|4w3k2eI~> zo0EHxQZGs#rjiT&2cds9^s7eEH?ABW09{pj3HnQ*kFVK@^yA}4qcv^>-?&snImn9M zgD{gQ3|>?=2V?=rVr3&)DrDb-3`vL=rI!WS2FPaVZD)9TIi`yZ!xN;w(SR^jPwFQ@ zV~q0eF!{~KTatTndvl2v%1>!N2;I-1OVQH{rbBuHvVTD4B7x{zH;B%Zh1-|l_a6L4 z^w*S9QR55H#$;!nXaI|3`~0D*)r`9p1@1%mIeOfBc~&M5Rg0*X4Cs9dy~4pfpnu;e zJ3O*8Hx_xZ-pi>R70{pXR5WTKeY{B40@=5SW1^5~vb!Ps0y3N-6fe?y2(lxP!R!yp zo`US~X<_$6_8MeKx*oAQ3|TK^lSu|vcN)EDTv}QKaG!-=EG-vQtms$2hitm8?>837 z)_mCxiR{(hWg6z{^c}2c3K!p z>j1+15MfZg;zhFeA?r9zHUL=*WTLM?hwQ5rjpt{O(GL`BY*7a*WtZu@22r3qst$ed zqA@ND`tNl{qp-w6f0VIf%{qDQD!C+AUf~e~M}xc~PhOKJuPu_j#+H#bUyQr=A>Ide zMWg>fw3Lq#@fzPaZK%-3-Iow9dv`SYQ$5_EEl)E(5Z~9=!hZm|zk_a2*Bz0@d^v52 zoPLY!&XrR=Vz@7p-5zo6k<&eLMy{NhCue!&oWfCxAyFD@(Ba=k8jt+zY1IEaX=Eba z5Yk9_IvQQ0ry=^y64_NF%#lY<@yITZC`6u|hK$E%9~2g+Ql%_}Ej=yl`hOv8Cce>J zim>ZX3w!hbBy1}5eF(c1VKH$XY-jdmvZFwD7U+YnXk}~At{#GJ8+1RSPCZ&%!2ATJ zf~FMn<&yca$p_{P^GBUh7#|dKl6c*f^5Xf!Lob#KwW$Z@Hn+)M%xVxZ8n8#qd~O<{ zk9iJah@T*hj1xJkj|D_`7@SAlD0}9M;_UYLT42S|kTyUM#tPOL(K4nJZ`IQg2O19+30XqFVkh3#AsI%Ct(-Z0uRn zQ(EFS+&1UbBoDXExf3zhqegXFJ3&PlE5!6VA6GU1Qx$xT72_|`egqrT^jn-`)tRwf zn5Vp0eGGEkC}++W#OKHHT`Z>?7t5I*Vb9{L6pT%FLyVnA_ITpx-xvd0C}$MJbijAT zCiOij@LtHuF7&>{n4#k}(Ka6-Dh0bsAenP}ubz0ol>0x5|87<6OgegQi zg~&(MNEW%sia%k8@ecEyrt6?eSzaKD(vB>27z*?(7UDXV-E}DT|B4^sDMmc;cy5ft znTsOlo>pYa{=cJ7^QjDcOxYWao<;2fFOn7F<7~*{*HLRAb3hh97i)mb94Di7V>@JD z;IZ9UdjJo^|Klxa!#n;N-rE=y1VLRZ}D5vMi8TrC| zU@`?0GdP~WtmMV47_9XIxe%iY2Ks!_*D;S2I}xYrEQr&|*L6nhEl6~z_$2cGbL8JM zwmoX7mRs`Wt@&tKxoDNSXf1hq3tps&^B`WJi>VLi$MqTNi;Lx!1@czv28gFzZpf2; z`EpCHywwAdM~^es@(ce}WwHjS(uP9WmnXM)w5%XB;-$PAA;hJg>Z-U@NfavyrK*_~ ziX>0ong>rRPl4VkV&%!#I}w%V+L7((B&xsgOiB7N9`3h|-4 zHjYTLdU#c1j7Lj>fiDqjD{QnuCqEVngPJyYYdSam3p&Nab3Y=l3gy=dgI0{wJ6IZt zR}Ma1kQG37D@jh9=QIvq6R#J0AGxx7p;#pqh}Cc_f>j`nt%!sEBGOoPqGi-M=E7LB zz{Jffr!R}$id9$o4PwTk&FR+58J?I8f!)C3tWaN^rHi^yk%u#IY6{I%yr{en&Qj>q=sJUIPdip8wC$wr42`y( zDDu~V@GS@*+oy0Lo(CcO9%Ms%DA;FOm#n3lJ5lU4hoI9Ao!FjN{5*6^+-6?};-kN+ z^&ik(s^@XUn%7t`VqIMbUHZdSzec#yvBJ%lQ#ZnX&w zVyw7~-Vu4Ih3=yW_d3E=j};DE6>DV|S|8Tyxnk|ESsBdwm&6+8NUu@*0*$FoC-xJO z9_^2h(Pq<(UyQT{6t)Cm>CEH{W9K!~_{Y)1?nK!0aC-BtvBSEJFOLkn82T?E>>h+& zHFj9%nz$VSU@DZIYez>bGuDi#s}AUv&_sq#GLAK_7RWDQR)4_Q zD2I&36Y^dRSNn|%AY2IHVqE9qIv3Xsaef}$7smNj#$7LwUq>8o;(ZwJKInyzb{ewL zhrHZ^Lz^Xf8RGi~Hk^m;xl>!WpDRf}fqtc~KcbIdBfU1($nXs4TG@r2-_svmXwQJw zAg)ftrRZ@D+633idY+1~T$LTLPAm0CS)`kS4c$bX zCMEken(pau4z%%80xX3l*~8Q~q#GFKQbnA^R`Ls!1@!V!rIWRZhv5 zUFAcSB=)G&Fu1=B{pGqojRVdWp;{8#7wv;z3G^o5`yWq_#RBagYqSFxi9?23c`rus z{TRhx!ux<>5oCp@$rj76L+4HSAI7^6YrYWfhlj&DSQB^<5&97(o?4{&xUSLtC}H#? zBrueq7m<}ie(h;;%G^z3GR{0tlKze|#*e3qA^TgLEFCP?LUtIkD|BXqeZam_fWwCQ zf;h|)wYB^7cnU^@!6qRrR=%+3C9y|2abqf;!6D4+2>%|^d_xaEN*_)umD5+ssS8DK z^WoXp(oyFh$P40d;{jsLD_Eb6RiD^Uxn9n}7SmGEGMCGl1!D4XZR`TA7t;~6-s@sh zma^DIT*FRBJfelCFBan{wqvkx8g+;g`Fa-liXdOFj$O_y?0l?>O?C^#g@}?eh^Z|k zxX>ipgg9Pjq+~>>5tfhoT*)-7DGx-WSL^wreqt|;JwniTpy{b6^&dQrLsuJo9=j7^ z-3U8Z4?EaiQkKasJVVEhHXcI^t8y_`?MJxj2zQ#T!mI${koIWd$Sz1ONxB5#Xvm^h z4&DxzBwY^Ki1z1PCQ@G{_NhfSXu}#83*(!xus16Z$1KDVv(dPfYVnZ)8O)BbH)0-% zz53XmJlXD@(76;kB5%O97|-2E{wU-ZLT<&i1bHFk)W1TIpAGrtB#*aYczUH5dQp7l zXe{^wVJ0KYg?boKKgBv&{rL{XopL_r%>PE*h*t6OdK^`73;0D}Au@UKBy^qkG7A+r} zlGxlt9~B)3BfoYr%opPoGz*00f>BM%d^ux*SXm-EbaO0JFw7&y_-iDSfowf^0ont; zw_A^E%A@En<@9LM<%QWCTnL~S;jjW8^q?0}y}gcbVT2pj|CYy4<`41J>zdk{1&!g) z2m>tQMg2GhvO|z9BFV6}g*l`4lvF!Pv2fUQM$9u-AZ&kJ9^&U+&2iJN5Tb5}?f`V@ zEW#Ldu^7(_2Tz%R+_iEc_Ib1&VC)ZT7kHF{ImMuSsd(%GW$X~+`NyaiH|bu5IKQ$; z_FgCF+$=7z!@MRIYV@-y#;;jHHpF|Nn)@#U8B_?K*{2m#_66?h|)yY7lX?P-?hjuUYXKba!!AxYh`Uf zB%{1UamOsMDDIdA7R4R2z*=!76nc~b>&2z-wm7w14MfR3IgdW|;>HzNY=5g_h@zd=8a1`Tmx`Zy4o!i#Db ziWF8Wa37L68S|yuMIz*@75EskIIvw0OSRjIJi=EiF!>&f`BLq+0vddAg&H2fMa);! zZp>HIF!}aHwU|ZiwnmX92t|PhrfI&^tJWf?hCA__=?7iuu0@AQGo}2 zO`>*1Sex*r0_(mf!A}$y>7LSjsldAL01_6(h40B}A}keH_dNy%T4QdF4$Kq2RAAjV zgmP$ow>5ffyYTHpMs#1~)TH%Y_(p{<6>OxmugV7y6y1o+b#(l2z!jeQgQY6 ztoiCK2PwfdIqYrcA`Lpy^n6&IP&`UAx*3XGVAuV}I4E9@M6MSN)v$9y%hYu1&IyZWFP^<~Lb|nO>dpzRq6@=18Gd-q z56`)K*4?x2D5rmkYpv8H{j#lw6HT>AT*^s{!Qc+)Sbt;PHQ)N5vW z)28I6#`TwPYOb%ld{&e1rs0y=G0DvJLhWY!hWEzH)?Y5%(_|Z(8gJavSl-Z3**LRl zn0EQ>^wT6wzKYrn>kz>(y_=dhT#ol?@sbq!n#VAG@e3`DO_x_}z>l=lpB60UiC754azLez6)P5|Vg2cui20QJ%Et<`Vf~mszOj6oW{=@hzP@3sEHpIDzH#Ha3Iv?F zzOj5ueX}olUGs+83cXU+ZKzA0S=Ds9EL)T@xvsLA{_@n!IuRsWbN)}YHcp2LFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO z1egF5U;_VNJ9I1n0000m$lrPrI}0HL1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM S7%*VKfB^#r3>YwA;28+;$bD)6 diff --git a/build/obj/a20.s.o b/build/obj/a20.s.o deleted file mode 100644 index dc8ad5891930763195e9f7115b3f62e763615df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmb<-^>JflWMqH=Mh0dE1doBi0m?A}E6`wIXJBJU3wU7-1 zBmkupKq41`BH}IjQkLDFz0;;>z5T z#3UeHQUswhV62kViV_CBl*E!m2EC->VkDFCGo^vjprB-fDg%XQ0F(`)SfFf0APrIn z3Mde0flzP~BnJZOK+FNegw%o5BZnBsyaFI*1!9m}K=uj%F((ki%mOkQz5uZThyevK Udj)}fWOX7y2_2XsAPrLo0GJa%Bme*a diff --git a/build/obj/acpi.c.o b/build/obj/acpi.c.o deleted file mode 100644 index d416b372eb83ff2607272a2b37ffd0b09e982e8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5068 zcma)9ZEREL6+Zp|922fh7TPe<&7sx?rFaPimQYm1Z8$;*&SGo+=Hqlt2;DX==D1{L{ETh>-xF_nUYwcT*Vpa~_3!h^?qpnxhezYj#FN9mU|VRnbYwEA%nlzcLcU~5 z^9`kP$><_!JgX~?!!0VEa5A->!S?=7`n2~!y2wZE+olR9^JR09NGzKj%8ibm@Wsts zVo}+T)jKV#zbvB2yd!_z_T0UN1&@q1K!4OVt)D??zquXQ;~P`&=dU^s9hrrT$ovNf z_V*PI`@IFtUt4H%PIuq9GG{Mt%bVFX)6VbF%F*U8Jkipux%02t=HJtI?$8l+7Mi|T zGRm!qCBuWGF<&H=NQ9HotZ#!hf+Z#5!y}qc3m=R5!oIPQ_-JgS3}C|i?Pg2vMv}Uu zoT&C}A??LkmU5q%@k~r$N*rkAvZk(0Ldmrj#y7y{fEk89XCR&)^B20D`CIdbm9sG>5bUPF+gY-rM}y<9-N{I}Z0Gx^R^DS0okP2{gWii`2}*`0?y zlbz@Ur%pO+Jd-;?c`kP@yYkWU{7uJn`|=g1n%$m>DL4#yE_<*1(`}Ub)avPw?bNu< zt&KxrzjD)U^o}WeVW6>?%#_!2VPIR4K0|t|Nf!oMO_RbvyGg?0Yb6W49EM&O@fAfN zZ8G-~N(RM0mqMP?A^Uv3xQo|x^ao@q8*i=s&;7U0^X)r~@M&9ke(pNV3ibY3>1u1+ z;oC4Um`iFoUrS(1plNeUPUp64Eb_iBjZH00jg8GBP9#u`fzy+&CkF(LZiX^$cr6CO z_RK!9ebZ%ISM7A3fr9F1O+e&MMB}N=WxB_3etU zTk$r+wBPW1+~Vgwpw#cuEjpCC4ujVHMZBBf8R zPYfHXZba@;LVK0gZ|Fpi(t6nR>UJx&Se+LsS0iOt@ETWX|Ijql_wNm34LsMSz+57A zPWfQLYUALIuz*9~h_b+;-ykc`n^XpetSB>}98y)myDRvW75u6SUa8=Xj|M~P5PmI` z!6Bb1GoT!$TU``8WR18MS-6EWma}wA4S4;Y>2_{;5cs4{^WoNOVV#BNJ#Dh^UjV(= z!fyf{v+%5oGAObQjNVLiVdefXn=^OCpwt zB+>#}Qzm6LB??h)O!HsahQ2F|UzTHWF7$ zX2yDqY@+dODRU;Sj=~VYj${9v;O3wjKhHA}+2j-aKL9s~e35v)NF%WGVUg|R{UUpa zeIombVK)R!ePuj^7AJ~$3o(K%2j+ZyZ*snkz*U%3kN=41{e*gUD(d+jtwPx{ALnKf zh{O&j#4_h;a_biP7{<5;x#8k{I!S4$M4$ zW#D%xhy8oxk;h%~u)~yM$Dti0#^HR27_Xfl6QhyeAa)n`!Hz@w6Y{mMf-sOhkZd8%g(po}+Oo|~nUsC{WVR6uM zZ592?rM1Wpon*0}UUNm4rCUaTzfQ3v7KES5SODL7o3mOta?Id|les`TlS;=j+KFQ9 z*oZom2`6F_7|x_}X>8U13lC#&S$`(rxb=F#wG_RMfZ2=rzJ#e>OF*)d4+~I7Xuu$i zR{#P`kAIpSuG1&x<$KcvbKXZG;5R_4p*V$KDc%|{1Q*T zr%W*8wL@TycMkD>-_;}`k3+Vf>~<4zcB2~{MZvr8Y(>=iq0(FEr4AQ(0gdy0Wg_VFhj=Kgn6)*7c zEnvoDujM%!)5?pmtGC#hIjn^peN4OauzTAK0=a3&Zy4)(58`FQ{~oRvuYl5et+61M qGf3iT6am`4JY?8;ff>uJ4UlpR{gD0L1e0X#TJ6qaUhDUgY4=}=VZQDF diff --git a/build/obj/ata.c.o b/build/obj/ata.c.o deleted file mode 100644 index c81c7922e2b2a2e0341fc1f1ba68fc6b3ac1325d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3572 zcma)8Urbw77(cWZs8~ryD0<>Gks{G6pVzi@h@|3H-+5|*l3&fc4JEB zX18gx@L+-_CMNE|hrRf=Fdp^*qhlI1#s{+)H6hU@M9{F8MHeG}zjN=QcZEg2E2Te*`jDhCg5 za`McOSC478s(7xgjVS|yyQKuN9V>!sjG5wm(N9tO2a&v1D9_y#$=?iyJTpeH!8G&C z{5b!MlK<**p*bi+6c(rARixZi@mShouyi_mEX)`)tkpMYdRT>P+dC^;KsXI34D=uRV?r!R(bt4#?Uvl+~ zpyNcce6c~4=~7*A;Zj3zfpxUCy&9# zqA0kVRwb>D?tVtao`VcG;HL$scxykam~>U_ax2RFq`*6<6B@=Iw=iU(G8y=oC3_h- z%3T*7QSQz=+qm}tuWRRlPVVjC?&tz{MHe|G4wKo0Q$6!iRW7<1O7h9OaQg-V*2G7>~RziEiG~DO7uTOH2?0 zk|0&9kaY4;noyflLAr+&ZIeTiJWGqNqS8CZN zIjNX~2GMiS?_{hIJY6g11bB3qgN6}02XUSPzk@Lqm@ciIFzoh$CqE55f$9H;o9rF*Ts{M)IfS1?2cCQFYzR0z~k zE0lP%A=He1q9n7m#)Asmr9Y_HxcLXgrQ0@xZ{27Q*QJ>{oEjh3lXRG5%FtE%UD};B z62r$W{#Y`nrZcIuo-s}{ky{_pj%E_$I#Z8jQn@sh>HoqrR9E@N;e&fYPoVFpEyM)G zd@Z*_e@MGJn;qr@h1{5oF{14N9pG77pykAUnB5CxgFOFb*I>ny6B+R^vn0s8*f(ft zH%RnWc0FZwW5i?TNs#fnNPxe~5leBNdYRf?)DQbc?SL`o?0GS_FassXcsdE}@jjt= zA(G)f@arMty-Tz`-W}p^(~=f$Fmw`Rye~;$xBKBCb~qpGPz%7%WVhQS#TPoPKP)VS z^r?}JV+mjb_=gsi0{`~}xXBKEEJ5ydJ2}8d+SQX?Q3fHowA)59dtD}}E)mkBE;Keb v>SB*YVzx>F@Lv`^gFZw&FD=BfZ~Z4~*efKHAh&?GYqz^jd7qa`(n<1PlSO*z diff --git a/build/obj/cbuild.o b/build/obj/cbuild.o deleted file mode 100755 index fe0ec8cb473e530cad881a432e655cf6fa3aa638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46468 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 H?O)vwCF-}F diff --git a/build/obj/diskio.c.o b/build/obj/diskio.c.o deleted file mode 100644 index b9da7d60729356dd9c8a64486f82648bb1a71c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3688 zcma)8Z){sv6~8acpPTVH; zoBdLpsR&o@))+6^29>BLg!q7j_)rNA$tx2YZIdPirfK^C5-=t-7;0&SGNg%qfSTWV zzIT3eHo=ju&-tBm?m6e)dwlQv*6`Sfq9{y~!c^8kjNNIiTY6m9$?jntu6;M~R3^V@ z+u59B&4jbLa3-7CZxzyc$I3Y2nOypmwJ)4MnYQh8W|mDocI;^BcHzdqYqi>$)fUX2 zW7`>XartVcMB&T94NYgkE!xsr@Rwv?kLsM=ya=gu+h3nji=0qSu&HBioYGqO=j2zu zvmDg}f$C|UFOTW`Ryt6f)cKWnwE7%1SiTdeUS81#uKZc8{LGzkO*PhsnWAp5jOo5| zObb*oaXID-RKI-{+p!#Lue`Jlp=|prFa6pTg2h)}g-{HfALuA;C`A;f6p>Or^}JgE zrvd`7l<)Mbfpf1T&qh=?qLyQUcPE{62K>Nm*iL}=<(#ww{)KcllLsFRXER~&5p&Wc z{s?U-_+cyT#+jh9fsYCP72+u#IKv{>}dD zldCvjH(dR6v5$KL)uEvFqJZflKgAFMI#u+s=+lIB<6B zH?EgbbM(DpTZ6Asiqx6AHRT&QF|RZ5^4*o_A@r&bp8c}k;M13#ZKd__tv4&qp}pnJ zD>rujYrTfJj#|2`R3;CFPB2>DgeScJnCx~aqcZ0u%6ao4oWv!Sq%M-Ez?%<1s)Y1a zHaaxa7w(*zUd%X);e$rE(Y62JqKmpeU&rC@NY}xxNTe6@Gz>q+HjL53Qw;lanRFDh z9fL@DYJw@JeagLlO>e&)ba6ajucwAR%PybnD-3w-a+1P@_}(4IU-?{55#!nIPZY@Usm$j=_?xqxO?X!mrWd3^Dho6KB-LGEL#47kOgu$GNnP3?mGK6EM6Z~PNPXFc z*XCZ2M_bEo*5$#}E2B;LFfi>cjXmt2wJ$f}Cx9i<{EP(Pgikf$Z#Ll#srw8P@@Lhk`%)^g%@ zGVaVRW=mnA-)dpI~e+u!c)34E|sTV}`&7 z2;allQNf=e{U;eaC-95J;eQ5utRcvA#6QK@_lSR*v5UmfNLRpjqUAP(o_d7xQ;$;q z`$e2S;>hw!3FZm0y zqk-Naj%4kquLXa_3&g27BfqrZB&NZgT%FHJ$*~F!GiGqC%$UySnUTv9AkQwN2hf@~ z$j1-|;&#%9G+PgI%cRD!ZZUo6fa`HTx=)Q{c3}Zunas#!9m~L5wLkA9k|zb8%`6&r zE^AvkXQ^JbH5X6i5(^eHW^>s^8{6>z5?z{mJkInTOlOEA#(xldF9zK$*kbyob*W!) z$;d`@9|p64gifz9_h?Zw}afufd6AeGfsVn|lC* z=sJohg423wF2$p|j$qIn8E**B3EJ)hlJOj9ync_skM1)`(vQx>n>Pl~2_5Anz0CU@ zWN*AR#B<+Z=!s-J`sVY-vjHB5j^fcvB;)-AvKtR^h<=X^Cz~W0?-~>&M}*-|@Y^q) zgpKU43t5_4y}>-Tw;|JhiL}fQzmS{+E~mW@nc_;nP8fb9i}Lur2id#c>i}~9sDCLQ xotrlnAbSnZXb{11Rl0pnenAY1C3_Dddke+>odiL$1d8qT+r-4}(g>Rr{|l$9!5;ts diff --git a/build/obj/gfx.c.o b/build/obj/gfx.c.o deleted file mode 100644 index e679e8e3b403f9e8d2541906517d83ce65a96e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10272 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 diff --git a/build/obj/isr_wrapper.s.o b/build/obj/isr_wrapper.s.o deleted file mode 100644 index 2360776819dc393b44c61c56fdfcdb1642ab1a79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1392 zcma)+&r2IY6vy8tQIl519%6+;3k5+CV%DmS(1Vu*3Oy7Lg?fo=vQU3EZnhW?Qc>_A z2!aQ56!h9ckL{r+!9$^5dg!$`{|F&|-{#HiOF?vC__!v{bP_1wT?g0_JPn`2IL@G_tn8 z0vD8*z(wV6!L!Qez-8rC@QU&^@TT$xcu)Bb_(=Hy_(XXV{6+aG_=obZ;0xv7!GDyW z3v&#h|NhU(Z&b<~fmf^ff#!1MW7Vg{U_Bq*WpXWzTY6z>!qTLrDN8Rc6)a6#a@8d9 zEN(oF8_(m$6S*?e`X?_~F5`z#oA9pDmy#GH>c#Kn%yK>^dM-I8$^SQBe=Ye=vLacN z+>+dvJeE9@{3iKR@|WaaNy^nXS3_?B83yhAU?}ica-rV{DOdGEk8%t3I!4{EJwq9v zBi&NY=f^)`4mnon2{?m3gU+pnt#pX&Lg(>Z$NOej-0ZZhKBVLxBHA-te^(t3Pw)U~ oL%6Vw&hN`}a_8@o-_1M=NKFjlwKL7U2JdBE#}CMxBBZIi0UE^+PXGV_ diff --git a/build/obj/pci.c.o b/build/obj/pci.c.o deleted file mode 100644 index 99076e1bc99e5fcf22bcbee6fccd62027d8f2bd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3100 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 diff --git a/build/obj/ps2.c.o b/build/obj/ps2.c.o deleted file mode 100644 index 11e7f1a8af848cb9c43929f2097392dca0543559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5312 zcmbtXZERat89u&tiI-$Io|kFanvGj(x|UJT$)b^*@3P|vyUHUOiAngYrA%sBuDoUgkn983?;d#zI$G*8u zl_Fm0_f1FLS&i)Ob)$3FkiVxX7wmSk)N2~SO1_VkSokR@ z>nk0>IyZn$S=&41_j{*&z!bg6zJUS`YSE9N@f;?n_#`@|!`%~`k2Lb|?Az8aj&J`0 z#A;Qx6RPtq{72U;=kgu)-FzDhvi57LshX@~ z`w5x6G8Eg7`X;9uxYLWPmm_WKsaVU+OJV2G%}bV(zFT19*IthG9BH~a6l;k%&)0@x zt=gLiGyx`RiC1r)dz!ldGaicdNId0Y$+!A$_3r^hdRHQ=?^OS0)K0|uSB!s*f*Wh) z(r;d9TL(1&SU1;Xy?s|pZ@II)9$;X#Y4d^(yy*$_An@&4XKbU^6Wb7@gM**84o_w( zd8cCa#k=EONBb%gbsurD)t%_->q;bgS#b!h6>T5d=+lz|hxH{YX!wkv31B^i;{24SODdm5T7{YPsAA>&u zvq%hij6dLf%}AQ9)gUsa%#I>=;(HM6f=Xz?k{}JIV8uTIcU$ z+%;9hcc@Y4t6aCQ1(RmvwNTP*ukIT(6XRz8F>_$d>=`n9N6h{)+KEBsOnh#)=&;Nj zk(r~-W;+%>f`xBQUc=Z|%uupr(CisCdq*W*%Iry+y-7*rwJ{8ze~NDb2=^9+zG%O2c>o$#`yQ}NI zporFOH-4`V-{-^k`!L_S4GGG(uNUhR=lX);p+*o^P&_P}c6j{t$dg*n*!d;E{)T%V zk-^L;*2_C$)ObL2*L%CqZ_I~N3iH`UvA)kM%$1CaX0f0!&tMdzISNxnjR(coJ(wKd zQkZ8uiuM1l!fyYFctc^HUpyrnP|`)~O0yTIHfZ1;$NZU4cC{|d}4$;SBmKFkg1 zjhon@Ui^^Su)GVR;y!W6vw>O9;|lYfM#cT2-xnYC;p0C1c^{tfVNoo1$7e)5HJG4j z&lK{GU3St=r7UcFx%Y|qeAcmxGq$r($)Aa5mW4fe6d=4TtIl$|-NxR;jFi0r~!&WS?BaVbjKwA;H*ljet+jc+nBKeue3&6YBS za@H=Ea(QPlFP3CjoXN~G1)ptVsjRJr(_SF02RrH9Vk6TH*E`xW$_2^gbB?T@UF)D& zSX>lyxw(Q}tdtiru9-foT!msrR$9uI?d7_44v$mbFgO;X1$Hw&mU-erI6T~6Mn^;Q z<}p6%zVDdFo4~-~`Z)8gTY0!w3>8mrDPJ`lygMGsokN%k|RZpi~h=ok)@M=wUuC1I~lvKCAQ$bP)CDpgF%H{mA<= z{g}^JReY6x6#oV^=eb6We!NH6Z=LZjA+9R@N2TX*?n1Z>3rfF2{kRbPHlntWXJFBW zsPXV#pl%ZKzB9t^IL2K+Onn`HE`X1Uq}mgSpcskElDHT`nA4WVemsGK#b2Y#z&#FF4sazH*P^Qk*%X z@O-`!FO~|$Y{@z2R+wF|=Su0NtccH-3Kj02JCiTsx$*32;r_(q78V+|bN$`p&+A7_ z=i!>D=V43BPf%v61Q!1Uu^TToW%EOVkWn9*xMe}_U4s2sF zpaRn^Lg3mH78+{~p>ez?(bz}NgZB%!vlh)a0*9Ax8GL$Os5M^(wwJE}%x?@Wn(q`G zUcU1lJ{-F`-%GH)d|v{_bx{}1$9v4nw*o#3J~oc8>w6uxm+wcw2hp@>zHh+cP%fc) z=W!k5PQz!R@he!5`xn^kqxoJ3;22sMqx=cY%QuF_Ey8D^@!hHUZou~PP2!%E|AFAA zXud7jUcO&}?;?B_ntVq>bAN54Nj~sUws255mKM#oABH#Y#%=OGrScMr-~;6G-KB*b zYy&D!`ww^rRXL1}BM+|;`OQfjL!S4!>2C9iPfbG%AW+l*{d69`AHD0cjCap-h+Ak6 zt30j?(&}Tv6hFfQ9Kc)-z~*@;ANLoz;I7LJIF{I1i8gshdh_1HxXU_-m^S|lJh#5) diff --git a/build/obj/ps2_kbd.c.o b/build/obj/ps2_kbd.c.o deleted file mode 100644 index 450c0ee358f5bcdabc276f9051268482b34675b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2008 zcma)6QEMYr6h4#5YFq2HW(yWJLd1Y8w9_OO*{Wb?V_O!38`|ye!@3ShGfhL&Nk}G= zE(JU6k{Z@Yg56uedd@R;t%-*W7BVxUrB+?K=DAMyXYijovRa z4<4PKo_^SmA@Z{x(~G|6emwmLh_Zi=*e4O2X?{%ahuNF`%^TNIayC-(&`Zx9*3+58 zJL$!pU(bSn)(##_-8<5bdV|>b@xepb-w$HFL45pV>fXu0Vmhpuy!ozutAChG_hl`g ze>HV+v)pmLPHM@_nc4ZJj?Z#01w56@WS6p;%q0=FV-j)>viA0-V4Fwuv1c<7Lc6^# z+MO}&!el)DDHc-jCAk0;`DYnpy;$Bzt{bVYF=q9RxV#ScGS`3`{6oy$m}N|UqFcuF z$8pP;>7C0PbMF|LhB1SbY3taSwC*GQN2JR%Qa)fF!2LW9(f1mc-%g`3I!_XTjyZ@z zAE~PQ9T-OF^2Ct9(q(Lfb7F?j{VqoN(?bGF7ek))UpQzdz`?2p7UAo zmxxWs%Ms4lDVhs3 z5jB&{_Wqt%Dnom%K<_BabGn|Gm6BHyv)pcr*=mq5GHYf*ow~^wGwfH;pntmk69$ow z@1D8U*xPelJj`u)j*0s=-}XvdyCJW-9kbbLG@X{WA3W9BvA0{LJx9!HtI=uV82=aF zA&|XQ;P;Mg;G9r+rzjU7yhm!E_H(CpB`3a69gtImk#xaMr)C|Cs YIS^d`Gq4W9ylC7k9(3%l1b-^-FKtN)*#H0l diff --git a/build/obj/quark.c.o b/build/obj/quark.c.o deleted file mode 100644 index 3dabd40130e954e7e2270e55581f2e8b045548ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12892 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

3+=qV_Un&fOt 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 YWlMPLfROF7y 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 V{rjBsXYI=HrN5+BiEsSp{{TV%EHwZC diff --git a/builder.py b/builder.py index 207e14d..c0acb98 100644 --- a/builder.py +++ b/builder.py @@ -1,18 +1,39 @@ import sys, os +def get_object_files(dir_name): + list_of_files = os.listdir(dir_name) + all_files = list() + for entry in list_of_files: + full_path = os.path.join(dir_name, entry) + if os.path.isdir(full_path): + all_files += get_object_files(full_path) + elif full_path.endswith('.o'): + all_files.append(full_path) + + return all_files + +def get_c_files(dir_name): + list_of_files = os.listdir(dir_name) + all_files = list() + for entry in list_of_files: + full_path = os.path.join(dir_name, entry) + if os.path.isdir(full_path): + all_files += get_object_files(full_path) + elif full_path.endswith('.c'): + all_files.append(full_path) + + return all_files + config_file = 'neutron.nbuild' image_file = 'build/neutron.img' -image = bytearray(1440 * 1024) +image_size_sectors = 2880 config_file_obj = open(config_file, 'r') config_contents = config_file_obj.read() config_file_obj.close() -asm_files = list() -asm_stack_files = list() c_files = list() fs_files = list() -crawout = '' config_section = '' config_lines = config_contents.split('\n') @@ -22,139 +43,36 @@ if not line.startswith('#'): if line.startswith('.'): config_section = line[1:] - if not config_section in ['asm', 'c', 'fs', 'crawout']: + if not config_section in ['c', 'fs']: print('Error at ' + config_file + ':' + str(line_no + 1) + ': invalid section "' + config_section + '"') sys.exit() else: - if config_section == 'asm': - if line.endswith(' --no-append'): - asm_files.append(line[:-len(' --no-append')]) - else: - asm_stack_files.append(line) - elif config_section == 'c': + if config_section == 'c': c_files.append(line) elif config_section == 'fs': fs_files.append(line) - elif config_section == 'crawout': - if crawout != '': - print('Error at ' + config_file + ':' + str(line_no + 1) + ': section "' + config_section + '" can only contain one entry') - sys.exit() - else: - crawout = line else: print('Error at ' + config_file + ':' + str(line_no + 1) + ': data in invalid section "' + config_section + '"') sys.exit() -print('Assembling stacking binaries') -stack_pos = 0 -for path in asm_stack_files: - path_bin = 'build/' + os.path.basename(path) + '.bin' - print(' Assembling: ' + path + ' -> ' + path_bin) - os.system('yasm -f bin -o ' + path_bin + ' ' + path) - - print(' Stacking: ' + path_bin) - bin_file = open(path_bin, 'rb') - bin_file_cont = bin_file.read() - bin_file.close() - for byte in bin_file_cont: - image[stack_pos] = byte - stack_pos = stack_pos + 1 - -print('Assembling ordinary binaries') -for path in asm_files: - path_bin = 'build/' + os.path.basename(path) + '.bin' - print(' Assembling: ' + path + ' -> ' + path_bin) - os.system('yasm -f bin -o ' + path_bin + ' ' + path) - c_obj = list() -print('Generating C object files') +c_obj.append('gnu-efi/x86_64/gnuefi/libgnuefi.a') +c_obj.append('gnu-efi/x86_64/lib/libefi.a') +print('Compiling C sources') for path in c_files: - path_obj = 'build/obj/' + os.path.basename(path) + '.o' + path_obj = 'build/' + os.path.basename(path) + '.o' c_obj.append(path_obj) print(' Compiling: ' + path + ' -> ' + path_obj) - #So, hear me out. - #I literally spent more than two days trying to find out why my code doesn't work in VirtualBox - # but does so in Bochs. - #It turned out to be a VirtualBox coding error. A newer ENDBR32 instruction is supposed to enhance the branch - # prediction mechanism preformance on modern CPUs and is placed by GCC at the start of all functions. Older CPUs should - # decode ENDBR32 as REP MULTIBYTE NOP, and that's exactly what Bochs does, so no problems there. But! VirtualBox decodes - # it as a sequence of an illegal opcode and STI. I don't have a proper interrupt servicing mechanism yet, so this - # creates a huge problem. I spent all this time just to find out why Neutron would crash randomly in absolutely - # random places. The -fcf-protection=branch -mmanual-endbr options are here to prevent GCC from placing - # ENDBR32. It could improve performance, in theory, but I disabled this feature solely for the sake of compatibility. - #https://stackoverflow.com/questions/56120231/how-do-old-cpus-execute-the-new-endbr64-and-endbr32-instructions/59219143#59219143 - os.system('cc -o ' + path_obj + ' ' + path + ' -m32 -c -nostdlib -nodefaultlibs -Og -ffunction-sections -fcf-protection=branch -mmanual-endbr') - -print('Linking C object files') -print(' Generating liker script') -ld_script = open('build/lds', 'w') -#ld_script.write('SECTIONS {\n.text 0x00000F00 : {\n' + ' (.text)\n'.join(c_obj) + ' (.text)\n}\n.data : {\n' + ' (.data)\n'.join(c_obj) + ' (.data)\n}\n}') -ld_script.write('ENTRY(main)\nSECTIONS\n{\n\t.text 0x00000F00 :\n\t{\n\t\t*(.text.main);\n\t\t*(.text*);\n\t}\n\t.data :\n\t{\n\t\t*(.data*);\n\t}\n}') -ld_script.close() -print(' Invoking linker') -os.system('ld -o build/obj/cbuild.o ' + ' '.join(c_obj) + ' --entry=main -melf_i386 -nostdlib -n -T build/lds') - -print('Generating raw binary') -os.system('objcopy -O binary build/obj/cbuild.o ' + crawout) - -if len(fs_files) > 0: - print('Building nFS') - print(' Writing signature') - image[4608] = 0x00 - image[4609] = 0xF5 - image[4610] = 0xAD - image[4611] = 0xDE - - print(' Writing partition name') - part_name = 'Neutron Test FS' - for i in range(len(part_name)): - c = part_name[i] - image[4612 + i] = ord(c) - - print(' Writing Master FileTable') - file_sects = list() - next_f_sect = 11 - for path in fs_files: - if path != "": - path_src = path.split('>')[0] - path_dst = path.split('>')[1] - f_size = os.path.getsize(path_src) - f_size_sect = f_size // 512 - if f_size_sect % 512 > 0: - f_size_sect = f_size_sect + 1 - file_sects.append(next_f_sect) - - print(' Writing entry for: ' + path_dst) - for i in range(len(path_dst)): - c = path_dst[i] - image[5120 + (fs_files.index(path) * 32) + i] = ord(c) - - image[5120 + (fs_files.index(path) * 32) + 24] = f_size & 0xFF - image[5120 + (fs_files.index(path) * 32) + 25] = (f_size >> 8) & 0xFF - image[5120 + (fs_files.index(path) * 32) + 26] = (f_size >> 16) & 0xFF - image[5120 + (fs_files.index(path) * 32) + 27] = (f_size >> 24) & 0xFF - image[5120 + (fs_files.index(path) * 32) + 28] = next_f_sect & 0xFF - image[5120 + (fs_files.index(path) * 32) + 29] = (next_f_sect >> 8) & 0xFF - image[5120 + (fs_files.index(path) * 32) + 30] = (next_f_sect >> 16) & 0xFF - image[5120 + (fs_files.index(path) * 32) + 31] = (next_f_sect >> 24) & 0xFF - - next_f_sect = next_f_sect + f_size_sect + os.system('x86_64-w64-mingw32-gcc -ffreestanding -m64 -Ignu-efi/inc -Ignu-efi/lib -Ignu-efi/inc/x86_64 -Ignu-efi/inc/protocol -nostdlib -c -o ' + path_obj + ' ' + path) - print(' Writing files') - for path in fs_files: - if path != "": - path_src = path.split('>')[0] - path_dst = path.split('>')[1] - print(' Writing file: ' + path_dst) - bin_file = open(path_src, 'rb') - bin_file_cont = bin_file.read() - bin_file.close() - stack_pos = 0 - for byte in bin_file_cont: - image[(file_sects[fs_files.index(path)] * 512) + stack_pos] = byte - stack_pos = stack_pos + 1 +print('Linking') +os.system('x86_64-w64-mingw32-gcc -m64 -nostdlib -Wl,-dll -shared -Wl,--subsystem,10 -e efi_main -o build/BOOTX64.EFI ' + ' '.join(c_obj) + ' -lgcc') -print('Writing image to: ' + image_file) -image_file_file = open(image_file, 'wb') -image_file_file.write(image) -image_file_file.close() +print('Bulding system image') +print(' Creating image file') +os.system('dd if=/dev/zero of=build/neutron.img count=' + str(image_size_sectors) + ' > /dev/null') +os.system('mformat -i build/neutron.img -f ' + str(image_size_sectors / 2)) +print(' Creating filesystem') +os.system('mmd -i build/neutron.img ::/EFI') +os.system('mmd -i build/neutron.img ::/EFI/BOOT') +os.system('mcopy -i build/neutron.img build/BOOTX64.EFI ::/EFI/BOOT') \ No newline at end of file diff --git a/bx_enh_dbg.ini b/bx_enh_dbg.ini deleted file mode 100644 index 41ebc33..0000000 --- a/bx_enh_dbg.ini +++ /dev/null @@ -1,26 +0,0 @@ -# bx_enh_dbg_ini -SeeReg[0] = TRUE -SeeReg[1] = TRUE -SeeReg[2] = TRUE -SeeReg[3] = TRUE -SeeReg[4] = FALSE -SeeReg[5] = FALSE -SeeReg[6] = FALSE -SeeReg[7] = FALSE -SingleCPU = FALSE -ShowIOWindows = TRUE -ShowButtons = TRUE -SeeRegColors = TRUE -ignoreNxtT = TRUE -ignSSDisasm = TRUE -UprCase = 0 -DumpInAsciiMode = 3 -isLittleEndian = TRUE -DefaultAsmLines = 512 -DumpWSIndex = 0 -DockOrder = 0x123 -ListWidthPix[0] = 389 -ListWidthPix[1] = 538 -ListWidthPix[2] = 615 -MainWindow = 0, 0, 1054, 500 -FontName = Normal diff --git a/gnu-efi/inc/efi.h b/gnu-efi/inc/efi.h new file mode 100644 index 0000000..2ddd53e --- /dev/null +++ b/gnu-efi/inc/efi.h @@ -0,0 +1,61 @@ +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efi.h + +Abstract: + + Public EFI header files + + + +Revision History + +--*/ + + +// Add a predefined macro to detect usage of the library +#ifndef _GNU_EFI +#define _GNU_EFI +#endif + +// +// Build flags on input +// EFI32 +// EFI_DEBUG - Enable debugging code +// EFI_NT_EMULATOR - Building for running under NT +// + + +#ifndef _EFI_INCLUDE_ +#define _EFI_INCLUDE_ + +#define EFI_FIRMWARE_VENDOR L"INTEL" +#define EFI_FIRMWARE_MAJOR_REVISION 12 +#define EFI_FIRMWARE_MINOR_REVISION 33 +#define EFI_FIRMWARE_REVISION ((EFI_FIRMWARE_MAJOR_REVISION <<16) | (EFI_FIRMWARE_MINOR_REVISION)) + +#include "efibind.h" +#include "eficompiler.h" +#include "efidef.h" +#include "efidevp.h" +#include "efipciio.h" +#include "efiprot.h" +#include "eficon.h" +#include "efiser.h" +#include "efi_nii.h" +#include "efipxebc.h" +#include "efinet.h" +#include "efiapi.h" +#include "efifs.h" +#include "efierr.h" +#include "efiui.h" +#include "efiip.h" +#include "efiudp.h" +#include "efitcp.h" +#include "efipoint.h" + +#endif diff --git a/gnu-efi/inc/efi_nii.h b/gnu-efi/inc/efi_nii.h new file mode 100644 index 0000000..fdf5cb4 --- /dev/null +++ b/gnu-efi/inc/efi_nii.h @@ -0,0 +1,78 @@ +#ifndef _EFI_NII_H +#define _EFI_NII_H + +/*++ +Copyright (c) 2000 Intel Corporation + +Module name: + efi_nii.h + +Abstract: + +Revision history: + 2000-Feb-18 M(f)J GUID updated. + Structure order changed for machine word alignment. + Added StringId[4] to structure. + + 2000-Feb-14 M(f)J Genesis. +--*/ + +#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID \ + { 0xE18541CD, 0xF755, 0x4f73, {0x92, 0x8D, 0x64, 0x3C, 0x8A, 0x79, 0xB2, 0x29} } + +#define EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION 0x00010000 +#define EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE_REVISION EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION + +typedef enum { + EfiNetworkInterfaceUndi = 1 +} EFI_NETWORK_INTERFACE_TYPE; + +typedef struct _EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL { + + UINT64 Revision; + // Revision of the network interface identifier protocol interface. + + UINT64 ID; + // Address of the first byte of the identifying structure for this + // network interface. This is set to zero if there is no structure. + // + // For PXE/UNDI this is the first byte of the !PXE structure. + + UINT64 ImageAddr; + // Address of the UNrelocated driver/ROM image. This is set + // to zero if there is no driver/ROM image. + // + // For 16-bit UNDI, this is the first byte of the option ROM in + // upper memory. + // + // For 32/64-bit S/W UNDI, this is the first byte of the EFI ROM + // image. + // + // For H/W UNDI, this is set to zero. + + UINT32 ImageSize; + // Size of the UNrelocated driver/ROM image of this network interface. + // This is set to zero if there is no driver/ROM image. + + CHAR8 StringId[4]; + // 4 char ASCII string to go in class identifier (option 60) in DHCP + // and Boot Server discover packets. + // For EfiNetworkInterfaceUndi this field is "UNDI". + // For EfiNetworkInterfaceSnp this field is "SNPN". + + UINT8 Type; + UINT8 MajorVer; + UINT8 MinorVer; + // Information to be placed into the PXE DHCP and Discover packets. + // This is the network interface type and version number that will + // be placed into DHCP option 94 (client network interface identifier). + BOOLEAN Ipv6Supported; + UINT8 IfNum; // interface number to be used with pxeid structure +} EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL, EFI_NETWORK_INTERFACE_IDENTIFIER_INTERFACE; + +// Note: Because it conflicted with the EDK2 struct name, the +// 'EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL' GUID definition, +// from older versions of gnu-efi, is now obsoleted. +// Use 'EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_GUID' instead. + +#endif // _EFI_NII_H diff --git a/gnu-efi/inc/efi_pxe.h b/gnu-efi/inc/efi_pxe.h new file mode 100644 index 0000000..d24251f --- /dev/null +++ b/gnu-efi/inc/efi_pxe.h @@ -0,0 +1,1743 @@ +#ifndef _EFI_PXE_H +#define _EFI_PXE_H + + +/*++ +Copyright (c) Intel 1999 + +Module name: + efi_pxe.h + +32/64-bit PXE specification: + alpha-4, 99-Dec-17 + +Abstract: + This header file contains all of the PXE type definitions, + structure prototypes, global variables and constants that + are needed for porting PXE to EFI. +--*/ + +#pragma pack(1) + +#define PXE_INTEL_ORDER 1 // Intel order +//#define PXE_NETWORK_ORDER 1 // network order + +#define PXE_UINT64_SUPPORT 1 // UINT64 supported +//#define PXE_NO_UINT64_SUPPORT 1 // UINT64 not supported + +#define PXE_BUSTYPE(a,b,c,d) \ +((((PXE_UINT32)(d) & 0xFF) << 24) | \ +(((PXE_UINT32)(c) & 0xFF) << 16) | \ +(((PXE_UINT32)(b) & 0xFF) << 8) | \ +((PXE_UINT32)(a) & 0xFF)) + +// +// UNDI ROM ID and devive ID signature +// +#define PXE_BUSTYPE_PXE PXE_BUSTYPE('!', 'P', 'X', 'E') + +// +// BUS ROM ID signatures +// +#define PXE_BUSTYPE_PCI PXE_BUSTYPE('P', 'C', 'I', 'R') +#define PXE_BUSTYPE_PC_CARD PXE_BUSTYPE('P', 'C', 'C', 'R') +#define PXE_BUSTYPE_USB PXE_BUSTYPE('U', 'S', 'B', 'R') +#define PXE_BUSTYPE_1394 PXE_BUSTYPE('1', '3', '9', '4') + +#define PXE_SWAP_UINT16(n) \ +((((PXE_UINT16)(n) & 0x00FF) << 8) | \ +(((PXE_UINT16)(n) & 0xFF00) >> 8)) + +#define PXE_SWAP_UINT32(n) \ +((((PXE_UINT32)(n) & 0x000000FF) << 24) | \ +(((PXE_UINT32)(n) & 0x0000FF00) << 8) | \ +(((PXE_UINT32)(n) & 0x00FF0000) >> 8) | \ +(((PXE_UINT32)(n) & 0xFF000000) >> 24)) + +#if PXE_UINT64_SUPPORT != 0 +#define PXE_SWAP_UINT64(n) \ +((((PXE_UINT64)(n) & 0x00000000000000FF) << 56) | \ +(((PXE_UINT64)(n) & 0x000000000000FF00) << 40) | \ +(((PXE_UINT64)(n) & 0x0000000000FF0000) << 24) | \ +(((PXE_UINT64)(n) & 0x00000000FF000000) << 8) | \ +(((PXE_UINT64)(n) & 0x000000FF00000000) >> 8) | \ +(((PXE_UINT64)(n) & 0x0000FF0000000000) >> 24) | \ +(((PXE_UINT64)(n) & 0x00FF000000000000) >> 40) | \ +(((PXE_UINT64)(n) & 0xFF00000000000000) >> 56)) +#endif // PXE_UINT64_SUPPORT + +#if PXE_NO_UINT64_SUPPORT != 0 +#define PXE_SWAP_UINT64(n) \ +{ \ +PXE_UINT32 tmp = (PXE_UINT64)(n)[1]; \ +(PXE_UINT64)(n)[1] = PXE_SWAP_UINT32((PXE_UINT64)(n)[0]); \ +(PXE_UINT64)(n)[0] = tmp; \ +} +#endif // PXE_NO_UINT64_SUPPORT + +#define PXE_CPBSIZE_NOT_USED 0 // zero +#define PXE_DBSIZE_NOT_USED 0 // zero +#define PXE_CPBADDR_NOT_USED (PXE_UINT64)0 // zero +#define PXE_DBADDR_NOT_USED (PXE_UINT64)0 // zero + +#define PXE_CONST const + +#define PXE_VOLATILE volatile + +typedef void PXE_VOID; + +typedef unsigned char PXE_UINT8; + +typedef unsigned short PXE_UINT16; + +typedef unsigned PXE_UINT32; + +#if PXE_UINT64_SUPPORT != 0 +// typedef unsigned long PXE_UINT64; +typedef UINT64 PXE_UINT64; +#endif // PXE_UINT64_SUPPORT + +#if PXE_NO_UINT64_SUPPORT != 0 +typedef PXE_UINT32 PXE_UINT64[2]; +#endif // PXE_NO_UINT64_SUPPORT + +typedef unsigned PXE_UINTN; + +typedef PXE_UINT8 PXE_BOOL; + +#define PXE_FALSE 0 // zero +#define PXE_TRUE (!PXE_FALSE) + +typedef PXE_UINT16 PXE_OPCODE; + +// +// Return UNDI operational state. +// +#define PXE_OPCODE_GET_STATE 0x0000 + +// +// Change UNDI operational state from Stopped to Started. +// +#define PXE_OPCODE_START 0x0001 + +// +// Change UNDI operational state from Started to Stopped. +// +#define PXE_OPCODE_STOP 0x0002 + +// +// Get UNDI initialization information. +// +#define PXE_OPCODE_GET_INIT_INFO 0x0003 + +// +// Get NIC configuration information. +// +#define PXE_OPCODE_GET_CONFIG_INFO 0x0004 + +// +// Changed UNDI operational state from Started to Initialized. +// +#define PXE_OPCODE_INITIALIZE 0x0005 + +// +// Re-initialize the NIC H/W. +// +#define PXE_OPCODE_RESET 0x0006 + +// +// Change the UNDI operational state from Initialized to Started. +// +#define PXE_OPCODE_SHUTDOWN 0x0007 + +// +// Read & change state of external interrupt enables. +// +#define PXE_OPCODE_INTERRUPT_ENABLES 0x0008 + +// +// Read & change state of packet receive filters. +// +#define PXE_OPCODE_RECEIVE_FILTERS 0x0009 + +// +// Read & change station MAC address. +// +#define PXE_OPCODE_STATION_ADDRESS 0x000A + +// +// Read traffic statistics. +// +#define PXE_OPCODE_STATISTICS 0x000B + +// +// Convert multicast IP address to multicast MAC address. +// +#define PXE_OPCODE_MCAST_IP_TO_MAC 0x000C + +// +// Read or change non-volatile storage on the NIC. +// +#define PXE_OPCODE_NVDATA 0x000D + +// +// Get & clear interrupt status. +// +#define PXE_OPCODE_GET_STATUS 0x000E + +// +// Fill media header in packet for transmit. +// +#define PXE_OPCODE_FILL_HEADER 0x000F + +// +// Transmit packet(s). +// +#define PXE_OPCODE_TRANSMIT 0x0010 + +// +// Receive packet. +// +#define PXE_OPCODE_RECEIVE 0x0011 + +// last valid opcode: +#define PXE_OPCODE_VALID_MAX 0x0011 + +// +// Last valid PXE UNDI OpCode number. +// +#define PXE_OPCODE_LAST_VALID 0x0011 + +typedef PXE_UINT16 PXE_OPFLAGS; + +#define PXE_OPFLAGS_NOT_USED 0x0000 + +//////////////////////////////////////// +// UNDI Get State +// + +// No OpFlags + +//////////////////////////////////////// +// UNDI Start +// + +// No OpFlags + +//////////////////////////////////////// +// UNDI Stop +// + +// No OpFlags + +//////////////////////////////////////// +// UNDI Get Init Info +// + +// No Opflags + +//////////////////////////////////////// +// UNDI Get Config Info +// + +// No Opflags + +//////////////////////////////////////// +// UNDI Initialize +// + +#define PXE_OPFLAGS_INITIALIZE_CABLE_DETECT_MASK 0x0001 +#define PXE_OPFLAGS_INITIALIZE_DETECT_CABLE 0x0000 +#define PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE 0x0001 + +//////////////////////////////////////// +// UNDI Reset +// + +#define PXE_OPFLAGS_RESET_DISABLE_INTERRUPTS 0x0001 +#define PXE_OPFLAGS_RESET_DISABLE_FILTERS 0x0002 + +//////////////////////////////////////// +// UNDI Shutdown +// + +// No OpFlags + +//////////////////////////////////////// +// UNDI Interrupt Enables +// + +// +// Select whether to enable or disable external interrupt signals. +// Setting both enable and disable will return PXE_STATCODE_INVALID_OPFLAGS. +// +#define PXE_OPFLAGS_INTERRUPT_OPMASK 0xC000 +#define PXE_OPFLAGS_INTERRUPT_ENABLE 0x8000 +#define PXE_OPFLAGS_INTERRUPT_DISABLE 0x4000 +#define PXE_OPFLAGS_INTERRUPT_READ 0x0000 + +// +// Enable receive interrupts. An external interrupt will be generated +// after a complete non-error packet has been received. +// +#define PXE_OPFLAGS_INTERRUPT_RECEIVE 0x0001 + +// +// Enable transmit interrupts. An external interrupt will be generated +// after a complete non-error packet has been transmitted. +// +#define PXE_OPFLAGS_INTERRUPT_TRANSMIT 0x0002 + +// +// Enable command interrupts. An external interrupt will be generated +// when command execution stops. +// +#define PXE_OPFLAGS_INTERRUPT_COMMAND 0x0004 + +// +// Generate software interrupt. Setting this bit generates an external +// interrupt, if it is supported by the hardware. +// +#define PXE_OPFLAGS_INTERRUPT_SOFTWARE 0x0008 + +//////////////////////////////////////// +// UNDI Receive Filters +// + +// +// Select whether to enable or disable receive filters. +// Setting both enable and disable will return PXE_STATCODE_INVALID_OPCODE. +// +#define PXE_OPFLAGS_RECEIVE_FILTER_OPMASK 0xC000 +#define PXE_OPFLAGS_RECEIVE_FILTER_ENABLE 0x8000 +#define PXE_OPFLAGS_RECEIVE_FILTER_DISABLE 0x4000 +#define PXE_OPFLAGS_RECEIVE_FILTER_READ 0x0000 + +// +// To reset the contents of the multicast MAC address filter list, +// set this OpFlag: +// +#define PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST 0x2000 + +// +// Enable unicast packet receiving. Packets sent to the current station +// MAC address will be received. +// +#define PXE_OPFLAGS_RECEIVE_FILTER_UNICAST 0x0001 + +// +// Enable broadcast packet receiving. Packets sent to the broadcast +// MAC address will be received. +// +#define PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST 0x0002 + +// +// Enable filtered multicast packet receiving. Packets sent to any +// of the multicast MAC addresses in the multicast MAC address filter +// list will be received. If the filter list is empty, no multicast +// +#define PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST 0x0004 + +// +// Enable promiscuous packet receiving. All packets will be received. +// +#define PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS 0x0008 + +// +// Enable promiscuous multicast packet receiving. All multicast +// packets will be received. +// +#define PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST 0x0010 + +//////////////////////////////////////// +// UNDI Station Address +// + +#define PXE_OPFLAGS_STATION_ADDRESS_READ 0x0000 +#define PXE_OPFLAGS_STATION_ADDRESS_RESET 0x0001 + +//////////////////////////////////////// +// UNDI Statistics +// + +#define PXE_OPFLAGS_STATISTICS_READ 0x0000 +#define PXE_OPFLAGS_STATISTICS_RESET 0x0001 + +//////////////////////////////////////// +// UNDI MCast IP to MAC +// + +// +// Identify the type of IP address in the CPB. +// +#define PXE_OPFLAGS_MCAST_IP_TO_MAC_OPMASK 0x0003 +#define PXE_OPFLAGS_MCAST_IPV4_TO_MAC 0x0000 +#define PXE_OPFLAGS_MCAST_IPV6_TO_MAC 0x0001 + +//////////////////////////////////////// +// UNDI NvData +// + +// +// Select the type of non-volatile data operation. +// +#define PXE_OPFLAGS_NVDATA_OPMASK 0x0001 +#define PXE_OPFLAGS_NVDATA_READ 0x0000 +#define PXE_OPFLAGS_NVDATA_WRITE 0x0001 + +//////////////////////////////////////// +// UNDI Get Status +// + +// +// Return current interrupt status. This will also clear any interrupts +// that are currently set. This can be used in a polling routine. The +// interrupt flags are still set and cleared even when the interrupts +// are disabled. +// +#define PXE_OPFLAGS_GET_INTERRUPT_STATUS 0x0001 + +// +// Return list of transmitted buffers for recycling. Transmit buffers +// must not be changed or unallocated until they have recycled. After +// issuing a transmit command, wait for a transmit complete interrupt. +// When a transmit complete interrupt is received, read the transmitted +// buffers. Do not plan on getting one buffer per interrupt. Some +// NICs and UNDIs may transmit multiple buffers per interrupt. +// +#define PXE_OPFLAGS_GET_TRANSMITTED_BUFFERS 0x0002 + +//////////////////////////////////////// +// UNDI Fill Header +// + +#define PXE_OPFLAGS_FILL_HEADER_OPMASK 0x0001 +#define PXE_OPFLAGS_FILL_HEADER_FRAGMENTED 0x0001 +#define PXE_OPFLAGS_FILL_HEADER_WHOLE 0x0000 + +//////////////////////////////////////// +// UNDI Transmit +// + +// +// S/W UNDI only. Return after the packet has been transmitted. A +// transmit complete interrupt will still be generated and the transmit +// buffer will have to be recycled. +// +#define PXE_OPFLAGS_SWUNDI_TRANSMIT_OPMASK 0x0001 +#define PXE_OPFLAGS_TRANSMIT_BLOCK 0x0001 +#define PXE_OPFLAGS_TRANSMIT_DONT_BLOCK 0x0000 + +// +// +// +#define PXE_OPFLAGS_TRANSMIT_OPMASK 0x0002 +#define PXE_OPFLAGS_TRANSMIT_FRAGMENTED 0x0002 +#define PXE_OPFLAGS_TRANSMIT_WHOLE 0x0000 + +//////////////////////////////////////// +// UNDI Receive +// + +// No OpFlags + +typedef PXE_UINT16 PXE_STATFLAGS; + +#define PXE_STATFLAGS_INITIALIZE 0x0000 + +//////////////////////////////////////// +// Common StatFlags that can be returned by all commands. +// + +// +// The COMMAND_COMPLETE and COMMAND_FAILED status flags must be +// implemented by all UNDIs. COMMAND_QUEUED is only needed by UNDIs +// that support command queuing. +// +#define PXE_STATFLAGS_STATUS_MASK 0xC000 +#define PXE_STATFLAGS_COMMAND_COMPLETE 0xC000 +#define PXE_STATFLAGS_COMMAND_FAILED 0x8000 +#define PXE_STATFLAGS_COMMAND_QUEUED 0x4000 +//#define PXE_STATFLAGS_INITIALIZE 0x0000 + +#define PXE_STATFLAGS_DB_WRITE_TRUNCATED 0x2000 + +//////////////////////////////////////// +// UNDI Get State +// + +#define PXE_STATFLAGS_GET_STATE_MASK 0x0003 +#define PXE_STATFLAGS_GET_STATE_INITIALIZED 0x0002 +#define PXE_STATFLAGS_GET_STATE_STARTED 0x0001 +#define PXE_STATFLAGS_GET_STATE_STOPPED 0x0000 + +//////////////////////////////////////// +// UNDI Start +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI Get Init Info +// + +#define PXE_STATFLAGS_CABLE_DETECT_MASK 0x0001 +#define PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED 0x0000 +#define PXE_STATFLAGS_CABLE_DETECT_SUPPORTED 0x0001 + + +//////////////////////////////////////// +// UNDI Initialize +// + +#define PXE_STATFLAGS_INITIALIZED_NO_MEDIA 0x0001 + +//////////////////////////////////////// +// UNDI Reset +// + +#define PXE_STATFLAGS_RESET_NO_MEDIA 0x0001 + +//////////////////////////////////////// +// UNDI Shutdown +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI Interrupt Enables +// + +// +// If set, receive interrupts are enabled. +// +#define PXE_STATFLAGS_INTERRUPT_RECEIVE 0x0001 + +// +// If set, transmit interrupts are enabled. +// +#define PXE_STATFLAGS_INTERRUPT_TRANSMIT 0x0002 + +// +// If set, command interrupts are enabled. +// +#define PXE_STATFLAGS_INTERRUPT_COMMAND 0x0004 + + +//////////////////////////////////////// +// UNDI Receive Filters +// + +// +// If set, unicast packets will be received. +// +#define PXE_STATFLAGS_RECEIVE_FILTER_UNICAST 0x0001 + +// +// If set, broadcast packets will be received. +// +#define PXE_STATFLAGS_RECEIVE_FILTER_BROADCAST 0x0002 + +// +// If set, multicast packets that match up with the multicast address +// filter list will be received. +// +#define PXE_STATFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST 0x0004 + +// +// If set, all packets will be received. +// +#define PXE_STATFLAGS_RECEIVE_FILTER_PROMISCUOUS 0x0008 + +// +// If set, all multicast packets will be received. +// +#define PXE_STATFLAGS_RECEIVE_FILTER_ALL_MULTICAST 0x0010 + +//////////////////////////////////////// +// UNDI Station Address +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI Statistics +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI MCast IP to MAC +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI NvData +// + +// No additional StatFlags + + +//////////////////////////////////////// +// UNDI Get Status +// + +// +// Use to determine if an interrupt has occurred. +// +#define PXE_STATFLAGS_GET_STATUS_INTERRUPT_MASK 0x000F +#define PXE_STATFLAGS_GET_STATUS_NO_INTERRUPTS 0x0000 + +// +// If set, at least one receive interrupt occurred. +// +#define PXE_STATFLAGS_GET_STATUS_RECEIVE 0x0001 + +// +// If set, at least one transmit interrupt occurred. +// +#define PXE_STATFLAGS_GET_STATUS_TRANSMIT 0x0002 + +// +// If set, at least one command interrupt occurred. +// +#define PXE_STATFLAGS_GET_STATUS_COMMAND 0x0004 + +// +// If set, at least one software interrupt occurred. +// +#define PXE_STATFLAGS_GET_STATUS_SOFTWARE 0x0008 + +// +// This flag is set if the transmitted buffer queue is empty. This flag +// will be set if all transmitted buffer addresses get written into the DB. +// +#define PXE_STATFLAGS_GET_STATUS_TXBUF_QUEUE_EMPTY 0x0010 + +// +// This flag is set if no transmitted buffer addresses were written +// into the DB. (This could be because DBsize was too small.) +// +#define PXE_STATFLAGS_GET_STATUS_NO_TXBUFS_WRITTEN 0x0020 + +//////////////////////////////////////// +// UNDI Fill Header +// + +// No additional StatFlags + +//////////////////////////////////////// +// UNDI Transmit +// + +// No additional StatFlags. + +//////////////////////////////////////// +// UNDI Receive +// + +// No additional StatFlags. + +typedef PXE_UINT16 PXE_STATCODE; + +#define PXE_STATCODE_INITIALIZE 0x0000 + +//////////////////////////////////////// +// Common StatCodes returned by all UNDI commands, UNDI protocol functions +// and BC protocol functions. +// + +#define PXE_STATCODE_SUCCESS 0x0000 + +#define PXE_STATCODE_INVALID_CDB 0x0001 +#define PXE_STATCODE_INVALID_CPB 0x0002 +#define PXE_STATCODE_BUSY 0x0003 +#define PXE_STATCODE_QUEUE_FULL 0x0004 +#define PXE_STATCODE_ALREADY_STARTED 0x0005 +#define PXE_STATCODE_NOT_STARTED 0x0006 +#define PXE_STATCODE_NOT_SHUTDOWN 0x0007 +#define PXE_STATCODE_ALREADY_INITIALIZED 0x0008 +#define PXE_STATCODE_NOT_INITIALIZED 0x0009 +#define PXE_STATCODE_DEVICE_FAILURE 0x000A +#define PXE_STATCODE_NVDATA_FAILURE 0x000B +#define PXE_STATCODE_UNSUPPORTED 0x000C +#define PXE_STATCODE_BUFFER_FULL 0x000D +#define PXE_STATCODE_INVALID_PARAMETER 0x000E +#define PXE_STATCODE_INVALID_UNDI 0x000F +#define PXE_STATCODE_IPV4_NOT_SUPPORTED 0x0010 +#define PXE_STATCODE_IPV6_NOT_SUPPORTED 0x0011 +#define PXE_STATCODE_NOT_ENOUGH_MEMORY 0x0012 +#define PXE_STATCODE_NO_DATA 0x0013 + + +typedef PXE_UINT16 PXE_IFNUM; + +// +// This interface number must be passed to the S/W UNDI Start command. +// +#define PXE_IFNUM_START 0x0000 + +// +// This interface number is returned by the S/W UNDI Get State and +// Start commands if information in the CDB, CPB or DB is invalid. +// +#define PXE_IFNUM_INVALID 0x0000 + +typedef PXE_UINT16 PXE_CONTROL; + +// +// Setting this flag directs the UNDI to queue this command for later +// execution if the UNDI is busy and it supports command queuing. +// If queuing is not supported, a PXE_STATCODE_INVALID_CONTROL error +// is returned. If the queue is full, a PXE_STATCODE_CDB_QUEUE_FULL +// error is returned. +// +#define PXE_CONTROL_QUEUE_IF_BUSY 0x0002 + +// +// These two bit values are used to determine if there are more UNDI +// CDB structures following this one. If the link bit is set, there +// must be a CDB structure following this one. Execution will start +// on the next CDB structure as soon as this one completes successfully. +// If an error is generated by this command, execution will stop. +// +#define PXE_CONTROL_LINK 0x0001 +#define PXE_CONTROL_LAST_CDB_IN_LIST 0x0000 + +typedef PXE_UINT8 PXE_FRAME_TYPE; + +#define PXE_FRAME_TYPE_NONE 0x00 +#define PXE_FRAME_TYPE_UNICAST 0x01 +#define PXE_FRAME_TYPE_BROADCAST 0x02 +#define PXE_FRAME_TYPE_MULTICAST 0x03 +#define PXE_FRAME_TYPE_PROMISCUOUS 0x04 + +typedef PXE_UINT32 PXE_IPV4; + +typedef PXE_UINT32 PXE_IPV6[4]; +#define PXE_MAC_LENGTH 32 + +typedef PXE_UINT8 PXE_MAC_ADDR[PXE_MAC_LENGTH]; + +typedef PXE_UINT8 PXE_IFTYPE; +typedef PXE_UINT16 PXE_MEDIA_PROTOCOL; + +// +// This information is from the ARP section of RFC 1700. +// +// 1 Ethernet (10Mb) [JBP] +// 2 Experimental Ethernet (3Mb) [JBP] +// 3 Amateur Radio AX.25 [PXK] +// 4 Proteon ProNET Token Ring [JBP] +// 5 Chaos [GXP] +// 6 IEEE 802 Networks [JBP] +// 7 ARCNET [JBP] +// 8 Hyperchannel [JBP] +// 9 Lanstar [TU] +// 10 Autonet Short Address [MXB1] +// 11 LocalTalk [JKR1] +// 12 LocalNet (IBM PCNet or SYTEK LocalNET) [JXM] +// 13 Ultra link [RXD2] +// 14 SMDS [GXC1] +// 15 Frame Relay [AGM] +// 16 Asynchronous Transmission Mode (ATM) [JXB2] +// 17 HDLC [JBP] +// 18 Fibre Channel [Yakov Rekhter] +// 19 Asynchronous Transmission Mode (ATM) [Mark Laubach] +// 20 Serial Line [JBP] +// 21 Asynchronous Transmission Mode (ATM) [MXB1] +// + +#define PXE_IFTYPE_ETHERNET 0x01 +#define PXE_IFTYPE_TOKENRING 0x04 +#define PXE_IFTYPE_FIBRE_CHANNEL 0x12 + +typedef struct s_pxe_hw_undi { +PXE_UINT32 Signature; // PXE_ROMID_SIGNATURE +PXE_UINT8 Len; // sizeof(PXE_HW_UNDI) +PXE_UINT8 Fudge; // makes 8-bit cksum equal zero +PXE_UINT8 Rev; // PXE_ROMID_REV +PXE_UINT8 IFcnt; // physical connector count +PXE_UINT8 MajorVer; // PXE_ROMID_MAJORVER +PXE_UINT8 MinorVer; // PXE_ROMID_MINORVER +PXE_UINT16 reserved; // zero, not used +PXE_UINT32 Implementation; // implementation flags +// reserved // vendor use +// PXE_UINT32 Status; // status port +// PXE_UINT32 Command; // command port +// PXE_UINT64 CDBaddr; // CDB address port +} PXE_HW_UNDI; + +// +// Status port bit definitions +// + +// +// UNDI operation state +// +#define PXE_HWSTAT_STATE_MASK 0xC0000000 +#define PXE_HWSTAT_BUSY 0xC0000000 +#define PXE_HWSTAT_INITIALIZED 0x80000000 +#define PXE_HWSTAT_STARTED 0x40000000 +#define PXE_HWSTAT_STOPPED 0x00000000 + +// +// If set, last command failed +// +#define PXE_HWSTAT_COMMAND_FAILED 0x20000000 + +// +// If set, identifies enabled receive filters +// +#define PXE_HWSTAT_PROMISCUOUS_MULTICAST_RX_ENABLED 0x00001000 +#define PXE_HWSTAT_PROMISCUOUS_RX_ENABLED 0x00000800 +#define PXE_HWSTAT_BROADCAST_RX_ENABLED 0x00000400 +#define PXE_HWSTAT_MULTICAST_RX_ENABLED 0x00000200 +#define PXE_HWSTAT_UNICAST_RX_ENABLED 0x00000100 + +// +// If set, identifies enabled external interrupts +// +#define PXE_HWSTAT_SOFTWARE_INT_ENABLED 0x00000080 +#define PXE_HWSTAT_TX_COMPLETE_INT_ENABLED 0x00000040 +#define PXE_HWSTAT_PACKET_RX_INT_ENABLED 0x00000020 +#define PXE_HWSTAT_CMD_COMPLETE_INT_ENABLED 0x00000010 + +// +// If set, identifies pending interrupts +// +#define PXE_HWSTAT_SOFTWARE_INT_PENDING 0x00000008 +#define PXE_HWSTAT_TX_COMPLETE_INT_PENDING 0x00000004 +#define PXE_HWSTAT_PACKET_RX_INT_PENDING 0x00000002 +#define PXE_HWSTAT_CMD_COMPLETE_INT_PENDING 0x00000001 + +// +// Command port definitions +// + +// +// If set, CDB identified in CDBaddr port is given to UNDI. +// If not set, other bits in this word will be processed. +// +#define PXE_HWCMD_ISSUE_COMMAND 0x80000000 +#define PXE_HWCMD_INTS_AND_FILTS 0x00000000 + +// +// Use these to enable/disable receive filters. +// +#define PXE_HWCMD_PROMISCUOUS_MULTICAST_RX_ENABLE 0x00001000 +#define PXE_HWCMD_PROMISCUOUS_RX_ENABLE 0x00000800 +#define PXE_HWCMD_BROADCAST_RX_ENABLE 0x00000400 +#define PXE_HWCMD_MULTICAST_RX_ENABLE 0x00000200 +#define PXE_HWCMD_UNICAST_RX_ENABLE 0x00000100 + +// +// Use these to enable/disable external interrupts +// +#define PXE_HWCMD_SOFTWARE_INT_ENABLE 0x00000080 +#define PXE_HWCMD_TX_COMPLETE_INT_ENABLE 0x00000040 +#define PXE_HWCMD_PACKET_RX_INT_ENABLE 0x00000020 +#define PXE_HWCMD_CMD_COMPLETE_INT_ENABLE 0x00000010 + +// +// Use these to clear pending external interrupts +// +#define PXE_HWCMD_CLEAR_SOFTWARE_INT 0x00000008 +#define PXE_HWCMD_CLEAR_TX_COMPLETE_INT 0x00000004 +#define PXE_HWCMD_CLEAR_PACKET_RX_INT 0x00000002 +#define PXE_HWCMD_CLEAR_CMD_COMPLETE_INT 0x00000001 + +typedef struct s_pxe_sw_undi { +PXE_UINT32 Signature; // PXE_ROMID_SIGNATURE +PXE_UINT8 Len; // sizeof(PXE_SW_UNDI) +PXE_UINT8 Fudge; // makes 8-bit cksum zero +PXE_UINT8 Rev; // PXE_ROMID_REV +PXE_UINT8 IFcnt; // physical connector count +PXE_UINT8 MajorVer; // PXE_ROMID_MAJORVER +PXE_UINT8 MinorVer; // PXE_ROMID_MINORVER +PXE_UINT16 reserved1; // zero, not used +PXE_UINT32 Implementation; // Implementation flags +PXE_UINT64 EntryPoint; // API entry point +PXE_UINT8 reserved2[3]; // zero, not used +PXE_UINT8 BusCnt; // number of bustypes supported +PXE_UINT32 BusType[1]; // list of supported bustypes +} PXE_SW_UNDI; + +typedef union u_pxe_undi { +PXE_HW_UNDI hw; +PXE_SW_UNDI sw; +} PXE_UNDI; + +// +// Signature of !PXE structure +// +#define PXE_ROMID_SIGNATURE PXE_BUSTYPE('!', 'P', 'X', 'E') + +// +// !PXE structure format revision +// +#define PXE_ROMID_REV 0x02 + +// +// UNDI command interface revision. These are the values that get sent +// in option 94 (Client Network Interface Identifier) in the DHCP Discover +// and PXE Boot Server Request packets. +// +#define PXE_ROMID_MAJORVER 0x03 +#define PXE_ROMID_MINORVER 0x00 + +// +// Implementation flags +// +#define PXE_ROMID_IMP_HW_UNDI 0x80000000 +#define PXE_ROMID_IMP_SW_VIRT_ADDR 0x40000000 +#define PXE_ROMID_IMP_64BIT_DEVICE 0x00010000 +#define PXE_ROMID_IMP_FRAG_SUPPORTED 0x00008000 +#define PXE_ROMID_IMP_CMD_LINK_SUPPORTED 0x00004000 +#define PXE_ROMID_IMP_CMD_QUEUE_SUPPORTED 0x00002000 +#define PXE_ROMID_IMP_MULTI_FRAME_SUPPORTED 0x00001000 +#define PXE_ROMID_IMP_NVDATA_SUPPORT_MASK 0x00000C00 +#define PXE_ROMID_IMP_NVDATA_BULK_WRITABLE 0x00000C00 +#define PXE_ROMID_IMP_NVDATA_SPARSE_WRITABLE 0x00000800 +#define PXE_ROMID_IMP_NVDATA_READ_ONLY 0x00000400 +#define PXE_ROMID_IMP_NVDATA_NOT_AVAILABLE 0x00000000 +#define PXE_ROMID_IMP_STATISTICS_SUPPORTED 0x00000200 +#define PXE_ROMID_IMP_STATION_ADDR_SETTABLE 0x00000100 +#define PXE_ROMID_IMP_PROMISCUOUS_MULTICAST_RX_SUPPORTED 0x00000080 +#define PXE_ROMID_IMP_PROMISCUOUS_RX_SUPPORTED 0x00000040 +#define PXE_ROMID_IMP_BROADCAST_RX_SUPPORTED 0x00000020 +#define PXE_ROMID_IMP_FILTERED_MULTICAST_RX_SUPPORTED 0x00000010 +#define PXE_ROMID_IMP_SOFTWARE_INT_SUPPORTED 0x00000008 +#define PXE_ROMID_IMP_TX_COMPLETE_INT_SUPPORTED 0x00000004 +#define PXE_ROMID_IMP_PACKET_RX_INT_SUPPORTED 0x00000002 +#define PXE_ROMID_IMP_CMD_COMPLETE_INT_SUPPORTED 0x00000001 + + +typedef struct s_pxe_cdb { +PXE_OPCODE OpCode; +PXE_OPFLAGS OpFlags; +PXE_UINT16 CPBsize; +PXE_UINT16 DBsize; +UINT64 CPBaddr; +UINT64 DBaddr; +PXE_STATCODE StatCode; +PXE_STATFLAGS StatFlags; +PXE_UINT16 IFnum; +PXE_CONTROL Control; +} PXE_CDB; + + +typedef union u_pxe_ip_addr { +PXE_IPV6 IPv6; +PXE_IPV4 IPv4; +} PXE_IP_ADDR; + +typedef union pxe_device { +// +// PCI and PC Card NICs are both identified using bus, device +// and function numbers. For PC Card, this may require PC +// Card services to be loaded in the BIOS or preboot +// environment. +// +struct { +// +// See S/W UNDI ROMID structure definition for PCI and +// PCC BusType definitions. +// +PXE_UINT32 BusType; + +// +// Bus, device & function numbers that locate this device. +// +PXE_UINT16 Bus; +PXE_UINT8 Device; +PXE_UINT8 Function; +} PCI, PCC; + +// +// %%TBD - More information is needed about enumerating +// USB and 1394 devices. +// +struct { +PXE_UINT32 BusType; +PXE_UINT32 tdb; +} USB, _1394; +} PXE_DEVICE; + +// cpb and db definitions + +#define MAX_PCI_CONFIG_LEN 64 // # of dwords +#define MAX_EEPROM_LEN 128 // #of dwords +#define MAX_XMIT_BUFFERS 32 // recycling Q length for xmit_done +#define MAX_MCAST_ADDRESS_CNT 8 + +typedef struct s_pxe_cpb_start { + // + // PXE_VOID Delay(PXE_UINT64 microseconds); + // + // UNDI will never request a delay smaller than 10 microseconds + // and will always request delays in increments of 10 microseconds. + // The Delay() CallBack routine must delay between n and n + 10 + // microseconds before returning control to the UNDI. + // + // This field cannot be set to zero. + // + PXE_UINT64 Delay; + + // + // PXE_VOID Block(PXE_UINT32 enable); + // + // UNDI may need to block multi-threaded/multi-processor access to + // critical code sections when programming or accessing the network + // device. To this end, a blocking service is needed by the UNDI. + // When UNDI needs a block, it will call Block() passing a non-zero + // value. When UNDI no longer needs a block, it will call Block() + // with a zero value. When called, if the Block() is already enabled, + // do not return control to the UNDI until the previous Block() is + // disabled. + // + // This field cannot be set to zero. + // + PXE_UINT64 Block; + + // + // PXE_VOID Virt2Phys(PXE_UINT64 virtual, PXE_UINT64 physical_ptr); + // + // UNDI will pass the virtual address of a buffer and the virtual + // address of a 64-bit physical buffer. Convert the virtual address + // to a physical address and write the result to the physical address + // buffer. If virtual and physical addresses are the same, just + // copy the virtual address to the physical address buffer. + // + // This field can be set to zero if virtual and physical addresses + // are equal. + // + PXE_UINT64 Virt2Phys; + // + // PXE_VOID Mem_IO(PXE_UINT8 read_write, PXE_UINT8 len, PXE_UINT64 port, + // PXE_UINT64 buf_addr); + // + // UNDI will read or write the device io space using this call back + // function. It passes the number of bytes as the len parameter and it + // will be either 1,2,4 or 8. + // + // This field can not be set to zero. + // + PXE_UINT64 Mem_IO; +} PXE_CPB_START; + +#define PXE_DELAY_MILLISECOND 1000 +#define PXE_DELAY_SECOND 1000000 +#define PXE_IO_READ 0 +#define PXE_IO_WRITE 1 +#define PXE_MEM_READ 2 +#define PXE_MEM_WRITE 4 + + +typedef struct s_pxe_db_get_init_info { + // + // Minimum length of locked memory buffer that must be given to + // the Initialize command. Giving UNDI more memory will generally + // give better performance. + // + // If MemoryRequired is zero, the UNDI does not need and will not + // use system memory to receive and transmit packets. + // + PXE_UINT32 MemoryRequired; + + // + // Maximum frame data length for Tx/Rx excluding the media header. + // + PXE_UINT32 FrameDataLen; + + // + // Supported link speeds are in units of mega bits. Common ethernet + // values are 10, 100 and 1000. Unused LinkSpeeds[] entries are zero + // filled. + // + PXE_UINT32 LinkSpeeds[4]; + + // + // Number of non-volatile storage items. + // + PXE_UINT32 NvCount; + + // + // Width of non-volatile storage item in bytes. 0, 1, 2 or 4 + // + PXE_UINT16 NvWidth; + + // + // Media header length. This is the typical media header length for + // this UNDI. This information is needed when allocating receive + // and transmit buffers. + // + PXE_UINT16 MediaHeaderLen; + + // + // Number of bytes in the NIC hardware (MAC) address. + // + PXE_UINT16 HWaddrLen; + + // + // Maximum number of multicast MAC addresses in the multicast + // MAC address filter list. + // + PXE_UINT16 MCastFilterCnt; + + // + // Default number and size of transmit and receive buffers that will + // be allocated by the UNDI. If MemoryRequired is non-zero, this + // allocation will come out of the memory buffer given to the Initialize + // command. If MemoryRequired is zero, this allocation will come out of + // memory on the NIC. + // + PXE_UINT16 TxBufCnt; + PXE_UINT16 TxBufSize; + PXE_UINT16 RxBufCnt; + PXE_UINT16 RxBufSize; + + // + // Hardware interface types defined in the Assigned Numbers RFC + // and used in DHCP and ARP packets. + // See the PXE_IFTYPE typedef and PXE_IFTYPE_xxx macros. + // + PXE_UINT8 IFtype; + + // + // Supported duplex. See PXE_DUPLEX_xxxxx #defines below. + // + PXE_UINT8 Duplex; + + // + // Supported loopback options. See PXE_LOOPBACK_xxxxx #defines below. + // + PXE_UINT8 LoopBack; +} PXE_DB_GET_INIT_INFO; + +#define PXE_MAX_TXRX_UNIT_ETHER 1500 + +#define PXE_HWADDR_LEN_ETHER 0x0006 +#define PXE_MAC_HEADER_LEN_ETHER 0x000E + +#define PXE_DUPLEX_ENABLE_FULL_SUPPORTED 1 +#define PXE_DUPLEX_FORCE_FULL_SUPPORTED 2 + +#define PXE_LOOPBACK_INTERNAL_SUPPORTED 1 +#define PXE_LOOPBACK_EXTERNAL_SUPPORTED 2 + + +typedef struct s_pxe_pci_config_info { + // + // This is the flag field for the PXE_DB_GET_CONFIG_INFO union. + // For PCI bus devices, this field is set to PXE_BUSTYPE_PCI. + // + PXE_UINT32 BusType; + + // + // This identifies the PCI network device that this UNDI interface + // is bound to. + // + PXE_UINT16 Bus; + PXE_UINT8 Device; + PXE_UINT8 Function; + + // + // This is a copy of the PCI configuration space for this + // network device. + // + union { + PXE_UINT8 Byte[256]; + PXE_UINT16 Word[128]; + PXE_UINT32 Dword[64]; + } Config; +} PXE_PCI_CONFIG_INFO; + + +typedef struct s_pxe_pcc_config_info { + // + // This is the flag field for the PXE_DB_GET_CONFIG_INFO union. + // For PCC bus devices, this field is set to PXE_BUSTYPE_PCC. + // + PXE_UINT32 BusType; + + // + // This identifies the PCC network device that this UNDI interface + // is bound to. + // + PXE_UINT16 Bus; + PXE_UINT8 Device; + PXE_UINT8 Function; + + // + // This is a copy of the PCC configuration space for this + // network device. + // + union { + PXE_UINT8 Byte[256]; + PXE_UINT16 Word[128]; + PXE_UINT32 Dword[64]; + } Config; +} PXE_PCC_CONFIG_INFO; + + +typedef struct s_pxe_usb_config_info { + PXE_UINT32 BusType; + // %%TBD What should we return here... +} PXE_USB_CONFIG_INFO; + + +typedef struct s_pxe_1394_config_info { + PXE_UINT32 BusType; + // %%TBD What should we return here... +} PXE_1394_CONFIG_INFO; + + +typedef union u_pxe_db_get_config_info { + PXE_PCI_CONFIG_INFO pci; + PXE_PCC_CONFIG_INFO pcc; + PXE_USB_CONFIG_INFO usb; + PXE_1394_CONFIG_INFO _1394; +} PXE_DB_GET_CONFIG_INFO; + + +typedef struct s_pxe_cpb_initialize { + // + // Address of first (lowest) byte of the memory buffer. This buffer must + // be in contiguous physical memory and cannot be swapped out. The UNDI + // will be using this for transmit and receive buffering. + // + PXE_UINT64 MemoryAddr; + + // + // MemoryLength must be greater than or equal to MemoryRequired + // returned by the Get Init Info command. + // + PXE_UINT32 MemoryLength; + + // + // Desired link speed in Mbit/sec. Common ethernet values are 10, 100 + // and 1000. Setting a value of zero will auto-detect and/or use the + // default link speed (operation depends on UNDI/NIC functionality). + // + PXE_UINT32 LinkSpeed; + + // + // Suggested number and size of receive and transmit buffers to + // allocate. If MemoryAddr and MemoryLength are non-zero, this + // allocation comes out of the supplied memory buffer. If MemoryAddr + // and MemoryLength are zero, this allocation comes out of memory + // on the NIC. + // + // If these fields are set to zero, the UNDI will allocate buffer + // counts and sizes as it sees fit. + // + PXE_UINT16 TxBufCnt; + PXE_UINT16 TxBufSize; + PXE_UINT16 RxBufCnt; + PXE_UINT16 RxBufSize; + + // + // The following configuration parameters are optional and must be zero + // to use the default values. + // + PXE_UINT8 Duplex; + + PXE_UINT8 LoopBack; +} PXE_CPB_INITIALIZE; + + +#define PXE_DUPLEX_DEFAULT 0x00 +#define PXE_FORCE_FULL_DUPLEX 0x01 +#define PXE_ENABLE_FULL_DUPLEX 0x02 + +#define LOOPBACK_NORMAL 0 +#define LOOPBACK_INTERNAL 1 +#define LOOPBACK_EXTERNAL 2 + + +typedef struct s_pxe_db_initialize { + // + // Actual amount of memory used from the supplied memory buffer. This + // may be less that the amount of memory suppllied and may be zero if + // the UNDI and network device do not use external memory buffers. + // + // Memory used by the UNDI and network device is allocated from the + // lowest memory buffer address. + // + PXE_UINT32 MemoryUsed; + + // + // Actual number and size of receive and transmit buffers that were + // allocated. + // + PXE_UINT16 TxBufCnt; + PXE_UINT16 TxBufSize; + PXE_UINT16 RxBufCnt; + PXE_UINT16 RxBufSize; +} PXE_DB_INITIALIZE; + + +typedef struct s_pxe_cpb_receive_filters { + // + // List of multicast MAC addresses. This list, if present, will + // replace the existing multicast MAC address filter list. + // + PXE_MAC_ADDR MCastList[MAX_MCAST_ADDRESS_CNT]; +} PXE_CPB_RECEIVE_FILTERS; + + +typedef struct s_pxe_db_receive_filters { + // + // Filtered multicast MAC address list. + // + PXE_MAC_ADDR MCastList[MAX_MCAST_ADDRESS_CNT]; +} PXE_DB_RECEIVE_FILTERS; + + +typedef struct s_pxe_cpb_station_address { + // + // If supplied and supported, the current station MAC address + // will be changed. + // + PXE_MAC_ADDR StationAddr; +} PXE_CPB_STATION_ADDRESS; + + +typedef struct s_pxe_dpb_station_address { + // + // Current station MAC address. + // + PXE_MAC_ADDR StationAddr; + + // + // Station broadcast MAC address. + // + PXE_MAC_ADDR BroadcastAddr; + + // + // Permanent station MAC address. + // + PXE_MAC_ADDR PermanentAddr; +} PXE_DB_STATION_ADDRESS; + + +typedef struct s_pxe_db_statistics { + // + // Bit field identifying what statistic data is collected by the + // UNDI/NIC. + // If bit 0x00 is set, Data[0x00] is collected. + // If bit 0x01 is set, Data[0x01] is collected. + // If bit 0x20 is set, Data[0x20] is collected. + // If bit 0x21 is set, Data[0x21] is collected. + // Etc. + // + PXE_UINT64 Supported; + + // + // Statistic data. + // + PXE_UINT64 Data[64]; +} PXE_DB_STATISTICS; + +// +// Total number of frames received. Includes frames with errors and +// dropped frames. +// +#define PXE_STATISTICS_RX_TOTAL_FRAMES 0x00 + +// +// Number of valid frames received and copied into receive buffers. +// +#define PXE_STATISTICS_RX_GOOD_FRAMES 0x01 + +// +// Number of frames below the minimum length for the media. +// This would be <64 for ethernet. +// +#define PXE_STATISTICS_RX_UNDERSIZE_FRAMES 0x02 + +// +// Number of frames longer than the maxminum length for the +// media. This would be >1500 for ethernet. +// +#define PXE_STATISTICS_RX_OVERSIZE_FRAMES 0x03 + +// +// Valid frames that were dropped because receive buffers were full. +// +#define PXE_STATISTICS_RX_DROPPED_FRAMES 0x04 + +// +// Number of valid unicast frames received and not dropped. +// +#define PXE_STATISTICS_RX_UNICAST_FRAMES 0x05 + +// +// Number of valid broadcast frames received and not dropped. +// +#define PXE_STATISTICS_RX_BROADCAST_FRAMES 0x06 + +// +// Number of valid mutlicast frames received and not dropped. +// +#define PXE_STATISTICS_RX_MULTICAST_FRAMES 0x07 + +// +// Number of frames w/ CRC or alignment errors. +// +#define PXE_STATISTICS_RX_CRC_ERROR_FRAMES 0x08 + +// +// Total number of bytes received. Includes frames with errors +// and dropped frames. +// +#define PXE_STATISTICS_RX_TOTAL_BYTES 0x09 + +// +// Transmit statistics. +// +#define PXE_STATISTICS_TX_TOTAL_FRAMES 0x0A +#define PXE_STATISTICS_TX_GOOD_FRAMES 0x0B +#define PXE_STATISTICS_TX_UNDERSIZE_FRAMES 0x0C +#define PXE_STATISTICS_TX_OVERSIZE_FRAMES 0x0D +#define PXE_STATISTICS_TX_DROPPED_FRAMES 0x0E +#define PXE_STATISTICS_TX_UNICAST_FRAMES 0x0F +#define PXE_STATISTICS_TX_BROADCAST_FRAMES 0x10 +#define PXE_STATISTICS_TX_MULTICAST_FRAMES 0x11 +#define PXE_STATISTICS_TX_CRC_ERROR_FRAMES 0x12 +#define PXE_STATISTICS_TX_TOTAL_BYTES 0x13 + +// +// Number of collisions detection on this subnet. +// +#define PXE_STATISTICS_COLLISIONS 0x14 + +// +// Number of frames destined for unsupported protocol. +// +#define PXE_STATISTICS_UNSUPPORTED_PROTOCOL 0x15 + + +typedef struct s_pxe_cpb_mcast_ip_to_mac { + // + // Multicast IP address to be converted to multicast MAC address. + // + PXE_IP_ADDR IP; +} PXE_CPB_MCAST_IP_TO_MAC; + + +typedef struct s_pxe_db_mcast_ip_to_mac { + // + // Multicast MAC address. + // + PXE_MAC_ADDR MAC; +} PXE_DB_MCAST_IP_TO_MAC; + + +typedef struct s_pxe_cpb_nvdata_sparse { + // + // NvData item list. Only items in this list will be updated. + // + struct { + // Non-volatile storage address to be changed. + PXE_UINT32 Addr; + + // Data item to write into above storage address. + + union { + PXE_UINT8 Byte; + PXE_UINT16 Word; + PXE_UINT32 Dword; + } Data; + } Item[MAX_EEPROM_LEN]; +} PXE_CPB_NVDATA_SPARSE; + + +// +// When using bulk update, the size of the CPB structure must be +// the same size as the non-volatile NIC storage. +// +typedef union u_pxe_cpb_nvdata_bulk { + // + // Array of byte-wide data items. + // + PXE_UINT8 Byte[MAX_EEPROM_LEN << 2]; + + // + // Array of word-wide data items. + // + PXE_UINT16 Word[MAX_EEPROM_LEN << 1]; + + // + // Array of dword-wide data items. + // + PXE_UINT32 Dword[MAX_EEPROM_LEN]; +} PXE_CPB_NVDATA_BULK; + +typedef struct s_pxe_db_nvdata { + + // Arrays of data items from non-volatile storage. + + union { + // + // Array of byte-wide data items. + // + PXE_UINT8 Byte[MAX_EEPROM_LEN << 2]; + + // + // Array of word-wide data items. + // + PXE_UINT16 Word[MAX_EEPROM_LEN << 1]; + + // Array of dword-wide data items. + + PXE_UINT32 Dword[MAX_EEPROM_LEN]; + } Data; +} PXE_DB_NVDATA; + + +typedef struct s_pxe_db_get_status { + // + // Length of next receive frame (header + data). If this is zero, + // there is no next receive frame available. + // + PXE_UINT32 RxFrameLen; + + // + // Reserved, set to zero. + // + PXE_UINT32 reserved; + + // + // Addresses of transmitted buffers that need to be recycled. + // + PXE_UINT64 TxBuffer[MAX_XMIT_BUFFERS]; +} PXE_DB_GET_STATUS; + + + +typedef struct s_pxe_cpb_fill_header { + // + // Source and destination MAC addresses. These will be copied into + // the media header without doing byte swapping. + // + PXE_MAC_ADDR SrcAddr; + PXE_MAC_ADDR DestAddr; + + // + // Address of first byte of media header. The first byte of packet data + // follows the last byte of the media header. + // + PXE_UINT64 MediaHeader; + + // + // Length of packet data in bytes (not including the media header). + // + PXE_UINT32 PacketLen; + + // + // Protocol type. This will be copied into the media header without + // doing byte swapping. Protocol type numbers can be obtained from + // the Assigned Numbers RFC 1700. + // + PXE_UINT16 Protocol; + + // + // Length of the media header in bytes. + // + PXE_UINT16 MediaHeaderLen; +} PXE_CPB_FILL_HEADER; + + +#define PXE_PROTOCOL_ETHERNET_IP 0x0800 +#define PXE_PROTOCOL_ETHERNET_ARP 0x0806 +#define MAX_XMIT_FRAGMENTS 16 + +typedef struct s_pxe_cpb_fill_header_fragmented { + // + // Source and destination MAC addresses. These will be copied into + // the media header without doing byte swapping. + // + PXE_MAC_ADDR SrcAddr; + PXE_MAC_ADDR DestAddr; + + // + // Length of packet data in bytes (not including the media header). + // + PXE_UINT32 PacketLen; + + // + // Protocol type. This will be copied into the media header without + // doing byte swapping. Protocol type numbers can be obtained from + // the Assigned Numbers RFC 1700. + // + PXE_MEDIA_PROTOCOL Protocol; + + // + // Length of the media header in bytes. + // + PXE_UINT16 MediaHeaderLen; + + // + // Number of packet fragment descriptors. + // + PXE_UINT16 FragCnt; + + // + // Reserved, must be set to zero. + // + PXE_UINT16 reserved; + + // + // Array of packet fragment descriptors. The first byte of the media + // header is the first byte of the first fragment. + // + struct { + // + // Address of this packet fragment. + // + PXE_UINT64 FragAddr; + + // + // Length of this packet fragment. + // + PXE_UINT32 FragLen; + + // + // Reserved, must be set to zero. + // + PXE_UINT32 reserved; + } FragDesc[MAX_XMIT_FRAGMENTS]; +} PXE_CPB_FILL_HEADER_FRAGMENTED; + + + +typedef struct s_pxe_cpb_transmit { + // + // Address of first byte of frame buffer. This is also the first byte + // of the media header. + // + PXE_UINT64 FrameAddr; + + // + // Length of the data portion of the frame buffer in bytes. Do not + // include the length of the media header. + // + PXE_UINT32 DataLen; + + // + // Length of the media header in bytes. + // + PXE_UINT16 MediaheaderLen; + + // + // Reserved, must be zero. + // + PXE_UINT16 reserved; +} PXE_CPB_TRANSMIT; + + + +typedef struct s_pxe_cpb_transmit_fragments { + // + // Length of packet data in bytes (not including the media header). + // + PXE_UINT32 FrameLen; + + // + // Length of the media header in bytes. + // + PXE_UINT16 MediaheaderLen; + + // + // Number of packet fragment descriptors. + // + PXE_UINT16 FragCnt; + + // + // Array of frame fragment descriptors. The first byte of the first + // fragment is also the first byte of the media header. + // + struct { + // + // Address of this frame fragment. + // + PXE_UINT64 FragAddr; + + // + // Length of this frame fragment. + // + PXE_UINT32 FragLen; + + // + // Reserved, must be set to zero. + // + PXE_UINT32 reserved; + } FragDesc[MAX_XMIT_FRAGMENTS]; +} PXE_CPB_TRANSMIT_FRAGMENTS; + + +typedef struct s_pxe_cpb_receive { + // + // Address of first byte of receive buffer. This is also the first byte + // of the frame header. + // + PXE_UINT64 BufferAddr; + + // + // Length of receive buffer. This must be large enough to hold the + // received frame (media header + data). If the length of smaller than + // the received frame, data will be lost. + // + PXE_UINT32 BufferLen; + + // + // Reserved, must be set to zero. + // + PXE_UINT32 reserved; +} PXE_CPB_RECEIVE; + + +typedef struct s_pxe_db_receive { + // + // Source and destination MAC addresses from media header. + // + PXE_MAC_ADDR SrcAddr; + PXE_MAC_ADDR DestAddr; + + // + // Length of received frame. May be larger than receive buffer size. + // The receive buffer will not be overwritten. This is how to tell + // if data was lost because the receive buffer was too small. + // + PXE_UINT32 FrameLen; + + // + // Protocol type from media header. + // + PXE_MEDIA_PROTOCOL Protocol; + + // + // Length of media header in received frame. + // + PXE_UINT16 MediaHeaderLen; + + // + // Type of receive frame. + // + PXE_FRAME_TYPE Type; + + // + // Reserved, must be zero. + // + PXE_UINT8 reserved[7]; + +} PXE_DB_RECEIVE; + +#pragma pack() + +/* EOF - efi_pxe.h */ +#endif /* _EFI_PXE_H */ + diff --git a/gnu-efi/inc/efiapi.h b/gnu-efi/inc/efiapi.h new file mode 100644 index 0000000..bdf5de2 --- /dev/null +++ b/gnu-efi/inc/efiapi.h @@ -0,0 +1,967 @@ +#ifndef _EFI_API_H +#define _EFI_API_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efiapi.h + +Abstract: + + Global EFI runtime & boot service interfaces + + + + +Revision History + +--*/ + +// +// EFI Specification Revision +// + +#define EFI_SPECIFICATION_MAJOR_REVISION 1 +#define EFI_SPECIFICATION_MINOR_REVISION 02 + +// +// Declare forward referenced data structures +// + +INTERFACE_DECL(_EFI_SYSTEM_TABLE); + +// +// EFI Memory +// + +typedef +EFI_STATUS +(EFIAPI *EFI_ALLOCATE_PAGES) ( + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN NoPages, + OUT EFI_PHYSICAL_ADDRESS *Memory + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FREE_PAGES) ( + IN EFI_PHYSICAL_ADDRESS Memory, + IN UINTN NoPages + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_MEMORY_MAP) ( + IN OUT UINTN *MemoryMapSize, + IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, + OUT UINTN *MapKey, + OUT UINTN *DescriptorSize, + OUT UINT32 *DescriptorVersion + ); + +#define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size)) + + +typedef +EFI_STATUS +(EFIAPI *EFI_ALLOCATE_POOL) ( + IN EFI_MEMORY_TYPE PoolType, + IN UINTN Size, + OUT VOID **Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FREE_POOL) ( + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN UINT32 DescriptorVersion, + IN EFI_MEMORY_DESCRIPTOR *VirtualMap + ); + + +#define EFI_OPTIONAL_PTR 0x00000001 +#define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc +#define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data + + +typedef +EFI_STATUS +(EFIAPI *EFI_CONVERT_POINTER) ( + IN UINTN DebugDisposition, + IN OUT VOID **Address + ); + + +// +// EFI Events +// + +#define EVT_TIMER 0x80000000 +#define EVT_RUNTIME 0x40000000 +#define EVT_RUNTIME_CONTEXT 0x20000000 + +#define EVT_NOTIFY_WAIT 0x00000100 +#define EVT_NOTIFY_SIGNAL 0x00000200 + +#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 +#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 + +#define EVT_EFI_SIGNAL_MASK 0x000000FF +#define EVT_EFI_SIGNAL_MAX 4 + +#define EFI_EVENT_TIMER EVT_TIMER +#define EFI_EVENT_RUNTIME EVT_RUNTIME +#define EFI_EVENT_RUNTIME_CONTEXT EVT_RUNTIME_CONTEXT +#define EFI_EVENT_NOTIFY_WAIT EVT_NOTIFY_WAIT +#define EFI_EVENT_NOTIFY_SIGNAL EVT_NOTIFY_SIGNAL +#define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES EVT_SIGNAL_EXIT_BOOT_SERVICES +#define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE +#define EFI_EVENT_EFI_SIGNAL_MASK EVT_EFI_SIGNAL_MASK +#define EFI_EVENT_EFI_SIGNAL_MAX EVT_EFI_SIGNAL_MAX + + +typedef +VOID +(EFIAPI *EFI_EVENT_NOTIFY) ( + IN EFI_EVENT Event, + IN VOID *Context + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CREATE_EVENT) ( + IN UINT32 Type, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction, + IN VOID *NotifyContext, + OUT EFI_EVENT *Event + ); + +typedef enum { + TimerCancel, + TimerPeriodic, + TimerRelative, + TimerTypeMax +} EFI_TIMER_DELAY; + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_TIMER) ( + IN EFI_EVENT Event, + IN EFI_TIMER_DELAY Type, + IN UINT64 TriggerTime + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SIGNAL_EVENT) ( + IN EFI_EVENT Event + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_WAIT_FOR_EVENT) ( + IN UINTN NumberOfEvents, + IN EFI_EVENT *Event, + OUT UINTN *Index + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLOSE_EVENT) ( + IN EFI_EVENT Event + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CHECK_EVENT) ( + IN EFI_EVENT Event + ); + +// +// Task priority level +// + +#define TPL_APPLICATION 4 +#define TPL_CALLBACK 8 +#define TPL_NOTIFY 16 +#define TPL_HIGH_LEVEL 31 +#define EFI_TPL_APPLICATION TPL_APPLICATION +#define EFI_TPL_CALLBACK TPL_CALLBACK +#define EFI_TPL_NOTIFY TPL_NOTIFY +#define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL +typedef +EFI_TPL +(EFIAPI *EFI_RAISE_TPL) ( + IN EFI_TPL NewTpl + ); + +typedef +VOID +(EFIAPI *EFI_RESTORE_TPL) ( + IN EFI_TPL OldTpl + ); + + +// +// EFI platform varibles +// + +#define EFI_GLOBAL_VARIABLE \ + { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} } + +// Variable attributes +#define EFI_VARIABLE_NON_VOLATILE 0x00000001 +#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 +#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 +#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 +#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 +#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 +#define EFI_VARIABLE_APPEND_WRITE 0x00000040 + +// Variable size limitation +#define EFI_MAXIMUM_VARIABLE_SIZE 1024 + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_VARIABLE) ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ); + + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_VARIABLE) ( + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data + ); + + +// +// EFI Time +// + +typedef struct { + UINT32 Resolution; // 1e-6 parts per million + UINT32 Accuracy; // hertz + BOOLEAN SetsToZero; // Set clears sub-second time +} EFI_TIME_CAPABILITIES; + + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_TIME) ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_TIME) ( + IN EFI_TIME *Time + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_WAKEUP_TIME) ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_WAKEUP_TIME) ( + IN BOOLEAN Enable, + IN EFI_TIME *Time OPTIONAL + ); + + +// +// Image functions +// + + +// PE32+ Subsystem type for EFI images + +#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION) +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 +#endif + +// PE32+ Machine type for EFI images + +#if !defined(EFI_IMAGE_MACHINE_IA32) +#define EFI_IMAGE_MACHINE_IA32 0x014c +#endif + +#if !defined(EFI_IMAGE_MACHINE_IA64) +#define EFI_IMAGE_MACHINE_IA64 0x0200 +#endif + +#if !defined(EFI_IMAGE_MACHINE_EBC) +#define EFI_IMAGE_MACHINE_EBC 0x0EBC +#endif + +#if !defined(EFI_IMAGE_MACHINE_X64) +#define EFI_IMAGE_MACHINE_X64 0x8664 +#endif + +#if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) +#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 +#endif + +#if !defined(EFI_IMAGE_MACHINE_AARCH64) +#define EFI_IMAGE_MACHINE_AARCH64 0xAA64 +#endif + +// Image Entry prototype + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( + IN EFI_HANDLE ImageHandle, + IN struct _EFI_SYSTEM_TABLE *SystemTable + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_LOAD) ( + IN BOOLEAN BootPolicy, + IN EFI_HANDLE ParentImageHandle, + IN EFI_DEVICE_PATH *FilePath, + IN VOID *SourceBuffer OPTIONAL, + IN UINTN SourceSize, + OUT EFI_HANDLE *ImageHandle + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_START) ( + IN EFI_HANDLE ImageHandle, + OUT UINTN *ExitDataSize, + OUT CHAR16 **ExitData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_EXIT) ( + IN EFI_HANDLE ImageHandle, + IN EFI_STATUS ExitStatus, + IN UINTN ExitDataSize, + IN CHAR16 *ExitData OPTIONAL + ); + + +// Image handle +/*#define LOADED_IMAGE_PROTOCOL \ + { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } + +#define EFI_IMAGE_INFORMATION_REVISION 0x1000 +typedef struct { + UINT32 Revision; + EFI_HANDLE ParentHandle; + struct _EFI_SYSTEM_TABLE *SystemTable; + + // Source location of image + EFI_HANDLE DeviceHandle; + EFI_DEVICE_PATH *FilePath; + VOID *Reserved; + + // Images load options + UINT32 LoadOptionsSize; + VOID *LoadOptions; + + // Location of where image was loaded + VOID *ImageBase; + UINT64 ImageSize; + EFI_MEMORY_TYPE ImageCodeType; + EFI_MEMORY_TYPE ImageDataType; + + // If the driver image supports a dynamic unload request + EFI_IMAGE_UNLOAD Unload; + +} EFI_LOADED_IMAGE;*/ + + +typedef +EFI_STATUS +(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( + IN EFI_HANDLE ImageHandle, + IN UINTN MapKey + ); + +// +// Misc +// + + +typedef +EFI_STATUS +(EFIAPI *EFI_STALL) ( + IN UINTN Microseconds + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_WATCHDOG_TIMER) ( + IN UINTN Timeout, + IN UINT64 WatchdogCode, + IN UINTN DataSize, + IN CHAR16 *WatchdogData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CONNECT_CONTROLLER) ( + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE *DriverImageHandle OPTIONAL, + IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, + IN BOOLEAN Recursive + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISCONNECT_CONTROLLER) ( + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE DriverImageHandle OPTIONAL, + IN EFI_HANDLE ChildHandle OPTIONAL + ); + +#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 +#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 +#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 +#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 +#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 +#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 + +typedef +EFI_STATUS +(EFIAPI *EFI_OPEN_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT VOID **Interface OPTIONAL, + IN EFI_HANDLE AgentHandle, + IN EFI_HANDLE ControllerHandle, + IN UINT32 Attributes + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLOSE_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN EFI_HANDLE AgentHandle, + IN EFI_HANDLE ControllerHandle + ); + +typedef struct { + EFI_HANDLE AgentHandle; + EFI_HANDLE ControllerHandle; + UINT32 Attributes; + UINT32 OpenCount; +} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; + +typedef +EFI_STATUS +(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, + OUT UINTN *EntryCount + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( + IN EFI_HANDLE Handle, + OUT EFI_GUID ***ProtocolBuffer, + OUT UINTN *ProtocolBufferCount + ); + +typedef enum { + AllHandles, + ByRegisterNotify, + ByProtocol +} EFI_LOCATE_SEARCH_TYPE; + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( + IN EFI_LOCATE_SEARCH_TYPE SearchType, + IN EFI_GUID *Protocol OPTIONAL, + IN VOID *SearchKey OPTIONAL, + IN OUT UINTN *NoHandles, + OUT EFI_HANDLE **Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_PROTOCOL) ( + IN EFI_GUID *Protocol, + IN VOID *Registration OPTIONAL, + OUT VOID **Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( + IN OUT EFI_HANDLE *Handle, + ... + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( + IN OUT EFI_HANDLE Handle, + ... + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CALCULATE_CRC32) ( + IN VOID *Data, + IN UINTN DataSize, + OUT UINT32 *Crc32 + ); + +typedef +VOID +(EFIAPI *EFI_COPY_MEM) ( + IN VOID *Destination, + IN VOID *Source, + IN UINTN Length + ); + +typedef +VOID +(EFIAPI *EFI_SET_MEM) ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ); + + +typedef +EFI_STATUS +(EFIAPI *EFI_CREATE_EVENT_EX) ( + IN UINT32 Type, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, + IN const VOID *NotifyContext OPTIONAL, + IN const EFI_GUID *EventGroup OPTIONAL, + OUT EFI_EVENT *Event + ); + +typedef enum { + EfiResetCold, + EfiResetWarm, + EfiResetShutdown +} EFI_RESET_TYPE; + +typedef +EFI_STATUS +(EFIAPI *EFI_RESET_SYSTEM) ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN CHAR16 *ResetData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( + OUT UINT64 *Count + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( + OUT UINT32 *HighCount + ); + +typedef struct { + UINT64 Length; + union { + EFI_PHYSICAL_ADDRESS DataBlock; + EFI_PHYSICAL_ADDRESS ContinuationPointer; + } Union; +} EFI_CAPSULE_BLOCK_DESCRIPTOR; + +typedef struct { + EFI_GUID CapsuleGuid; + UINT32 HeaderSize; + UINT32 Flags; + UINT32 CapsuleImageSize; +} EFI_CAPSULE_HEADER; + +#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 +#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 +#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 + +typedef +EFI_STATUS +(EFIAPI *EFI_UPDATE_CAPSULE) ( + IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( + IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, + IN UINTN CapsuleCount, + OUT UINT64 *MaximumCapsuleSize, + OUT EFI_RESET_TYPE *ResetType + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_QUERY_VARIABLE_INFO) ( + IN UINT32 Attributes, + OUT UINT64 *MaximumVariableStorageSize, + OUT UINT64 *RemainingVariableStorageSize, + OUT UINT64 *MaximumVariableSize + ); + +// +// Protocol handler functions +// + +typedef enum { + EFI_NATIVE_INTERFACE, + EFI_PCODE_INTERFACE +} EFI_INTERFACE_TYPE; + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( + IN OUT EFI_HANDLE *Handle, + IN EFI_GUID *Protocol, + IN EFI_INTERFACE_TYPE InterfaceType, + IN VOID *Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN VOID *OldInterface, + IN VOID *NewInterface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + IN VOID *Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_HANDLE_PROTOCOL) ( + IN EFI_HANDLE Handle, + IN EFI_GUID *Protocol, + OUT VOID **Interface + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( + IN EFI_GUID *Protocol, + IN EFI_EVENT Event, + OUT VOID **Registration + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_HANDLE) ( + IN EFI_LOCATE_SEARCH_TYPE SearchType, + IN EFI_GUID *Protocol OPTIONAL, + IN VOID *SearchKey OPTIONAL, + IN OUT UINTN *BufferSize, + OUT EFI_HANDLE *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( + IN EFI_GUID *Protocol, + IN OUT EFI_DEVICE_PATH **DevicePath, + OUT EFI_HANDLE *Device + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( + IN EFI_GUID *Guid, + IN VOID *Table + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_RESERVED_SERVICE) ( + ); + +// +// Standard EFI table header +// + +typedef struct _EFI_TABLE_HEADER { + UINT64 Signature; + UINT32 Revision; + UINT32 HeaderSize; + UINT32 CRC32; + UINT32 Reserved; +} EFI_TABLE_HEADER; + + +// +// EFI Runtime Serivces Table +// + +#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 +#define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) + +typedef struct { + EFI_TABLE_HEADER Hdr; + + // + // Time services + // + + EFI_GET_TIME GetTime; + EFI_SET_TIME SetTime; + EFI_GET_WAKEUP_TIME GetWakeupTime; + EFI_SET_WAKEUP_TIME SetWakeupTime; + + // + // Virtual memory services + // + + EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; + EFI_CONVERT_POINTER ConvertPointer; + + // + // Variable serviers + // + + EFI_GET_VARIABLE GetVariable; + EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; + EFI_SET_VARIABLE SetVariable; + + // + // Misc + // + + EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; + EFI_RESET_SYSTEM ResetSystem; + + EFI_UPDATE_CAPSULE UpdateCapsule; + EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; + EFI_QUERY_VARIABLE_INFO QueryVariableInfo; +} EFI_RUNTIME_SERVICES; + + +// +// EFI Boot Services Table +// + +#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 +#define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) + +typedef struct _EFI_BOOT_SERVICES { + + EFI_TABLE_HEADER Hdr; + + // + // Task priority functions + // + + EFI_RAISE_TPL RaiseTPL; + EFI_RESTORE_TPL RestoreTPL; + + // + // Memory functions + // + + EFI_ALLOCATE_PAGES AllocatePages; + EFI_FREE_PAGES FreePages; + EFI_GET_MEMORY_MAP GetMemoryMap; + EFI_ALLOCATE_POOL AllocatePool; + EFI_FREE_POOL FreePool; + + // + // Event & timer functions + // + + EFI_CREATE_EVENT CreateEvent; + EFI_SET_TIMER SetTimer; + EFI_WAIT_FOR_EVENT WaitForEvent; + EFI_SIGNAL_EVENT SignalEvent; + EFI_CLOSE_EVENT CloseEvent; + EFI_CHECK_EVENT CheckEvent; + + // + // Protocol handler functions + // + + EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; + EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; + EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; + EFI_HANDLE_PROTOCOL HandleProtocol; + EFI_HANDLE_PROTOCOL PCHandleProtocol; + EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; + EFI_LOCATE_HANDLE LocateHandle; + EFI_LOCATE_DEVICE_PATH LocateDevicePath; + EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; + + // + // Image functions + // + + EFI_IMAGE_LOAD LoadImage; + EFI_IMAGE_START StartImage; + EFI_EXIT Exit; + EFI_IMAGE_UNLOAD UnloadImage; + EFI_EXIT_BOOT_SERVICES ExitBootServices; + + // + // Misc functions + // + + EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; + EFI_STALL Stall; + EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; + + // + // DriverSupport Services + // + + EFI_CONNECT_CONTROLLER ConnectController; + EFI_DISCONNECT_CONTROLLER DisconnectController; + + // + // Open and Close Protocol Services + // + EFI_OPEN_PROTOCOL OpenProtocol; + EFI_CLOSE_PROTOCOL CloseProtocol; + EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; + + // + // Library Services + // + EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; + EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; + EFI_LOCATE_PROTOCOL LocateProtocol; + EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; + EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; + + // + // 32-bit CRC Services + // + EFI_CALCULATE_CRC32 CalculateCrc32; + + // + // Misc Services + // + EFI_COPY_MEM CopyMem; + EFI_SET_MEM SetMem; + EFI_CREATE_EVENT_EX CreateEventEx; +} EFI_BOOT_SERVICES; + + +// +// EFI Configuration Table and GUID definitions +// + +#define MPS_TABLE_GUID \ + { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +#define ACPI_TABLE_GUID \ + { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +#define ACPI_20_TABLE_GUID \ + { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } + +#define SMBIOS_TABLE_GUID \ + { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +#define SMBIOS3_TABLE_GUID \ + { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} } + +#define SAL_SYSTEM_TABLE_GUID \ + { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + + +typedef struct _EFI_CONFIGURATION_TABLE { + EFI_GUID VendorGuid; + VOID *VendorTable; +} EFI_CONFIGURATION_TABLE; + + +// +// EFI System Table +// + + + + +#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 +#define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) + +typedef struct _EFI_SYSTEM_TABLE { + EFI_TABLE_HEADER Hdr; + + CHAR16 *FirmwareVendor; + UINT32 FirmwareRevision; + + EFI_HANDLE ConsoleInHandle; + SIMPLE_INPUT_INTERFACE *ConIn; + + EFI_HANDLE ConsoleOutHandle; + SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; + + EFI_HANDLE StandardErrorHandle; + SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; + + EFI_RUNTIME_SERVICES *RuntimeServices; + EFI_BOOT_SERVICES *BootServices; + + UINTN NumberOfTableEntries; + EFI_CONFIGURATION_TABLE *ConfigurationTable; + +} EFI_SYSTEM_TABLE; + +#endif + diff --git a/gnu-efi/inc/eficompiler.h b/gnu-efi/inc/eficompiler.h new file mode 100644 index 0000000..26636c7 --- /dev/null +++ b/gnu-efi/inc/eficompiler.h @@ -0,0 +1,30 @@ +/*++ + +Copyright (c) 2016 Pete Batard + +Module Name: + + eficompiler.h + +Abstract: + + Compiler specific adjustments + +--*/ + +#ifdef _MSC_EXTENSIONS +#define EFI_UNUSED +#else +#define EFI_UNUSED __attribute__((__unused__)) +#endif + +#ifdef _MSC_EXTENSIONS +#define ALIGN(x) __declspec(align(x)) +#else +#define ALIGN(x) __attribute__((__aligned__(x))) +#endif + +/* Also add a catch-all on __attribute__() for MS compilers */ +#ifdef _MSC_EXTENSIONS +#define __attribute__(x) +#endif diff --git a/gnu-efi/inc/eficon.h b/gnu-efi/inc/eficon.h new file mode 100644 index 0000000..5d17e04 --- /dev/null +++ b/gnu-efi/inc/eficon.h @@ -0,0 +1,306 @@ +#ifndef _EFI_CON_H +#define _EFI_CON_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + eficon.h + +Abstract: + + EFI console protocols + + + +Revision History + +--*/ + +// +// Text output protocol +// + +#define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \ + { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID + +INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_RESET) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_OUTPUT_STRING) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN CHAR16 *String + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_TEST_STRING) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN CHAR16 *String + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_QUERY_MODE) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN UINTN ModeNumber, + OUT UINTN *Columns, + OUT UINTN *Rows + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_MODE) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN UINTN ModeNumber + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_ATTRIBUTE) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN UINTN Attribute + ); + +#define EFI_BLACK 0x00 +#define EFI_BLUE 0x01 +#define EFI_GREEN 0x02 +#define EFI_CYAN (EFI_BLUE | EFI_GREEN) +#define EFI_RED 0x04 +#define EFI_MAGENTA (EFI_BLUE | EFI_RED) +#define EFI_BROWN (EFI_GREEN | EFI_RED) +#define EFI_LIGHTGRAY (EFI_BLUE | EFI_GREEN | EFI_RED) +#define EFI_BRIGHT 0x08 +#define EFI_DARKGRAY (EFI_BRIGHT) +#define EFI_LIGHTBLUE (EFI_BLUE | EFI_BRIGHT) +#define EFI_LIGHTGREEN (EFI_GREEN | EFI_BRIGHT) +#define EFI_LIGHTCYAN (EFI_CYAN | EFI_BRIGHT) +#define EFI_LIGHTRED (EFI_RED | EFI_BRIGHT) +#define EFI_LIGHTMAGENTA (EFI_MAGENTA | EFI_BRIGHT) +#define EFI_YELLOW (EFI_BROWN | EFI_BRIGHT) +#define EFI_WHITE (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT) + +#define EFI_TEXT_ATTR(f,b) ((f) | ((b) << 4)) + +#define EFI_BACKGROUND_BLACK 0x00 +#define EFI_BACKGROUND_BLUE 0x10 +#define EFI_BACKGROUND_GREEN 0x20 +#define EFI_BACKGROUND_CYAN (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN) +#define EFI_BACKGROUND_RED 0x40 +#define EFI_BACKGROUND_MAGENTA (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED) +#define EFI_BACKGROUND_BROWN (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED) +#define EFI_BACKGROUND_LIGHTGRAY (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED) + + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_CLEAR_SCREEN) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN UINTN Column, + IN UINTN Row + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TEXT_ENABLE_CURSOR) ( + IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, + IN BOOLEAN Enable + ); + +typedef struct { + INT32 MaxMode; + // current settings + INT32 Mode; + INT32 Attribute; + INT32 CursorColumn; + INT32 CursorRow; + BOOLEAN CursorVisible; +} SIMPLE_TEXT_OUTPUT_MODE; + +typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE { + EFI_TEXT_RESET Reset; + + EFI_TEXT_OUTPUT_STRING OutputString; + EFI_TEXT_TEST_STRING TestString; + + EFI_TEXT_QUERY_MODE QueryMode; + EFI_TEXT_SET_MODE SetMode; + EFI_TEXT_SET_ATTRIBUTE SetAttribute; + + EFI_TEXT_CLEAR_SCREEN ClearScreen; + EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; + EFI_TEXT_ENABLE_CURSOR EnableCursor; + + // Current mode + SIMPLE_TEXT_OUTPUT_MODE *Mode; +} SIMPLE_TEXT_OUTPUT_INTERFACE, EFI_SIMPLE_TEXT_OUT_PROTOCOL; + +// +// Define's for required EFI Unicode Box Draw character +// + +#define BOXDRAW_HORIZONTAL 0x2500 +#define BOXDRAW_VERTICAL 0x2502 +#define BOXDRAW_DOWN_RIGHT 0x250c +#define BOXDRAW_DOWN_LEFT 0x2510 +#define BOXDRAW_UP_RIGHT 0x2514 +#define BOXDRAW_UP_LEFT 0x2518 +#define BOXDRAW_VERTICAL_RIGHT 0x251c +#define BOXDRAW_VERTICAL_LEFT 0x2524 +#define BOXDRAW_DOWN_HORIZONTAL 0x252c +#define BOXDRAW_UP_HORIZONTAL 0x2534 +#define BOXDRAW_VERTICAL_HORIZONTAL 0x253c + +#define BOXDRAW_DOUBLE_HORIZONTAL 0x2550 +#define BOXDRAW_DOUBLE_VERTICAL 0x2551 +#define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552 +#define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553 +#define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554 + +#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555 +#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556 +#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557 + +#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558 +#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559 +#define BOXDRAW_DOUBLE_UP_RIGHT 0x255a + +#define BOXDRAW_UP_LEFT_DOUBLE 0x255b +#define BOXDRAW_UP_DOUBLE_LEFT 0x255c +#define BOXDRAW_DOUBLE_UP_LEFT 0x255d + +#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e +#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f +#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560 + +#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561 +#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562 +#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563 + +#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564 +#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565 +#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566 + +#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567 +#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568 +#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569 + +#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a +#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b +#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c + +// +// EFI Required Block Elements Code Chart +// + +#define BLOCKELEMENT_FULL_BLOCK 0x2588 +#define BLOCKELEMENT_LIGHT_SHADE 0x2591 +// +// EFI Required Geometric Shapes Code Chart +// + +#define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2 +#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba +#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc +#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4 + +// +// EFI Required Arrow shapes +// + +#define ARROW_UP 0x2191 +#define ARROW_DOWN 0x2193 + +// +// Text input protocol +// + +#define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \ + { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID + +INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE); + +typedef struct { + UINT16 ScanCode; + CHAR16 UnicodeChar; +} EFI_INPUT_KEY; + +// +// Baseline unicode control chars +// + +#define CHAR_NULL 0x0000 +#define CHAR_BACKSPACE 0x0008 +#define CHAR_TAB 0x0009 +#define CHAR_LINEFEED 0x000A +#define CHAR_CARRIAGE_RETURN 0x000D + +// +// Scan codes for base line keys +// + +#define SCAN_NULL 0x0000 +#define SCAN_UP 0x0001 +#define SCAN_DOWN 0x0002 +#define SCAN_RIGHT 0x0003 +#define SCAN_LEFT 0x0004 +#define SCAN_HOME 0x0005 +#define SCAN_END 0x0006 +#define SCAN_INSERT 0x0007 +#define SCAN_DELETE 0x0008 +#define SCAN_PAGE_UP 0x0009 +#define SCAN_PAGE_DOWN 0x000A +#define SCAN_F1 0x000B +#define SCAN_F2 0x000C +#define SCAN_F3 0x000D +#define SCAN_F4 0x000E +#define SCAN_F5 0x000F +#define SCAN_F6 0x0010 +#define SCAN_F7 0x0011 +#define SCAN_F8 0x0012 +#define SCAN_F9 0x0013 +#define SCAN_F10 0x0014 +#define SCAN_F11 0x0015 +#define SCAN_F12 0x0016 +#define SCAN_ESC 0x0017 + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_RESET) ( + IN struct _SIMPLE_INPUT_INTERFACE *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_INPUT_READ_KEY) ( + IN struct _SIMPLE_INPUT_INTERFACE *This, + OUT EFI_INPUT_KEY *Key + ); + +typedef struct _SIMPLE_INPUT_INTERFACE { + EFI_INPUT_RESET Reset; + EFI_INPUT_READ_KEY ReadKeyStroke; + EFI_EVENT WaitForKey; +} SIMPLE_INPUT_INTERFACE, EFI_SIMPLE_TEXT_IN_PROTOCOL; + +#endif + diff --git a/gnu-efi/inc/efidebug.h b/gnu-efi/inc/efidebug.h new file mode 100644 index 0000000..8e54dcd --- /dev/null +++ b/gnu-efi/inc/efidebug.h @@ -0,0 +1,620 @@ +#ifndef _EFI_DEBUG_H +#define _EFI_DEBUG_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efidebug.h + +Abstract: + + EFI library debug functions + + + +Revision History + +--*/ + +extern UINTN EFIDebug; + +#if EFI_DEBUG + + #define DBGASSERT(a) DbgAssert(__FILE__, __LINE__, #a) + #define DEBUG(a) DbgPrint a + +#else + + #define DBGASSERT(a) + #define DEBUG(a) + +#endif + +#if EFI_DEBUG_CLEAR_MEMORY + + #define DBGSETMEM(a,l) SetMem(a,l,(CHAR8)BAD_POINTER) + +#else + + #define DBGSETMEM(a,l) + +#endif + +#define D_INIT 0x00000001 // Initialization style messages +#define D_WARN 0x00000002 // Warnings +#define D_LOAD 0x00000004 // Load events +#define D_FS 0x00000008 // EFI File system +#define D_POOL 0x00000010 // Alloc & Free's +#define D_PAGE 0x00000020 // Alloc & Free's +#define D_INFO 0x00000040 // Verbose +#define D_VAR 0x00000100 // Variable +#define D_PARSE 0x00000200 // Command parsing +#define D_BM 0x00000400 // Boot manager +#define D_BLKIO 0x00001000 // BlkIo Driver +#define D_BLKIO_ULTRA 0x00002000 // BlkIo Driver +#define D_NET 0x00004000 // SNI Driver +#define D_NET_ULTRA 0x00008000 // SNI Driver +#define D_TXTIN 0x00010000 // Simple Input Driver +#define D_TXTOUT 0x00020000 // Simple Text Output Driver +#define D_ERROR_ATA 0x00040000 // ATA error messages +#define D_ERROR 0x80000000 // Error + +#define D_RESERVED 0x7fffC880 // Bits not reserved above + +// +// Current Debug level of the system, value of EFIDebug +// +//#define EFI_DBUG_MASK (D_ERROR | D_WARN | D_LOAD | D_BLKIO | D_INIT) +#define EFI_DBUG_MASK (D_ERROR) + +// +// +// + +#if EFI_DEBUG + + #define ASSERT(a) if(!(a)) DBGASSERT(a) + #define ASSERT_LOCKED(l) if(!(l)->Lock) DBGASSERT(l not locked) + #define ASSERT_STRUCT(p,t) DBGASSERT(t not structure), p + +#else + + #define ASSERT(a) + #define ASSERT_LOCKED(l) + #define ASSERT_STRUCT(p,t) + +#endif + +// +// Prototypes +// + +INTN +DbgAssert ( + CONST CHAR8 *file, + INTN lineno, + CONST CHAR8 *string + ); + +INTN +DbgPrint ( + INTN mask, + CONST CHAR8 *format, + ... + ); + +// +// Instruction Set Architectures definitions for debuggers +// + +typedef INTN EFI_EXCEPTION_TYPE; + +// IA32 +#define EXCEPT_IA32_DIVIDE_ERROR 0 +#define EXCEPT_IA32_DEBUG 1 +#define EXCEPT_IA32_NMI 2 +#define EXCEPT_IA32_BREAKPOINT 3 +#define EXCEPT_IA32_OVERFLOW 4 +#define EXCEPT_IA32_BOUND 5 +#define EXCEPT_IA32_INVALID_OPCODE 6 +#define EXCEPT_IA32_DOUBLE_FAULT 8 +#define EXCEPT_IA32_INVALID_TSS 10 +#define EXCEPT_IA32_SEG_NOT_PRESENT 11 +#define EXCEPT_IA32_STACK_FAULT 12 +#define EXCEPT_IA32_GP_FAULT 13 +#define EXCEPT_IA32_PAGE_FAULT 14 +#define EXCEPT_IA32_FP_ERROR 16 +#define EXCEPT_IA32_ALIGNMENT_CHECK 17 +#define EXCEPT_IA32_MACHINE_CHECK 18 +#define EXCEPT_IA32_SIMD 19 + +typedef struct { + UINT16 Fcw; + UINT16 Fsw; + UINT16 Ftw; + UINT16 Opcode; + UINT32 Eip; + UINT16 Cs; + UINT16 Reserved1; + UINT32 DataOffset; + UINT16 Ds; + UINT8 Reserved2[10]; + UINT8 St0Mm0[10], Reserved3[6]; + UINT8 St1Mm1[10], Reserved4[6]; + UINT8 St2Mm2[10], Reserved5[6]; + UINT8 St3Mm3[10], Reserved6[6]; + UINT8 St4Mm4[10], Reserved7[6]; + UINT8 St5Mm5[10], Reserved8[6]; + UINT8 St6Mm6[10], Reserved9[6]; + UINT8 St7Mm7[10], Reserved10[6]; + UINT8 Xmm0[16]; + UINT8 Xmm1[16]; + UINT8 Xmm2[16]; + UINT8 Xmm3[16]; + UINT8 Xmm4[16]; + UINT8 Xmm5[16]; + UINT8 Xmm6[16]; + UINT8 Xmm7[16]; + UINT8 Reserved11[14 * 16]; +} EFI_FX_SAVE_STATE_IA32; + +typedef struct { + UINT32 ExceptionData; + EFI_FX_SAVE_STATE_IA32 FxSaveState; + UINT32 Dr0; + UINT32 Dr1; + UINT32 Dr2; + UINT32 Dr3; + UINT32 Dr6; + UINT32 Dr7; + UINT32 Cr0; + UINT32 Cr1; + UINT32 Cr2; + UINT32 Cr3; + UINT32 Cr4; + UINT32 Eflags; + UINT32 Ldtr; + UINT32 Tr; + UINT32 Gdtr[2]; + UINT32 Idtr[2]; + UINT32 Eip; + UINT32 Gs; + UINT32 Fs; + UINT32 Es; + UINT32 Ds; + UINT32 Cs; + UINT32 Ss; + UINT32 Edi; + UINT32 Esi; + UINT32 Ebp; + UINT32 Esp; + UINT32 Ebx; + UINT32 Edx; + UINT32 Ecx; + UINT32 Eax; +} EFI_SYSTEM_CONTEXT_IA32; + +// X64 +#define EXCEPT_X64_DIVIDE_ERROR 0 +#define EXCEPT_X64_DEBUG 1 +#define EXCEPT_X64_NMI 2 +#define EXCEPT_X64_BREAKPOINT 3 +#define EXCEPT_X64_OVERFLOW 4 +#define EXCEPT_X64_BOUND 5 +#define EXCEPT_X64_INVALID_OPCODE 6 +#define EXCEPT_X64_DOUBLE_FAULT 8 +#define EXCEPT_X64_INVALID_TSS 10 +#define EXCEPT_X64_SEG_NOT_PRESENT 11 +#define EXCEPT_X64_STACK_FAULT 12 +#define EXCEPT_X64_GP_FAULT 13 +#define EXCEPT_X64_PAGE_FAULT 14 +#define EXCEPT_X64_FP_ERROR 16 +#define EXCEPT_X64_ALIGNMENT_CHECK 17 +#define EXCEPT_X64_MACHINE_CHECK 18 +#define EXCEPT_X64_SIMD 19 + +typedef struct { + UINT16 Fcw; + UINT16 Fsw; + UINT16 Ftw; + UINT16 Opcode; + UINT64 Rip; + UINT64 DataOffset; + UINT8 Reserved1[8]; + UINT8 St0Mm0[10], Reserved2[6]; + UINT8 St1Mm1[10], Reserved3[6]; + UINT8 St2Mm2[10], Reserved4[6]; + UINT8 St3Mm3[10], Reserved5[6]; + UINT8 St4Mm4[10], Reserved6[6]; + UINT8 St5Mm5[10], Reserved7[6]; + UINT8 St6Mm6[10], Reserved8[6]; + UINT8 St7Mm7[10], Reserved9[6]; + UINT8 Xmm0[16]; + UINT8 Xmm1[16]; + UINT8 Xmm2[16]; + UINT8 Xmm3[16]; + UINT8 Xmm4[16]; + UINT8 Xmm5[16]; + UINT8 Xmm6[16]; + UINT8 Xmm7[16]; + UINT8 Reserved11[14 * 16]; +} EFI_FX_SAVE_STATE_X64; + +typedef struct { + UINT64 ExceptionData; + EFI_FX_SAVE_STATE_X64 FxSaveState; + UINT64 Dr0; + UINT64 Dr1; + UINT64 Dr2; + UINT64 Dr3; + UINT64 Dr6; + UINT64 Dr7; + UINT64 Cr0; + UINT64 Cr1; + UINT64 Cr2; + UINT64 Cr3; + UINT64 Cr4; + UINT64 Cr8; + UINT64 Rflags; + UINT64 Ldtr; + UINT64 Tr; + UINT64 Gdtr[2]; + UINT64 Idtr[2]; + UINT64 Rip; + UINT64 Gs; + UINT64 Fs; + UINT64 Es; + UINT64 Ds; + UINT64 Cs; + UINT64 Ss; + UINT64 Rdi; + UINT64 Rsi; + UINT64 Rbp; + UINT64 Rsp; + UINT64 Rbx; + UINT64 Rdx; + UINT64 Rcx; + UINT64 Rax; + UINT64 R8; + UINT64 R9; + UINT64 R10; + UINT64 R11; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; +} EFI_SYSTEM_CONTEXT_X64; + +/// IA64 +#define EXCEPT_IPF_VHTP_TRANSLATION 0 +#define EXCEPT_IPF_INSTRUCTION_TLB 1 +#define EXCEPT_IPF_DATA_TLB 2 +#define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3 +#define EXCEPT_IPF_ALT_DATA_TLB 4 +#define EXCEPT_IPF_DATA_NESTED_TLB 5 +#define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6 +#define EXCEPT_IPF_DATA_KEY_MISSED 7 +#define EXCEPT_IPF_DIRTY_BIT 8 +#define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9 +#define EXCEPT_IPF_DATA_ACCESS_BIT 10 +#define EXCEPT_IPF_BREAKPOINT 11 +#define EXCEPT_IPF_EXTERNAL_INTERRUPT 12 +#define EXCEPT_IPF_PAGE_NOT_PRESENT 20 +#define EXCEPT_IPF_KEY_PERMISSION 21 +#define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22 +#define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23 +#define EXCEPT_IPF_GENERAL_EXCEPTION 24 +#define EXCEPT_IPF_DISABLED_FP_REGISTER 25 +#define EXCEPT_IPF_NAT_CONSUMPTION 26 +#define EXCEPT_IPF_SPECULATION 27 +#define EXCEPT_IPF_DEBUG 29 +#define EXCEPT_IPF_UNALIGNED_REFERENCE 30 +#define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31 +#define EXCEPT_IPF_FP_FAULT 32 +#define EXCEPT_IPF_FP_TRAP 33 +#define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34 +#define EXCEPT_IPF_TAKEN_BRANCH 35 +#define EXCEPT_IPF_SINGLE_STEP 36 +#define EXCEPT_IPF_IA32_EXCEPTION 45 +#define EXCEPT_IPF_IA32_INTERCEPT 46 +#define EXCEPT_IPF_IA32_INTERRUPT 47 + +typedef struct { + UINT64 Reserved; + UINT64 R1; + UINT64 R2; + UINT64 R3; + UINT64 R4; + UINT64 R5; + UINT64 R6; + UINT64 R7; + UINT64 R8; + UINT64 R9; + UINT64 R10; + UINT64 R11; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; + UINT64 R16; + UINT64 R17; + UINT64 R18; + UINT64 R19; + UINT64 R20; + UINT64 R21; + UINT64 R22; + UINT64 R23; + UINT64 R24; + UINT64 R25; + UINT64 R26; + UINT64 R27; + UINT64 R28; + UINT64 R29; + UINT64 R30; + UINT64 R31; + UINT64 F2[2]; + UINT64 F3[2]; + UINT64 F4[2]; + UINT64 F5[2]; + UINT64 F6[2]; + UINT64 F7[2]; + UINT64 F8[2]; + UINT64 F9[2]; + UINT64 F10[2]; + UINT64 F11[2]; + UINT64 F12[2]; + UINT64 F13[2]; + UINT64 F14[2]; + UINT64 F15[2]; + UINT64 F16[2]; + UINT64 F17[2]; + UINT64 F18[2]; + UINT64 F19[2]; + UINT64 F20[2]; + UINT64 F21[2]; + UINT64 F22[2]; + UINT64 F23[2]; + UINT64 F24[2]; + UINT64 F25[2]; + UINT64 F26[2]; + UINT64 F27[2]; + UINT64 F28[2]; + UINT64 F29[2]; + UINT64 F30[2]; + UINT64 F31[2]; + UINT64 Pr; + UINT64 B0; + UINT64 B1; + UINT64 B2; + UINT64 B3; + UINT64 B4; + UINT64 B5; + UINT64 B6; + UINT64 B7; + UINT64 ArRsc; + UINT64 ArBsp; + UINT64 ArBspstore; + UINT64 ArRnat; + UINT64 ArFcr; + UINT64 ArEflag; + UINT64 ArCsd; + UINT64 ArSsd; + UINT64 ArCflg; + UINT64 ArFsr; + UINT64 ArFir; + UINT64 ArFdr; + UINT64 ArCcv; + UINT64 ArUnat; + UINT64 ArFpsr; + UINT64 ArPfs; + UINT64 ArLc; + UINT64 ArEc; + UINT64 CrDcr; + UINT64 CrItm; + UINT64 CrIva; + UINT64 CrPta; + UINT64 CrIpsr; + UINT64 CrIsr; + UINT64 CrIip; + UINT64 CrIfa; + UINT64 CrItir; + UINT64 CrIipa; + UINT64 CrIfs; + UINT64 CrIim; + UINT64 CrIha; + UINT64 Dbr0; + UINT64 Dbr1; + UINT64 Dbr2; + UINT64 Dbr3; + UINT64 Dbr4; + UINT64 Dbr5; + UINT64 Dbr6; + UINT64 Dbr7; + UINT64 Ibr0; + UINT64 Ibr1; + UINT64 Ibr2; + UINT64 Ibr3; + UINT64 Ibr4; + UINT64 Ibr5; + UINT64 Ibr6; + UINT64 Ibr7; + UINT64 IntNat; +} EFI_SYSTEM_CONTEXT_IPF; + +// EBC +#define EXCEPT_EBC_UNDEFINED 0 +#define EXCEPT_EBC_DIVIDE_ERROR 1 +#define EXCEPT_EBC_DEBUG 2 +#define EXCEPT_EBC_BREAKPOINT 3 +#define EXCEPT_EBC_OVERFLOW 4 +#define EXCEPT_EBC_INVALID_OPCODE 5 +#define EXCEPT_EBC_STACK_FAULT 6 +#define EXCEPT_EBC_ALIGNMENT_CHECK 7 +#define EXCEPT_EBC_INSTRUCTION_ENCODING 8 +#define EXCEPT_EBC_BAD_BREAK 9 +#define EXCEPT_EBC_STEP 10 +#define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP + +typedef struct { + UINT64 R0; + UINT64 R1; + UINT64 R2; + UINT64 R3; + UINT64 R4; + UINT64 R5; + UINT64 R6; + UINT64 R7; + UINT64 Flags; + UINT64 ControlFlags; + UINT64 Ip; +} EFI_SYSTEM_CONTEXT_EBC; + +// ARM +#define EXCEPT_ARM_RESET 0 +#define EXCEPT_ARM_UNDEFINED_INSTRUCTION 1 +#define EXCEPT_ARM_SOFTWARE_INTERRUPT 2 +#define EXCEPT_ARM_PREFETCH_ABORT 3 +#define EXCEPT_ARM_DATA_ABORT 4 +#define EXCEPT_ARM_RESERVED 5 +#define EXCEPT_ARM_IRQ 6 +#define EXCEPT_ARM_FIQ 7 +#define MAX_ARM_EXCEPTION EXCEPT_ARM_FIQ + +typedef struct { + UINT32 R0; + UINT32 R1; + UINT32 R2; + UINT32 R3; + UINT32 R4; + UINT32 R5; + UINT32 R6; + UINT32 R7; + UINT32 R8; + UINT32 R9; + UINT32 R10; + UINT32 R11; + UINT32 R12; + UINT32 SP; + UINT32 LR; + UINT32 PC; + UINT32 CPSR; + UINT32 DFSR; + UINT32 DFAR; + UINT32 IFSR; + UINT32 IFAR; +} EFI_SYSTEM_CONTEXT_ARM; + + +typedef union { + EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc; + EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32; + EFI_SYSTEM_CONTEXT_X64 *SystemContextX64; + EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf; + EFI_SYSTEM_CONTEXT_ARM *SystemContextArm; +} EFI_SYSTEM_CONTEXT; + +typedef +VOID +(EFIAPI *EFI_EXCEPTION_CALLBACK)( + IN EFI_EXCEPTION_TYPE ExceptionType, + IN OUT EFI_SYSTEM_CONTEXT SystemContext); + +typedef +VOID +(EFIAPI *EFI_PERIODIC_CALLBACK)( + IN OUT EFI_SYSTEM_CONTEXT SystemContext); + +typedef enum { + IsaIa32 = EFI_IMAGE_MACHINE_IA32, + IsaX64 = EFI_IMAGE_MACHINE_X64, + IsaIpf = EFI_IMAGE_MACHINE_IA64, + IsaEbc = EFI_IMAGE_MACHINE_EBC, + IsaArm = EFI_IMAGE_MACHINE_ARMTHUMB_MIXED, +// IsaArm64 = EFI_IMAGE_MACHINE_AARCH64 +} EFI_INSTRUCTION_SET_ARCHITECTURE; + +// +// DEBUG_IMAGE_INFO +// + +#define EFI_DEBUG_IMAGE_INFO_TABLE_GUID \ + { 0x49152e77, 0x1ada, 0x4764, {0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b} } + +#define EFI_DEBUG_IMAGE_INFO_UPDATE_IN_PROGRESS 0x01 +#define EFI_DEBUG_IMAGE_INFO_TABLE_MODIFIED 0x02 +#define EFI_DEBUG_IMAGE_INFO_INITIAL_SIZE (EFI_PAGE_SIZE / sizeof (UINTN)) +#define EFI_DEBUG_IMAGE_INFO_TYPE_NORMAL 0x01 + +typedef struct { +UINT64 Signature; +EFI_PHYSICAL_ADDRESS EfiSystemTableBase; +UINT32 Crc32; +} EFI_SYSTEM_TABLE_POINTER; + +typedef struct { +UINT32 ImageInfoType; +EFI_LOADED_IMAGE_PROTOCOL *LoadedImageProtocolInstance; +EFI_HANDLE *ImageHandle; +} EFI_DEBUG_IMAGE_INFO_NORMAL; + +typedef union { +UINT32 *ImageInfoType; +EFI_DEBUG_IMAGE_INFO_NORMAL *NormalImage; +} EFI_DEBUG_IMAGE_INFO; + +typedef struct { +volatile UINT32 UpdateStatus; +UINT32 TableSize; +EFI_DEBUG_IMAGE_INFO *EfiDebugImageInfoTable; +} EFI_DEBUG_IMAGE_INFO_TABLE_HEADER; + +// +// EFI_DEBUGGER_PROTOCOL +// + +#define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \ + { 0x2755590c, 0x6f3c, 0x42fa, {0x9e, 0xa4, 0xa3, 0xba, 0x54, 0x3c, 0xda, 0x25} } + +INTERFACE_DECL(_EFI_DEBUG_SUPPORT_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)( + IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This, + OUT UINTN *MaxProcessorIndex); + +typedef +EFI_STATUS +(EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)( + IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This, + IN UINTN ProcessorIndex, + IN EFI_PERIODIC_CALLBACK PeriodicCallback); + +typedef +EFI_STATUS +(EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)( + IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This, + IN UINTN ProcessorIndex, + IN EFI_EXCEPTION_CALLBACK ExceptionCallback, + IN EFI_EXCEPTION_TYPE ExceptionType); + +typedef +EFI_STATUS +(EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)( + IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This, + IN UINTN ProcessorIndex, + IN VOID *Start, + IN UINT64 Length); + +typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL { + EFI_INSTRUCTION_SET_ARCHITECTURE Isa; + EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex; + EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback; + EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback; + EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache; +} EFI_DEBUG_SUPPORT_PROTOCOL; + +#endif diff --git a/gnu-efi/inc/efidef.h b/gnu-efi/inc/efidef.h new file mode 100644 index 0000000..8b70051 --- /dev/null +++ b/gnu-efi/inc/efidef.h @@ -0,0 +1,220 @@ +#ifndef _EFI_DEF_H +#define _EFI_DEF_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efidef.h + +Abstract: + + EFI definitions + + + + +Revision History + +--*/ + +typedef UINT16 CHAR16; +typedef UINT8 CHAR8; +typedef UINT8 BOOLEAN; +#ifndef CONST + #define CONST const +#endif +#ifndef TRUE + #define TRUE ((BOOLEAN) 1) + #define FALSE ((BOOLEAN) 0) +#endif + +#ifndef NULL + #define NULL ((VOID *) 0) +#endif + +typedef UINTN EFI_STATUS; +typedef UINT64 EFI_LBA; +typedef UINTN EFI_TPL; +typedef VOID *EFI_HANDLE; +typedef VOID *EFI_EVENT; + + +// +// Prototype argument decoration for EFI parameters to indicate +// their direction +// +// IN - argument is passed into the function +// OUT - argument (pointer) is returned from the function +// OPTIONAL - argument is optional +// + +#ifndef IN + #define IN + #define OUT + #define OPTIONAL +#endif + + +// +// A GUID +// + +typedef struct { + UINT32 Data1; + UINT16 Data2; + UINT16 Data3; + UINT8 Data4[8]; +} EFI_GUID; + + +// +// Time +// + +typedef struct { + UINT16 Year; // 1998 - 20XX + UINT8 Month; // 1 - 12 + UINT8 Day; // 1 - 31 + UINT8 Hour; // 0 - 23 + UINT8 Minute; // 0 - 59 + UINT8 Second; // 0 - 59 + UINT8 Pad1; + UINT32 Nanosecond; // 0 - 999,999,999 + INT16 TimeZone; // -1440 to 1440 or 2047 + UINT8 Daylight; + UINT8 Pad2; +} EFI_TIME; + +// Bit definitions for EFI_TIME.Daylight +#define EFI_TIME_ADJUST_DAYLIGHT 0x01 +#define EFI_TIME_IN_DAYLIGHT 0x02 + +// Value definition for EFI_TIME.TimeZone +#define EFI_UNSPECIFIED_TIMEZONE 0x07FF + + + +// +// Networking +// + +typedef struct { + UINT8 Addr[4]; +} EFI_IPv4_ADDRESS; + +typedef struct { + UINT8 Addr[16]; +} EFI_IPv6_ADDRESS; + +typedef struct { + UINT8 Addr[32]; +} EFI_MAC_ADDRESS; + +typedef struct { + UINT32 ReceivedQueueTimeoutValue; + UINT32 TransmitQueueTimeoutValue; + UINT16 ProtocolTypeFilter; + BOOLEAN EnableUnicastReceive; + BOOLEAN EnableMulticastReceive; + BOOLEAN EnableBroadcastReceive; + BOOLEAN EnablePromiscuousReceive; + BOOLEAN FlushQueuesOnReset; + BOOLEAN EnableReceiveTimestamps; + BOOLEAN DisableBackgroundPolling; +} EFI_MANAGED_NETWORK_CONFIG_DATA; + +// +// Memory +// + +typedef UINT64 EFI_PHYSICAL_ADDRESS; +typedef UINT64 EFI_VIRTUAL_ADDRESS; + +typedef enum { + AllocateAnyPages, + AllocateMaxAddress, + AllocateAddress, + MaxAllocateType +} EFI_ALLOCATE_TYPE; + +//Preseve the attr on any range supplied. +//ConventialMemory must have WB,SR,SW when supplied. +//When allocating from ConventialMemory always make it WB,SR,SW +//When returning to ConventialMemory always make it WB,SR,SW +//When getting the memory map, or on RT for runtime types + + +typedef enum { + EfiReservedMemoryType, + EfiLoaderCode, + EfiLoaderData, + EfiBootServicesCode, + EfiBootServicesData, + EfiRuntimeServicesCode, + EfiRuntimeServicesData, + EfiConventionalMemory, + EfiUnusableMemory, + EfiACPIReclaimMemory, + EfiACPIMemoryNVS, + EfiMemoryMappedIO, + EfiMemoryMappedIOPortSpace, + EfiPalCode, + EfiMaxMemoryType +} EFI_MEMORY_TYPE; + +// possible caching types for the memory range +#define EFI_MEMORY_UC 0x0000000000000001 +#define EFI_MEMORY_WC 0x0000000000000002 +#define EFI_MEMORY_WT 0x0000000000000004 +#define EFI_MEMORY_WB 0x0000000000000008 +#define EFI_MEMORY_UCE 0x0000000000000010 + +// physical memory protection on range +#define EFI_MEMORY_WP 0x0000000000001000 +#define EFI_MEMORY_RP 0x0000000000002000 +#define EFI_MEMORY_XP 0x0000000000004000 + +// range requires a runtime mapping +#define EFI_MEMORY_RUNTIME 0x8000000000000000 + +#define EFI_MEMORY_DESCRIPTOR_VERSION 1 +typedef struct { + UINT32 Type; // Field size is 32 bits followed by 32 bit pad + UINT32 Pad; + EFI_PHYSICAL_ADDRESS PhysicalStart; // Field size is 64 bits + EFI_VIRTUAL_ADDRESS VirtualStart; // Field size is 64 bits + UINT64 NumberOfPages; // Field size is 64 bits + UINT64 Attribute; // Field size is 64 bits +} EFI_MEMORY_DESCRIPTOR; + +// +// International Language +// + +typedef UINT8 ISO_639_2; +#define ISO_639_2_ENTRY_SIZE 3 + +// +// +// + +#define EFI_PAGE_SIZE 4096 +#define EFI_PAGE_MASK 0xFFF +#define EFI_PAGE_SHIFT 12 + +#define EFI_SIZE_TO_PAGES(a) \ + ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) ) + +#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 +#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 +#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED \ + 0x0000000000000004 +#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED \ + 0x0000000000000008 +#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED \ + 0x0000000000000010 + +#endif diff --git a/gnu-efi/inc/efidevp.h b/gnu-efi/inc/efidevp.h new file mode 100644 index 0000000..fa1a235 --- /dev/null +++ b/gnu-efi/inc/efidevp.h @@ -0,0 +1,582 @@ +#ifndef _DEVPATH_H +#define _DEVPATH_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + devpath.h + +Abstract: + + Defines for parsing the EFI Device Path structures + + + +Revision History + +--*/ + +// +// Device Path structures - Section C +// + +typedef struct _EFI_DEVICE_PATH_PROTOCOL { + UINT8 Type; + UINT8 SubType; + UINT8 Length[2]; +} EFI_DEVICE_PATH_PROTOCOL; + +typedef struct _EFI_DEVICE_PATH_PROTOCOL _EFI_DEVICE_PATH; +typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH; + +#define EFI_DP_TYPE_MASK 0x7F +#define EFI_DP_TYPE_UNPACKED 0x80 + +//#define END_DEVICE_PATH_TYPE 0xff +#define END_DEVICE_PATH_TYPE 0x7f +//#define END_DEVICE_PATH_TYPE_UNPACKED 0x7f + +#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff +#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 +#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL)) + + +#define DP_IS_END_TYPE(a) +#define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) + +#define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK ) +#define DevicePathSubType(a) ( (a)->SubType ) +#define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) ) +#define NextDevicePathNode(a) ( (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a))) +//#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE_UNPACKED ) +#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE ) +#define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) +#define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) ) +#define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED ) + + +#define SetDevicePathNodeLength(a,l) { \ + (a)->Length[0] = (UINT8) (l); \ + (a)->Length[1] = (UINT8) ((l) >> 8); \ + } + +#define SetDevicePathEndNode(a) { \ + (a)->Type = END_DEVICE_PATH_TYPE; \ + (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \ + (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL); \ + (a)->Length[1] = 0; \ + } + + +/* + * Hardware Device Path (UEFI 2.4 specification, version 2.4 § 9.3.2.) + */ + +#define HARDWARE_DEVICE_PATH 0x01 + +#define HW_PCI_DP 0x01 +typedef struct _PCI_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 Function; + UINT8 Device; +} PCI_DEVICE_PATH; + +#define HW_PCCARD_DP 0x02 +typedef struct _PCCARD_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 FunctionNumber ; +} PCCARD_DEVICE_PATH; + +#define HW_MEMMAP_DP 0x03 +typedef struct _MEMMAP_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 MemoryType; + EFI_PHYSICAL_ADDRESS StartingAddress; + EFI_PHYSICAL_ADDRESS EndingAddress; +} MEMMAP_DEVICE_PATH; + +#define HW_VENDOR_DP 0x04 +typedef struct _VENDOR_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Guid; +} VENDOR_DEVICE_PATH; + +#define UNKNOWN_DEVICE_GUID \ + { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} } + +typedef struct _UKNOWN_DEVICE_VENDOR_DP { + VENDOR_DEVICE_PATH DevicePath; + UINT8 LegacyDriveLetter; +} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; + +#define HW_CONTROLLER_DP 0x05 +typedef struct _CONTROLLER_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Controller; +} CONTROLLER_DEVICE_PATH; + + +/* + * ACPI Device Path (UEFI 2.4 specification, version 2.4 § 9.3.3 and 9.3.4.) + */ +#define ACPI_DEVICE_PATH 0x02 + +#define ACPI_DP 0x01 +typedef struct _ACPI_HID_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 HID; + UINT32 UID; +} ACPI_HID_DEVICE_PATH; + +#define EXPANDED_ACPI_DP 0x02 +typedef struct _EXPANDED_ACPI_HID_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 HID; + UINT32 UID; + UINT32 CID; + UINT8 HidStr[1]; +} EXPANDED_ACPI_HID_DEVICE_PATH; + +#define ACPI_ADR_DP 3 +typedef struct _ACPI_ADR_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT32 ADR ; +} ACPI_ADR_DEVICE_PATH ; + +// +// EISA ID Macro +// EISA ID Definition 32-bits +// bits[15:0] - three character compressed ASCII EISA ID. +// bits[31:16] - binary number +// Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' +// +#define PNP_EISA_ID_CONST 0x41d0 +#define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16)) +#define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) + +#define PNP_EISA_ID_MASK 0xffff +#define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) + + +/* + * Messaging Device Path (UEFI 2.4 specification, version 2.4 § 9.3.5.) + */ +#define MESSAGING_DEVICE_PATH 0x03 + +#define MSG_ATAPI_DP 0x01 +typedef struct _ATAPI_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 PrimarySecondary; + UINT8 SlaveMaster; + UINT16 Lun; +} ATAPI_DEVICE_PATH; + +#define MSG_SCSI_DP 0x02 +typedef struct _SCSI_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT16 Pun; + UINT16 Lun; +} SCSI_DEVICE_PATH; + +#define MSG_FIBRECHANNEL_DP 0x03 +typedef struct _FIBRECHANNEL_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 WWN; + UINT64 Lun; +} FIBRECHANNEL_DEVICE_PATH; + +/** + * Fibre Channel Ex SubType. + * UEFI 2.0 specification version 2.4 § 9.3.5.6. + */ +#define MSG_FIBRECHANNELEX_DP 21 +typedef struct _FIBRECHANNELEX_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT32 Reserved ; + UINT8 WWN[ 8 ] ; /* World Wide Name */ + UINT8 Lun[ 8 ] ; /* Logical unit, T-10 SCSI Architecture Model 4 specification */ +} FIBRECHANNELEX_DEVICE_PATH ; + +#define MSG_1394_DP 0x04 +typedef struct _F1394_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 Guid; +} F1394_DEVICE_PATH; + +#define MSG_USB_DP 0x05 +typedef struct _USB_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT8 Port; + UINT8 Endpoint; +} USB_DEVICE_PATH; + +/** + * SATA Device Path SubType. + * UEFI 2.0 specification version 2.4 § 9.3.5.6. + */ +#define MSG_SATA_DP 18 +typedef struct _SATA_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT16 HBAPortNumber ; + UINT16 PortMultiplierPortNumber ; + UINT16 Lun ; /* Logical Unit Number */ +} SATA_DEVICE_PATH ; + +/** + * USB WWID Device Path SubType. + * UEFI 2.0 specification version 2.4 § 9.3.5.7. + */ +#define MSG_USB_WWID_DP 16 +typedef struct _USB_WWID_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT16 InterfaceNumber ; + UINT16 VendorId ; + UINT16 ProductId ; + CHAR16 SerialNumber[ 1 ] ; /* UTF-16 characters of the USB serial number */ +} USB_WWID_DEVICE_PATH ; + +/** + * Device Logical Unit SubType. + * UEFI 2.0 specification version 2.4 § 9.3.5.8. + */ +#define MSG_DEVICE_LOGICAL_UNIT_DP 17 +typedef struct _DEVICE_LOGICAL_UNIT_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT8 Lun ; /* Logical Unit Number */ +} DEVICE_LOGICAL_UNIT_DEVICE_PATH ; + +#define MSG_USB_CLASS_DP 0x0F +typedef struct _USB_CLASS_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT16 VendorId; + UINT16 ProductId; + UINT8 DeviceClass; + UINT8 DeviceSubclass; + UINT8 DeviceProtocol; +} USB_CLASS_DEVICE_PATH; + +#define MSG_I2O_DP 0x06 +typedef struct _I2O_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Tid; +} I2O_DEVICE_PATH; + +#define MSG_MAC_ADDR_DP 0x0b +typedef struct _MAC_ADDR_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_MAC_ADDRESS MacAddress; + UINT8 IfType; +} MAC_ADDR_DEVICE_PATH; + +#define MSG_IPv4_DP 0x0c +typedef struct _IPv4_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_IPv4_ADDRESS LocalIpAddress; + EFI_IPv4_ADDRESS RemoteIpAddress; + UINT16 LocalPort; + UINT16 RemotePort; + UINT16 Protocol; + BOOLEAN StaticIpAddress; + /* new from UEFI version 2, code must check Length field in Header */ + EFI_IPv4_ADDRESS GatewayIpAddress ; + EFI_IPv4_ADDRESS SubnetMask ; +} IPv4_DEVICE_PATH; + +#define MSG_IPv6_DP 0x0d +typedef struct _IPv6_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_IPv6_ADDRESS LocalIpAddress; + EFI_IPv6_ADDRESS RemoteIpAddress; + UINT16 LocalPort; + UINT16 RemotePort; + UINT16 Protocol; + BOOLEAN IPAddressOrigin ; + /* new from UEFI version 2, code must check Length field in Header */ + UINT8 PrefixLength ; + EFI_IPv6_ADDRESS GatewayIpAddress ; +} IPv6_DEVICE_PATH; + + +/** + * Uniform Resource Identifiers SubType. + * UEFI 2.0 specification version 2.4C § 9.3.5.23. + */ +#define MSG_URI_DP 24 +typedef struct _URI_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + CHAR8 Uri[1]; +} URI_DEVICE_PATH; + +/** + * Device Logical Unit SubType. + * UEFI 2.0 specification version 2.4 § 9.3.5.8. + */ +#define MSG_VLAN_DP 20 +typedef struct _VLAN_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT16 VlanId ; +} VLAN_DEVICE_PATH; + +#define MSG_INFINIBAND_DP 0x09 +typedef struct _INFINIBAND_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 ResourceFlags; + UINT8 PortGid[16]; + UINT64 ServiceId; + UINT64 TargetPortId; + UINT64 DeviceId; +} INFINIBAND_DEVICE_PATH; + +#define MSG_UART_DP 0x0e +typedef struct _UART_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 Reserved; + UINT64 BaudRate; + UINT8 DataBits; + UINT8 Parity; + UINT8 StopBits; +} UART_DEVICE_PATH; + +#define MSG_VENDOR_DP 0x0A +/* Use VENDOR_DEVICE_PATH struct */ + +#define EFI_PC_ANSI_GUID \ + { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } +#define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID + +#define EFI_VT_100_GUID \ + { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } +#define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID + +#define EFI_VT_100_PLUS_GUID \ + { 0x7baec70b, 0x57e0, 0x4c76, {0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43} } +#define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID + +#define EFI_VT_UTF8_GUID \ + { 0xad15a0d6, 0x8bec, 0x4acf, {0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88} } +#define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID + + +/* + * Media Device Path (UEFI 2.4 specification, version 2.4 § 9.3.6.) + */ +#define MEDIA_DEVICE_PATH 0x04 + +#define MEDIA_HARDDRIVE_DP 0x01 +typedef struct _HARDDRIVE_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 PartitionNumber; + UINT64 PartitionStart; + UINT64 PartitionSize; + UINT8 Signature[16]; + UINT8 MBRType; + UINT8 SignatureType; +} HARDDRIVE_DEVICE_PATH; + +#define MBR_TYPE_PCAT 0x01 +#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 + +#define SIGNATURE_TYPE_MBR 0x01 +#define SIGNATURE_TYPE_GUID 0x02 + +#define MEDIA_CDROM_DP 0x02 +typedef struct _CDROM_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT32 BootEntry; + UINT64 PartitionStart; + UINT64 PartitionSize; +} CDROM_DEVICE_PATH; + +#define MEDIA_VENDOR_DP 0x03 +/* Use VENDOR_DEVICE_PATH struct */ + +#define MEDIA_FILEPATH_DP 0x04 +typedef struct _FILEPATH_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + CHAR16 PathName[1]; +} FILEPATH_DEVICE_PATH; + +#define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName) + +#define MEDIA_PROTOCOL_DP 0x05 +typedef struct _MEDIA_PROTOCOL_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + EFI_GUID Protocol; +} MEDIA_PROTOCOL_DEVICE_PATH; + +/** + * PIWG Firmware File SubType. + * UEFI 2.0 specification version 2.4 § 9.3.6.6. + */ +#define MEDIA_PIWG_FW_FILE_DP 6 +typedef struct _MEDIA_FW_VOL_FILEPATH_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + EFI_GUID FvFileName ; +} MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ; + +/** + * PIWG Firmware Volume Device Path SubType. + * UEFI 2.0 specification version 2.4 § 9.3.6.7. + */ +#define MEDIA_PIWG_FW_VOL_DP 7 +typedef struct _MEDIA_FW_VOL_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + EFI_GUID FvName ; +} MEDIA_FW_VOL_DEVICE_PATH ; + +/** + * Media relative offset range device path. + * UEFI 2.0 specification version 2.4 § 9.3.6.8. + */ +#define MEDIA_RELATIVE_OFFSET_RANGE_DP 8 +typedef struct _MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header ; + UINT32 Reserved ; + UINT64 StartingOffset ; + UINT64 EndingOffset ; +} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH ; + + +/* + * BIOS Boot Specification Device Path (UEFI 2.4 specification, version 2.4 § 9.3.7.) + */ +#define BBS_DEVICE_PATH 0x05 + +#define BBS_BBS_DP 0x01 +typedef struct _BBS_BBS_DEVICE_PATH { + EFI_DEVICE_PATH_PROTOCOL Header; + UINT16 DeviceType; + UINT16 StatusFlag; + CHAR8 String[1]; +} BBS_BBS_DEVICE_PATH; + +/* DeviceType definitions - from BBS specification */ +#define BBS_TYPE_FLOPPY 0x01 +#define BBS_TYPE_HARDDRIVE 0x02 +#define BBS_TYPE_CDROM 0x03 +#define BBS_TYPE_PCMCIA 0x04 +#define BBS_TYPE_USB 0x05 +#define BBS_TYPE_EMBEDDED_NETWORK 0x06 +#define BBS_TYPE_DEV 0x80 +#define BBS_TYPE_UNKNOWN 0xFF + +typedef union { + EFI_DEVICE_PATH_PROTOCOL DevPath; + PCI_DEVICE_PATH Pci; + PCCARD_DEVICE_PATH PcCard; + MEMMAP_DEVICE_PATH MemMap; + VENDOR_DEVICE_PATH Vendor; + UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; + CONTROLLER_DEVICE_PATH Controller; + ACPI_HID_DEVICE_PATH Acpi; + + ATAPI_DEVICE_PATH Atapi; + SCSI_DEVICE_PATH Scsi; + FIBRECHANNEL_DEVICE_PATH FibreChannel; + + F1394_DEVICE_PATH F1394; + USB_DEVICE_PATH Usb; + USB_CLASS_DEVICE_PATH UsbClass; + I2O_DEVICE_PATH I2O; + MAC_ADDR_DEVICE_PATH MacAddr; + IPv4_DEVICE_PATH Ipv4; + IPv6_DEVICE_PATH Ipv6; + URI_DEVICE_PATH Uri; + INFINIBAND_DEVICE_PATH InfiniBand; + UART_DEVICE_PATH Uart; + + HARDDRIVE_DEVICE_PATH HardDrive; + CDROM_DEVICE_PATH CD; + + FILEPATH_DEVICE_PATH FilePath; + MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; + + BBS_BBS_DEVICE_PATH Bbs; + +} EFI_DEV_PATH; + +typedef union { + EFI_DEVICE_PATH_PROTOCOL *DevPath; + PCI_DEVICE_PATH *Pci; + PCCARD_DEVICE_PATH *PcCard; + MEMMAP_DEVICE_PATH *MemMap; + VENDOR_DEVICE_PATH *Vendor; + UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor; + CONTROLLER_DEVICE_PATH *Controller; + ACPI_HID_DEVICE_PATH *Acpi; + + ATAPI_DEVICE_PATH *Atapi; + SCSI_DEVICE_PATH *Scsi; + FIBRECHANNEL_DEVICE_PATH *FibreChannel; + + F1394_DEVICE_PATH *F1394; + USB_DEVICE_PATH *Usb; + USB_CLASS_DEVICE_PATH *UsbClass; + I2O_DEVICE_PATH *I2O; + MAC_ADDR_DEVICE_PATH *MacAddr; + IPv4_DEVICE_PATH *Ipv4; + IPv6_DEVICE_PATH *Ipv6; + URI_DEVICE_PATH *Uri; + INFINIBAND_DEVICE_PATH *InfiniBand; + UART_DEVICE_PATH *Uart; + + HARDDRIVE_DEVICE_PATH *HardDrive; + + FILEPATH_DEVICE_PATH *FilePath; + MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; + + CDROM_DEVICE_PATH *CD; + BBS_BBS_DEVICE_PATH *Bbs; + +} EFI_DEV_PATH_PTR; + +#define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \ + { 0x8b843e20, 0x8132, 0x4852, {0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c} } + +typedef +CHAR16* +(EFIAPI *EFI_DEVICE_PATH_TO_TEXT_NODE) ( + IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ); + +typedef +CHAR16* +(EFIAPI *EFI_DEVICE_PATH_TO_TEXT_PATH) ( + IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, + IN BOOLEAN DisplayOnly, + IN BOOLEAN AllowShortcuts + ); + +typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL { + EFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText; + EFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText; +} EFI_DEVICE_PATH_TO_TEXT_PROTOCOL; + +#define EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID \ + { 0x5c99a21, 0xc70f, 0x4ad2, {0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e} } + +typedef +EFI_DEVICE_PATH_PROTOCOL* +(EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_NODE) ( + IN CONST CHAR16 *TextDeviceNode + ); + +typedef +EFI_DEVICE_PATH_PROTOCOL* +(EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_PATH) ( + IN CONST CHAR16 *TextDevicePath + ); + +typedef struct { + EFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDeviceNode; + EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath; +} EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL; + +#endif diff --git a/gnu-efi/inc/efierr.h b/gnu-efi/inc/efierr.h new file mode 100644 index 0000000..d351c1c --- /dev/null +++ b/gnu-efi/inc/efierr.h @@ -0,0 +1,67 @@ +#ifndef _EFI_ERR_H +#define _EFI_ERR_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efierr.h + +Abstract: + + EFI error codes + + + + +Revision History + +--*/ + + +#define EFIWARN(a) (a) +#define EFI_ERROR(a) (((INTN) a) < 0) + + +#define EFI_SUCCESS 0 +#define EFI_LOAD_ERROR EFIERR(1) +#define EFI_INVALID_PARAMETER EFIERR(2) +#define EFI_UNSUPPORTED EFIERR(3) +#define EFI_BAD_BUFFER_SIZE EFIERR(4) +#define EFI_BUFFER_TOO_SMALL EFIERR(5) +#define EFI_NOT_READY EFIERR(6) +#define EFI_DEVICE_ERROR EFIERR(7) +#define EFI_WRITE_PROTECTED EFIERR(8) +#define EFI_OUT_OF_RESOURCES EFIERR(9) +#define EFI_VOLUME_CORRUPTED EFIERR(10) +#define EFI_VOLUME_FULL EFIERR(11) +#define EFI_NO_MEDIA EFIERR(12) +#define EFI_MEDIA_CHANGED EFIERR(13) +#define EFI_NOT_FOUND EFIERR(14) +#define EFI_ACCESS_DENIED EFIERR(15) +#define EFI_NO_RESPONSE EFIERR(16) +#define EFI_NO_MAPPING EFIERR(17) +#define EFI_TIMEOUT EFIERR(18) +#define EFI_NOT_STARTED EFIERR(19) +#define EFI_ALREADY_STARTED EFIERR(20) +#define EFI_ABORTED EFIERR(21) +#define EFI_ICMP_ERROR EFIERR(22) +#define EFI_TFTP_ERROR EFIERR(23) +#define EFI_PROTOCOL_ERROR EFIERR(24) +#define EFI_INCOMPATIBLE_VERSION EFIERR(25) +#define EFI_SECURITY_VIOLATION EFIERR(26) +#define EFI_CRC_ERROR EFIERR(27) +#define EFI_END_OF_MEDIA EFIERR(28) +#define EFI_END_OF_FILE EFIERR(31) +#define EFI_INVALID_LANGUAGE EFIERR(32) +#define EFI_COMPROMISED_DATA EFIERR(33) + +#define EFI_WARN_UNKNOWN_GLYPH EFIWARN(1) +#define EFI_WARN_DELETE_FAILURE EFIWARN(2) +#define EFI_WARN_WRITE_FAILURE EFIWARN(3) +#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4) + +#endif + diff --git a/gnu-efi/inc/efifs.h b/gnu-efi/inc/efifs.h new file mode 100644 index 0000000..fc595d1 --- /dev/null +++ b/gnu-efi/inc/efifs.h @@ -0,0 +1,116 @@ +#ifndef _EFI_FS_H +#define _EFI_FS_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efifs.h + +Abstract: + + EFI File System structures + + + +Revision History + +--*/ + + +// +// EFI Partition header (normaly starts in LBA 1) +// + +#define EFI_PARTITION_SIGNATURE 0x5053595320494249 +#define EFI_PARTITION_REVISION 0x00010001 +#define MIN_EFI_PARTITION_BLOCK_SIZE 512 +#define EFI_PARTITION_LBA 1 + +typedef struct _EFI_PARTITION_HEADER { + EFI_TABLE_HEADER Hdr; + UINT32 DirectoryAllocationNumber; + UINT32 BlockSize; + EFI_LBA FirstUsableLba; + EFI_LBA LastUsableLba; + EFI_LBA UnusableSpace; + EFI_LBA FreeSpace; + EFI_LBA RootFile; + EFI_LBA SecutiryFile; +} EFI_PARTITION_HEADER; + + +// +// File header +// + +#define EFI_FILE_HEADER_SIGNATURE 0x454c494620494249 +#define EFI_FILE_HEADER_REVISION 0x00010000 +#define EFI_FILE_STRING_SIZE 260 + +typedef struct _EFI_FILE_HEADER { + EFI_TABLE_HEADER Hdr; + UINT32 Class; + UINT32 LBALOffset; + EFI_LBA Parent; + UINT64 FileSize; + UINT64 FileAttributes; + EFI_TIME FileCreateTime; + EFI_TIME FileModificationTime; + EFI_GUID VendorGuid; + CHAR16 FileString[EFI_FILE_STRING_SIZE]; +} EFI_FILE_HEADER; + + +// +// Return the file's first LBAL which is in the same +// logical block as the file header +// + +#define EFI_FILE_LBAL(a) ((EFI_LBAL *) (((CHAR8 *) (a)) + (a)->LBALOffset)) + +#define EFI_FILE_CLASS_FREE_SPACE 1 +#define EFI_FILE_CLASS_EMPTY 2 +#define EFI_FILE_CLASS_NORMAL 3 + + +// +// Logical Block Address List - the fundemental block +// description structure +// + +#define EFI_LBAL_SIGNATURE 0x4c41424c20494249 +#define EFI_LBAL_REVISION 0x00010000 + +typedef struct _EFI_LBAL { + EFI_TABLE_HEADER Hdr; + UINT32 Class; + EFI_LBA Parent; + EFI_LBA Next; + UINT32 ArraySize; + UINT32 ArrayCount; +} EFI_LBAL; + +// Array size +#define EFI_LBAL_ARRAY_SIZE(lbal,offs,blks) \ + (((blks) - (offs) - (lbal)->Hdr.HeaderSize) / sizeof(EFI_RL)) + +// +// Logical Block run-length +// + +typedef struct { + EFI_LBA Start; + UINT64 Length; +} EFI_RL; + +// +// Return the run-length structure from an LBAL header +// + +#define EFI_LBAL_RL(a) ((EFI_RL*) (((CHAR8 *) (a)) + (a)->Hdr.HeaderSize)) + +#endif + diff --git a/gnu-efi/inc/efigpt.h b/gnu-efi/inc/efigpt.h new file mode 100644 index 0000000..d1694ae --- /dev/null +++ b/gnu-efi/inc/efigpt.h @@ -0,0 +1,68 @@ +#ifndef _EFI_GPT_H +#define _EFI_GPT_H +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + EfiGpt.h + +Abstract: + Include file for EFI partitioning scheme + + + +Revision History + +--*/ + +#define PRIMARY_PART_HEADER_LBA 1 + +typedef struct { + EFI_TABLE_HEADER Header; + EFI_LBA MyLBA; + EFI_LBA AlternateLBA; + EFI_LBA FirstUsableLBA; + EFI_LBA LastUsableLBA; + EFI_GUID DiskGUID; + EFI_LBA PartitionEntryLBA; + UINT32 NumberOfPartitionEntries; + UINT32 SizeOfPartitionEntry; + UINT32 PartitionEntryArrayCRC32; +} EFI_PARTITION_TABLE_HEADER; + +#define EFI_PTAB_HEADER_ID "EFI PART" + +typedef struct { + EFI_GUID PartitionTypeGUID; + EFI_GUID UniquePartitionGUID; + EFI_LBA StartingLBA; + EFI_LBA EndingLBA; + UINT64 Attributes; + CHAR16 PartitionName[36]; +} EFI_PARTITION_ENTRY; + +// +// EFI Partition Attributes +// +#define EFI_PART_USED_BY_EFI 0x0000000000000001 +#define EFI_PART_REQUIRED_TO_FUNCTION 0x0000000000000002 +#define EFI_PART_USED_BY_OS 0x0000000000000004 +#define EFI_PART_REQUIRED_BY_OS 0x0000000000000008 +#define EFI_PART_BACKUP_REQUIRED 0x0000000000000010 +#define EFI_PART_USER_DATA 0x0000000000000020 +#define EFI_PART_CRITICAL_USER_DATA 0x0000000000000040 +#define EFI_PART_REDUNDANT_PARTITION 0x0000000000000080 + +#define EFI_PART_TYPE_UNUSED_GUID \ + { 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} } + +#define EFI_PART_TYPE_EFI_SYSTEM_PART_GUID \ + { 0xc12a7328, 0xf81f, 0x11d2, {0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} } + +#define EFI_PART_TYPE_LEGACY_MBR_GUID \ + { 0x024dee41, 0x33e7, 0x11d3, {0x9d, 0x69, 0x00, 0x08, 0xc7, 0x81, 0xf3, 0x9f} } + +#endif + diff --git a/gnu-efi/inc/efiip.h b/gnu-efi/inc/efiip.h new file mode 100644 index 0000000..8395079 --- /dev/null +++ b/gnu-efi/inc/efiip.h @@ -0,0 +1,459 @@ +#ifndef _EFI_IP_H +#define _EFI_IP_H + +/*++ +Copyright (c) 2013 Intel Corporation + +--*/ + +#define EFI_IP4_SERVICE_BINDING_PROTOCOL \ + {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}} + +#define EFI_IP4_PROTOCOL \ + {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}} + +#define EFI_IP6_SERVICE_BINDING_PROTOCOL \ + {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}} + +#define EFI_IP6_PROTOCOL \ + {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}} + +INTERFACE_DECL(_EFI_IP4); +INTERFACE_DECL(_EFI_IP6); + +typedef struct { + EFI_HANDLE InstanceHandle; + EFI_IPv4_ADDRESS Ip4Address; + EFI_IPv4_ADDRESS SubnetMask; +} EFI_IP4_ADDRESS_PAIR; + +typedef struct { + EFI_HANDLE DriverHandle; + UINT32 AddressCount; + EFI_IP4_ADDRESS_PAIR AddressPairs[1]; +} EFI_IP4_VARIABLE_DATA; + +typedef struct { + UINT8 DefaultProtocol; + BOOLEAN AcceptAnyProtocol; + BOOLEAN AcceptIcmpErrors; + BOOLEAN AcceptBroadcast; + BOOLEAN AcceptPromiscuous; + BOOLEAN UseDefaultAddress; + EFI_IPv4_ADDRESS StationAddress; + EFI_IPv4_ADDRESS SubnetMask; + UINT8 TypeOfService; + UINT8 TimeToLive; + BOOLEAN DoNotFragment; + BOOLEAN RawData; + UINT32 ReceiveTimeout; + UINT32 TransmitTimeout; +} EFI_IP4_CONFIG_DATA; + +typedef struct { + EFI_IPv4_ADDRESS SubnetAddress; + EFI_IPv4_ADDRESS SubnetMask; + EFI_IPv4_ADDRESS GatewayAddress; +} EFI_IP4_ROUTE_TABLE; + +typedef struct { + UINT8 Type; + UINT8 Code; +} EFI_IP4_ICMP_TYPE; + +typedef struct { + BOOLEAN IsStarted; + UINT32 MaxPacketSize; + EFI_IP4_CONFIG_DATA ConfigData; + BOOLEAN IsConfigured; + UINT32 GroupCount; + EFI_IPv4_ADDRESS *GroupTable; + UINT32 RouteCount; + EFI_IP4_ROUTE_TABLE *RouteTable; + UINT32 IcmpTypeCount; + EFI_IP4_ICMP_TYPE *IcmpTypeList; +} EFI_IP4_MODE_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_GET_MODE_DATA) ( + IN struct _EFI_IP4 *This, + OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_CONFIGURE) ( + IN struct _EFI_IP4 *This, + IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_GROUPS) ( + IN struct _EFI_IP4 *This, + IN BOOLEAN JoinFlag, + IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_ROUTES) ( + IN struct _EFI_IP4 *This, + IN BOOLEAN DeleteRoute, + IN EFI_IPv4_ADDRESS *SubnetAddress, + IN EFI_IPv4_ADDRESS *SubnetMask, + IN EFI_IPv4_ADDRESS *GatewayAddress + ); + +#pragma pack(1) +typedef struct { + UINT8 HeaderLength:4; + UINT8 Version:4; + UINT8 TypeOfService; + UINT16 TotalLength; + UINT16 Identification; + UINT16 Fragmentation; + UINT8 TimeToLive; + UINT8 Protocol; + UINT16 Checksum; + EFI_IPv4_ADDRESS SourceAddress; + EFI_IPv4_ADDRESS DestinationAddress; +} EFI_IP4_HEADER; +#pragma pack() + +typedef struct { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_IP4_FRAGMENT_DATA; + +typedef struct { + EFI_TIME TimeStamp; + EFI_EVENT RecycleSignal; + UINT32 HeaderLength; + EFI_IP4_HEADER *Header; + UINT32 OptionsLength; + VOID *Options; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_IP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_IP4_RECEIVE_DATA; + +typedef struct { + EFI_IPv4_ADDRESS SourceAddress; + EFI_IPv4_ADDRESS GatewayAddress; + UINT8 Protocol; + UINT8 TypeOfService; + UINT8 TimeToLive; + BOOLEAN DoNotFragment; +} EFI_IP4_OVERRIDE_DATA; + +typedef struct { + EFI_IPv4_ADDRESS DestinationAddress; + EFI_IP4_OVERRIDE_DATA *OverrideData; + UINT32 OptionsLength; + VOID *OptionsBuffer; + UINT32 TotalDataLength; + UINT32 FragmentCount; + EFI_IP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_IP4_TRANSMIT_DATA; + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + union { + EFI_IP4_RECEIVE_DATA *RxData; + EFI_IP4_TRANSMIT_DATA *TxData; + } Packet; +} EFI_IP4_COMPLETION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_TRANSMIT) ( + IN struct _EFI_IP4 *This, + IN EFI_IP4_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_RECEIVE) ( + IN struct _EFI_IP4 *This, + IN EFI_IP4_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_CANCEL)( + IN struct _EFI_IP4 *This, + IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP4_POLL) ( + IN struct _EFI_IP4 *This + ); + +typedef struct _EFI_IP4 { + EFI_IP4_GET_MODE_DATA GetModeData; + EFI_IP4_CONFIGURE Configure; + EFI_IP4_GROUPS Groups; + EFI_IP4_ROUTES Routes; + EFI_IP4_TRANSMIT Transmit; + EFI_IP4_RECEIVE Receive; + EFI_IP4_CANCEL Cancel; + EFI_IP4_POLL Poll; +} EFI_IP4; + +typedef struct { + UINT8 DefaultProtocol; + BOOLEAN AcceptAnyProtocol; + BOOLEAN AcceptIcmpErrors; + BOOLEAN AcceptPromiscuous; + EFI_IPv6_ADDRESS DestinationAddress; + EFI_IPv6_ADDRESS StationAddress; + UINT8 TrafficClass; + UINT8 HopLimit; + UINT32 FlowLabel; + UINT32 ReceiveTimeout; + UINT32 TransmitTimeout; +} EFI_IP6_CONFIG_DATA; + +typedef struct { + EFI_IPv6_ADDRESS Address; + UINT8 PrefixLength; +} EFI_IP6_ADDRESS_INFO; + +typedef struct { + EFI_IPv6_ADDRESS Gateway; + EFI_IPv6_ADDRESS Destination; + UINT8 PrefixLength; +} EFI_IP6_ROUTE_TABLE; + +typedef enum { + EfiNeighborInComplete, + EfiNeighborReachable, + EfiNeighborStale, + EfiNeighborDelay, + EfiNeighborProbe +} EFI_IP6_NEIGHBOR_STATE; + +typedef struct { + EFI_IPv6_ADDRESS Neighbor; + EFI_MAC_ADDRESS LinkAddress; + EFI_IP6_NEIGHBOR_STATE State; +} EFI_IP6_NEIGHBOR_CACHE; + +typedef struct { + UINT8 Type; + UINT8 Code; +} EFI_IP6_ICMP_TYPE; + +//*********************************************************** +// ICMPv6 type definitions for error messages +//*********************************************************** +#define ICMP_V6_DEST_UNREACHABLE 0x1 +#define ICMP_V6_PACKET_TOO_BIG 0x2 +#define ICMP_V6_TIME_EXCEEDED 0x3 +#define ICMP_V6_PARAMETER_PROBLEM 0x4 + +//*********************************************************** +// ICMPv6 type definition for informational messages +//*********************************************************** +#define ICMP_V6_ECHO_REQUEST 0x80 +#define ICMP_V6_ECHO_REPLY 0x81 +#define ICMP_V6_LISTENER_QUERY 0x82 +#define ICMP_V6_LISTENER_REPORT 0x83 +#define ICMP_V6_LISTENER_DONE 0x84 +#define ICMP_V6_ROUTER_SOLICIT 0x85 +#define ICMP_V6_ROUTER_ADVERTISE 0x86 +#define ICMP_V6_NEIGHBOR_SOLICIT 0x87 +#define ICMP_V6_NEIGHBOR_ADVERTISE 0x88 +#define ICMP_V6_REDIRECT 0x89 +#define ICMP_V6_LISTENER_REPORT_2 0x8F + +//*********************************************************** +// ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE +//*********************************************************** +#define ICMP_V6_NO_ROUTE_TO_DEST 0x0 +#define ICMP_V6_COMM_PROHIBITED 0x1 +#define ICMP_V6_BEYOND_SCOPE 0x2 +#define ICMP_V6_ADDR_UNREACHABLE 0x3 +#define ICMP_V6_PORT_UNREACHABLE 0x4 +#define ICMP_V6_SOURCE_ADDR_FAILED 0x5 +#define ICMP_V6_ROUTE_REJECTED 0x6 + +//*********************************************************** +// ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED +//*********************************************************** +#define ICMP_V6_TIMEOUT_HOP_LIMIT 0x0 +#define ICMP_V6_TIMEOUT_REASSEMBLE 0x1 + +//*********************************************************** +// ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM +//*********************************************************** +#define ICMP_V6_ERRONEOUS_HEADER 0x0 +#define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1 +#define ICMP_V6_UNRECOGNIZE_OPTION 0x2 + +typedef struct { + BOOLEAN IsStarted; + UINT32 MaxPacketSize; + EFI_IP6_CONFIG_DATA ConfigData; + BOOLEAN IsConfigured; + UINT32 AddressCount; + EFI_IP6_ADDRESS_INFO *AddressList; + UINT32 GroupCount; + EFI_IPv6_ADDRESS *GroupTable; + UINT32 RouteCount; + EFI_IP6_ROUTE_TABLE *RouteTable; + UINT32 NeighborCount; + EFI_IP6_NEIGHBOR_CACHE *NeighborCache; + UINT32 PrefixCount; + EFI_IP6_ADDRESS_INFO *PrefixTable; + UINT32 IcmpTypeCount; + EFI_IP6_ICMP_TYPE *IcmpTypeList; +} EFI_IP6_MODE_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_GET_MODE_DATA) ( + IN struct _EFI_IP6 *This, + OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_CONFIGURE) ( + IN struct _EFI_IP6 *This, + IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL + ); +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_GROUPS) ( + IN struct _EFI_IP6 *This, + IN BOOLEAN JoinFlag, + IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_ROUTES) ( + IN struct _EFI_IP6 *This, + IN BOOLEAN DeleteRoute, + IN EFI_IPv6_ADDRESS *Destination OPTIONAL, + IN UINT8 PrefixLength, + IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_NEIGHBORS) ( + IN struct _EFI_IP6 *This, + IN BOOLEAN DeleteFlag, + IN EFI_IPv6_ADDRESS *TargetIp6Address, + IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL, + IN UINT32 Timeout, + IN BOOLEAN Override + ); + +typedef struct _EFI_IP6_FRAGMENT_DATA { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_IP6_FRAGMENT_DATA; + +typedef struct _EFI_IP6_OVERRIDE_DATA { + UINT8 Protocol; + UINT8 HopLimit; + UINT32 FlowLabel; +} EFI_IP6_OVERRIDE_DATA; + +typedef struct _EFI_IP6_TRANSMIT_DATA { + EFI_IPv6_ADDRESS DestinationAddress; + EFI_IP6_OVERRIDE_DATA *OverrideData; + UINT32 ExtHdrsLength; + VOID *ExtHdrs; + UINT8 NextHeader; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_IP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_IP6_TRANSMIT_DATA; + +#pragma pack(1) +typedef struct _EFI_IP6_HEADER { + UINT8 TrafficClassH:4; + UINT8 Version:4; + UINT8 FlowLabelH:4; + UINT8 TrafficClassL:4; + UINT16 FlowLabelL; + UINT16 PayloadLength; + UINT8 NextHeader; + UINT8 HopLimit; + EFI_IPv6_ADDRESS SourceAddress; + EFI_IPv6_ADDRESS DestinationAddress; +} EFI_IP6_HEADER; +#pragma pack() + +typedef struct _EFI_IP6_RECEIVE_DATA { + EFI_TIME TimeStamp; + EFI_EVENT RecycleSignal; + UINT32 HeaderLength; + EFI_IP6_HEADER *Header; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_IP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_IP6_RECEIVE_DATA; + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + union { + EFI_IP6_RECEIVE_DATA *RxData; + EFI_IP6_TRANSMIT_DATA *TxData; + } Packet; +} EFI_IP6_COMPLETION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_TRANSMIT) ( + IN struct _EFI_IP6 *This, + IN EFI_IP6_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_RECEIVE) ( + IN struct _EFI_IP6 *This, + IN EFI_IP6_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_CANCEL)( + IN struct _EFI_IP6 *This, + IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IP6_POLL) ( + IN struct _EFI_IP6 *This + ); + +typedef struct _EFI_IP6 { + EFI_IP6_GET_MODE_DATA GetModeData; + EFI_IP6_CONFIGURE Configure; + EFI_IP6_GROUPS Groups; + EFI_IP6_ROUTES Routes; + EFI_IP6_NEIGHBORS Neighbors; + EFI_IP6_TRANSMIT Transmit; + EFI_IP6_RECEIVE Receive; + EFI_IP6_CANCEL Cancel; + EFI_IP6_POLL Poll; +} EFI_IP6; + +#endif /* _EFI_IP_H */ diff --git a/gnu-efi/inc/efilib.h b/gnu-efi/inc/efilib.h new file mode 100644 index 0000000..8a507af --- /dev/null +++ b/gnu-efi/inc/efilib.h @@ -0,0 +1,1036 @@ +#ifndef _EFILIB_INCLUDE_ +#define _EFILIB_INCLUDE_ + +/*++ + +Copyright (c) 2000 Intel Corporation + +Module Name: + + efilib.h + +Abstract: + + EFI library functions + + + +Revision History + +--*/ + +#include "efidebug.h" +#include "efipart.h" +#include "efilibplat.h" +#include "efilink.h" +#include "efirtlib.h" +#include "efistdarg.h" +#include "pci22.h" +#include "libsmbios.h" + +// +// Public read-only data in the EFI library +// + +extern EFI_SYSTEM_TABLE *ST; +#define gST ST +extern EFI_BOOT_SERVICES *BS; +#define gBS BS +extern EFI_RUNTIME_SERVICES *RT; +#define gRT RT + +extern EFI_GUID gEfiDevicePathProtocolGuid; +#define DevicePathProtocol gEfiDevicePathProtocolGuid +extern EFI_GUID gEfiDevicePathToTextProtocolGuid; +#define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid +extern EFI_GUID gEfiDevicePathFromTextProtocolGuid; +#define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid +extern EFI_GUID gEfiLoadedImageProtocolGuid; +#define LoadedImageProtocol gEfiLoadedImageProtocolGuid +extern EFI_GUID gEfiSimpleTextInProtocolGuid; +#define TextInProtocol gEfiSimpleTextInProtocolGuid +extern EFI_GUID gEfiSimpleTextOutProtocolGuid; +#define TextOutProtocol gEfiSimpleTextOutProtocolGuid +extern EFI_GUID gEfiGraphicsOutputProtocolGuid; +#define GraphicsOutputProtocol gEfiGraphicsOutputProtocolGuid +extern EFI_GUID gEfiEdidDiscoveredProtocolGuid; +#define EdidDiscoveredProtocol gEfiEdidDiscoveredProtocolGuid +extern EFI_GUID gEfiEdidActiveProtocolGuid; +#define EdidActiveProtocol gEfiEdidActiveProtocolGuid +extern EFI_GUID gEfiEdidOverrideProtocolGuid; +#define EdidOverrideProtocol gEfiEdidOverrideProtocolGuid +extern EFI_GUID gEfiBlockIoProtocolGuid; +#define BlockIoProtocol gEfiBlockIoProtocolGuid +extern EFI_GUID gEfiBlockIo2ProtocolGuid; +#define BlockIo2Protocol gEfiBlockIo2ProtocolGuid +extern EFI_GUID gEfiDiskIoProtocolGuid; +#define DiskIoProtocol gEfiDiskIoProtocolGuid +extern EFI_GUID gEfiDiskIo2ProtocolGuid; +#define DiskIo2Protocol gEfiDiskIo2ProtocolGuid +extern EFI_GUID gEfiSimpleFileSystemProtocolGuid; +#define FileSystemProtocol gEfiSimpleFileSystemProtocolGuid +extern EFI_GUID gEfiLoadFileProtocolGuid; +#define LoadFileProtocol gEfiLoadFileProtocolGuid +extern EFI_GUID gEfiDeviceIoProtocolGuid; +#define DeviceIoProtocol gEfiDeviceIoProtocolGuid +extern EFI_GUID VariableStoreProtocol; +extern EFI_GUID LegacyBootProtocol; +extern EFI_GUID gEfiUnicodeCollationProtocolGuid; +#define UnicodeCollationProtocol gEfiUnicodeCollationProtocolGuid +extern EFI_GUID gEfiSerialIoProtocolGuid; +#define SerialIoProtocol gEfiSerialIoProtocolGuid +extern EFI_GUID VgaClassProtocol; +extern EFI_GUID TextOutSpliterProtocol; +extern EFI_GUID ErrorOutSpliterProtocol; +extern EFI_GUID TextInSpliterProtocol; +extern EFI_GUID gEfiSimpleNetworkProtocolGuid; +#define SimpleNetworkProtocol gEfiSimpleNetworkProtocolGuid +extern EFI_GUID gEfiPxeBaseCodeProtocolGuid; +#define PxeBaseCodeProtocol gEfiPxeBaseCodeProtocolGuid +extern EFI_GUID gEfiPxeBaseCodeCallbackProtocolGuid; +#define PxeCallbackProtocol gEfiPxeBaseCodeCallbackProtocolGuid +extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid; +#define NetworkInterfaceIdentifierProtocol gEfiNetworkInterfaceIdentifierProtocolGuid +extern EFI_GUID gEFiUiInterfaceProtocolGuid; +#define UiProtocol gEFiUiInterfaceProtocolGuid +extern EFI_GUID InternalShellProtocol; +extern EFI_GUID gEfiPciIoProtocolGuid; +#define PciIoProtocol gEfiPciIoProtocolGuid +extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid; +extern EFI_GUID gEfiDriverBindingProtocolGuid; +#define DriverBindingProtocol gEfiDriverBindingProtocolGuid +extern EFI_GUID gEfiComponentNameProtocolGuid; +#define ComponentNameProtocol gEfiComponentNameProtocolGuid +extern EFI_GUID gEfiComponentName2ProtocolGuid; +#define ComponentName2Protocol gEfiComponentName2ProtocolGuid +extern EFI_GUID gEfiHashProtocolGuid; +#define HashProtocol gEfiHashProtocolGuid +extern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid; +#define PlatformDriverOverrideProtocol gEfiPlatformDriverOverrideProtocolGuid +extern EFI_GUID gEfiBusSpecificDriverOverrideProtocolGuid; +#define BusSpecificDriverOverrideProtocol gEfiBusSpecificDriverOverrideProtocolGuid +extern EFI_GUID gEfiDriverFamilyOverrideProtocolGuid; +#define DriverFamilyOverrideProtocol gEfiDriverFamilyOverrideProtocolGuid +extern EFI_GUID gEfiEbcProtocolGuid; + +extern EFI_GUID gEfiGlobalVariableGuid; +#define EfiGlobalVariable gEfiGlobalVariableGuid +extern EFI_GUID gEfiFileInfoGuid; +#define GenericFileInfo gEfiFileInfoGuid +extern EFI_GUID gEfiFileSystemInfoGuid; +#define FileSystemInfo gEfiFileSystemInfoGuid +extern EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid; +#define FileSystemVolumeLabelInfo gEfiFileSystemVolumeLabelInfoIdGuid +extern EFI_GUID gEfiPcAnsiGuid; +#define PcAnsiProtocol gEfiPcAnsiGuid +extern EFI_GUID gEfiVT100Guid; +#define Vt100Protocol gEfiVT100Guid +extern EFI_GUID gEfiVT100PlusGuid; +extern EFI_GUID gEfiVTUTF8Guid; + +extern EFI_GUID NullGuid; +extern EFI_GUID UnknownDevice; + +extern EFI_GUID EfiPartTypeSystemPartitionGuid; +extern EFI_GUID EfiPartTypeLegacyMbrGuid; + +extern EFI_GUID MpsTableGuid; +extern EFI_GUID AcpiTableGuid; +extern EFI_GUID SMBIOSTableGuid; +extern EFI_GUID SalSystemTableGuid; + +extern EFI_GUID SimplePointerProtocol; +extern EFI_GUID AbsolutePointerProtocol; + +extern EFI_GUID gEfiDebugImageInfoTableGuid; +extern EFI_GUID gEfiDebugSupportProtocolGuid; + +// +// EFI Variable strings +// +#define LOAD_OPTION_ACTIVE 0x00000001 + +#define VarLanguageCodes L"LangCodes" +#define VarLanguage L"Lang" +#define VarTimeout L"Timeout" +#define VarConsoleInp L"ConIn" +#define VarConsoleOut L"ConOut" +#define VarErrorOut L"ErrOut" +#define VarBootOption L"Boot%04x" +#define VarBootOrder L"BootOrder" +#define VarBootNext L"BootNext" +#define VarBootCurrent L"BootCurrent" +#define VarDriverOption L"Driver%04x" +#define VarDriverOrder L"DriverOrder" +#define VarConsoleInpDev L"ConInDev" +#define VarConsoleOutDev L"ConOutDev" +#define VarErrorOutDev L"ErrOutDev" + +#define LanguageCodeEnglish "eng" + +extern EFI_DEVICE_PATH RootDevicePath[]; +extern EFI_DEVICE_PATH EndDevicePath[]; +extern EFI_DEVICE_PATH EndInstanceDevicePath[]; + +// +// Other public data in the EFI library +// + +extern EFI_MEMORY_TYPE PoolAllocationType; + +// +// STATIC - Name is internal to the module +// INTERNAL - Name is internal to the component (i.e., directory) +// BOOTSERVCE - Name of a boot service function +// + +#define STATIC +#define INTERNAL +#define BOOTSERVICE + +// +// Prototypes +// + +VOID +InitializeLib ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ); + +VOID +InitializeUnicodeSupport ( + CHAR8 *LangCode + ); + +VOID +EFIDebugVariable ( + VOID + ); + +VOID +Exit( + IN EFI_STATUS ExitStatus, + IN UINTN ExitDataSize, + IN CHAR16 *ExitData OPTIONAL + ); + +INTN +GetShellArgcArgv( + EFI_HANDLE ImageHandle, + CHAR16 **Argv[] /* Statically allocated */ + ); + +VOID +SetCrc ( + IN OUT EFI_TABLE_HEADER *Hdr + ); + +VOID +SetCrcAltSize ( + IN UINTN Size, + IN OUT EFI_TABLE_HEADER *Hdr + ); + +BOOLEAN +CheckCrc ( + IN UINTN MaxSize, + IN OUT EFI_TABLE_HEADER *Hdr + ); + +BOOLEAN +CheckCrcAltSize ( + IN UINTN MaxSize, + IN UINTN Size, + IN OUT EFI_TABLE_HEADER *Hdr + ); + +UINT32 +CalculateCrc ( + UINT8 *pt, + UINTN Size + ); + +VOID +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ); + +VOID +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ); + +VOID +CopyMem ( + IN VOID *Dest, + IN CONST VOID *Src, + IN UINTN len + ); + +INTN +CompareMem ( + IN CONST VOID *Dest, + IN CONST VOID *Src, + IN UINTN len + ); + +INTN +StrCmp ( + IN CONST CHAR16 *s1, + IN CONST CHAR16 *s2 + ); + +INTN +StrnCmp ( + IN CONST CHAR16 *s1, + IN CONST CHAR16 *s2, + IN UINTN len + ); + +INTN +StriCmp ( + IN CONST CHAR16 *s1, + IN CONST CHAR16 *s2 + ); + +VOID +StrLwr ( + IN CHAR16 *Str + ); + +VOID +StrUpr ( + IN CHAR16 *Str + ); + +VOID +StrCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +VOID +StrnCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +CHAR16 * +StpCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +CHAR16 * +StpnCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +VOID +StrCat ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +VOID +StrnCat ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +UINTN +StrLen ( + IN CONST CHAR16 *s1 + ); + +UINTN +StrnLen ( + IN CONST CHAR16 *s1, + IN UINTN Len + ); + +UINTN +StrSize ( + IN CONST CHAR16 *s1 + ); + +CHAR16 * +StrDuplicate ( + IN CONST CHAR16 *Src + ); + +UINTN +strlena ( + IN CONST CHAR8 *s1 + ); + +UINTN +strcmpa ( + IN CONST CHAR8 *s1, + IN CONST CHAR8 *s2 + ); + +UINTN +strncmpa ( + IN CONST CHAR8 *s1, + IN CONST CHAR8 *s2, + IN UINTN len + ); + +UINTN +xtoi ( + CONST CHAR16 *str + ); + +UINTN +Atoi ( + CONST CHAR16 *str + ); + +BOOLEAN +MetaMatch ( + IN CHAR16 *String, + IN CHAR16 *Pattern + ); + +BOOLEAN +MetaiMatch ( + IN CHAR16 *String, + IN CHAR16 *Pattern + ); + +UINT64 +LShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ); + +UINT64 +RShiftU64 ( + IN UINT64 Operand, + IN UINTN Count + ); + +UINT64 +MultU64x32 ( + IN UINT64 Multiplicand, + IN UINTN Multiplier + ); + +UINT64 +DivU64x32 ( + IN UINT64 Dividend, + IN UINTN Divisor, + OUT UINTN *Remainder OPTIONAL + ); + +VOID +InitializeLock ( + IN OUT FLOCK *Lock, + IN EFI_TPL Priority + ); + +VOID +AcquireLock ( + IN FLOCK *Lock + ); + +VOID +ReleaseLock ( + IN FLOCK *Lock + ); + + +INTN +CompareGuid( + IN EFI_GUID *Guid1, + IN EFI_GUID *Guid2 + ); + +VOID * +AllocatePool ( + IN UINTN Size + ); + +VOID * +AllocateZeroPool ( + IN UINTN Size + ); + +VOID * +ReallocatePool ( + IN VOID *OldPool, + IN UINTN OldSize, + IN UINTN NewSize + ); + +VOID +FreePool ( + IN VOID *p + ); + + +VOID +Output ( + IN CHAR16 *Str + ); + +VOID +Input ( + IN CHAR16 *Prompt OPTIONAL, + OUT CHAR16 *InStr, + IN UINTN StrLen + ); + +VOID +IInput ( + IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut, + IN SIMPLE_INPUT_INTERFACE *ConIn, + IN CHAR16 *Prompt OPTIONAL, + OUT CHAR16 *InStr, + IN UINTN StrLen + ); + +UINTN +Print ( + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +VPrint ( + IN CONST CHAR16 *fmt, + va_list args + ); + +UINTN +SPrint ( + OUT CHAR16 *Str, + IN UINTN StrSize, + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +VSPrint ( + OUT CHAR16 *Str, + IN UINTN StrSize, + IN CONST CHAR16 *fmt, + va_list args + ); + +CHAR16 * +VPoolPrint ( + IN CONST CHAR16 *fmt, + va_list args + ); + +CHAR16 * +PoolPrint ( + IN CONST CHAR16 *fmt, + ... + ); + +typedef struct { + CHAR16 *str; + UINTN len; + UINTN maxlen; +} POOL_PRINT; + +CHAR16 * +CatPrint ( + IN OUT POOL_PRINT *Str, + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +PrintAt ( + IN UINTN Column, + IN UINTN Row, + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +IPrint ( + IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out, + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +IPrintAt ( + IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out, + IN UINTN Column, + IN UINTN Row, + IN CONST CHAR16 *fmt, + ... + ); + +UINTN +APrint ( + IN CONST CHAR8 *fmt, + ... + ); + +VOID +ValueToHex ( + IN CHAR16 *Buffer, + IN UINT64 v + ); + +VOID +ValueToString ( + IN CHAR16 *Buffer, + IN BOOLEAN Comma, + IN INT64 v + ); + +VOID +FloatToString ( + IN CHAR16 *Buffer, + IN BOOLEAN Comma, + IN double v + ); + +VOID +TimeToString ( + OUT CHAR16 *Buffer, + IN EFI_TIME *Time + ); + +VOID +GuidToString ( + OUT CHAR16 *Buffer, + IN EFI_GUID *Guid + ); + +VOID +StatusToString ( + OUT CHAR16 *Buffer, + EFI_STATUS Status + ); + +VOID +DumpHex ( + IN UINTN Indent, + IN UINTN Offset, + IN UINTN DataSize, + IN VOID *UserData + ); + +BOOLEAN +GrowBuffer( + IN OUT EFI_STATUS *Status, + IN OUT VOID **Buffer, + IN UINTN BufferSize + ); + +EFI_MEMORY_DESCRIPTOR * +LibMemoryMap ( + OUT UINTN *NoEntries, + OUT UINTN *MapKey, + OUT UINTN *DescriptorSize, + OUT UINT32 *DescriptorVersion + ); + +VOID * +LibGetVariable ( + IN CHAR16 *Name, + IN EFI_GUID *VendorGuid + ); + +VOID * +LibGetVariableAndSize ( + IN CHAR16 *Name, + IN EFI_GUID *VendorGuid, + OUT UINTN *VarSize + ); + +EFI_STATUS +LibDeleteVariable ( + IN CHAR16 *VarName, + IN EFI_GUID *VarGuid + ); + +EFI_STATUS +LibSetNVVariable ( + IN CHAR16 *VarName, + IN EFI_GUID *VarGuid, + IN UINTN DataSize, + IN VOID *Data + ); + +EFI_STATUS +LibSetVariable ( + IN CHAR16 *VarName, + IN EFI_GUID *VarGuid, + IN UINTN DataSize, + IN VOID *Data + ); +EFI_STATUS +LibInsertToTailOfBootOrder ( + IN UINT16 BootOption, + IN BOOLEAN OnlyInsertIfEmpty + ); + +EFI_STATUS +LibLocateProtocol ( + IN EFI_GUID *ProtocolGuid, + OUT VOID **Interface + ); + +EFI_STATUS +LibLocateHandle ( + IN EFI_LOCATE_SEARCH_TYPE SearchType, + IN EFI_GUID *Protocol OPTIONAL, + IN VOID *SearchKey OPTIONAL, + IN OUT UINTN *NoHandles, + OUT EFI_HANDLE **Buffer + ); + +EFI_STATUS +LibLocateHandleByDiskSignature ( + IN UINT8 MBRType, + IN UINT8 SignatureType, + IN VOID *Signature, + IN OUT UINTN *NoHandles, + OUT EFI_HANDLE **Buffer + ); + +EFI_STATUS +LibInstallProtocolInterfaces ( + IN OUT EFI_HANDLE *Handle, + ... + ); + +VOID +LibUninstallProtocolInterfaces ( + IN EFI_HANDLE Handle, + ... + ); + +EFI_STATUS +LibReinstallProtocolInterfaces ( + IN OUT EFI_HANDLE *Handle, + ... + ); + +EFI_EVENT +LibCreateProtocolNotifyEvent ( + IN EFI_GUID *ProtocolGuid, + IN EFI_TPL NotifyTpl, + IN EFI_EVENT_NOTIFY NotifyFunction, + IN VOID *NotifyContext, + OUT VOID *Registration + ); + +EFI_STATUS +WaitForSingleEvent ( + IN EFI_EVENT Event, + IN UINT64 Timeout OPTIONAL + ); + +VOID +WaitForEventWithTimeout ( + IN EFI_EVENT Event, + IN UINTN Timeout, + IN UINTN Row, + IN UINTN Column, + IN CHAR16 *String, + IN EFI_INPUT_KEY TimeoutKey, + OUT EFI_INPUT_KEY *Key + ); + +EFI_FILE_HANDLE +LibOpenRoot ( + IN EFI_HANDLE DeviceHandle + ); + +EFI_FILE_INFO * +LibFileInfo ( + IN EFI_FILE_HANDLE FHand + ); + +EFI_FILE_SYSTEM_INFO * +LibFileSystemInfo ( + IN EFI_FILE_HANDLE FHand + ); + +EFI_FILE_SYSTEM_VOLUME_LABEL_INFO * +LibFileSystemVolumeLabelInfo ( + IN EFI_FILE_HANDLE FHand + ); + +BOOLEAN +ValidMBR( + IN MASTER_BOOT_RECORD *Mbr, + IN EFI_BLOCK_IO *BlkIo + ); + +BOOLEAN +LibMatchDevicePaths ( + IN EFI_DEVICE_PATH *Multi, + IN EFI_DEVICE_PATH *Single + ); + +EFI_DEVICE_PATH * +LibDuplicateDevicePathInstance ( + IN EFI_DEVICE_PATH *DevPath + ); + +EFI_DEVICE_PATH * +DevicePathFromHandle ( + IN EFI_HANDLE Handle + ); + +EFI_DEVICE_PATH * +DevicePathInstance ( + IN OUT EFI_DEVICE_PATH **DevicePath, + OUT UINTN *Size + ); + +UINTN +DevicePathInstanceCount ( + IN EFI_DEVICE_PATH *DevicePath + ); + +EFI_DEVICE_PATH * +AppendDevicePath ( + IN EFI_DEVICE_PATH *Src1, + IN EFI_DEVICE_PATH *Src2 + ); + +EFI_DEVICE_PATH * +AppendDevicePathNode ( + IN EFI_DEVICE_PATH *Src1, + IN EFI_DEVICE_PATH *Src2 + ); + +EFI_DEVICE_PATH* +AppendDevicePathInstance ( + IN EFI_DEVICE_PATH *Src, + IN EFI_DEVICE_PATH *Instance + ); + +EFI_DEVICE_PATH * +FileDevicePath ( + IN EFI_HANDLE Device OPTIONAL, + IN CHAR16 *FileName + ); + +UINTN +DevicePathSize ( + IN EFI_DEVICE_PATH *DevPath + ); + +EFI_DEVICE_PATH * +DuplicateDevicePath ( + IN EFI_DEVICE_PATH *DevPath + ); + +EFI_DEVICE_PATH * +UnpackDevicePath ( + IN EFI_DEVICE_PATH *DevPath + ); + +EFI_STATUS +LibDevicePathToInterface ( + IN EFI_GUID *Protocol, + IN EFI_DEVICE_PATH *FilePath, + OUT VOID **Interface + ); + +CHAR16 * +DevicePathToStr ( + EFI_DEVICE_PATH *DevPath + ); + +// +// BugBug: I need my own include files +// +typedef struct { + UINT8 Register; + UINT8 Function; + UINT8 Device; + UINT8 Bus; + UINT32 Reserved; +} EFI_ADDRESS; + +typedef union { + UINT64 Address; + EFI_ADDRESS EfiAddress; +} EFI_PCI_ADDRESS_UNION; + + +EFI_STATUS +PciFindDeviceClass ( + IN OUT EFI_PCI_ADDRESS_UNION *Address, + IN UINT8 BaseClass, + IN UINT8 SubClass + ); + +EFI_STATUS +PciFindDevice ( + IN OUT EFI_PCI_ADDRESS_UNION *DeviceAddress, + IN UINT16 VendorId, + IN UINT16 DeviceId, + IN OUT PCI_TYPE00 *Pci + ); + +// +// SIMPLE_READ_FILE object used to access files +// + +typedef VOID *SIMPLE_READ_FILE; + +EFI_STATUS +OpenSimpleReadFile ( + IN BOOLEAN BootPolicy, + IN VOID *SourceBuffer OPTIONAL, + IN UINTN SourceSize, + IN OUT EFI_DEVICE_PATH **FilePath, + OUT EFI_HANDLE *DeviceHandle, + OUT SIMPLE_READ_FILE *SimpleReadHandle + ); + +EFI_STATUS +ReadSimpleReadFile ( + IN SIMPLE_READ_FILE SimpleReadHandle, + IN UINTN Offset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer + ); + + +VOID +CloseSimpleReadFile ( + IN SIMPLE_READ_FILE SimpleReadHandle + ); + +VOID +InitializeGuid ( + VOID + ); + +UINT8 +DecimaltoBCD( + IN UINT8 DecValue + ); + +UINT8 +BCDtoDecimal( + IN UINT8 BcdValue + ); + +EFI_STATUS +LibGetSystemConfigurationTable( + IN EFI_GUID *TableGuid, + IN OUT VOID **Table + ); + +BOOLEAN +LibIsValidTextGraphics ( + IN CHAR16 Graphic, + OUT CHAR8 *PcAnsi, OPTIONAL + OUT CHAR8 *Ascii OPTIONAL + ); + +BOOLEAN +IsValidAscii ( + IN CHAR16 Ascii + ); + +BOOLEAN +IsValidEfiCntlChar ( + IN CHAR16 c + ); + +CHAR16 * +LibGetUiString ( + IN EFI_HANDLE Handle, + IN UI_STRING_TYPE StringType, + IN ISO_639_2 *LangCode, + IN BOOLEAN ReturnDevicePathStrOnMismatch + ); + +CHAR8* +LibGetSmbiosString ( + IN SMBIOS_STRUCTURE_POINTER *Smbios, + IN UINT16 StringNumber + ); + +EFI_STATUS +LibGetSmbiosSystemGuidAndSerialNumber ( + IN EFI_GUID *SystemGuid, + OUT CHAR8 **SystemSerialNumber + ); + + +EFI_STATUS +InitializeGlobalIoDevice ( + IN EFI_DEVICE_PATH *DevicePath, + IN EFI_GUID *Protocol, + IN CHAR8 *ErrorStr, + OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs + ); + +UINT32 +ReadPort ( + IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, + IN EFI_IO_WIDTH Width, + IN UINTN Port + ); + +UINT32 +WritePort ( + IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, + IN EFI_IO_WIDTH Width, + IN UINTN Port, + IN UINTN Data + ); + +UINT32 +ReadPciConfig ( + IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, + IN EFI_IO_WIDTH Width, + IN UINTN Port + ); + +UINT32 +WritePciConfig ( + IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, + IN EFI_IO_WIDTH Width, + IN UINTN Port, + IN UINTN Data + ); + +extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs; + +#define outp(_Port, _DataByte) (UINT8)WritePort(GlobalIoFncs, IO_UINT8, (UINTN)_Port, (UINTN)_DataByte) +#define inp(_Port) (UINT8)ReadPort(GlobalIoFncs, IO_UINT8, (UINTN)_Port) +#define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte) +#define inpw(_Port) (UINT16)ReadPort(GlobalIoFncs, IO_UINT16, (UINTN)_Port) +#define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte) +#define inpd(_Port) (UINT32)ReadPort(GlobalIoFncs, IO_UINT32, (UINTN)_Port) + +#define writepci8(_Addr, _DataByte) (UINT8)WritePciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr, (UINTN)_DataByte) +#define readpci8(_Addr) (UINT8)ReadPciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr) +#define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte) +#define readpci16(_Addr) (UINT16)ReadPciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr) +#define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte) +#define readpci32(_Addr) (UINT32)ReadPciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr) + +#define Pause() WaitForSingleEvent (ST->ConIn->WaitForKey, 0) +#define Port80(_PostCode) GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode)) + +#endif diff --git a/gnu-efi/inc/efilink.h b/gnu-efi/inc/efilink.h new file mode 100644 index 0000000..cc5aa2d --- /dev/null +++ b/gnu-efi/inc/efilink.h @@ -0,0 +1,177 @@ +#ifndef _EFI_LINK_H +#define _EFI_LINK_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + link.h (renamed efilink.h to avoid conflicts) + +Abstract: + + EFI link list macro's + + + +Revision History + +--*/ + +#ifndef EFI_NT_EMUL + +// +// List entry - doubly linked list +// + +typedef struct _LIST_ENTRY { + struct _LIST_ENTRY *Flink; + struct _LIST_ENTRY *Blink; +} LIST_ENTRY; + +#endif + + +// +// VOID +// InitializeListHead( +// LIST_ENTRY *ListHead +// ); +// + +#define InitializeListHead(ListHead) \ + (ListHead)->Flink = ListHead; \ + (ListHead)->Blink = ListHead; + +// +// BOOLEAN +// IsListEmpty( +// PLIST_ENTRY ListHead +// ); +// + +#define IsListEmpty(ListHead) \ + ((ListHead)->Flink == (ListHead)) + +// +// VOID +// RemoveEntryList( +// PLIST_ENTRY Entry +// ); +// + +#define _RemoveEntryList(Entry) { \ + LIST_ENTRY *_Blink, *_Flink; \ + _Flink = (Entry)->Flink; \ + _Blink = (Entry)->Blink; \ + _Blink->Flink = _Flink; \ + _Flink->Blink = _Blink; \ + } + +#if EFI_DEBUG + #define RemoveEntryList(Entry) \ + _RemoveEntryList(Entry); \ + (Entry)->Flink = (LIST_ENTRY *) BAD_POINTER; \ + (Entry)->Blink = (LIST_ENTRY *) BAD_POINTER; +#else + #define RemoveEntryList(Entry) \ + _RemoveEntryList(Entry); +#endif + +// +// VOID +// InsertTailList( +// PLIST_ENTRY ListHead, +// PLIST_ENTRY Entry +// ); +// + +#define InsertTailList(ListHead,Entry) {\ + LIST_ENTRY *_ListHead, *_Blink; \ + _ListHead = (ListHead); \ + _Blink = _ListHead->Blink; \ + (Entry)->Flink = _ListHead; \ + (Entry)->Blink = _Blink; \ + _Blink->Flink = (Entry); \ + _ListHead->Blink = (Entry); \ + } + +// +// VOID +// InsertHeadList( +// PLIST_ENTRY ListHead, +// PLIST_ENTRY Entry +// ); +// + +#define InsertHeadList(ListHead,Entry) {\ + LIST_ENTRY *_ListHead, *_Flink; \ + _ListHead = (ListHead); \ + _Flink = _ListHead->Flink; \ + (Entry)->Flink = _Flink; \ + (Entry)->Blink = _ListHead; \ + _Flink->Blink = (Entry); \ + _ListHead->Flink = (Entry); \ + } + +// VOID +// SwapListEntries( +// PLIST_ENTRY Entry1, +// PLIST_ENTRY Entry2 +// ); +// +// Put Entry2 before Entry1 +// +#define SwapListEntries(Entry1,Entry2) {\ + LIST_ENTRY *Entry1Flink, *Entry1Blink; \ + LIST_ENTRY *Entry2Flink, *Entry2Blink; \ + Entry2Flink = (Entry2)->Flink; \ + Entry2Blink = (Entry2)->Blink; \ + Entry1Flink = (Entry1)->Flink; \ + Entry1Blink = (Entry1)->Blink; \ + Entry2Blink->Flink = Entry2Flink; \ + Entry2Flink->Blink = Entry2Blink; \ + (Entry2)->Flink = Entry1; \ + (Entry2)->Blink = Entry1Blink; \ + Entry1Blink->Flink = (Entry2); \ + (Entry1)->Blink = (Entry2); \ + } + +// +// EFI_FIELD_OFFSET - returns the byte offset to a field within a structure +// + +#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(intptr_t)(&(((TYPE *) 0)->Field))) + +// +// CONTAINING_RECORD - returns a pointer to the structure +// from one of it's elements. +// + +#define _CR(Record, TYPE, Field) \ + ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field))) + +#if EFI_DEBUG + #define CR(Record, TYPE, Field, Sig) \ + _CR(Record, TYPE, Field)->Signature != Sig ? \ + (TYPE *) ASSERT_STRUCT(_CR(Record, TYPE, Field), Record) : \ + _CR(Record, TYPE, Field) +#else + #define CR(Record, TYPE, Field, Signature) \ + _CR(Record, TYPE, Field) +#endif + + +// +// A lock structure +// + +typedef struct _FLOCK { + EFI_TPL Tpl; + EFI_TPL OwnerTpl; + UINTN Lock; +} FLOCK; + +#endif + diff --git a/gnu-efi/inc/efinet.h b/gnu-efi/inc/efinet.h new file mode 100644 index 0000000..6215816 --- /dev/null +++ b/gnu-efi/inc/efinet.h @@ -0,0 +1,348 @@ +#ifndef _EFINET_H +#define _EFINET_H + + +/*++ +Copyright (c) 1999 Intel Corporation + +Module Name: + efinet.h + +Abstract: + EFI Simple Network protocol + +Revision History +--*/ + + +/////////////////////////////////////////////////////////////////////////////// +// +// Simple Network Protocol +// + +#define EFI_SIMPLE_NETWORK_PROTOCOL_GUID \ + { 0xA19832B9, 0xAC25, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +INTERFACE_DECL(_EFI_SIMPLE_NETWORK_PROTOCOL); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef struct { + // + // Total number of frames received. Includes frames with errors and + // dropped frames. + // + UINT64 RxTotalFrames; + + // + // Number of valid frames received and copied into receive buffers. + // + UINT64 RxGoodFrames; + + // + // Number of frames below the minimum length for the media. + // This would be <64 for ethernet. + // + UINT64 RxUndersizeFrames; + + // + // Number of frames longer than the maxminum length for the + // media. This would be >1500 for ethernet. + // + UINT64 RxOversizeFrames; + + // + // Valid frames that were dropped because receive buffers were full. + // + UINT64 RxDroppedFrames; + + // + // Number of valid unicast frames received and not dropped. + // + UINT64 RxUnicastFrames; + + // + // Number of valid broadcast frames received and not dropped. + // + UINT64 RxBroadcastFrames; + + // + // Number of valid mutlicast frames received and not dropped. + // + UINT64 RxMulticastFrames; + + // + // Number of frames w/ CRC or alignment errors. + // + UINT64 RxCrcErrorFrames; + + // + // Total number of bytes received. Includes frames with errors + // and dropped frames. + // + UINT64 RxTotalBytes; + + // + // Transmit statistics. + // + UINT64 TxTotalFrames; + UINT64 TxGoodFrames; + UINT64 TxUndersizeFrames; + UINT64 TxOversizeFrames; + UINT64 TxDroppedFrames; + UINT64 TxUnicastFrames; + UINT64 TxBroadcastFrames; + UINT64 TxMulticastFrames; + UINT64 TxCrcErrorFrames; + UINT64 TxTotalBytes; + + // + // Number of collisions detection on this subnet. + // + UINT64 Collisions; + + // + // Number of frames destined for unsupported protocol. + // + UINT64 UnsupportedProtocol; + +} EFI_NETWORK_STATISTICS; + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef enum { + EfiSimpleNetworkStopped, + EfiSimpleNetworkStarted, + EfiSimpleNetworkInitialized, + EfiSimpleNetworkMaxState +} EFI_SIMPLE_NETWORK_STATE; + +/////////////////////////////////////////////////////////////////////////////// +// + +#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01 +#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02 +#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04 +#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 +#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 + +/////////////////////////////////////////////////////////////////////////////// +// + +#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01 +#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02 +#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04 +#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08 + +/////////////////////////////////////////////////////////////////////////////// +// +#define MAX_MCAST_FILTER_CNT 16 +typedef struct { + UINT32 State; + UINT32 HwAddressSize; + UINT32 MediaHeaderSize; + UINT32 MaxPacketSize; + UINT32 NvRamSize; + UINT32 NvRamAccessSize; + UINT32 ReceiveFilterMask; + UINT32 ReceiveFilterSetting; + UINT32 MaxMCastFilterCount; + UINT32 MCastFilterCount; + EFI_MAC_ADDRESS MCastFilter[MAX_MCAST_FILTER_CNT]; + EFI_MAC_ADDRESS CurrentAddress; + EFI_MAC_ADDRESS BroadcastAddress; + EFI_MAC_ADDRESS PermanentAddress; + UINT8 IfType; + BOOLEAN MacAddressChangeable; + BOOLEAN MultipleTxSupported; + BOOLEAN MediaPresentSupported; + BOOLEAN MediaPresent; +} EFI_SIMPLE_NETWORK_MODE; + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_START) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_STOP) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_INITIALIZE) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_RESET) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ExtendedVerification +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_SHUTDOWN) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE_FILTERS) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_STATION_ADDRESS) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_STATISTICS) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *IP, + OUT EFI_MAC_ADDRESS *MAC +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_NVDATA) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_GET_STATUS) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_TRANSMIT) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_NETWORK_RECEIVE) ( + IN struct _EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL +); + +/////////////////////////////////////////////////////////////////////////////// +// + +#define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000 +#define EFI_SIMPLE_NETWORK_INTERFACE_REVISION EFI_SIMPLE_NETWORK_PROTOCOL_REVISION + +typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL { + UINT64 Revision; + EFI_SIMPLE_NETWORK_START Start; + EFI_SIMPLE_NETWORK_STOP Stop; + EFI_SIMPLE_NETWORK_INITIALIZE Initialize; + EFI_SIMPLE_NETWORK_RESET Reset; + EFI_SIMPLE_NETWORK_SHUTDOWN Shutdown; + EFI_SIMPLE_NETWORK_RECEIVE_FILTERS ReceiveFilters; + EFI_SIMPLE_NETWORK_STATION_ADDRESS StationAddress; + EFI_SIMPLE_NETWORK_STATISTICS Statistics; + EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC MCastIpToMac; + EFI_SIMPLE_NETWORK_NVDATA NvData; + EFI_SIMPLE_NETWORK_GET_STATUS GetStatus; + EFI_SIMPLE_NETWORK_TRANSMIT Transmit; + EFI_SIMPLE_NETWORK_RECEIVE Receive; + EFI_EVENT WaitForPacket; + EFI_SIMPLE_NETWORK_MODE *Mode; +} EFI_SIMPLE_NETWORK_PROTOCOL; + +// Note: Because it conflicted with the EDK2 struct name, the +// 'EFI_SIMPLE_NETWORK_PROTOCOL' GUID definition, from older +// versions of gnu-efi, is now obsoleted. +// Use 'EFI_SIMPLE_NETWORK_PROTOCOL_GUID' instead. + +typedef struct _EFI_SIMPLE_NETWORK_PROTOCOL _EFI_SIMPLE_NETWORK; +typedef EFI_SIMPLE_NETWORK_PROTOCOL EFI_SIMPLE_NETWORK; + +#endif /* _EFINET_H */ diff --git a/gnu-efi/inc/efipart.h b/gnu-efi/inc/efipart.h new file mode 100644 index 0000000..d4c5573 --- /dev/null +++ b/gnu-efi/inc/efipart.h @@ -0,0 +1,61 @@ +#ifndef _EFI_PART_H +#define _EFI_PART_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efipart.h + +Abstract: + Info about disk partitions and Master Boot Records + + + + +Revision History + +--*/ + +// +// +// + +#define EFI_PARTITION 0xef +#define MBR_SIZE 512 + +#pragma pack(1) + +typedef struct { + UINT8 BootIndicator; + UINT8 StartHead; + UINT8 StartSector; + UINT8 StartTrack; + UINT8 OSIndicator; + UINT8 EndHead; + UINT8 EndSector; + UINT8 EndTrack; + UINT8 StartingLBA[4]; + UINT8 SizeInLBA[4]; +} MBR_PARTITION_RECORD; + +#define EXTRACT_UINT32(D) (UINT32)(D[0] | (D[1] << 8) | (D[2] << 16) | (D[3] << 24)) + +#define MBR_SIGNATURE 0xaa55 +#define MIN_MBR_DEVICE_SIZE 0x80000 +#define MBR_ERRATA_PAD 0x40000 // 128 MB + +#define MAX_MBR_PARTITIONS 4 +typedef struct { + UINT8 BootStrapCode[440]; + UINT8 UniqueMbrSignature[4]; + UINT8 Unknown[2]; + MBR_PARTITION_RECORD Partition[MAX_MBR_PARTITIONS]; + UINT16 Signature; +} MASTER_BOOT_RECORD; +#pragma pack() + + +#endif diff --git a/gnu-efi/inc/efipciio.h b/gnu-efi/inc/efipciio.h new file mode 100644 index 0000000..e885387 --- /dev/null +++ b/gnu-efi/inc/efipciio.h @@ -0,0 +1,399 @@ +#ifndef _EFI_PCI_IO_H +#define _EFI_PCI_IO_H + +#define EFI_PCI_IO_PROTOCOL_GUID \ + { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a} } + +#define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \ + { 0x2f707ebb, 0x4a1a, 0x11d4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +INTERFACE_DECL(_EFI_PCI_IO_PROTOCOL); +INTERFACE_DECL(_EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL); + +typedef enum { + EfiPciIoWidthUint8, + EfiPciIoWidthUint16, + EfiPciIoWidthUint32, + EfiPciIoWidthUint64, + EfiPciIoWidthFifoUint8, + EfiPciIoWidthFifoUint16, + EfiPciIoWidthFifoUint32, + EfiPciIoWidthFifoUint64, + EfiPciIoWidthFillUint8, + EfiPciIoWidthFillUint16, + EfiPciIoWidthFillUint32, + EfiPciIoWidthFillUint64, + EfiPciIoWidthMaximum +} EFI_PCI_IO_PROTOCOL_WIDTH, EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH; + +#define EFI_PCI_IO_PASS_THROUGH_BAR 0xff + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_WIDTH Width, + IN UINT8 BarIndex, + IN UINT64 Offset, + IN UINT64 Mask, + IN UINT64 Value, + IN UINT64 Delay, + OUT UINT64 *Result +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINT64 Mask, + IN UINT64 Value, + IN UINT64 Delay, + OUT UINT64 *Result +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_WIDTH Width, + IN UINT8 BarIndex, + IN UINT64 Offset, + IN UINTN Count, + IN OUT VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer +); + +typedef struct { + EFI_PCI_IO_PROTOCOL_IO_MEM Read; + EFI_PCI_IO_PROTOCOL_IO_MEM Write; +} EFI_PCI_IO_PROTOCOL_ACCESS; + +typedef struct { + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Read; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write; +} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS; + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_WIDTH Width, + IN UINT32 Offset, + IN UINTN Count, + IN OUT VOID *Buffer +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + OUT VOID **Resources +); + +typedef struct { + EFI_PCI_IO_PROTOCOL_CONFIG Read; + EFI_PCI_IO_PROTOCOL_CONFIG Write; +} EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS; + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_WIDTH Width, + IN UINT8 DestBarIndex, + IN UINT64 DestOffset, + IN UINT8 SrcBarIndex, + IN UINT64 SrcOffset, + IN UINTN Count +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, + IN UINT64 DestAddress, + IN UINT64 SrcAddress, + IN UINTN Count +); + +typedef enum { + EfiPciIoOperationBusMasterRead, + EfiPciIoOperationBusMasterWrite, + EfiPciIoOperationBusMasterCommonBuffer, + EfiPciIoOperationMaximum +} EFI_PCI_IO_PROTOCOL_OPERATION; + +typedef enum { + EfiPciOperationBusMasterRead, + EfiPciOperationBusMasterWrite, + EfiPciOperationBusMasterCommonBuffer, + EfiPciOperationBusMasterRead64, + EfiPciOperationBusMasterWrite64, + EfiPciOperationBusMasterCommonBuffer64, + EfiPciOperationMaximum +} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION; + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_OPERATION Operation, + IN VOID *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation, + IN VOID *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN VOID *Mapping +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN VOID *Mapping +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + OUT VOID **HostAddress, + IN UINT64 Attributes +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + IN OUT VOID **HostAddress, + IN UINT64 Attributes +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN UINTN Pages, + IN VOID *HostAddress + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN UINTN Pages, + IN VOID *HostAddress +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) ( + IN struct _EFI_PCI_IO_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + OUT UINTN *SegmentNumber, + OUT UINTN *BusNumber, + OUT UINTN *DeviceNumber, + OUT UINTN *FunctionNumber +); + +#define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001 +#define EFI_PCI_ATTRIBUTE_ISA_IO 0x0002 +#define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO 0x0004 +#define EFI_PCI_ATTRIBUTE_VGA_MEMORY 0x0008 +#define EFI_PCI_ATTRIBUTE_VGA_IO 0x0010 +#define EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 +#define EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 +#define EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 +#define EFI_PCI_ATTRIBUTE_IO 0x0100 +#define EFI_PCI_ATTRIBUTE_MEMORY 0x0200 +#define EFI_PCI_ATTRIBUTE_BUS_MASTER 0x0400 +#define EFI_PCI_ATTRIBUTE_MEMORY_CACHED 0x0800 +#define EFI_PCI_ATTRIBUTE_MEMORY_DISABLE 0x1000 +#define EFI_PCI_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 +#define EFI_PCI_ATTRIBUTE_EMBEDDED_ROM 0x4000 +#define EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 +#define EFI_PCI_ATTRIBUTE_ISA_IO_16 0x10000 +#define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 +#define EFI_PCI_ATTRIBUTE_VGA_IO_16 0x40000 + +#define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO +#define EFI_PCI_IO_ATTRIBUTE_ISA_IO EFI_PCI_ATTRIBUTE_ISA_IO +#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO +#define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY EFI_PCI_ATTRIBUTE_VGA_MEMORY +#define EFI_PCI_IO_ATTRIBUTE_VGA_IO EFI_PCI_ATTRIBUTE_VGA_IO +#define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO +#define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO +#define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE +#define EFI_PCI_IO_ATTRIBUTE_IO EFI_PCI_ATTRIBUTE_IO +#define EFI_PCI_IO_ATTRIBUTE_MEMORY EFI_PCI_ATTRIBUTE_MEMORY +#define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER EFI_PCI_ATTRIBUTE_BUS_MASTER +#define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED EFI_PCI_ATTRIBUTE_MEMORY_CACHED +#define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE EFI_PCI_ATTRIBUTE_MEMORY_DISABLE +#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE EFI_PCI_ATTRIBUTE_EMBEDDED_DEVICE +#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM EFI_PCI_ATTRIBUTE_EMBEDDED_ROM +#define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE +#define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 EFI_PCI_ATTRIBUTE_ISA_IO_16 +#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 +#define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 EFI_PCI_ATTRIBUTE_VGA_IO_16 + +#define EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER \ + (EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED | EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE) + +#define EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER \ + (~EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER) + +typedef struct { + UINT8 Register; + UINT8 Function; + UINT8 Device; + UINT8 Bus; + UINT32 ExtendedRegister; +} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS; + +typedef enum { + EfiPciIoAttributeOperationGet, + EfiPciIoAttributeOperationSet, + EfiPciIoAttributeOperationEnable, + EfiPciIoAttributeOperationDisable, + EfiPciIoAttributeOperationSupported, + EfiPciIoAttributeOperationMaximum +} EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION; + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation, + IN UINT64 Attributes, + OUT UINT64 *Result OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN UINT8 BarIndex, + OUT UINT64 *Supports OPTIONAL, + OUT VOID **Resources OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + OUT UINT64 *Supports, + OUT UINT64 *Attributes +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) ( + IN struct _EFI_PCI_IO_PROTOCOL *This, + IN UINT64 Attributes, + IN UINT8 BarIndex, + IN OUT UINT64 *Offset, + IN OUT UINT64 *Length +); + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES) ( + IN struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, + IN UINT64 Attributes, + IN OUT UINT64 *ResourceBase, + IN OUT UINT64 *ResourceLength +); + +typedef struct _EFI_PCI_IO_PROTOCOL { + EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem; + EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo; + EFI_PCI_IO_PROTOCOL_ACCESS Mem; + EFI_PCI_IO_PROTOCOL_ACCESS Io; + EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci; + EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem; + EFI_PCI_IO_PROTOCOL_MAP Map; + EFI_PCI_IO_PROTOCOL_UNMAP Unmap; + EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; + EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer; + EFI_PCI_IO_PROTOCOL_FLUSH Flush; + EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation; + EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes; + EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes; + EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes; + UINT64 RomSize; + VOID *RomImage; +} EFI_PCI_IO_PROTOCOL; + +// Note: Because it conflicted with the EDK2 struct name, the +// 'EFI_PCI_IO_PROTOCOL' GUID definition, from older versions +// of gnu-efi, is now obsoleted. +// Use 'EFI_PCI_IO_PROTOCOL_GUID' instead. + +typedef struct _EFI_PCI_IO_PROTOCOL _EFI_PCI_IO; +typedef EFI_PCI_IO_PROTOCOL EFI_PCI_IO; + +typedef struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL { + EFI_HANDLE ParentHandle; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollMem; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollIo; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Mem; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Io; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Pci; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM CopyMem; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP Map; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP Unmap; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER FreeBuffer; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH Flush; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES GetAttributes; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES SetAttributes; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION Configuration; + UINT32 SegmentNumber; +} EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL; + +#endif /* _EFI_PCI_IO_H */ diff --git a/gnu-efi/inc/efipoint.h b/gnu-efi/inc/efipoint.h new file mode 100644 index 0000000..4dbcf18 --- /dev/null +++ b/gnu-efi/inc/efipoint.h @@ -0,0 +1,115 @@ +/* Copyright (C) 2014 by John Cronin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef _EFI_POINT_H +#define _EFI_POINT_H + +#define EFI_SIMPLE_POINTER_PROTOCOL_GUID \ + { 0x31878c87, 0xb75, 0x11d5, { 0x9a, 0x4f, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } + +INTERFACE_DECL(_EFI_SIMPLE_POINTER); + +typedef struct { + INT32 RelativeMovementX; + INT32 RelativeMovementY; + INT32 RelativeMovementZ; + BOOLEAN LeftButton; + BOOLEAN RightButton; +} EFI_SIMPLE_POINTER_STATE; + +typedef struct { + UINT64 ResolutionX; + UINT64 ResolutionY; + UINT64 ResolutionZ; + BOOLEAN LeftButton; + BOOLEAN RightButton; +} EFI_SIMPLE_POINTER_MODE; + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_POINTER_RESET) ( + IN struct _EFI_SIMPLE_POINTER *This, + IN BOOLEAN ExtendedVerification +); + +typedef +EFI_STATUS +(EFIAPI *EFI_SIMPLE_POINTER_GET_STATE) ( + IN struct _EFI_SIMPLE_POINTER *This, + IN OUT EFI_SIMPLE_POINTER_STATE *State +); + +typedef struct _EFI_SIMPLE_POINTER { + EFI_SIMPLE_POINTER_RESET Reset; + EFI_SIMPLE_POINTER_GET_STATE GetState; + EFI_EVENT WaitForInput; + EFI_SIMPLE_POINTER_MODE *Mode; +} EFI_SIMPLE_POINTER_PROTOCOL; + +#define EFI_ABSOLUTE_POINTER_PROTOCOL_GUID \ + { 0x8D59D32B, 0xC655, 0x4AE9, { 0x9B, 0x15, 0xF2, 0x59, 0x04, 0x99, 0x2A, 0x43 } } + +INTERFACE_DECL(_EFI_ABSOLUTE_POINTER_PROTOCOL); + +typedef struct { + UINT64 AbsoluteMinX; + UINT64 AbsoluteMinY; + UINT64 AbsoluteMinZ; + UINT64 AbsoluteMaxX; + UINT64 AbsoluteMaxY; + UINT64 AbsoluteMaxZ; + UINT32 Attributes; +} EFI_ABSOLUTE_POINTER_MODE; + +typedef struct { + UINT64 CurrentX; + UINT64 CurrentY; + UINT64 CurrentZ; + UINT32 ActiveButtons; +} EFI_ABSOLUTE_POINTER_STATE; + +#define EFI_ABSP_SupportsAltActive 0x00000001 +#define EFI_ABSP_SupportsPressureAsZ 0x00000002 +#define EFI_ABSP_TouchActive 0x00000001 +#define EFI_ABS_AltActive 0x00000002 + +typedef +EFI_STATUS +(EFIAPI *EFI_ABSOLUTE_POINTER_RESET) ( + IN struct _EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN BOOLEAN ExtendedVerification +); + +typedef +EFI_STATUS +(EFIAPI *EFI_ABSOLUTE_POINTER_GET_STATE) ( + IN struct _EFI_ABSOLUTE_POINTER_PROTOCOL *This, + IN OUT EFI_ABSOLUTE_POINTER_STATE *State +); + +typedef struct _EFI_ABSOLUTE_POINTER_PROTOCOL { + EFI_ABSOLUTE_POINTER_RESET Reset; + EFI_ABSOLUTE_POINTER_GET_STATE GetState; + EFI_EVENT WaitForInput; + EFI_ABSOLUTE_POINTER_MODE *Mode; +} EFI_ABSOLUTE_POINTER_PROTOCOL; + +#endif diff --git a/gnu-efi/inc/efiprot.h b/gnu-efi/inc/efiprot.h new file mode 100644 index 0000000..53fc560 --- /dev/null +++ b/gnu-efi/inc/efiprot.h @@ -0,0 +1,1424 @@ +#ifndef _EFI_PROT_H +#define _EFI_PROT_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efiprot.h + +Abstract: + + EFI Protocols + + + +Revision History + +--*/ + +// +// FPSWA library protocol +// +#define EFI_FPSWA_PROTOCOL_GUID \ + { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } +#define FPSWA_PROTOCOL EFI_FPSWA_PROTOCOL_GUID + +// +// Device Path protocol +// + +#define EFI_DEVICE_PATH_PROTOCOL_GUID \ + { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID + + +// +// Block IO protocol +// + +#define EFI_BLOCK_IO_PROTOCOL_GUID \ + { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define BLOCK_IO_PROTOCOL EFI_BLOCK_IO_PROTOCOL_GUID + +#define EFI_BLOCK_IO_PROTOCOL_REVISION 0x00010000 +#define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001 +#define EFI_BLOCK_IO_PROTOCOL_REVISION3 ((2<<16) | 31) +#define EFI_BLOCK_IO_INTERFACE_REVISION EFI_BLOCK_IO_PROTOCOL_REVISION +#define EFI_BLOCK_IO_INTERFACE_REVISION2 EFI_BLOCK_IO_PROTOCOL_REVISION2 +#define EFI_BLOCK_IO_INTERFACE_REVISION3 EFI_BLOCK_IO_PROTOCOL_REVISION3 + +INTERFACE_DECL(_EFI_BLOCK_IO_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_RESET) ( + IN struct _EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_READ) ( + IN struct _EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA LBA, + IN UINTN BufferSize, + OUT VOID *Buffer + ); + + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_WRITE) ( + IN struct _EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA LBA, + IN UINTN BufferSize, + IN VOID *Buffer + ); + + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_FLUSH) ( + IN struct _EFI_BLOCK_IO_PROTOCOL *This + ); + + + +typedef struct { + UINT32 MediaId; + BOOLEAN RemovableMedia; + BOOLEAN MediaPresent; + + BOOLEAN LogicalPartition; + BOOLEAN ReadOnly; + BOOLEAN WriteCaching; + + UINT32 BlockSize; + UINT32 IoAlign; + + EFI_LBA LastBlock; + + /* revision 2 */ + EFI_LBA LowestAlignedLba; + UINT32 LogicalBlocksPerPhysicalBlock; + /* revision 3 */ + UINT32 OptimalTransferLengthGranularity; +} EFI_BLOCK_IO_MEDIA; + +typedef struct _EFI_BLOCK_IO_PROTOCOL { + UINT64 Revision; + + EFI_BLOCK_IO_MEDIA *Media; + + EFI_BLOCK_RESET Reset; + EFI_BLOCK_READ ReadBlocks; + EFI_BLOCK_WRITE WriteBlocks; + EFI_BLOCK_FLUSH FlushBlocks; + +} EFI_BLOCK_IO_PROTOCOL; + +typedef struct _EFI_BLOCK_IO_PROTOCOL _EFI_BLOCK_IO; +typedef EFI_BLOCK_IO_PROTOCOL EFI_BLOCK_IO; + +#define EFI_BLOCK_IO2_PROTOCOL_GUID \ + { 0xa77b2472, 0xe282, 0x4e9f, {0xa2, 0x45, 0xc2, 0xc0, 0xe2, 0x7b, 0xbc, 0xc1} } + +INTERFACE_DECL(_EFI_BLOCK_IO2_PROTOCOL); + +typedef struct { + EFI_EVENT Event; + EFI_STATUS TransactionStatus; +} EFI_BLOCK_IO2_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_RESET_EX) ( + IN struct _EFI_BLOCK_IO2_PROTOCOL *This, + IN BOOLEAN ExtendedVerification + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_READ_EX) ( + IN struct _EFI_BLOCK_IO2_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA LBA, + IN OUT EFI_BLOCK_IO2_TOKEN *Token, + IN UINTN BufferSize, + OUT VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_WRITE_EX) ( + IN struct _EFI_BLOCK_IO2_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA LBA, + IN OUT EFI_BLOCK_IO2_TOKEN *Token, + IN UINTN BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_BLOCK_FLUSH_EX) ( + IN struct _EFI_BLOCK_IO2_PROTOCOL *This, + IN OUT EFI_BLOCK_IO2_TOKEN *Token + ); + +typedef struct _EFI_BLOCK_IO2_PROTOCOL { + EFI_BLOCK_IO_MEDIA *Media; + EFI_BLOCK_RESET_EX Reset; + EFI_BLOCK_READ_EX ReadBlocksEx; + EFI_BLOCK_WRITE_EX WriteBlocksEx; + EFI_BLOCK_FLUSH_EX FlushBlocksEx; +} EFI_BLOCK_IO2_PROTOCOL; + +// +// Disk Block IO protocol +// + +#define EFI_DISK_IO_PROTOCOL_GUID \ + { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define DISK_IO_PROTOCOL EFI_DISK_IO_PROTOCOL_GUID + +#define EFI_DISK_IO_PROTOCOL_REVISION 0x00010000 +#define EFI_DISK_IO_INTERFACE_REVISION EFI_DISK_IO_PROTOCOL_REVISION + +INTERFACE_DECL(_EFI_DISK_IO_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_READ) ( + IN struct _EFI_DISK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN UINT64 Offset, + IN UINTN BufferSize, + OUT VOID *Buffer + ); + + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_WRITE) ( + IN struct _EFI_DISK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN UINT64 Offset, + IN UINTN BufferSize, + IN VOID *Buffer + ); + + +typedef struct _EFI_DISK_IO_PROTOCOL { + UINT64 Revision; + EFI_DISK_READ ReadDisk; + EFI_DISK_WRITE WriteDisk; +} EFI_DISK_IO_PROTOCOL; + +typedef struct _EFI_DISK_IO_PROTOCOL _EFI_DISK_IO; +typedef EFI_DISK_IO_PROTOCOL EFI_DISK_IO; + + +#define EFI_DISK_IO2_PROTOCOL_GUID \ + { 0x151c8eae, 0x7f2c, 0x472c, {0x9e, 0x54, 0x98, 0x28, 0x19, 0x4f, 0x6a, 0x88} } + +#define EFI_DISK_IO2_PROTOCOL_REVISION 0x00020000 + +INTERFACE_DECL(_EFI_DISK_IO2_PROTOCOL); + +typedef struct { + EFI_EVENT Event; + EFI_STATUS TransactionStatus; +} EFI_DISK_IO2_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_CANCEL_EX) ( + IN struct _EFI_DISK_IO2_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_READ_EX) ( + IN struct _EFI_DISK_IO2_PROTOCOL *This, + IN UINT32 MediaId, + IN UINT64 Offset, + IN OUT EFI_DISK_IO2_TOKEN *Token, + IN UINTN BufferSize, + OUT VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_WRITE_EX) ( + IN struct _EFI_DISK_IO2_PROTOCOL *This, + IN UINT32 MediaId, + IN UINT64 Offset, + IN OUT EFI_DISK_IO2_TOKEN *Token, + IN UINTN BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_DISK_FLUSH_EX) ( + IN struct _EFI_DISK_IO2_PROTOCOL *This, + IN OUT EFI_DISK_IO2_TOKEN *Token + ); + +typedef struct _EFI_DISK_IO2_PROTOCOL { + UINT64 Revision; + EFI_DISK_CANCEL_EX Cancel; + EFI_DISK_READ_EX ReadDiskEx; + EFI_DISK_WRITE_EX WriteDiskEx; + EFI_DISK_FLUSH_EX FlushDiskEx; +} EFI_DISK_IO2_PROTOCOL; + +// +// Simple file system protocol +// + +#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ + { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define SIMPLE_FILE_SYSTEM_PROTOCOL EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL); +INTERFACE_DECL(_EFI_FILE_HANDLE); + +typedef +EFI_STATUS +(EFIAPI *EFI_VOLUME_OPEN) ( + IN struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT struct _EFI_FILE_HANDLE **Root + ); + +#define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION 0x00010000 +#define EFI_FILE_IO_INTERFACE_REVISION EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION + +typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL { + UINT64 Revision; + EFI_VOLUME_OPEN OpenVolume; +} EFI_SIMPLE_FILE_SYSTEM_PROTOCOL; + +typedef struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL _EFI_FILE_IO_INTERFACE; +typedef EFI_SIMPLE_FILE_SYSTEM_PROTOCOL EFI_FILE_IO_INTERFACE; + +// +// +// + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_OPEN) ( + IN struct _EFI_FILE_HANDLE *File, + OUT struct _EFI_FILE_HANDLE **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes + ); + +// Open modes +#define EFI_FILE_MODE_READ 0x0000000000000001 +#define EFI_FILE_MODE_WRITE 0x0000000000000002 +#define EFI_FILE_MODE_CREATE 0x8000000000000000 + +// File attributes +#define EFI_FILE_READ_ONLY 0x0000000000000001 +#define EFI_FILE_HIDDEN 0x0000000000000002 +#define EFI_FILE_SYSTEM 0x0000000000000004 +#define EFI_FILE_RESERVIED 0x0000000000000008 +#define EFI_FILE_DIRECTORY 0x0000000000000010 +#define EFI_FILE_ARCHIVE 0x0000000000000020 +#define EFI_FILE_VALID_ATTR 0x0000000000000037 + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_CLOSE) ( + IN struct _EFI_FILE_HANDLE *File + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_DELETE) ( + IN struct _EFI_FILE_HANDLE *File + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_READ) ( + IN struct _EFI_FILE_HANDLE *File, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_WRITE) ( + IN struct _EFI_FILE_HANDLE *File, + IN OUT UINTN *BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_SET_POSITION) ( + IN struct _EFI_FILE_HANDLE *File, + IN UINT64 Position + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_GET_POSITION) ( + IN struct _EFI_FILE_HANDLE *File, + OUT UINT64 *Position + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_GET_INFO) ( + IN struct _EFI_FILE_HANDLE *File, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_SET_INFO) ( + IN struct _EFI_FILE_HANDLE *File, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_FLUSH) ( + IN struct _EFI_FILE_HANDLE *File + ); + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + UINTN BufferSize; + VOID *Buffer; +} EFI_FILE_IO_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_OPEN_EX)( + IN struct _EFI_FILE_HANDLE *File, + OUT struct _EFI_FILE_HANDLE **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes, + IN OUT EFI_FILE_IO_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_READ_EX) ( + IN struct _EFI_FILE_HANDLE *File, + IN OUT EFI_FILE_IO_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_WRITE_EX) ( + IN struct _EFI_FILE_HANDLE *File, + IN OUT EFI_FILE_IO_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_FILE_FLUSH_EX) ( + IN struct _EFI_FILE_HANDLE *File, + IN OUT EFI_FILE_IO_TOKEN *Token + ); + +#define EFI_FILE_PROTOCOL_REVISION 0x00010000 +#define EFI_FILE_PROTOCOL_REVISION2 0x00020000 +#define EFI_FILE_PROTOCOL_LATEST_REVISION EFI_FILE_PROTOCOL_REVISION2 +#define EFI_FILE_HANDLE_REVISION EFI_FILE_PROTOCOL_REVISION + +typedef struct _EFI_FILE_HANDLE { + UINT64 Revision; + EFI_FILE_OPEN Open; + EFI_FILE_CLOSE Close; + EFI_FILE_DELETE Delete; + EFI_FILE_READ Read; + EFI_FILE_WRITE Write; + EFI_FILE_GET_POSITION GetPosition; + EFI_FILE_SET_POSITION SetPosition; + EFI_FILE_GET_INFO GetInfo; + EFI_FILE_SET_INFO SetInfo; + EFI_FILE_FLUSH Flush; + EFI_FILE_OPEN_EX OpenEx; + EFI_FILE_READ_EX ReadEx; + EFI_FILE_WRITE_EX WriteEx; + EFI_FILE_FLUSH_EX FlushEx; +} EFI_FILE_PROTOCOL, *EFI_FILE_HANDLE; + +typedef EFI_FILE_PROTOCOL EFI_FILE; + + +// +// File information types +// + +#define EFI_FILE_INFO_ID \ + { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } + +typedef struct { + UINT64 Size; + UINT64 FileSize; + UINT64 PhysicalSize; + EFI_TIME CreateTime; + EFI_TIME LastAccessTime; + EFI_TIME ModificationTime; + UINT64 Attribute; + CHAR16 FileName[1]; +} EFI_FILE_INFO; + +// +// The FileName field of the EFI_FILE_INFO data structure is variable length. +// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to +// be the size of the data structure without the FileName field. The following macro +// computes this size correctly no matter how big the FileName array is declared. +// This is required to make the EFI_FILE_INFO data structure ANSI compilant. +// + +#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName) + +#define EFI_FILE_SYSTEM_INFO_ID \ + { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } + +typedef struct { + UINT64 Size; + BOOLEAN ReadOnly; + UINT64 VolumeSize; + UINT64 FreeSpace; + UINT32 BlockSize; + CHAR16 VolumeLabel[1]; +} EFI_FILE_SYSTEM_INFO; + +// +// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length. +// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs +// to be the size of the data structure without the VolumeLable field. The following macro +// computes this size correctly no matter how big the VolumeLable array is declared. +// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant. +// + +#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel) + +#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \ + { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } + +typedef struct { + CHAR16 VolumeLabel[1]; +} EFI_FILE_SYSTEM_VOLUME_LABEL_INFO; + +#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel) + +// +// Load file protocol +// + + +#define EFI_LOAD_FILE_PROTOCOL_GUID \ + { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define LOAD_FILE_PROTOCOL EFI_LOAD_FILE_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_LOAD_FILE_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_LOAD_FILE) ( + IN struct _EFI_LOAD_FILE_PROTOCOL *This, + IN EFI_DEVICE_PATH *FilePath, + IN BOOLEAN BootPolicy, + IN OUT UINTN *BufferSize, + IN VOID *Buffer OPTIONAL + ); + +typedef struct _EFI_LOAD_FILE_PROTOCOL { + EFI_LOAD_FILE LoadFile; +} EFI_LOAD_FILE_PROTOCOL; + +typedef struct _EFI_LOAD_FILE_PROTOCOL _EFI_LOAD_FILE_INTERFACE; +typedef EFI_LOAD_FILE_PROTOCOL EFI_LOAD_FILE_INTERFACE; + +// +// Device IO protocol +// + +#define EFI_DEVICE_IO_PROTOCOL_GUID \ + { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } +#define DEVICE_IO_PROTOCOL EFI_DEVICE_IO_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_DEVICE_IO_PROTOCOL); + +typedef enum { + IO_UINT8, + IO_UINT16, + IO_UINT32, + IO_UINT64, +// +// Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO +// + MMIO_COPY_UINT8, + MMIO_COPY_UINT16, + MMIO_COPY_UINT32, + MMIO_COPY_UINT64 +} EFI_IO_WIDTH; + +#define EFI_PCI_ADDRESS(_bus,_dev,_func) \ + ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) ) + + +typedef +EFI_STATUS +(EFIAPI *EFI_DEVICE_IO) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN EFI_IO_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ); + +typedef struct { + EFI_DEVICE_IO Read; + EFI_DEVICE_IO Write; +} EFI_IO_ACCESS; + +typedef +EFI_STATUS +(EFIAPI *EFI_PCI_DEVICE_PATH) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN UINT64 Address, + IN OUT EFI_DEVICE_PATH **PciDevicePath + ); + +typedef enum { + EfiBusMasterRead, + EfiBusMasterWrite, + EfiBusMasterCommonBuffer +} EFI_IO_OPERATION_TYPE; + +typedef +EFI_STATUS +(EFIAPI *EFI_IO_MAP) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN EFI_IO_OPERATION_TYPE Operation, + IN EFI_PHYSICAL_ADDRESS *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IO_UNMAP) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN VOID *Mapping + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + IN OUT EFI_PHYSICAL_ADDRESS *HostAddress + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IO_FLUSH) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_IO_FREE_BUFFER) ( + IN struct _EFI_DEVICE_IO_PROTOCOL *This, + IN UINTN Pages, + IN EFI_PHYSICAL_ADDRESS HostAddress + ); + +typedef struct _EFI_DEVICE_IO_PROTOCOL { + EFI_IO_ACCESS Mem; + EFI_IO_ACCESS Io; + EFI_IO_ACCESS Pci; + EFI_IO_MAP Map; + EFI_PCI_DEVICE_PATH PciDevicePath; + EFI_IO_UNMAP Unmap; + EFI_IO_ALLOCATE_BUFFER AllocateBuffer; + EFI_IO_FLUSH Flush; + EFI_IO_FREE_BUFFER FreeBuffer; +} EFI_DEVICE_IO_PROTOCOL; + +typedef struct _EFI_DEVICE_IO_PROTOCOL _EFI_DEVICE_IO_INTERFACE; +typedef EFI_DEVICE_IO_PROTOCOL EFI_DEVICE_IO_INTERFACE; + +// +// Unicode Collation protocol +// + +#define EFI_UNICODE_COLLATION_PROTOCOL_GUID \ + { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } +#define UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_PROTOCOL_GUID + +#define EFI_UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff) +#define UNICODE_BYTE_ORDER_MARK EFI_UNICODE_BYTE_ORDER_MARK + +INTERFACE_DECL(_EFI_UNICODE_COLLATION_PROTOCOL); + +typedef +INTN +(EFIAPI *EFI_UNICODE_STRICOLL) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN CHAR16 *s1, + IN CHAR16 *s2 + ); + +typedef +BOOLEAN +(EFIAPI *EFI_UNICODE_METAIMATCH) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN CHAR16 *String, + IN CHAR16 *Pattern + ); + +typedef +VOID +(EFIAPI *EFI_UNICODE_STRLWR) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN OUT CHAR16 *Str + ); + +typedef +VOID +(EFIAPI *EFI_UNICODE_STRUPR) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN OUT CHAR16 *Str + ); + +typedef +VOID +(EFIAPI *EFI_UNICODE_FATTOSTR) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN UINTN FatSize, + IN CHAR8 *Fat, + OUT CHAR16 *String + ); + +typedef +BOOLEAN +(EFIAPI *EFI_UNICODE_STRTOFAT) ( + IN struct _EFI_UNICODE_COLLATION_PROTOCOL *This, + IN CHAR16 *String, + IN UINTN FatSize, + OUT CHAR8 *Fat + ); + +// +// Hash Protocol +// +#define EFI_HASH_PROTOCOL_GUID \ + { 0xC5184932, 0xDBA5, 0x46DB, { 0xA5, 0xBA, 0xCC, 0x0B, 0xDA, 0x9C, 0x14, 0x35 } } +#define HASH_PROTOCOL EFI_HASH_PROTOCOL_GUID + +#define EFI_HASH_ALGORITHM_SHA1_GUID \ + { 0x2AE9D80F, 0x3FB2, 0x4095, { 0xB7, 0xB1, 0xE9, 0x31, 0x57, 0xB9, 0x46, 0xB6 } } // Deprecated +#define EFI_HASH_ALGORITHM_SHA1 EFI_HASH_ALGORITHM_SHA1_GUID + +#define EFI_HASH_ALGORITHM_SHA224_GUID \ + { 0x8DF01A06, 0x9BD5, 0x4BF7, { 0xB0, 0x21, 0xDB, 0x4F, 0xD9, 0xCC, 0xF4, 0x5B } } // Deprecated +#define EFI_HASH_ALGORITHM_SHA224 EFI_HASH_ALGORITHM_SHA224_GUID + +#define EFI_HASH_ALGORITHM_SHA256_GUID \ + { 0x51AA59DE, 0xFDF2, 0x4EA3, { 0xBC, 0x63, 0x87, 0x5F, 0xB7, 0x84, 0x2E, 0xE9 } } // Deprecated +#define EFI_HASH_ALGORITHM_SHA256 EFI_HASH_ALGORITHM_SHA256_GUID + +#define EFI_HASH_ALGORITHM_SHA384_GUID \ + { 0xEFA96432, 0xDE33, 0x4DD2, { 0xAE, 0xE6, 0x32, 0x8C, 0x33, 0xDF, 0x77, 0x7A } } // Deprecated +#define EFI_HASH_ALGORITHM_SHA384 EFI_HASH_ALGORITHM_SHA384_GUID + +#define EFI_HASH_ALGORITHM_SHA512_GUID \ + { 0xCAA4381E, 0x750C, 0x4770, { 0xB8, 0x70, 0x7A, 0x23, 0xB4, 0xE4, 0x21, 0x30 } } // Deprecated +#define EFI_HASH_ALGORITHM_SHA512 EFI_HASH_ALGORITHM_SHA512_GUID + +#define EFI_HASH_ALGORITHM_MD5_GUID \ + { 0x0AF7C79C, 0x65B5, 0x4319, { 0xB0, 0xAE, 0x44, 0xEC, 0x48, 0x4E, 0x4A, 0xD7 } } // Deprecated +#define EFI_HASH_ALGORITHM_MD5 EFI_HASH_ALGORITHM_MD5_GUID + +#define EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID \ + { 0x24C5DC2F, 0x53E2, 0x40CA, { 0x9E, 0xD6, 0xA5, 0xD9, 0xA4, 0x9F, 0x46, 0x3B } } +#define EFI_HASH_ALGORITHM_SHA1_NOPAD EFI_HASH_ALGORITHM_SHA1_NOPAD_GUID + +#define EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID \ + { 0x8628752A, 0x6CB7, 0x4814, { 0x96, 0xFC, 0x24, 0xA8, 0x15, 0xAC, 0x22, 0x26 } } +#define EFI_HASH_ALGORITHM_SHA256_NOPAD EFI_HASH_ALGORITHM_SHA256_NOPAD_GUID + + +INTERFACE_DECL(_EFI_HASH_PROTOCOL); + +typedef UINT8 EFI_MD5_HASH[16]; +typedef UINT8 EFI_SHA1_HASH[20]; +typedef UINT8 EFI_SHA224_HASH[28]; +typedef UINT8 EFI_SHA256_HASH[32]; +typedef UINT8 EFI_SHA384_HASH[48]; +typedef UINT8 EFI_SHA512_HASH[64]; +typedef union _EFI_HASH_OUTPUT { + EFI_MD5_HASH *Md5Hash; + EFI_SHA1_HASH *Sha1Hash; + EFI_SHA224_HASH *Sha224Hash; + EFI_SHA256_HASH *Sha256Hash; + EFI_SHA384_HASH *Sha384Hash; + EFI_SHA512_HASH *Sha512Hash; +} EFI_HASH_OUTPUT; + +typedef +EFI_STATUS +(EFIAPI *EFI_HASH_GET_HASH_SIZE) ( + IN CONST struct _EFI_HASH_PROTOCOL *This, + IN CONST EFI_GUID *HashAlgorithm, + OUT UINTN *HashSize); + +typedef +EFI_STATUS +(EFIAPI *EFI_HASH_HASH) ( + IN CONST struct _EFI_HASH_PROTOCOL *This, + IN CONST EFI_GUID *HashAlgorithm, + IN BOOLEAN Extend, + IN CONST UINT8 *Message, + IN UINT64 MessageSize, + IN OUT EFI_HASH_OUTPUT *Hash); + +typedef struct _EFI_HASH_PROTOCOL { + EFI_HASH_GET_HASH_SIZE GetHashSize; + EFI_HASH_HASH Hash; +} EFI_HASH_PROTOCOL; + +typedef struct _EFI_HASH_PROTOCOL _EFI_HASH; +typedef EFI_HASH_PROTOCOL EFI_HASH; + + +typedef struct _EFI_UNICODE_COLLATION_PROTOCOL { + + // general + EFI_UNICODE_STRICOLL StriColl; + EFI_UNICODE_METAIMATCH MetaiMatch; + EFI_UNICODE_STRLWR StrLwr; + EFI_UNICODE_STRUPR StrUpr; + + // for supporting fat volumes + EFI_UNICODE_FATTOSTR FatToStr; + EFI_UNICODE_STRTOFAT StrToFat; + + CHAR8 *SupportedLanguages; +} EFI_UNICODE_COLLATION_PROTOCOL; + +typedef EFI_UNICODE_COLLATION_PROTOCOL EFI_UNICODE_COLLATION_INTERFACE; + +/* Graphics output protocol */ +#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \ + { 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } } +typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL; + +typedef struct { + UINT32 RedMask; + UINT32 GreenMask; + UINT32 BlueMask; + UINT32 ReservedMask; +} EFI_PIXEL_BITMASK; + +typedef enum { + PixelRedGreenBlueReserved8BitPerColor, + PixelBlueGreenRedReserved8BitPerColor, + PixelBitMask, + PixelBltOnly, + PixelFormatMax +} EFI_GRAPHICS_PIXEL_FORMAT; + +typedef struct { + UINT32 Version; + UINT32 HorizontalResolution; + UINT32 VerticalResolution; + EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; + EFI_PIXEL_BITMASK PixelInformation; + UINT32 PixelsPerScanLine; +} EFI_GRAPHICS_OUTPUT_MODE_INFORMATION; + +/** + Return the current video mode information. + + @param This Protocol instance pointer. + @param ModeNumber The mode number to return information on. + @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer. + @param Info A pointer to callee allocated buffer that returns information about ModeNumber. + + @retval EFI_SUCCESS Mode information returned. + @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. + @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode. + @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () + @retval EFI_INVALID_PARAMETER One of the input args was NULL. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) ( + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber, + OUT UINTN *SizeOfInfo, + OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info + ) +; + +/** + Return the current video mode information. + + @param This Protocol instance pointer. + @param ModeNumber The mode number to be set. + + @retval EFI_SUCCESS Graphics mode was changed. + @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. + @retval EFI_UNSUPPORTED ModeNumber is not supported by this device. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) ( + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber + ); + +typedef struct { + UINT8 Blue; + UINT8 Green; + UINT8 Red; + UINT8 Reserved; +} EFI_GRAPHICS_OUTPUT_BLT_PIXEL; + +typedef union { + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel; + UINT32 Raw; +} EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION; + +typedef enum { + EfiBltVideoFill, + EfiBltVideoToBltBuffer, + EfiBltBufferToVideo, + EfiBltVideoToVideo, + EfiGraphicsOutputBltOperationMax +} EFI_GRAPHICS_OUTPUT_BLT_OPERATION; + +/** + The following table defines actions for BltOperations: + + EfiBltVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) + directly to every pixel of the video display rectangle + (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). + Only one pixel will be used from the BltBuffer. Delta is NOT used. + + EfiBltVideoToBltBuffer - Read data from the video display rectangle + (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in + the BltBuffer rectangle (DestinationX, DestinationY ) + (DestinationX + Width, DestinationY + Height). If DestinationX or + DestinationY is not zero then Delta must be set to the length in bytes + of a row in the BltBuffer. + + EfiBltBufferToVideo - Write data from the BltBuffer rectangle + (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the + video display rectangle (DestinationX, DestinationY) + (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is + not zero then Delta must be set to the length in bytes of a row in the + BltBuffer. + + EfiBltVideoToVideo - Copy from the video display rectangle (SourceX, SourceY) + (SourceX + Width, SourceY + Height) .to the video display rectangle + (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). + The BltBuffer and Delta are not used in this mode. + + @param This Protocol instance pointer. + @param BltBuffer Buffer containing data to blit into video buffer. This + buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) + @param BltOperation Operation to perform on BlitBuffer and video memory + @param SourceX X coordinate of source for the BltBuffer. + @param SourceY Y coordinate of source for the BltBuffer. + @param DestinationX X coordinate of destination for the BltBuffer. + @param DestinationY Y coordinate of destination for the BltBuffer. + @param Width Width of rectangle in BltBuffer in pixels. + @param Height Hight of rectangle in BltBuffer in pixels. + @param Delta OPTIONAL + + @retval EFI_SUCCESS The Blt operation completed. + @retval EFI_INVALID_PARAMETER BltOperation is not valid. + @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. + +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) ( + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta OPTIONAL + ); + +typedef struct { + UINT32 MaxMode; + UINT32 Mode; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; + UINTN SizeOfInfo; + EFI_PHYSICAL_ADDRESS FrameBufferBase; + UINTN FrameBufferSize; +} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE; + +struct _EFI_GRAPHICS_OUTPUT_PROTOCOL { + EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode; + EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode; + EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt; + EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode; +}; + + + +/* + * EFI EDID Discovered Protocol + * UEFI Specification Version 2.5 Section 11.9 + */ +#define EFI_EDID_DISCOVERED_PROTOCOL_GUID \ + { 0x1C0C34F6, 0xD380, 0x41FA, { 0xA0, 0x49, 0x8a, 0xD0, 0x6C, 0x1A, 0x66, 0xAA} } + +typedef struct _EFI_EDID_DISCOVERED_PROTOCOL { + UINT32 SizeOfEdid; + UINT8 *Edid; +} EFI_EDID_DISCOVERED_PROTOCOL; + + + +/* + * EFI EDID Active Protocol + * UEFI Specification Version 2.5 Section 11.9 + */ +#define EFI_EDID_ACTIVE_PROTOCOL_GUID \ + { 0xBD8C1056, 0x9F36, 0x44EC, { 0x92, 0xA8, 0xA6, 0x33, 0x7F, 0x81, 0x79, 0x86} } + +typedef struct _EFI_EDID_ACTIVE_PROTOCOL { + UINT32 SizeOfEdid; + UINT8 *Edid; +} EFI_EDID_ACTIVE_PROTOCOL; + + + +/* + * EFI EDID Override Protocol + * UEFI Specification Version 2.5 Section 11.9 + */ +#define EFI_EDID_OVERRIDE_PROTOCOL_GUID \ + { 0x48ECB431, 0xFB72, 0x45C0, { 0xA9, 0x22, 0xF4, 0x58, 0xFE, 0x04, 0x0B, 0xD5} } + +INTERFACE_DECL(_EFI_EDID_OVERRIDE_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID) ( + IN struct _EFI_EDID_OVERRIDE_PROTOCOL *This, + IN EFI_HANDLE *ChildHandle, + OUT UINT32 *Attributes, + IN OUT UINTN *EdidSize, + IN OUT UINT8 **Edid); + +typedef struct _EFI_EDID_OVERRIDE_PROTOCOL { + EFI_EDID_OVERRIDE_PROTOCOL_GET_EDID GetEdid; +} EFI_EDID_OVERRIDE_PROTOCOL; + + + +INTERFACE_DECL(_EFI_SERVICE_BINDING); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERVICE_BINDING_CREATE_CHILD) ( + IN struct _EFI_SERVICE_BINDING *This, + IN EFI_HANDLE *ChildHandle + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERVICE_BINDING_DESTROY_CHILD) ( + IN struct _EFI_SERVICE_BINDING *This, + IN EFI_HANDLE ChildHandle + ); + +typedef struct _EFI_SERVICE_BINDING { + EFI_SERVICE_BINDING_CREATE_CHILD CreateChild; + EFI_SERVICE_BINDING_DESTROY_CHILD DestroyChild; +} EFI_SERVICE_BINDING; + + + +/* + * EFI Driver Binding Protocol + * UEFI Specification Version 2.5 Section 10.1 + */ +#define EFI_DRIVER_BINDING_PROTOCOL_GUID \ + { 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71} } +#define DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_DRIVER_BINDING_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED) ( + IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_START) ( + IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL); + +typedef +EFI_STATUS +(EFIAPI *EFI_DRIVER_BINDING_PROTOCOL_STOP) ( + IN struct _EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer OPTIONAL); + +typedef struct _EFI_DRIVER_BINDING_PROTOCOL { + EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED Supported; + EFI_DRIVER_BINDING_PROTOCOL_START Start; + EFI_DRIVER_BINDING_PROTOCOL_STOP Stop; + UINT32 Version; + EFI_HANDLE ImageHandle; + EFI_HANDLE DriverBindingHandle; +} EFI_DRIVER_BINDING_PROTOCOL; + +typedef struct _EFI_DRIVER_BINDING_PROTOCOL _EFI_DRIVER_BINDING; +typedef EFI_DRIVER_BINDING_PROTOCOL EFI_DRIVER_BINDING; + + +/* + * Backwards compatibility with older GNU-EFI versions. Deprecated. + */ +#define EFI_DRIVER_SUPPORTED EFI_DRIVER_BINDING_PROTOCOL_SUPPORTED +#define EFI_DRIVER_START EFI_DRIVER_BINDING_PROTOCOL_START +#define EFI_DRIVER_STOP EFI_DRIVER_BINDING_PROTOCOL_STOP + + + +/* + * EFI Component Name Protocol + * Deprecated - use EFI Component Name 2 Protocol instead + */ +#define EFI_COMPONENT_NAME_PROTOCOL_GUID \ + {0x107A772C, 0xD5E1, 0x11D4, { 0x9A, 0x46, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} } +#define COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_COMPONENT_NAME_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_COMPONENT_NAME_GET_DRIVER_NAME) ( + IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName); + +typedef +EFI_STATUS +(EFIAPI *EFI_COMPONENT_NAME_GET_CONTROLLER_NAME) ( + IN struct _EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName); + +typedef struct _EFI_COMPONENT_NAME_PROTOCOL { + EFI_COMPONENT_NAME_GET_DRIVER_NAME GetDriverName; + EFI_COMPONENT_NAME_GET_CONTROLLER_NAME GetControllerName; + CHAR8 *SupportedLanguages; +} EFI_COMPONENT_NAME_PROTOCOL; + +typedef struct _EFI_COMPONENT_NAME_PROTOCOL _EFI_COMPONENT_NAME; +typedef EFI_COMPONENT_NAME_PROTOCOL EFI_COMPONENT_NAME; + + +/* + * EFI Component Name 2 Protocol + * UEFI Specification Version 2.5 Section 10.5 + */ +#define EFI_COMPONENT_NAME2_PROTOCOL_GUID \ + {0x6A7A5CFF, 0xE8D9, 0x4F70, { 0xBA, 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14} } +#define COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_COMPONENT_NAME2_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ( + IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName); + +typedef +EFI_STATUS +(EFIAPI *EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ( + IN struct _EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName); + +typedef struct _EFI_COMPONENT_NAME2_PROTOCOL { + EFI_COMPONENT_NAME2_GET_DRIVER_NAME GetDriverName; + EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME GetControllerName; + CHAR8 *SupportedLanguages; +} EFI_COMPONENT_NAME2_PROTOCOL; + +typedef struct _EFI_COMPONENT_NAME2_PROTOCOL _EFI_COMPONENT_NAME2; +typedef EFI_COMPONENT_NAME2_PROTOCOL EFI_COMPONENT_NAME2; + + + +/* + * EFI Loaded Image Protocol + * UEFI Specification Version 2.5 Section 8.1 + */ +#define EFI_LOADED_IMAGE_PROTOCOL_GUID \ + { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } +#define LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE_PROTOCOL_GUID + +#define EFI_LOADED_IMAGE_PROTOCOL_REVISION 0x1000 +#define EFI_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION + +typedef +EFI_STATUS +(EFIAPI *EFI_IMAGE_UNLOAD) ( + IN EFI_HANDLE ImageHandle + ); + +typedef struct { + UINT32 Revision; + EFI_HANDLE ParentHandle; + struct _EFI_SYSTEM_TABLE *SystemTable; + + // Source location of image + EFI_HANDLE DeviceHandle; + EFI_DEVICE_PATH *FilePath; + VOID *Reserved; + + // Images load options + UINT32 LoadOptionsSize; + VOID *LoadOptions; + + // Location of where image was loaded + VOID *ImageBase; + UINT64 ImageSize; + EFI_MEMORY_TYPE ImageCodeType; + EFI_MEMORY_TYPE ImageDataType; + + // If the driver image supports a dynamic unload request + EFI_IMAGE_UNLOAD Unload; +} EFI_LOADED_IMAGE_PROTOCOL; + +typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE; + + + +/* + * Random Number Generator Protocol + * UEFI Specification Version 2.5 Section 35.5 + */ +#define EFI_RNG_PROTOCOL_GUID \ + { 0x3152bca5, 0xeade, 0x433d, {0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44} } + +typedef EFI_GUID EFI_RNG_ALGORITHM; + +#define EFI_RNG_ALGORITHM_SP800_90_HASH_256_GUID \ + {0xa7af67cb, 0x603b, 0x4d42, {0xba, 0x21, 0x70, 0xbf, 0xb6, 0x29, 0x3f, 0x96} } + +#define EFI_RNG_ALGORITHM_SP800_90_HMAC_256_GUID \ + {0xc5149b43, 0xae85, 0x4f53, {0x99, 0x82, 0xb9, 0x43, 0x35, 0xd3, 0xa9, 0xe7} } + +#define EFI_RNG_ALGORITHM_SP800_90_CTR_256_GUID \ + {0x44f0de6e, 0x4d8c, 0x4045, {0xa8, 0xc7, 0x4d, 0xd1, 0x68, 0x85, 0x6b, 0x9e} } + +#define EFI_RNG_ALGORITHM_X9_31_3DES_GUID \ + {0x63c4785a, 0xca34, 0x4012, {0xa3, 0xc8, 0x0b, 0x6a, 0x32, 0x4f, 0x55, 0x46} } + +#define EFI_RNG_ALGORITHM_X9_31_AES_GUID \ + {0xacd03321, 0x777e, 0x4d3d, {0xb1, 0xc8, 0x20, 0xcf, 0xd8, 0x88, 0x20, 0xc9} } + +#define EFI_RNG_ALGORITHM_RAW \ + {0xe43176d7, 0xb6e8, 0x4827, {0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61} } + +INTERFACE_DECL(_EFI_RNG_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_RNG_GET_INFO) ( + IN struct _EFI_RNG_PROTOCOL *This, + IN OUT UINTN *RNGAlgorithmListSize, + OUT EFI_RNG_ALGORITHM *RNGAlgorithmList +); + +typedef +EFI_STATUS +(EFIAPI *EFI_RNG_GET_RNG) ( + IN struct _EFI_RNG_PROTOCOL *This, + IN EFI_RNG_ALGORITHM *RNGAlgorithm, OPTIONAL + IN UINTN RNGValueLength, + OUT UINT8 *RNGValue +); + +typedef struct _EFI_RNG_PROTOCOL { + EFI_RNG_GET_INFO GetInfo; + EFI_RNG_GET_RNG GetRNG; +} EFI_RNG_PROTOCOL; + + +// +// EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL +// + +#define EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL_GUID \ + { 0x6b30c738, 0xa391, 0x11d4, {0x9a, 0x3b, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +INTERFACE_DECL(_EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER) ( +IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, +IN EFI_HANDLE ControllerHandle, +IN OUT EFI_HANDLE *DriverImageHandle); + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH) ( +IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, +IN EFI_HANDLE ControllerHandle, +IN OUT EFI_DEVICE_PATH **DriverImagePath); + +typedef +EFI_STATUS +(EFIAPI *EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED) ( +IN struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL *This, +IN EFI_HANDLE ControllerHandle, +IN EFI_DEVICE_PATH *DriverImagePath, +IN EFI_HANDLE DriverImageHandle); + +typedef struct _EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL { + EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER GetDriver; + EFI_PLATFORM_DRIVER_OVERRIDE_GET_DRIVER_PATH GetDriverPath; + EFI_PLATFORM_DRIVER_OVERRIDE_DRIVER_LOADED DriverLoaded; +} EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL; + +// +// EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL +// + +#define EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL_GUID \ + { 0x3bc1b285, 0x8a15, 0x4a82, {0xaa, 0xbf, 0x4d, 0x7d, 0x13, 0xfb, 0x32, 0x65} } + +INTERFACE_DECL(_EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER) ( +IN struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This, +IN OUT EFI_HANDLE *DriverImageHandle); + +typedef struct _EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL { + EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_GET_DRIVER GetDriver; +} EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL; + +// +// EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL +// + +#define EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL_GUID \ + { 0xb1ee129e, 0xda36, 0x4181, {0x91, 0xf8, 0x04, 0xa4, 0x92, 0x37, 0x66, 0xa7} } + +INTERFACE_DECL(_EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL); + +typedef +UINT32 +(EFIAPI *EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION) ( +IN struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL *This); + +typedef struct _EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL { + EFI_DRIVER_FAMILY_OVERRIDE_GET_VERSION GetVersion; +} EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL; + +// +// EFI_EBC_PROTOCOL +// + +#define EFI_EBC_INTERPRETER_PROTOCOL_GUID \ + {0x13ac6dd1, 0x73d0, 0x11d4, {0xb0, 0x6b, 0x00, 0xaa, 0x00, 0xbd, 0x6d, 0xe7} } + +#define EFI_EBC_PROTOCOL_GUID EFI_EBC_INTERPRETER_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_EBC_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_EBC_CREATE_THUNK)( + IN struct _EFI_EBC_PROTOCOL *This, + IN EFI_HANDLE ImageHandle, + IN VOID *EbcEntryPoint, + OUT VOID **Thunk); + +typedef +EFI_STATUS +(EFIAPI *EFI_EBC_UNLOAD_IMAGE)( + IN struct _EFI_EBC_PROTOCOL *This, + IN EFI_HANDLE ImageHandle); + +typedef +EFI_STATUS +(EFIAPI *EBC_ICACHE_FLUSH)( + IN EFI_PHYSICAL_ADDRESS Start, + IN UINT64 Length); + +typedef +EFI_STATUS +(EFIAPI *EFI_EBC_REGISTER_ICACHE_FLUSH)( + IN struct _EFI_EBC_PROTOCOL *This, + IN EBC_ICACHE_FLUSH Flush); + +typedef +EFI_STATUS +(EFIAPI *EFI_EBC_GET_VERSION)( + IN struct _EFI_EBC_PROTOCOL *This, + IN OUT UINT64 *Version); + +typedef struct _EFI_EBC_PROTOCOL { + EFI_EBC_CREATE_THUNK CreateThunk; + EFI_EBC_UNLOAD_IMAGE UnloadImage; + EFI_EBC_REGISTER_ICACHE_FLUSH RegisterICacheFlush; + EFI_EBC_GET_VERSION GetVersion; +} EFI_EBC_PROTOCOL; + +#endif diff --git a/gnu-efi/inc/efipxebc.h b/gnu-efi/inc/efipxebc.h new file mode 100644 index 0000000..3760c7c --- /dev/null +++ b/gnu-efi/inc/efipxebc.h @@ -0,0 +1,482 @@ +#ifndef _EFIPXEBC_H +#define _EFIPXEBC_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efipxebc.h + +Abstract: + + EFI PXE Base Code Protocol + + + +Revision History + +--*/ + +// +// PXE Base Code protocol +// + +#define EFI_PXE_BASE_CODE_PROTOCOL_GUID \ + { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } + +INTERFACE_DECL(_EFI_PXE_BASE_CODE_PROTOCOL); + +#define DEFAULT_TTL 4 +#define DEFAULT_ToS 0 +// +// Address definitions +// + +typedef union { + UINT32 Addr[4]; + EFI_IPv4_ADDRESS v4; + EFI_IPv6_ADDRESS v6; +} EFI_IP_ADDRESS; + +typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT; + +// +// Packet definitions +// + +typedef struct { + UINT8 BootpOpcode; + UINT8 BootpHwType; + UINT8 BootpHwAddrLen; + UINT8 BootpGateHops; + UINT32 BootpIdent; + UINT16 BootpSeconds; + UINT16 BootpFlags; + UINT8 BootpCiAddr[4]; + UINT8 BootpYiAddr[4]; + UINT8 BootpSiAddr[4]; + UINT8 BootpGiAddr[4]; + UINT8 BootpHwAddr[16]; + UINT8 BootpSrvName[64]; + UINT8 BootpBootFile[128]; + UINT32 DhcpMagik; + UINT8 DhcpOptions[56]; +} EFI_PXE_BASE_CODE_DHCPV4_PACKET; + +typedef struct { + UINT32 MessageType:8; + UINT32 TransactionId:24; + UINT8 DhcpOptions[1024]; +} EFI_PXE_BASE_CODE_DHCPV6_PACKET; + +typedef union { + UINT8 Raw[1472]; + EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; + EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; +} EFI_PXE_BASE_CODE_PACKET; + +typedef struct { + UINT8 Type; + UINT8 Code; + UINT16 Checksum; + union { + UINT32 reserved; + UINT32 Mtu; + UINT32 Pointer; + struct { + UINT16 Identifier; + UINT16 Sequence; + } Echo; + } u; + UINT8 Data[494]; +} EFI_PXE_BASE_CODE_ICMP_ERROR; + +typedef struct { + UINT8 ErrorCode; + CHAR8 ErrorString[127]; +} EFI_PXE_BASE_CODE_TFTP_ERROR; + +// +// IP Receive Filter definitions +// +#define EFI_PXE_BASE_CODE_MAX_IPCNT 8 +typedef struct { + UINT8 Filters; + UINT8 IpCnt; + UINT16 reserved; + EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; +} EFI_PXE_BASE_CODE_IP_FILTER; + +#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 +#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 +#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 +#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 + +// +// ARP Cache definitions +// + +typedef struct { + EFI_IP_ADDRESS IpAddr; + EFI_MAC_ADDRESS MacAddr; +} EFI_PXE_BASE_CODE_ARP_ENTRY; + +typedef struct { + EFI_IP_ADDRESS IpAddr; + EFI_IP_ADDRESS SubnetMask; + EFI_IP_ADDRESS GwAddr; +} EFI_PXE_BASE_CODE_ROUTE_ENTRY; + +// +// UDP definitions +// + +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001 +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002 +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004 +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008 +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010 +#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020 + +// +// Discover() definitions +// + +#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15 +#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16 +// +// 17 through 32767 are reserved +// 32768 through 65279 are for vendor use +// 65280 through 65534 are reserved +// +#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535 + +#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF +#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000 + + +typedef struct { + UINT16 Type; + BOOLEAN AcceptAnyResponse; + UINT8 Reserved; + EFI_IP_ADDRESS IpAddr; +} EFI_PXE_BASE_CODE_SRVLIST; + +typedef struct { + BOOLEAN UseMCast; + BOOLEAN UseBCast; + BOOLEAN UseUCast; + BOOLEAN MustUseList; + EFI_IP_ADDRESS ServerMCastIp; + UINT16 IpCnt; + EFI_PXE_BASE_CODE_SRVLIST SrvList[1]; +} EFI_PXE_BASE_CODE_DISCOVER_INFO; + +// +// Mtftp() definitions +// + +typedef enum { + EFI_PXE_BASE_CODE_TFTP_FIRST, + EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, + EFI_PXE_BASE_CODE_TFTP_READ_FILE, + EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, + EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, + EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, + EFI_PXE_BASE_CODE_MTFTP_READ_FILE, + EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, + EFI_PXE_BASE_CODE_MTFTP_LAST +} EFI_PXE_BASE_CODE_TFTP_OPCODE; + +typedef struct { + EFI_IP_ADDRESS MCastIp; + EFI_PXE_BASE_CODE_UDP_PORT CPort; + EFI_PXE_BASE_CODE_UDP_PORT SPort; + UINT16 ListenTimeout; + UINT16 TransmitTimeout; +} EFI_PXE_BASE_CODE_MTFTP_INFO; + +// +// PXE Base Code Mode structure +// + +#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 +#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 + +typedef struct { + BOOLEAN Started; + BOOLEAN Ipv6Available; + BOOLEAN Ipv6Supported; + BOOLEAN UsingIpv6; + BOOLEAN BisSupported; + BOOLEAN BisDetected; + BOOLEAN AutoArp; + BOOLEAN SendGUID; + BOOLEAN DhcpDiscoverValid; + BOOLEAN DhcpAckReceived; + BOOLEAN ProxyOfferReceived; + BOOLEAN PxeDiscoverValid; + BOOLEAN PxeReplyReceived; + BOOLEAN PxeBisReplyReceived; + BOOLEAN IcmpErrorReceived; + BOOLEAN TftpErrorReceived; + BOOLEAN MakeCallbacks; + UINT8 TTL; + UINT8 ToS; + EFI_IP_ADDRESS StationIp; + EFI_IP_ADDRESS SubnetMask; + EFI_PXE_BASE_CODE_PACKET DhcpDiscover; + EFI_PXE_BASE_CODE_PACKET DhcpAck; + EFI_PXE_BASE_CODE_PACKET ProxyOffer; + EFI_PXE_BASE_CODE_PACKET PxeDiscover; + EFI_PXE_BASE_CODE_PACKET PxeReply; + EFI_PXE_BASE_CODE_PACKET PxeBisReply; + EFI_PXE_BASE_CODE_IP_FILTER IpFilter; + UINT32 ArpCacheEntries; + EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; + UINT32 RouteTableEntries; + EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; + EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; + EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; +} EFI_PXE_BASE_CODE_MODE; + +// +// PXE Base Code Interface Function definitions +// + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_START) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN BOOLEAN UseIpv6 + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_STOP) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_DHCP) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN BOOLEAN SortOffers + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN UINT16 Type, + IN UINT16 *Layer, + IN BOOLEAN UseBis, + IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_MTFTP) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, + IN OUT VOID *BufferPtr OPTIONAL, + IN BOOLEAN Overwrite, + IN OUT UINT64 *BufferSize, + IN UINTN *BlockSize OPTIONAL, + IN EFI_IP_ADDRESS *ServerIp, + IN UINT8 *Filename, + IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL, + IN BOOLEAN DontUseBuffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN UINT16 OpFlags, + IN EFI_IP_ADDRESS *DestIp, + IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort, + IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL + IN EFI_IP_ADDRESS *SrcIp, OPTIONAL + IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL + IN UINTN *HeaderSize, OPTIONAL + IN VOID *HeaderPtr, OPTIONAL + IN UINTN *BufferSize, + IN VOID *BufferPtr + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN UINT16 OpFlags, + IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL + IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL + IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL + IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL + IN UINTN *HeaderSize, OPTIONAL + IN VOID *HeaderPtr, OPTIONAL + IN OUT UINTN *BufferSize, + IN VOID *BufferPtr + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_ARP) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN EFI_IP_ADDRESS *IpAddr, + IN EFI_MAC_ADDRESS *MacAddr OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN BOOLEAN *NewAutoArp, OPTIONAL + IN BOOLEAN *NewSendGUID, OPTIONAL + IN UINT8 *NewTTL, OPTIONAL + IN UINT8 *NewToS, OPTIONAL + IN BOOLEAN *NewMakeCallback OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL + IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) ( + IN struct _EFI_PXE_BASE_CODE_PROTOCOL *This, + BOOLEAN *NewDhcpDiscoverValid, OPTIONAL + BOOLEAN *NewDhcpAckReceived, OPTIONAL + BOOLEAN *NewProxyOfferReceived, OPTIONAL + BOOLEAN *NewPxeDiscoverValid, OPTIONAL + BOOLEAN *NewPxeReplyReceived, OPTIONAL + BOOLEAN *NewPxeBisReplyReceived,OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL + IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL + ); + +// +// PXE Base Code Protocol structure +// + +#define EFI_PXE_BASE_CODE_PROTOCOL_REVISION 0x00010000 +#define EFI_PXE_BASE_CODE_INTERFACE_REVISION EFI_PXE_BASE_CODE_PROTOCOL_REVISION + +typedef struct _EFI_PXE_BASE_CODE_PROTOCOL { + UINT64 Revision; + EFI_PXE_BASE_CODE_START Start; + EFI_PXE_BASE_CODE_STOP Stop; + EFI_PXE_BASE_CODE_DHCP Dhcp; + EFI_PXE_BASE_CODE_DISCOVER Discover; + EFI_PXE_BASE_CODE_MTFTP Mtftp; + EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; + EFI_PXE_BASE_CODE_UDP_READ UdpRead; + EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; + EFI_PXE_BASE_CODE_ARP Arp; + EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; + EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; + EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; + EFI_PXE_BASE_CODE_MODE *Mode; +} EFI_PXE_BASE_CODE_PROTOCOL; + +// Note: Because it conflicted with the EDK2 struct name, the +// 'EFI_PXE_BASE_CODE_PROTOCOL' GUID definition, from older +// versions of gnu-efi, is now obsoleted. +// Use 'EFI_PXE_BASE_CODE_PROTOCOL_GUID' instead. + +typedef struct _EFI_PXE_BASE_CODE_PROTOCOL _EFI_PXE_BASE_CODE; +typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE; + +// +// Call Back Definitions +// + +#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL_GUID \ + { 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } + +// +// Revision Number +// + +#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL_REVISION 0x00010000 +#define EFI_PXE_BASE_CODE_CALLBACK_INTERFACE_REVISION EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL_REVISION + +INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL); + +typedef enum { + EFI_PXE_BASE_CODE_FUNCTION_FIRST, + EFI_PXE_BASE_CODE_FUNCTION_DHCP, + EFI_PXE_BASE_CODE_FUNCTION_DISCOVER, + EFI_PXE_BASE_CODE_FUNCTION_MTFTP, + EFI_PXE_BASE_CODE_FUNCTION_UDP_WRITE, + EFI_PXE_BASE_CODE_FUNCTION_UDP_READ, + EFI_PXE_BASE_CODE_FUNCTION_ARP, + EFI_PXE_BASE_CODE_FUNCTION_IGMP, + EFI_PXE_BASE_CODE_PXE_FUNCTION_LAST +} EFI_PXE_BASE_CODE_FUNCTION; + +typedef enum { + EFI_PXE_BASE_CODE_CALLBACK_STATUS_FIRST, + EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, + EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT, + EFI_PXE_BASE_CODE_CALLBACK_STATUS_LAST +} EFI_PXE_BASE_CODE_CALLBACK_STATUS; + +typedef +EFI_PXE_BASE_CODE_CALLBACK_STATUS +(EFIAPI *EFI_PXE_CALLBACK) ( + IN struct _EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *This, + IN EFI_PXE_BASE_CODE_FUNCTION Function, + IN BOOLEAN Received, + IN UINT32 PacketLen, + IN EFI_PXE_BASE_CODE_PACKET *Packet OPTIONAL + ); + +typedef struct _EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL { + UINT64 Revision; + EFI_PXE_CALLBACK Callback; +} EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL; + +// Note: Because it conflicted with the EDK2 struct name, the +// 'EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL' GUID definition, from +// older versions of gnu-efi, is now obsoleted. +// Use 'EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL_GUID' instead. + +typedef struct _EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL _EFI_PXE_BASE_CODE_CALLBACK; +typedef EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL EFI_PXE_BASE_CODE_CALLBACK; + +#endif /* _EFIPXEBC_H */ diff --git a/gnu-efi/inc/efirtlib.h b/gnu-efi/inc/efirtlib.h new file mode 100644 index 0000000..49d0b4d --- /dev/null +++ b/gnu-efi/inc/efirtlib.h @@ -0,0 +1,179 @@ +#ifndef _EFI_RT_LIB_INCLUDE_ +#define _EFI_RT_LIB_INCLUDE_ +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efilib.h + +Abstract: + + EFI Runtime library functions + + + +Revision History + +--*/ + +#include "efidebug.h" +#include "efipart.h" +#include "efilibplat.h" + + +VOID +RUNTIMEFUNCTION +RtZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ); + +VOID +RUNTIMEFUNCTION +RtSetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ); + +VOID +RUNTIMEFUNCTION +RtCopyMem ( + IN VOID *Dest, + IN CONST VOID *Src, + IN UINTN len + ); + +INTN +RUNTIMEFUNCTION +RtCompareMem ( + IN CONST VOID *Dest, + IN CONST VOID *Src, + IN UINTN len + ); + +INTN +RUNTIMEFUNCTION +RtStrCmp ( + IN CONST CHAR16 *s1, + IN CONST CHAR16 *s2 + ); + + +VOID +RUNTIMEFUNCTION +RtStrCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +VOID +RUNTIMEFUNCTION +RtStrnCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +CHAR16 * +RUNTIMEFUNCTION +RtStpCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +CHAR16 * +RUNTIMEFUNCTION +RtStpnCpy ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +VOID +RUNTIMEFUNCTION +RtStrCat ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src + ); + +VOID +RUNTIMEFUNCTION +RtStrnCat ( + IN CHAR16 *Dest, + IN CONST CHAR16 *Src, + IN UINTN Len + ); + +UINTN +RUNTIMEFUNCTION +RtStrLen ( + IN CONST CHAR16 *s1 + ); + +UINTN +RUNTIMEFUNCTION +RtStrnLen ( + IN CONST CHAR16 *s1, + IN UINTN Len + ); + +UINTN +RUNTIMEFUNCTION +RtStrSize ( + IN CONST CHAR16 *s1 + ); + +INTN +RUNTIMEFUNCTION +RtCompareGuid ( + IN EFI_GUID *Guid1, + IN EFI_GUID *Guid2 + ); + +UINT8 +RUNTIMEFUNCTION +RtDecimaltoBCD( + IN UINT8 BcdValue + ); + +UINT8 +RUNTIMEFUNCTION +RtBCDtoDecimal( + IN UINT8 BcdValue + ); + +// +// Virtual mapping transition support. (Only used during +// the virtual address change transisition) +// + +VOID +RUNTIMEFUNCTION +RtLibEnableVirtualMappings ( + VOID + ); + +VOID +RUNTIMEFUNCTION +RtConvertList ( + IN UINTN DebugDisposition, + IN OUT LIST_ENTRY *ListHead + ); + +VOID +RUNTIMEFUNCTION +RtAcquireLock ( + IN FLOCK *Lock + ); + +VOID +RUNTIMEFUNCTION +RtReleaseLock ( + IN FLOCK *Lock + ); + + +#endif diff --git a/gnu-efi/inc/efiser.h b/gnu-efi/inc/efiser.h new file mode 100644 index 0000000..45a463e --- /dev/null +++ b/gnu-efi/inc/efiser.h @@ -0,0 +1,136 @@ +#ifndef _EFI_SER_H +#define _EFI_SER_H + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efiser.h + +Abstract: + + EFI serial protocol + +Revision History + +--*/ + +// +// Serial protocol +// + +#define EFI_SERIAL_IO_PROTOCOL_GUID \ + { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD} } +#define SERIAL_IO_PROTOCOL EFI_SERIAL_IO_PROTOCOL_GUID + +INTERFACE_DECL(_EFI_SERIAL_IO_PROTOCOL); + +typedef enum { + DefaultParity, + NoParity, + EvenParity, + OddParity, + MarkParity, + SpaceParity +} EFI_PARITY_TYPE; + +typedef enum { + DefaultStopBits, + OneStopBit, // 1 stop bit + OneFiveStopBits, // 1.5 stop bits + TwoStopBits // 2 stop bits +} EFI_STOP_BITS_TYPE; + +#define EFI_SERIAL_CLEAR_TO_SEND 0x0010 // RO +#define EFI_SERIAL_DATA_SET_READY 0x0020 // RO +#define EFI_SERIAL_RING_INDICATE 0x0040 // RO +#define EFI_SERIAL_CARRIER_DETECT 0x0080 // RO +#define EFI_SERIAL_REQUEST_TO_SEND 0x0002 // WO +#define EFI_SERIAL_DATA_TERMINAL_READY 0x0001 // WO +#define EFI_SERIAL_INPUT_BUFFER_EMPTY 0x0100 // RO +#define EFI_SERIAL_OUTPUT_BUFFER_EMPTY 0x0200 // RO +#define EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE 0x1000 // RW +#define EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE 0x2000 // RW +#define EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE 0x4000 // RW + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_RESET) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_SET_ATTRIBUTES) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN UINT64 BaudRate, + IN UINT32 ReceiveFifoDepth, + IN UINT32 Timeout, + IN EFI_PARITY_TYPE Parity, + IN UINT8 DataBits, + IN EFI_STOP_BITS_TYPE StopBits + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_SET_CONTROL_BITS) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN UINT32 Control + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_GET_CONTROL_BITS) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + OUT UINT32 *Control + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_WRITE) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SERIAL_READ) ( + IN struct _EFI_SERIAL_IO_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer + ); + +typedef struct { + UINT32 ControlMask; + + // current Attributes + UINT32 Timeout; + UINT64 BaudRate; + UINT32 ReceiveFifoDepth; + UINT32 DataBits; + UINT32 Parity; + UINT32 StopBits; +} SERIAL_IO_MODE; + +#define SERIAL_IO_INTERFACE_REVISION 0x00010000 + +typedef struct _EFI_SERIAL_IO_PROTOCOL { + UINT32 Revision; + EFI_SERIAL_RESET Reset; + EFI_SERIAL_SET_ATTRIBUTES SetAttributes; + EFI_SERIAL_SET_CONTROL_BITS SetControl; + EFI_SERIAL_GET_CONTROL_BITS GetControl; + EFI_SERIAL_WRITE Write; + EFI_SERIAL_READ Read; + + SERIAL_IO_MODE *Mode; +} EFI_SERIAL_IO_PROTOCOL; + +typedef struct _EFI_SERIAL_IO_PROTOCOL _SERIAL_IO_INTERFACE; +typedef EFI_SERIAL_IO_PROTOCOL SERIAL_IO_INTERFACE; + +#endif + diff --git a/gnu-efi/inc/efisetjmp.h b/gnu-efi/inc/efisetjmp.h new file mode 100644 index 0000000..de69194 --- /dev/null +++ b/gnu-efi/inc/efisetjmp.h @@ -0,0 +1,10 @@ +#ifndef GNU_EFI_SETJMP_H +#define GNU_EFI_SETJMP_H + +#include "eficompiler.h" +#include "efisetjmp_arch.h" + +extern UINTN setjmp(jmp_buf env) __attribute__((returns_twice)); +extern VOID longjmp(jmp_buf env, UINTN value) __attribute__((noreturn)); + +#endif /* GNU_EFI_SETJMP_H */ diff --git a/gnu-efi/inc/efishellintf.h b/gnu-efi/inc/efishellintf.h new file mode 100644 index 0000000..e649acd --- /dev/null +++ b/gnu-efi/inc/efishellintf.h @@ -0,0 +1,94 @@ +/** @file + SHELL_INTERFACE_PROTOCOL from EDK shell (no spec). + + Shell Interface - additional information (over image_info) provided + to an application started by the shell. + + ConIo provides a file-style interface to the console. + + The shell interface's and data (including ConIo) are only valid during + the applications Entry Point. Once the application returns from it's + entry point the data is freed by the invoking shell. + + Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/* + * This is based on ShellPkg/Include/Protocol/EfiShellInterface.h from EDK II. + */ + +#ifndef _SHELLINTERFACE_H_ +#define _SHELLINTERFACE_H_ + + +#define SHELL_INTERFACE_PROTOCOL_GUID \ + { \ + 0x47c7b223, 0xc42a, 0x11d2, {0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \ + } + +/// +/// Bit definitions for EFI_SHELL_ARG_INFO +/// +typedef enum { + ARG_NO_ATTRIB = 0x0, + ARG_IS_QUOTED = 1<<0, + ARG_PARTIALLY_QUOTED = 1<<1, + ARG_FIRST_HALF_QUOTED = 1<<2, + ARG_FIRST_CHAR_IS_ESC = 1<<3 +} EFI_SHELL_ARG_INFO_TYPES; + +/// +/// Attributes for an argument. +/// +typedef struct _EFI_SHELL_ARG_INFO { + UINT32 Attributes; +} EFI_SHELL_ARG_INFO; + +/// +/// This protocol provides access to additional information about a shell application. +/// +typedef struct { + /// + /// Handle back to original image handle & image information. + /// + EFI_HANDLE ImageHandle; + EFI_LOADED_IMAGE *Info; + + /// + /// Parsed arg list converted more C-like format. + /// + CHAR16 **Argv; + UINTN Argc; + + /// + /// Storage for file redirection args after parsing. + /// + CHAR16 **RedirArgv; + UINTN RedirArgc; + + /// + /// A file style handle for console io. + /// + EFI_FILE *StdIn; + EFI_FILE *StdOut; + EFI_FILE *StdErr; + + /// + /// List of attributes for each argument. + /// + EFI_SHELL_ARG_INFO *ArgInfo; + + /// + /// Whether we are echoing. + /// + BOOLEAN EchoOn; +} EFI_SHELL_INTERFACE; + +#endif diff --git a/gnu-efi/inc/efishellparm.h b/gnu-efi/inc/efishellparm.h new file mode 100644 index 0000000..da120e5 --- /dev/null +++ b/gnu-efi/inc/efishellparm.h @@ -0,0 +1,63 @@ +/** @file + EFI_SHELL_PARAMETERS_PROTOCOL as defined in the UEFI Shell 2.0 specification. + + Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/* + * This is based on ShellPkg/Include/Protocol/EfiShellParameters.h from EDK II. + */ + +#ifndef __EFI_SHELL_PARAMETERS_PROTOCOL__ +#define __EFI_SHELL_PARAMETERS_PROTOCOL__ + + +// EDK2's ShellBase.h +typedef VOID *SHELL_FILE_HANDLE; + +#define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \ + { \ + 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } \ + } + +typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL { + /// + /// Points to an Argc-element array of points to NULL-terminated strings containing + /// the command-line parameters. The first entry in the array is always the full file + /// path of the executable. Any quotation marks that were used to preserve + /// whitespace have been removed. + /// + CHAR16 **Argv; + + /// + /// The number of elements in the Argv array. + /// + UINTN Argc; + + /// + /// The file handle for the standard input for this executable. This may be different + /// from the ConInHandle in EFI_SYSTEM_TABLE. + /// + SHELL_FILE_HANDLE StdIn; + + /// + /// The file handle for the standard output for this executable. This may be different + /// from the ConOutHandle in EFI_SYSTEM_TABLE. + /// + SHELL_FILE_HANDLE StdOut; + + /// + /// The file handle for the standard error output for this executable. This may be + /// different from the StdErrHandle in EFI_SYSTEM_TABLE. + /// + SHELL_FILE_HANDLE StdErr; +} EFI_SHELL_PARAMETERS_PROTOCOL; + +#endif diff --git a/gnu-efi/inc/efistdarg.h b/gnu-efi/inc/efistdarg.h new file mode 100644 index 0000000..bb04b31 --- /dev/null +++ b/gnu-efi/inc/efistdarg.h @@ -0,0 +1,33 @@ +#ifndef _EFISTDARG_H_ +#define _EFISTDARG_H_ + +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + devpath.h + +Abstract: + + Defines for parsing the EFI Device Path structures + + + +Revision History + +--*/ + +#ifndef GNU_EFI_USE_EXTERNAL_STDARG +typedef __builtin_va_list va_list; + +# define va_start(v,l) __builtin_va_start(v,l) +# define va_end(v) __builtin_va_end(v) +# define va_arg(v,l) __builtin_va_arg(v,l) +# define va_copy(d,s) __builtin_va_copy(d,s) +#else +# include +#endif + +#endif diff --git a/gnu-efi/inc/efitcp.h b/gnu-efi/inc/efitcp.h new file mode 100644 index 0000000..6c5df7f --- /dev/null +++ b/gnu-efi/inc/efitcp.h @@ -0,0 +1,391 @@ +#ifndef _EFI_TCP_H +#define _EFI_TCP_H + +/*++ +Copyright (c) 2013 Intel Corporation + +--*/ + +#define EFI_TCP4_SERVICE_BINDING_PROTOCOL \ + { 0x00720665, 0x67eb, 0x4a99, {0xba, 0xf7, 0xd3, 0xc3, 0x3a, 0x1c,0x7c, 0xc9}} + +#define EFI_TCP4_PROTOCOL \ + { 0x65530bc7, 0xa359, 0x410f, {0xb0, 0x10, 0x5a, 0xad, 0xc7, 0xec, 0x2b, 0x62}} + +#define EFI_TCP6_SERVICE_BINDING_PROTOCOL \ + { 0xec20eb79, 0x6c1a, 0x4664, {0x9a, 0xd, 0xd2, 0xe4, 0xcc, 0x16, 0xd6, 0x64}} + +#define EFI_TCP6_PROTOCOL \ + { 0x46e44855, 0xbd60, 0x4ab7, {0xab, 0xd, 0xa6, 0x79, 0xb9, 0x44, 0x7d, 0x77}} + +INTERFACE_DECL(_EFI_TCP4); +INTERFACE_DECL(_EFI_TCP6); + +typedef struct { + BOOLEAN UseDefaultAddress; + EFI_IPv4_ADDRESS StationAddress; + EFI_IPv4_ADDRESS SubnetMask; + UINT16 StationPort; + EFI_IPv4_ADDRESS RemoteAddress; + UINT16 RemotePort; + BOOLEAN ActiveFlag; +} EFI_TCP4_ACCESS_POINT; + +typedef struct { + UINT32 ReceiveBufferSize; + UINT32 SendBufferSize; + UINT32 MaxSynBackLog; + UINT32 ConnectionTimeout; + UINT32 DataRetries; + UINT32 FinTimeout; + UINT32 TimeWaitTimeout; + UINT32 KeepAliveProbes; + UINT32 KeepAliveTime; + UINT32 KeepAliveInterval; + BOOLEAN EnableNagle; + BOOLEAN EnableTimeStamp; + BOOLEAN EnableWindowScaling; + BOOLEAN EnableSelectiveAck; + BOOLEAN EnablePAthMtuDiscovery; +} EFI_TCP4_OPTION; + +typedef struct { + // Receiving Filters + // I/O parameters + UINT8 TypeOfService; + UINT8 TimeToLive; + + // Access Point + EFI_TCP4_ACCESS_POINT AccessPoint; + + // TCP Control Options + EFI_TCP4_OPTION *ControlOption; +} EFI_TCP4_CONFIG_DATA; + +typedef enum { + Tcp4StateClosed = 0, + Tcp4StateListen = 1, + Tcp4StateSynSent = 2, + Tcp4StateSynReceived = 3, + Tcp4StateEstablished = 4, + Tcp4StateFinWait1 = 5, + Tcp4StateFinWait2 = 6, + Tcp4StateClosing = 7, + Tcp4StateTimeWait = 8, + Tcp4StateCloseWait = 9, + Tcp4StateLastAck = 10 +} EFI_TCP4_CONNECTION_STATE; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_GET_MODE_DATA) ( + IN struct _EFI_TCP4 *This, + OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL, + OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL, + OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_CONFIGURE) ( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_ROUTES) ( + IN struct _EFI_TCP4 *This, + IN BOOLEAN DeleteRoute, + IN EFI_IPv4_ADDRESS *SubnetAddress, + IN EFI_IPv4_ADDRESS *SubnetMask, + IN EFI_IPv4_ADDRESS *GatewayAddress +); + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; +} EFI_TCP4_COMPLETION_TOKEN; + +typedef struct { + EFI_TCP4_COMPLETION_TOKEN CompletionToken; +} EFI_TCP4_CONNECTION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_CONNECT) ( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken + ); + +typedef struct { + EFI_TCP4_COMPLETION_TOKEN CompletionToken; + EFI_HANDLE NewChildHandle; +} EFI_TCP4_LISTEN_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_ACCEPT) ( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_LISTEN_TOKEN *ListenToken + ); + +#define EFI_CONNECTION_FIN EFIERR(104) +#define EFI_CONNECTION_RESET EFIERR(105) +#define EFI_CONNECTION_REFUSED EFIERR(106) + +typedef struct { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_TCP4_FRAGMENT_DATA; + +typedef struct { + BOOLEAN UrgentFlag; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_TCP4_RECEIVE_DATA; + +typedef struct { + BOOLEAN Push; + BOOLEAN Urgent; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_TCP4_TRANSMIT_DATA; + +typedef struct { + EFI_TCP4_COMPLETION_TOKEN CompletionToken; + union { + EFI_TCP4_RECEIVE_DATA *RxData; + EFI_TCP4_TRANSMIT_DATA *TxData; + } Packet; +} EFI_TCP4_IO_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_TRANSMIT) ( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_IO_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_RECEIVE) ( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_IO_TOKEN *Token + ); + +typedef struct { + EFI_TCP4_COMPLETION_TOKEN CompletionToken; + BOOLEAN AbortOnClose; +} EFI_TCP4_CLOSE_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_CLOSE)( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_CLOSE_TOKEN *CloseToken + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_CANCEL)( + IN struct _EFI_TCP4 *This, + IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL +); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP4_POLL) ( + IN struct _EFI_TCP4 *This + ); + +typedef struct _EFI_TCP4 { + EFI_TCP4_GET_MODE_DATA GetModeData; + EFI_TCP4_CONFIGURE Configure; + EFI_TCP4_ROUTES Routes; + EFI_TCP4_CONNECT Connect; + EFI_TCP4_ACCEPT Accept; + EFI_TCP4_TRANSMIT Transmit; + EFI_TCP4_RECEIVE Receive; + EFI_TCP4_CLOSE Close; + EFI_TCP4_CANCEL Cancel; + EFI_TCP4_POLL Poll; +} EFI_TCP4; + +typedef enum { + Tcp6StateClosed = 0, + Tcp6StateListen = 1, + Tcp6StateSynSent = 2, + Tcp6StateSynReceived = 3, + Tcp6StateEstablished = 4, + Tcp6StateFinWait1 = 5, + Tcp6StateFinWait2 = 6, + Tcp6StateClosing = 7, + Tcp6StateTimeWait = 8, + Tcp6StateCloseWait = 9, + Tcp6StateLastAck = 10 +} EFI_TCP6_CONNECTION_STATE; + +typedef struct { + EFI_IPv6_ADDRESS StationAddress; + UINT16 StationPort; + EFI_IPv6_ADDRESS RemoteAddress; + UINT16 RemotePort; + BOOLEAN ActiveFlag; +} EFI_TCP6_ACCESS_POINT; + +typedef struct { + UINT32 ReceiveBufferSize; + UINT32 SendBufferSize; + UINT32 MaxSynBackLog; + UINT32 ConnectionTimeout; + UINT32 DataRetries; + UINT32 FinTimeout; + UINT32 TimeWaitTimeout; + UINT32 KeepAliveProbes; + UINT32 KeepAliveTime; + UINT32 KeepAliveInterval; + BOOLEAN EnableNagle; + BOOLEAN EnableTimeStamp; + BOOLEAN EnableWindbowScaling; + BOOLEAN EnableSelectiveAck; + BOOLEAN EnablePathMtuDiscovery; +} EFI_TCP6_OPTION; + +typedef struct { + UINT8 TrafficClass; + UINT8 HopLimit; + EFI_TCP6_ACCESS_POINT AccessPoint; + EFI_TCP6_OPTION *ControlOption; +} EFI_TCP6_CONFIG_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_GET_MODE_DATA) ( + IN struct _EFI_TCP6 *This, + OUT EFI_TCP6_CONNECTION_STATE *Tcp6State OPTIONAL, + OUT EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL, + OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_CONFIGURE) ( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL + ); + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; +} EFI_TCP6_COMPLETION_TOKEN; + +typedef struct { + EFI_TCP6_COMPLETION_TOKEN CompletionToken; +} EFI_TCP6_CONNECTION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_CONNECT) ( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken + ); + +typedef struct { + EFI_TCP6_COMPLETION_TOKEN CompletionToken; + EFI_HANDLE NewChildHandle; +} EFI_TCP6_LISTEN_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_ACCEPT) ( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_LISTEN_TOKEN *ListenToken + ); + +typedef struct { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_TCP6_FRAGMENT_DATA; + +typedef struct { + BOOLEAN UrgentFlag; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_TCP6_RECEIVE_DATA; + +typedef struct { + BOOLEAN Push; + BOOLEAN Urgent; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_TCP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_TCP6_TRANSMIT_DATA; + +typedef struct { + EFI_TCP6_COMPLETION_TOKEN CompletionToken; + union { + EFI_TCP6_RECEIVE_DATA *RxData; + EFI_TCP6_TRANSMIT_DATA *TxData; + } Packet; +} EFI_TCP6_IO_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_TRANSMIT) ( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_IO_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_RECEIVE) ( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_IO_TOKEN *Token + ); + +typedef struct { + EFI_TCP6_COMPLETION_TOKEN CompletionToken; + BOOLEAN AbortOnClose; +} EFI_TCP6_CLOSE_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_CLOSE)( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_CLOSE_TOKEN *CloseToken + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_CANCEL)( + IN struct _EFI_TCP6 *This, + IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_TCP6_POLL) ( + IN struct _EFI_TCP6 *This + ); + +typedef struct _EFI_TCP6 { + EFI_TCP6_GET_MODE_DATA GetModeData; + EFI_TCP6_CONFIGURE Configure; + EFI_TCP6_CONNECT Connect; + EFI_TCP6_ACCEPT Accept; + EFI_TCP6_TRANSMIT Transmit; + EFI_TCP6_RECEIVE Receive; + EFI_TCP6_CLOSE Close; + EFI_TCP6_CANCEL Cancel; + EFI_TCP6_POLL Poll; +} EFI_TCP6; + +#endif /* _EFI_TCP_H */ diff --git a/gnu-efi/inc/efiudp.h b/gnu-efi/inc/efiudp.h new file mode 100644 index 0000000..7c8b467 --- /dev/null +++ b/gnu-efi/inc/efiudp.h @@ -0,0 +1,272 @@ +#ifndef _EFI_UDP_H +#define _EFI_UDP_H + + +/*++ +Copyright (c) 2013 Intel Corporation + +--*/ + +#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \ + { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} } + +#define EFI_UDP4_PROTOCOL \ + { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} } + +#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \ + { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} } + +#define EFI_UDP6_PROTOCOL \ + { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} } + +INTERFACE_DECL(_EFI_UDP4); +INTERFACE_DECL(_EFI_UDP6); + +typedef struct { + BOOLEAN AcceptBroadcast; + BOOLEAN AcceptPromiscuous; + BOOLEAN AcceptAnyPort; + BOOLEAN AllowDuplicatePort; + UINT8 TypeOfService; + UINT8 TimeToLive; + BOOLEAN DoNotFragment; + UINT32 ReceiveTimeout; + UINT32 TransmitTimeout; + BOOLEAN UseDefaultAddress; + EFI_IPv4_ADDRESS StationAddress; + EFI_IPv4_ADDRESS SubnetMask; + UINT16 StationPort; + EFI_IPv4_ADDRESS RemoteAddress; + UINT16 RemotePort; +} EFI_UDP4_CONFIG_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_GET_MODE_DATA) ( + IN struct _EFI_UDP4 *This, + OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL, + OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_CONFIGURE) ( + IN struct _EFI_UDP4 *This, + IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_GROUPS) ( + IN struct _EFI_UDP4 *This, + IN BOOLEAN JoinFlag, + IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_ROUTES) ( + IN struct _EFI_UDP4 *This, + IN BOOLEAN DeleteRoute, + IN EFI_IPv4_ADDRESS *SubnetAddress, + IN EFI_IPv4_ADDRESS *SubnetMask, + IN EFI_IPv4_ADDRESS *GatewayAddress + ); + +#define EFI_NETWORK_UNREACHABLE EFIERR(100) +#define EFI_HOST_UNREACHABLE EFIERR(101) +#define EFI_PROTOCOL_UNREACHABLE EFIERR(102) +#define EFI_PORT_UNREACHABLE EFIERR(103) + +typedef struct { + EFI_IPv4_ADDRESS SourceAddress; + UINT16 SourcePort; + EFI_IPv4_ADDRESS DestinationAddress; + UINT16 DestinationPort; +} EFI_UDP4_SESSION_DATA; + +typedef struct { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_UDP4_FRAGMENT_DATA; + +typedef struct { + EFI_TIME TimeStamp; + EFI_EVENT RecycleSignal; + EFI_UDP4_SESSION_DATA UdpSession; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_UDP4_RECEIVE_DATA; + +typedef struct { + EFI_UDP4_SESSION_DATA *UdpSessionData; + EFI_IPv4_ADDRESS *GatewayAddress; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_UDP4_FRAGMENT_DATA FragmentTable[1]; +} EFI_UDP4_TRANSMIT_DATA; + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + union { + EFI_UDP4_RECEIVE_DATA *RxData; + EFI_UDP4_TRANSMIT_DATA *TxData; + } Packet; +} EFI_UDP4_COMPLETION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_TRANSMIT) ( + IN struct _EFI_UDP4 *This, + IN EFI_UDP4_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_RECEIVE) ( + IN struct _EFI_UDP4 *This, + IN EFI_UDP4_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_CANCEL)( + IN struct _EFI_UDP4 *This, + IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP4_POLL) ( + IN struct _EFI_UDP4 *This + ); + +typedef struct _EFI_UDP4 { + EFI_UDP4_GET_MODE_DATA GetModeData; + EFI_UDP4_CONFIGURE Configure; + EFI_UDP4_GROUPS Groups; + EFI_UDP4_ROUTES Routes; + EFI_UDP4_TRANSMIT Transmit; + EFI_UDP4_RECEIVE Receive; + EFI_UDP4_CANCEL Cancel; + EFI_UDP4_POLL Poll; +} EFI_UDP4; + +typedef struct { + BOOLEAN AcceptPromiscuous; + BOOLEAN AcceptAnyPort; + BOOLEAN AllowDuplicatePort; + UINT8 TrafficClass; + UINT8 HopLimit; + UINT32 ReceiveTimeout; + UINT32 TransmitTimeout; + EFI_IPv6_ADDRESS StationAddress; + UINT16 StationPort; + EFI_IPv6_ADDRESS RemoteAddress; + UINT16 RemotePort; +} EFI_UDP6_CONFIG_DATA; + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_GET_MODE_DATA) ( + IN struct _EFI_UDP6 *This, + OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL, + OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, + OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, + OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_CONFIGURE) ( + IN struct _EFI_UDP6 *This, + IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_GROUPS) ( + IN struct _EFI_UDP6 *This, + IN BOOLEAN JoinFlag, + IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL + ); + +typedef struct { + EFI_IPv6_ADDRESS SourceAddress; + UINT16 SourcePort; + EFI_IPv6_ADDRESS DestinationAddress; + UINT16 DestinationPort; +} EFI_UDP6_SESSION_DATA; + +typedef struct { + UINT32 FragmentLength; + VOID *FragmentBuffer; +} EFI_UDP6_FRAGMENT_DATA; + +typedef struct { + EFI_TIME TimeStamp; + EFI_EVENT RecycleSignal; + EFI_UDP6_SESSION_DATA UdpSession; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_UDP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_UDP6_RECEIVE_DATA; + +typedef struct { + EFI_UDP6_SESSION_DATA *UdpSessionData; + UINT32 DataLength; + UINT32 FragmentCount; + EFI_UDP6_FRAGMENT_DATA FragmentTable[1]; +} EFI_UDP6_TRANSMIT_DATA; + +typedef struct { + EFI_EVENT Event; + EFI_STATUS Status; + union { + EFI_UDP6_RECEIVE_DATA *RxData; + EFI_UDP6_TRANSMIT_DATA *TxData; + } Packet; +} EFI_UDP6_COMPLETION_TOKEN; + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_TRANSMIT) ( + IN struct _EFI_UDP6 *This, + IN EFI_UDP6_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_RECEIVE) ( + IN struct _EFI_UDP6 *This, + IN EFI_UDP6_COMPLETION_TOKEN *Token + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_CANCEL)( + IN struct _EFI_UDP6 *This, + IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_UDP6_POLL) ( + IN struct _EFI_UDP6 *This + ); + +typedef struct _EFI_UDP6 { + EFI_UDP6_GET_MODE_DATA GetModeData; + EFI_UDP6_CONFIGURE Configure; + EFI_UDP6_GROUPS Groups; + EFI_UDP6_TRANSMIT Transmit; + EFI_UDP6_RECEIVE Receive; + EFI_UDP6_CANCEL Cancel; + EFI_UDP6_POLL Poll; +} EFI_UDP6; + +#endif /* _EFI_UDP_H */ diff --git a/gnu-efi/inc/efiui.h b/gnu-efi/inc/efiui.h new file mode 100644 index 0000000..3756936 --- /dev/null +++ b/gnu-efi/inc/efiui.h @@ -0,0 +1,58 @@ +#ifndef _EFI_UI_H +#define _EFI_UI_H + +/*++ + +Copyright (c) 200 Intel Corporation + +Module Name: + + EfiUi.h + +Abstract: + Protocol used to build User Interface (UI) stuff. + + This protocol is just data. It is a multi dimentional array. + For each string there is an array of UI_STRING_ENTRY. Each string + is for a different language translation of the same string. The list + is terminated by a NULL UiString. There can be any number of + UI_STRING_ENTRY arrays. A NULL array terminates the list. A NULL array + entry contains all zeros. + + Thus the shortest possible EFI_UI_PROTOCOL has three UI_STRING_ENTRY. + The String, it's NULL terminator, and the NULL terminator for the entire + thing. + + +Revision History + +--*/ + +#define EFI_UI_INTERFACE_PROTOCOL_GUID \ + { 0x32dd7981, 0x2d27, 0x11d4, {0xbc, 0x8b, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } +#define EFI_UI_PROTOCOL EFI_UI_INTERFACE_PROTOCOL_GUID + + +typedef enum { + UiDeviceString, + UiVendorString, + UiMaxString +} UI_STRING_TYPE; + +typedef struct { + ISO_639_2 *LangCode; + CHAR16 *UiString; +} UI_STRING_ENTRY; + +#define EFI_UI_INTERFACE_PROTOCOL_VERSION 0x00010000 +#define EFI_UI_VERSION EFI_UI_INTERFACE_PROTOCOL_VERSION + +typedef struct _EFI_UI_INTERFACE_PROTOCOL { + UINT32 Version; + UI_STRING_ENTRY *Entry; +} EFI_UI_INTERFACE_PROTOCOL; + +typedef struct _EFI_UI_INTERFACE_PROTOCOL _UI_INTERFACE; +typedef EFI_UI_INTERFACE_PROTOCOL UI_INTERFACE; + +#endif diff --git a/gnu-efi/inc/libsmbios.h b/gnu-efi/inc/libsmbios.h new file mode 100644 index 0000000..8f1a28e --- /dev/null +++ b/gnu-efi/inc/libsmbios.h @@ -0,0 +1,132 @@ +#ifndef _LIB_SMBIOS_H +#define _LIB_SMBIOS_H +/*++ + +Copyright (c) 2000 Intel Corporation + +Module Name: + + LibSmbios.h + +Abstract: + + Lib include for SMBIOS services. Used to get system serial number and GUID + +Revision History + +--*/ + +// +// Define SMBIOS tables. +// +#pragma pack(1) +typedef struct { + UINT8 AnchorString[4]; + UINT8 EntryPointStructureChecksum; + UINT8 EntryPointLength; + UINT8 MajorVersion; + UINT8 MinorVersion; + UINT16 MaxStructureSize; + UINT8 EntryPointRevision; + UINT8 FormattedArea[5]; + UINT8 IntermediateAnchorString[5]; + UINT8 IntermediateChecksum; + UINT16 TableLength; + UINT32 TableAddress; + UINT16 NumberOfSmbiosStructures; + UINT8 SmbiosBcdRevision; +} SMBIOS_STRUCTURE_TABLE; + +// +// Please note that SMBIOS structures can be odd byte aligned since the +// unformated section of each record is a set of arbitrary size strings. +// + +typedef struct { + UINT8 Type; + UINT8 Length; + UINT8 Handle[2]; +} SMBIOS_HEADER; + +typedef UINT8 SMBIOS_STRING; + +typedef struct { + SMBIOS_HEADER Hdr; + SMBIOS_STRING Vendor; + SMBIOS_STRING BiosVersion; + UINT8 BiosSegment[2]; + SMBIOS_STRING BiosReleaseDate; + UINT8 BiosSize; + UINT8 BiosCharacteristics[8]; +} SMBIOS_TYPE0; + +typedef struct { + SMBIOS_HEADER Hdr; + SMBIOS_STRING Manufacturer; + SMBIOS_STRING ProductName; + SMBIOS_STRING Version; + SMBIOS_STRING SerialNumber; + + // + // always byte copy this data to prevent alignment faults! + // + EFI_GUID Uuid; + + UINT8 WakeUpType; +} SMBIOS_TYPE1; + +typedef struct { + SMBIOS_HEADER Hdr; + SMBIOS_STRING Manufacturer; + SMBIOS_STRING ProductName; + SMBIOS_STRING Version; + SMBIOS_STRING SerialNumber; +} SMBIOS_TYPE2; + +typedef struct { + SMBIOS_HEADER Hdr; + SMBIOS_STRING Manufacturer; + UINT8 Type; + SMBIOS_STRING Version; + SMBIOS_STRING SerialNumber; + SMBIOS_STRING AssetTag; + UINT8 BootupState; + UINT8 PowerSupplyState; + UINT8 ThermalState; + UINT8 SecurityStatus; + UINT8 OemDefined[4]; +} SMBIOS_TYPE3; + +typedef struct { + SMBIOS_HEADER Hdr; + UINT8 Socket; + UINT8 ProcessorType; + UINT8 ProcessorFamily; + SMBIOS_STRING ProcessorManufacture; + UINT8 ProcessorId[8]; + SMBIOS_STRING ProcessorVersion; + UINT8 Voltage; + UINT8 ExternalClock[2]; + UINT8 MaxSpeed[2]; + UINT8 CurrentSpeed[2]; + UINT8 Status; + UINT8 ProcessorUpgrade; + UINT8 L1CacheHandle[2]; + UINT8 L2CacheHandle[2]; + UINT8 L3CacheHandle[2]; +} SMBIOS_TYPE4; + +typedef union { + SMBIOS_HEADER *Hdr; + SMBIOS_TYPE0 *Type0; + SMBIOS_TYPE1 *Type1; + SMBIOS_TYPE2 *Type2; + SMBIOS_TYPE3 *Type3; + SMBIOS_TYPE4 *Type4; + UINT8 *Raw; +} SMBIOS_STRUCTURE_POINTER; +#pragma pack() + + +#endif + diff --git a/gnu-efi/inc/pci22.h b/gnu-efi/inc/pci22.h new file mode 100644 index 0000000..b94f519 --- /dev/null +++ b/gnu-efi/inc/pci22.h @@ -0,0 +1,193 @@ +#ifndef _PCI22_H +#define _PCI22_H + +/*++ + +Copyright (c) 1999 Intel Corporation + +Module Name: + + pci22.h + +Abstract: + Support for PCI 2.2 standard. + + + + +Revision History + +--*/ + +#ifdef SOFT_SDV +#define PCI_MAX_BUS 1 +#else +#define PCI_MAX_BUS 255 +#endif + +#define PCI_MAX_DEVICE 31 +#define PCI_MAX_FUNC 7 + +// +// Command +// +#define PCI_VGA_PALETTE_SNOOP_DISABLED 0x20 + +#pragma pack(1) +typedef struct { + UINT16 VendorId; + UINT16 DeviceId; + UINT16 Command; + UINT16 Status; + UINT8 RevisionID; + UINT8 ClassCode[3]; + UINT8 CacheLineSize; + UINT8 LaytencyTimer; + UINT8 HeaderType; + UINT8 BIST; +} PCI_DEVICE_INDEPENDENT_REGION; + +typedef struct { + UINT32 Bar[6]; + UINT32 CISPtr; + UINT16 SubsystemVendorID; + UINT16 SubsystemID; + UINT32 ExpansionRomBar; + UINT32 Reserved[2]; + UINT8 InterruptLine; + UINT8 InterruptPin; + UINT8 MinGnt; + UINT8 MaxLat; +} PCI_DEVICE_HEADER_TYPE_REGION; + +typedef struct { + PCI_DEVICE_INDEPENDENT_REGION Hdr; + PCI_DEVICE_HEADER_TYPE_REGION Device; +} PCI_TYPE00; + +typedef struct { + UINT32 Bar[2]; + UINT8 PrimaryBus; + UINT8 SecondaryBus; + UINT8 SubordinateBus; + UINT8 SecondaryLatencyTimer; + UINT8 IoBase; + UINT8 IoLimit; + UINT16 SecondaryStatus; + UINT16 MemoryBase; + UINT16 MemoryLimit; + UINT16 PrefetchableMemoryBase; + UINT16 PrefetchableMemoryLimit; + UINT32 PrefetchableBaseUpper32; + UINT32 PrefetchableLimitUpper32; + UINT16 IoBaseUpper16; + UINT16 IoLimitUpper16; + UINT32 Reserved; + UINT32 ExpansionRomBAR; + UINT8 InterruptLine; + UINT8 InterruptPin; + UINT16 BridgeControl; +} PCI_BRIDGE_CONTROL_REGISTER; + +#define PCI_CLASS_DISPLAY_CTRL 0x03 +#define PCI_CLASS_VGA 0x00 + +#define PCI_CLASS_BRIDGE 0x06 +#define PCI_CLASS_ISA 0x01 +#define PCI_CLASS_ISA_POSITIVE_DECODE 0x80 + +#define PCI_CLASS_NETWORK 0x02 +#define PCI_CLASS_ETHERNET 0x00 + +#define HEADER_TYPE_DEVICE 0x00 +#define HEADER_TYPE_PCI_TO_PCI_BRIDGE 0x01 +#define HEADER_TYPE_MULTI_FUNCTION 0x80 +#define HEADER_LAYOUT_CODE 0x7f + +#define IS_PCI_BRIDGE(_p) ((((_p)->Hdr.HeaderType) & HEADER_LAYOUT_CODE) == HEADER_TYPE_PCI_TO_PCI_BRIDGE) +#define IS_PCI_MULTI_FUNC(_p) (((_p)->Hdr.HeaderType) & HEADER_TYPE_MULTI_FUNCTION) + +typedef struct { + PCI_DEVICE_INDEPENDENT_REGION Hdr; + PCI_BRIDGE_CONTROL_REGISTER Bridge; +} PCI_TYPE01; + +typedef struct { + UINT8 Register; + UINT8 Function; + UINT8 Device; + UINT8 Bus; + UINT8 Reserved[4]; +} DEFIO_PCI_ADDR; + +typedef struct { + UINT32 Reg : 8; + UINT32 Func : 3; + UINT32 Dev : 5; + UINT32 Bus : 8; + UINT32 Reserved: 7; + UINT32 Enable : 1; +} PCI_CONFIG_ACCESS_CF8; + +#pragma pack() + +#define EFI_ROOT_BRIDGE_LIST 'eprb' +typedef struct { + UINTN Signature; + + UINT16 BridgeNumber; + UINT16 PrimaryBus; + UINT16 SubordinateBus; + + EFI_DEVICE_PATH *DevicePath; + + LIST_ENTRY Link; +} PCI_ROOT_BRIDGE_ENTRY; + + +#define PCI_EXPANSION_ROM_HEADER_SIGNATURE 0xaa55 +#define EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE 0x0EF1 +#define PCI_DATA_STRUCTURE_SIGNATURE EFI_SIGNATURE_32('P','C','I','R') + +#pragma pack(1) +typedef struct { + UINT16 Signature; // 0xaa55 + UINT8 Reserved[0x16]; + UINT16 PcirOffset; +} PCI_EXPANSION_ROM_HEADER; + + +typedef struct { + UINT16 Signature; // 0xaa55 + UINT16 InitializationSize; + UINT16 EfiSignature; // 0x0EF1 + UINT16 EfiSubsystem; + UINT16 EfiMachineType; + UINT8 Reserved[0x0A]; + UINT16 EfiImageHeaderOffset; + UINT16 PcirOffset; +} EFI_PCI_EXPANSION_ROM_HEADER; + +typedef struct { + UINT32 Signature; // "PCIR" + UINT16 VendorId; + UINT16 DeviceId; + UINT16 Reserved0; + UINT16 Length; + UINT8 Revision; + UINT8 ClassCode[3]; + UINT16 ImageLength; + UINT16 CodeRevision; + UINT8 CodeType; + UINT8 Indicator; + UINT16 Reserved1; +} PCI_DATA_STRUCTURE; +#pragma pack() + +#endif + + + + + + diff --git a/gnu-efi/inc/romload.h b/gnu-efi/inc/romload.h new file mode 100644 index 0000000..0506011 --- /dev/null +++ b/gnu-efi/inc/romload.h @@ -0,0 +1,41 @@ +#ifndef _EFI_ROMLOAD_H +#define _EFI_ROMLOAD_H + +#define ROM_SIGNATURE 0xaa55 +#define PCIDS_SIGNATURE "PCIR" +#pragma pack(push) +#pragma pack(1) +typedef struct +{ + UINT8 Pcids_Sig[4]; + UINT16 VendId; + UINT16 DevId; + UINT16 Vpd_Off; + UINT16 Size; + UINT8 Rev; + UINT8 Class_Code[3]; + UINT16 Image_Len; + UINT16 Rev_Lvl; + UINT8 Code_Type; + UINT8 Indi; + UINT16 Rsvd; +}PciDataStructure; +typedef struct +{ + UINT16 Size; + UINT32 Header_Sig; + UINT16 SubSystem; + UINT16 MachineType; + UINT8 Resvd[10]; + UINT16 EfiOffset; +}ArchData; +typedef struct +{ + UINT16 Rom_Sig; + ArchData Arch_Data; + UINT16 Pcids_Off; + UINT8 resvd[38]; +}RomHeader; +#pragma pack(pop) + +#endif diff --git a/gnu-efi/inc/x86_64/efibind.h b/gnu-efi/inc/x86_64/efibind.h new file mode 100644 index 0000000..ae40595 --- /dev/null +++ b/gnu-efi/inc/x86_64/efibind.h @@ -0,0 +1,392 @@ +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efefind.h + +Abstract: + + EFI to compile bindings + + + + +Revision History + +--*/ +#ifndef X86_64_EFI_BIND +#define X86_64_EFI_BIND +#ifndef __GNUC__ +#pragma pack() +#endif + +#if defined(GNU_EFI_USE_MS_ABI) + #if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)))||(defined(__clang__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 2))) + #define HAVE_USE_MS_ABI 1 + #else + #error Compiler is too old for GNU_EFI_USE_MS_ABI + #endif +#endif + +// +// Basic int types of various widths +// + +#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) + + // No ANSI C 1999/2000 stdint.h integer width declarations + + #if defined(_MSC_EXTENSIONS) + + // Use Microsoft C compiler integer width declarations + + typedef unsigned __int64 uint64_t; + typedef __int64 int64_t; + typedef unsigned __int32 uint32_t; + typedef __int32 int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef char int8_t; + #elif defined(__GNUC__) + typedef int __attribute__((__mode__(__DI__))) int64_t; + typedef unsigned int __attribute__((__mode__(__DI__))) uint64_t; + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef signed char int8_t; + #elif defined(UNIX_LP64) + + /* Use LP64 programming model from C_FLAGS for integer width declarations */ + + typedef unsigned long uint64_t; + typedef long int64_t; + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef char int8_t; + #else + + /* Assume P64 programming model from C_FLAGS for integer width declarations */ + + typedef unsigned long long uint64_t __attribute__((aligned (8))); + typedef long long int64_t __attribute__((aligned (8))); + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef char int8_t; + #endif + typedef uint64_t uintptr_t; + typedef int64_t intptr_t; +#elif defined(__GNUC__) + #include +#endif + +// +// Basic EFI types of various widths +// + +#ifndef __WCHAR_TYPE__ +# define __WCHAR_TYPE__ short +#endif + +typedef uint64_t UINT64; +typedef int64_t INT64; + +#ifndef _BASETSD_H_ + typedef uint32_t UINT32; + typedef int32_t INT32; +#endif + +typedef uint16_t UINT16; +typedef int16_t INT16; +typedef uint8_t UINT8; +typedef int8_t INT8; +typedef __WCHAR_TYPE__ WCHAR; + +#undef VOID +#define VOID void + + +typedef int64_t INTN; +typedef uint64_t UINTN; + +#ifdef EFI_NT_EMULATOR + #define POST_CODE(_Data) +#else + #ifdef EFI_DEBUG +#define POST_CODE(_Data) __asm mov eax,(_Data) __asm out 0x80,al + #else + #define POST_CODE(_Data) + #endif +#endif + +#define EFIERR(a) (0x8000000000000000 | a) +#define EFI_ERROR_MASK 0x8000000000000000 +#define EFIERR_OEM(a) (0xc000000000000000 | a) + + +#define BAD_POINTER 0xFBFBFBFBFBFBFBFB +#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF + +#ifdef EFI_NT_EMULATOR + #define BREAKPOINT() __asm { int 3 } +#else + #define BREAKPOINT() while (TRUE); // Make it hang on Bios[Dbg]32 +#endif + +// +// Pointers must be aligned to these address to function +// + +#define MIN_ALIGNMENT_SIZE 4 + +#define ALIGN_VARIABLE(Value ,Adjustment) \ + (UINTN)Adjustment = 0; \ + if((UINTN)Value % MIN_ALIGNMENT_SIZE) \ + (UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \ + Value = (UINTN)Value + (UINTN)Adjustment + + +// +// Define macros to build data structure signatures from characters. +// + +#define EFI_SIGNATURE_16(A,B) ((A) | (B<<8)) +#define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16)) +#define EFI_SIGNATURE_64(A,B,C,D,E,F,G,H) (EFI_SIGNATURE_32(A,B,C,D) | ((UINT64)(EFI_SIGNATURE_32(E,F,G,H)) << 32)) +// +// To export & import functions in the EFI emulator environment +// + +#ifdef EFI_NT_EMULATOR + #define EXPORTAPI __declspec( dllexport ) +#else + #define EXPORTAPI +#endif + + +// +// EFIAPI - prototype calling convention for EFI function pointers +// BOOTSERVICE - prototype for implementation of a boot service interface +// RUNTIMESERVICE - prototype for implementation of a runtime service interface +// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service +// RUNTIME_CODE - pragma macro for declaring runtime code +// + +#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options + #ifdef _MSC_EXTENSIONS + #define EFIAPI __cdecl // Force C calling convention for Microsoft C compiler + #elif defined(HAVE_USE_MS_ABI) + // Force amd64/ms calling conventions. + #define EFIAPI __attribute__((ms_abi)) + #else + #define EFIAPI // Substitute expresion to force C calling convention + #endif +#endif + +#define BOOTSERVICE +//#define RUNTIMESERVICE(proto,a) alloc_text("rtcode",a); proto a +//#define RUNTIMEFUNCTION(proto,a) alloc_text("rtcode",a); proto a +#define RUNTIMESERVICE +#define RUNTIMEFUNCTION + + +#define RUNTIME_CODE(a) alloc_text("rtcode", a) +#define BEGIN_RUNTIME_DATA() data_seg("rtdata") +#define END_RUNTIME_DATA() data_seg("") + +#define VOLATILE volatile + +#define MEMORY_FENCE() + +#ifdef EFI_NT_EMULATOR + +// +// To help ensure proper coding of integrated drivers, they are +// compiled as DLLs. In NT they require a dll init entry pointer. +// The macro puts a stub entry point into the DLL so it will load. +// + +#define EFI_DRIVER_ENTRY_POINT(InitFunction) \ + UINTN \ + __stdcall \ + _DllMainCRTStartup ( \ + UINTN Inst, \ + UINTN reason_for_call, \ + VOID *rserved \ + ) \ + { \ + return 1; \ + } \ + \ + int \ + EXPORTAPI \ + __cdecl \ + InitializeDriver ( \ + void *ImageHandle, \ + void *SystemTable \ + ) \ + { \ + return InitFunction(ImageHandle, SystemTable); \ + } + + + #define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \ + (_if)->LoadInternal(type, name, NULL) + +#else // EFI_NT_EMULATOR + +// +// When build similiar to FW, then link everything together as +// one big module. For the MSVC toolchain, we simply tell the +// linker what our driver init function is using /ENTRY. +// +#if defined(_MSC_EXTENSIONS) + #define EFI_DRIVER_ENTRY_POINT(InitFunction) \ + __pragma(comment(linker, "/ENTRY:" # InitFunction)) +#else + #define EFI_DRIVER_ENTRY_POINT(InitFunction) \ + UINTN \ + InitializeDriver ( \ + VOID *ImageHandle, \ + VOID *SystemTable \ + ) \ + { \ + return InitFunction(ImageHandle, \ + SystemTable); \ + } \ + \ + EFI_STATUS efi_main( \ + EFI_HANDLE image, \ + EFI_SYSTEM_TABLE *systab \ + ) __attribute__((weak, \ + alias ("InitializeDriver"))); +#endif + + #define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \ + (_if)->LoadInternal(type, name, entry) + +#endif // EFI_NT_EMULATOR + +// +// Some compilers don't support the forward reference construct: +// typedef struct XXXXX +// +// The following macro provide a workaround for such cases. +// +#ifdef NO_INTERFACE_DECL +#define INTERFACE_DECL(x) +#else +#if defined(__GNUC__) || defined(_MSC_EXTENSIONS) +#define INTERFACE_DECL(x) struct x +#else +#define INTERFACE_DECL(x) typedef struct x +#endif +#endif + +/* for x86_64, EFI_FUNCTION_WRAPPER must be defined */ +#if defined(HAVE_USE_MS_ABI) +#define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) +#else +/* + Credits for macro-magic: + https://groups.google.com/forum/?fromgroups#!topic/comp.std.c/d-6Mj5Lko_s + http://efesx.com/2010/08/31/overloading-macros/ +*/ +#define __VA_NARG__(...) \ + __VA_NARG_(_0, ## __VA_ARGS__, __RSEQ_N()) +#define __VA_NARG_(...) \ + __VA_ARG_N(__VA_ARGS__) +#define __VA_ARG_N( \ + _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,N,...) N +#define __RSEQ_N() \ + 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + +#define __VA_ARG_NSUFFIX__(prefix,...) \ + __VA_ARG_NSUFFIX_N(prefix, __VA_NARG__(__VA_ARGS__)) +#define __VA_ARG_NSUFFIX_N(prefix,nargs) \ + __VA_ARG_NSUFFIX_N_(prefix, nargs) +#define __VA_ARG_NSUFFIX_N_(prefix,nargs) \ + prefix ## nargs + +/* Prototypes of EFI cdecl -> stdcall trampolines */ +UINT64 efi_call0(void *func); +UINT64 efi_call1(void *func, UINT64 arg1); +UINT64 efi_call2(void *func, UINT64 arg1, UINT64 arg2); +UINT64 efi_call3(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3); +UINT64 efi_call4(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4); +UINT64 efi_call5(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5); +UINT64 efi_call6(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5, UINT64 arg6); +UINT64 efi_call7(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5, UINT64 arg6, UINT64 arg7); +UINT64 efi_call8(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5, UINT64 arg6, UINT64 arg7, + UINT64 arg8); +UINT64 efi_call9(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5, UINT64 arg6, UINT64 arg7, + UINT64 arg8, UINT64 arg9); +UINT64 efi_call10(void *func, UINT64 arg1, UINT64 arg2, UINT64 arg3, + UINT64 arg4, UINT64 arg5, UINT64 arg6, UINT64 arg7, + UINT64 arg8, UINT64 arg9, UINT64 arg10); + +/* Front-ends to efi_callX to avoid compiler warnings */ +#define _cast64_efi_call0(f) \ + efi_call0(f) +#define _cast64_efi_call1(f,a1) \ + efi_call1(f, (UINT64)(a1)) +#define _cast64_efi_call2(f,a1,a2) \ + efi_call2(f, (UINT64)(a1), (UINT64)(a2)) +#define _cast64_efi_call3(f,a1,a2,a3) \ + efi_call3(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3)) +#define _cast64_efi_call4(f,a1,a2,a3,a4) \ + efi_call4(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4)) +#define _cast64_efi_call5(f,a1,a2,a3,a4,a5) \ + efi_call5(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5)) +#define _cast64_efi_call6(f,a1,a2,a3,a4,a5,a6) \ + efi_call6(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5), (UINT64)(a6)) +#define _cast64_efi_call7(f,a1,a2,a3,a4,a5,a6,a7) \ + efi_call7(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5), (UINT64)(a6), (UINT64)(a7)) +#define _cast64_efi_call8(f,a1,a2,a3,a4,a5,a6,a7,a8) \ + efi_call8(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5), (UINT64)(a6), (UINT64)(a7), (UINT64)(a8)) +#define _cast64_efi_call9(f,a1,a2,a3,a4,a5,a6,a7,a8,a9) \ + efi_call9(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5), (UINT64)(a6), (UINT64)(a7), (UINT64)(a8), \ + (UINT64)(a9)) +#define _cast64_efi_call10(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \ + efi_call10(f, (UINT64)(a1), (UINT64)(a2), (UINT64)(a3), (UINT64)(a4), \ + (UINT64)(a5), (UINT64)(a6), (UINT64)(a7), (UINT64)(a8), \ + (UINT64)(a9), (UINT64)(a10)) + +/* main wrapper (va_num ignored) */ +#define uefi_call_wrapper(func,va_num,...) \ + __VA_ARG_NSUFFIX__(_cast64_efi_call, __VA_ARGS__) (func , ##__VA_ARGS__) + +#endif + +#if defined(HAVE_USE_MS_ABI) && !defined(_MSC_EXTENSIONS) + #define EFI_FUNCTION __attribute__((ms_abi)) +#else + #define EFI_FUNCTION +#endif + +#ifdef _MSC_EXTENSIONS +#pragma warning ( disable : 4731 ) // Suppress warnings about modification of EBP +#endif + +#endif diff --git a/gnu-efi/inc/x86_64/efilibplat.h b/gnu-efi/inc/x86_64/efilibplat.h new file mode 100644 index 0000000..3844578 --- /dev/null +++ b/gnu-efi/inc/x86_64/efilibplat.h @@ -0,0 +1,26 @@ +/*++ + +Copyright (c) 1998 Intel Corporation + +Module Name: + + efilibplat.h + +Abstract: + + EFI to compile bindings + + + + +Revision History + +--*/ + +VOID +InitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ); + + diff --git a/gnu-efi/inc/x86_64/efisetjmp_arch.h b/gnu-efi/inc/x86_64/efisetjmp_arch.h new file mode 100644 index 0000000..b1ad1fe --- /dev/null +++ b/gnu-efi/inc/x86_64/efisetjmp_arch.h @@ -0,0 +1,22 @@ +#ifndef GNU_EFI_X86_64_SETJMP_H +#define GNU_EFI_X86_64_SETJMP_H + +#define JMPBUF_ALIGN 8 + +typedef struct { + UINT64 Rbx; + UINT64 Rsp; + UINT64 Rbp; + + UINT64 Rdi; + UINT64 Rsi; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; + UINT64 Rip; + UINT64 MxCsr; + UINT8 XmmBuffer[160]; // XMM6 - XMM15 +} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; + +#endif /* GNU_EFI_X86_64_SETJMP_H */ diff --git a/gnu-efi/inc/x86_64/pe.h b/gnu-efi/inc/x86_64/pe.h new file mode 100644 index 0000000..979b936 --- /dev/null +++ b/gnu-efi/inc/x86_64/pe.h @@ -0,0 +1,595 @@ +/* + PE32+ header file + */ +#ifndef _PE_H +#define _PE_H + +#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ +#define IMAGE_OS2_SIGNATURE 0x454E // NE +#define IMAGE_OS2_SIGNATURE_LE 0x454C // LE +#define IMAGE_NT_SIGNATURE 0x00004550 // PE00 +#define IMAGE_EDOS_SIGNATURE 0x44454550 // PEED + + +typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header + UINT16 e_magic; // Magic number + UINT16 e_cblp; // Bytes on last page of file + UINT16 e_cp; // Pages in file + UINT16 e_crlc; // Relocations + UINT16 e_cparhdr; // Size of header in paragraphs + UINT16 e_minalloc; // Minimum extra paragraphs needed + UINT16 e_maxalloc; // Maximum extra paragraphs needed + UINT16 e_ss; // Initial (relative) SS value + UINT16 e_sp; // Initial SP value + UINT16 e_csum; // Checksum + UINT16 e_ip; // Initial IP value + UINT16 e_cs; // Initial (relative) CS value + UINT16 e_lfarlc; // File address of relocation table + UINT16 e_ovno; // Overlay number + UINT16 e_res[4]; // Reserved words + UINT16 e_oemid; // OEM identifier (for e_oeminfo) + UINT16 e_oeminfo; // OEM information; e_oemid specific + UINT16 e_res2[10]; // Reserved words + UINT32 e_lfanew; // File address of new exe header + } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +typedef struct _IMAGE_OS2_HEADER { // OS/2 .EXE header + UINT16 ne_magic; // Magic number + UINT8 ne_ver; // Version number + UINT8 ne_rev; // Revision number + UINT16 ne_enttab; // Offset of Entry Table + UINT16 ne_cbenttab; // Number of bytes in Entry Table + UINT32 ne_crc; // Checksum of whole file + UINT16 ne_flags; // Flag UINT16 + UINT16 ne_autodata; // Automatic data segment number + UINT16 ne_heap; // Initial heap allocation + UINT16 ne_stack; // Initial stack allocation + UINT32 ne_csip; // Initial CS:IP setting + UINT32 ne_sssp; // Initial SS:SP setting + UINT16 ne_cseg; // Count of file segments + UINT16 ne_cmod; // Entries in Module Reference Table + UINT16 ne_cbnrestab; // Size of non-resident name table + UINT16 ne_segtab; // Offset of Segment Table + UINT16 ne_rsrctab; // Offset of Resource Table + UINT16 ne_restab; // Offset of resident name table + UINT16 ne_modtab; // Offset of Module Reference Table + UINT16 ne_imptab; // Offset of Imported Names Table + UINT32 ne_nrestab; // Offset of Non-resident Names Table + UINT16 ne_cmovent; // Count of movable entries + UINT16 ne_align; // Segment alignment shift count + UINT16 ne_cres; // Count of resource segments + UINT8 ne_exetyp; // Target Operating system + UINT8 ne_flagsothers; // Other .EXE flags + UINT16 ne_pretthunks; // offset to return thunks + UINT16 ne_psegrefbytes; // offset to segment ref. bytes + UINT16 ne_swaparea; // Minimum code swap area size + UINT16 ne_expver; // Expected Windows version number + } IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER; + +// +// File header format. +// + +typedef struct _IMAGE_FILE_HEADER { + UINT16 Machine; + UINT16 NumberOfSections; + UINT32 TimeDateStamp; + UINT32 PointerToSymbolTable; + UINT32 NumberOfSymbols; + UINT16 SizeOfOptionalHeader; + UINT16 Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + +#define IMAGE_SIZEOF_FILE_HEADER 20 + +#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // Relocation info stripped from file. +#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 // File is executable (i.e. no unresolved externel references). +#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 // Line nunbers stripped from file. +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 // Local symbols stripped from file. +#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 // Bytes of machine word are reversed. +#define IMAGE_FILE_32BIT_MACHINE 0x0100 // 32 bit word machine. +#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 // Debugging info stripped from file in .DBG file +#define IMAGE_FILE_SYSTEM 0x1000 // System File. +#define IMAGE_FILE_DLL 0x2000 // File is a DLL. +#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 // Bytes of machine word are reversed. + +#define IMAGE_FILE_MACHINE_UNKNOWN 0 +#define IMAGE_FILE_MACHINE_I386 0x14c // Intel 386. +#define IMAGE_FILE_MACHINE_R3000 0x162 // MIPS little-endian, 0540 big-endian +#define IMAGE_FILE_MACHINE_R4000 0x166 // MIPS little-endian +#define IMAGE_FILE_MACHINE_ALPHA 0x184 // Alpha_AXP +#define IMAGE_FILE_MACHINE_ARMTHUMB_MIXED 0x1c2 // Arm/Thumb +#define IMAGE_FILE_MACHINE_POWERPC 0x1F0 // IBM PowerPC Little-Endian +#define IMAGE_FILE_MACHINE_IA64 0x200 // IA-64 +#define IMAGE_FILE_MACHINE_TAHOE 0x7cc // Intel EM machine +#define IMAGE_FILE_MACHINE_EBC 0xebc // EFI Byte Code +#define IMAGE_FILE_MACHINE_X64 0x8664 // x86_64 +// +// Directory format. +// + +typedef struct _IMAGE_DATA_DIRECTORY { + UINT32 VirtualAddress; + UINT32 Size; +} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; + +#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 + +// +// Optional header format. +// + +typedef struct _IMAGE_OPTIONAL_HEADER { + // + // Standard fields. + // + + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT32 BaseOfData; + + // + // NT additional fields. + // + + UINT32 ImageBase; + UINT32 SectionAlignment; + UINT32 FileAlignment; + UINT16 MajorOperatingSystemVersion; + UINT16 MinorOperatingSystemVersion; + UINT16 MajorImageVersion; + UINT16 MinorImageVersion; + UINT16 MajorSubsystemVersion; + UINT16 MinorSubsystemVersion; + UINT32 Reserved1; + UINT32 SizeOfImage; + UINT32 SizeOfHeaders; + UINT32 CheckSum; + UINT16 Subsystem; + UINT16 DllCharacteristics; + UINT32 SizeOfStackReserve; + UINT32 SizeOfStackCommit; + UINT32 SizeOfHeapReserve; + UINT32 SizeOfHeapCommit; + UINT32 LoaderFlags; + UINT32 NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER; + +typedef struct _IMAGE_ROM_OPTIONAL_HEADER { + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT32 BaseOfData; + UINT32 BaseOfBss; + UINT32 GprMask; + UINT32 CprMask[4]; + UINT32 GpValue; +} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER; + +#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56 +#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28 +#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224 + +#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b +#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 + +typedef struct _IMAGE_NT_HEADERS { + UINT32 Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER OptionalHeader; +} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; + +typedef struct _IMAGE_ROM_HEADERS { + IMAGE_FILE_HEADER FileHeader; + IMAGE_ROM_OPTIONAL_HEADER OptionalHeader; +} IMAGE_ROM_HEADERS, *PIMAGE_ROM_HEADERS; + +#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \ + ((UINT32)ntheader + \ + FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \ + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader \ + )) + + +// Subsystem Values + +#define IMAGE_SUBSYSTEM_UNKNOWN 0 // Unknown subsystem. +#define IMAGE_SUBSYSTEM_NATIVE 1 // Image doesn't require a subsystem. +#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 // Image runs in the Windows GUI subsystem. +#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 // Image runs in the Windows character subsystem. +#define IMAGE_SUBSYSTEM_OS2_CUI 5 // image runs in the OS/2 character subsystem. +#define IMAGE_SUBSYSTEM_POSIX_CUI 7 // image run in the Posix character subsystem. + + +// Directory Entries + +#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory +#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory +#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory +#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory +#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory +#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table +#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory +#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // Description String +#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // Machine Value (MIPS GP) +#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory +#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory + +// +// Section header format. +// + +#define IMAGE_SIZEOF_SHORT_NAME 8 + +typedef struct _IMAGE_SECTION_HEADER { + UINT8 Name[IMAGE_SIZEOF_SHORT_NAME]; + union { + UINT32 PhysicalAddress; + UINT32 VirtualSize; + } Misc; + UINT32 VirtualAddress; + UINT32 SizeOfRawData; + UINT32 PointerToRawData; + UINT32 PointerToRelocations; + UINT32 PointerToLinenumbers; + UINT16 NumberOfRelocations; + UINT16 NumberOfLinenumbers; + UINT32 Characteristics; +} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; + +#define IMAGE_SIZEOF_SECTION_HEADER 40 + +#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 // Reserved. + +#define IMAGE_SCN_CNT_CODE 0x00000020 // Section contains code. +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 // Section contains initialized data. +#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 // Section contains uninitialized data. + +#define IMAGE_SCN_LNK_OTHER 0x00000100 // Reserved. +#define IMAGE_SCN_LNK_INFO 0x00000200 // Section contains comments or some other type of information. +#define IMAGE_SCN_LNK_REMOVE 0x00000800 // Section contents will not become part of image. +#define IMAGE_SCN_LNK_COMDAT 0x00001000 // Section contents comdat. + +#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 // +#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 // +#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 // +#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 // +#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 // Default alignment if no others are specified. +#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 // +#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 // + +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 // Section can be discarded. +#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 // Section is not cachable. +#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 // Section is not pageable. +#define IMAGE_SCN_MEM_SHARED 0x10000000 // Section is shareable. +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 // Section is executable. +#define IMAGE_SCN_MEM_READ 0x40000000 // Section is readable. +#define IMAGE_SCN_MEM_WRITE 0x80000000 // Section is writeable. + +// +// Symbol format. +// + + +#define IMAGE_SIZEOF_SYMBOL 18 + +// +// Section values. +// +// Symbols have a section number of the section in which they are +// defined. Otherwise, section numbers have the following meanings: +// + +#define IMAGE_SYM_UNDEFINED (UINT16)0 // Symbol is undefined or is common. +#define IMAGE_SYM_ABSOLUTE (UINT16)-1 // Symbol is an absolute value. +#define IMAGE_SYM_DEBUG (UINT16)-2 // Symbol is a special debug item. + +// +// Type (fundamental) values. +// + +#define IMAGE_SYM_TYPE_NULL 0 // no type. +#define IMAGE_SYM_TYPE_VOID 1 // +#define IMAGE_SYM_TYPE_CHAR 2 // type character. +#define IMAGE_SYM_TYPE_SHORT 3 // type short integer. +#define IMAGE_SYM_TYPE_INT 4 // +#define IMAGE_SYM_TYPE_LONG 5 // +#define IMAGE_SYM_TYPE_FLOAT 6 // +#define IMAGE_SYM_TYPE_DOUBLE 7 // +#define IMAGE_SYM_TYPE_STRUCT 8 // +#define IMAGE_SYM_TYPE_UNION 9 // +#define IMAGE_SYM_TYPE_ENUM 10 // enumeration. +#define IMAGE_SYM_TYPE_MOE 11 // member of enumeration. +#define IMAGE_SYM_TYPE_BYTE 12 // +#define IMAGE_SYM_TYPE_WORD 13 // +#define IMAGE_SYM_TYPE_UINT 14 // +#define IMAGE_SYM_TYPE_DWORD 15 // + +// +// Type (derived) values. +// + +#define IMAGE_SYM_DTYPE_NULL 0 // no derived type. +#define IMAGE_SYM_DTYPE_POINTER 1 // pointer. +#define IMAGE_SYM_DTYPE_FUNCTION 2 // function. +#define IMAGE_SYM_DTYPE_ARRAY 3 // array. + +// +// Storage classes. +// + +#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1 +#define IMAGE_SYM_CLASS_NULL 0 +#define IMAGE_SYM_CLASS_AUTOMATIC 1 +#define IMAGE_SYM_CLASS_EXTERNAL 2 +#define IMAGE_SYM_CLASS_STATIC 3 +#define IMAGE_SYM_CLASS_REGISTER 4 +#define IMAGE_SYM_CLASS_EXTERNAL_DEF 5 +#define IMAGE_SYM_CLASS_LABEL 6 +#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7 +#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8 +#define IMAGE_SYM_CLASS_ARGUMENT 9 +#define IMAGE_SYM_CLASS_STRUCT_TAG 10 +#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11 +#define IMAGE_SYM_CLASS_UNION_TAG 12 +#define IMAGE_SYM_CLASS_TYPE_DEFINITION 13 +#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14 +#define IMAGE_SYM_CLASS_ENUM_TAG 15 +#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16 +#define IMAGE_SYM_CLASS_REGISTER_PARAM 17 +#define IMAGE_SYM_CLASS_BIT_FIELD 18 +#define IMAGE_SYM_CLASS_BLOCK 100 +#define IMAGE_SYM_CLASS_FUNCTION 101 +#define IMAGE_SYM_CLASS_END_OF_STRUCT 102 +#define IMAGE_SYM_CLASS_FILE 103 +// new +#define IMAGE_SYM_CLASS_SECTION 104 +#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105 + +// type packing constants + +#define N_BTMASK 017 +#define N_TMASK 060 +#define N_TMASK1 0300 +#define N_TMASK2 0360 +#define N_BTSHFT 4 +#define N_TSHIFT 2 + +// MACROS + +// +// Communal selection types. +// + +#define IMAGE_COMDAT_SELECT_NODUPLICATES 1 +#define IMAGE_COMDAT_SELECT_ANY 2 +#define IMAGE_COMDAT_SELECT_SAME_SIZE 3 +#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4 +#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5 + +#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 +#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 +#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 + + +// +// Relocation format. +// + +typedef struct _IMAGE_RELOCATION { + UINT32 VirtualAddress; + UINT32 SymbolTableIndex; + UINT16 Type; +} IMAGE_RELOCATION; + +#define IMAGE_SIZEOF_RELOCATION 10 + +// +// I386 relocation types. +// + +#define IMAGE_REL_I386_ABSOLUTE 0 // Reference is absolute, no relocation is necessary +#define IMAGE_REL_I386_DIR16 01 // Direct 16-bit reference to the symbols virtual address +#define IMAGE_REL_I386_REL16 02 // PC-relative 16-bit reference to the symbols virtual address +#define IMAGE_REL_I386_DIR32 06 // Direct 32-bit reference to the symbols virtual address +#define IMAGE_REL_I386_DIR32NB 07 // Direct 32-bit reference to the symbols virtual address, base not included +#define IMAGE_REL_I386_SEG12 011 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address +#define IMAGE_REL_I386_SECTION 012 +#define IMAGE_REL_I386_SECREL 013 +#define IMAGE_REL_I386_REL32 024 // PC-relative 32-bit reference to the symbols virtual address + +// +// MIPS relocation types. +// + +#define IMAGE_REL_MIPS_ABSOLUTE 0 // Reference is absolute, no relocation is necessary +#define IMAGE_REL_MIPS_REFHALF 01 +#define IMAGE_REL_MIPS_REFWORD 02 +#define IMAGE_REL_MIPS_JMPADDR 03 +#define IMAGE_REL_MIPS_REFHI 04 +#define IMAGE_REL_MIPS_REFLO 05 +#define IMAGE_REL_MIPS_GPREL 06 +#define IMAGE_REL_MIPS_LITERAL 07 +#define IMAGE_REL_MIPS_SECTION 012 +#define IMAGE_REL_MIPS_SECREL 013 +#define IMAGE_REL_MIPS_REFWORDNB 042 +#define IMAGE_REL_MIPS_PAIR 045 + +// +// Alpha Relocation types. +// + +#define IMAGE_REL_ALPHA_ABSOLUTE 0x0 +#define IMAGE_REL_ALPHA_REFLONG 0x1 +#define IMAGE_REL_ALPHA_REFQUAD 0x2 +#define IMAGE_REL_ALPHA_GPREL32 0x3 +#define IMAGE_REL_ALPHA_LITERAL 0x4 +#define IMAGE_REL_ALPHA_LITUSE 0x5 +#define IMAGE_REL_ALPHA_GPDISP 0x6 +#define IMAGE_REL_ALPHA_BRADDR 0x7 +#define IMAGE_REL_ALPHA_HINT 0x8 +#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x9 +#define IMAGE_REL_ALPHA_REFHI 0xA +#define IMAGE_REL_ALPHA_REFLO 0xB +#define IMAGE_REL_ALPHA_PAIR 0xC +#define IMAGE_REL_ALPHA_MATCH 0xD +#define IMAGE_REL_ALPHA_SECTION 0xE +#define IMAGE_REL_ALPHA_SECREL 0xF +#define IMAGE_REL_ALPHA_REFLONGNB 0x10 + +// +// IBM PowerPC relocation types. +// + +#define IMAGE_REL_PPC_ABSOLUTE 0x0000 // NOP +#define IMAGE_REL_PPC_ADDR64 0x0001 // 64-bit address +#define IMAGE_REL_PPC_ADDR32 0x0002 // 32-bit address +#define IMAGE_REL_PPC_ADDR24 0x0003 // 26-bit address, shifted left 2 (branch absolute) +#define IMAGE_REL_PPC_ADDR16 0x0004 // 16-bit address +#define IMAGE_REL_PPC_ADDR14 0x0005 // 16-bit address, shifted left 2 (load doubleword) +#define IMAGE_REL_PPC_REL24 0x0006 // 26-bit PC-relative offset, shifted left 2 (branch relative) +#define IMAGE_REL_PPC_REL14 0x0007 // 16-bit PC-relative offset, shifted left 2 (br cond relative) +#define IMAGE_REL_PPC_TOCREL16 0x0008 // 16-bit offset from TOC base +#define IMAGE_REL_PPC_TOCREL14 0x0009 // 16-bit offset from TOC base, shifted left 2 (load doubleword) + +#define IMAGE_REL_PPC_ADDR32NB 0x000A // 32-bit addr w/o image base +#define IMAGE_REL_PPC_SECREL 0x000B // va of containing section (as in an image sectionhdr) +#define IMAGE_REL_PPC_SECTION 0x000C // sectionheader number +#define IMAGE_REL_PPC_IFGLUE 0x000D // substitute TOC restore instruction iff symbol is glue code +#define IMAGE_REL_PPC_IMGLUE 0x000E // symbol is glue code; virtual address is TOC restore instruction + +#define IMAGE_REL_PPC_TYPEMASK 0x00FF // mask to isolate above values in IMAGE_RELOCATION.Type + +// Flag bits in IMAGE_RELOCATION.TYPE + +#define IMAGE_REL_PPC_NEG 0x0100 // subtract reloc value rather than adding it +#define IMAGE_REL_PPC_BRTAKEN 0x0200 // fix branch prediction bit to predict branch taken +#define IMAGE_REL_PPC_BRNTAKEN 0x0400 // fix branch prediction bit to predict branch not taken +#define IMAGE_REL_PPC_TOCDEFN 0x0800 // toc slot defined in file (or, data in toc) + +// +// Based relocation format. +// + +typedef struct _IMAGE_BASE_RELOCATION { + UINT32 VirtualAddress; + UINT32 SizeOfBlock; +// UINT16 TypeOffset[1]; +} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION; + +#define IMAGE_SIZEOF_BASE_RELOCATION 8 + +// +// Based relocation types. +// + +#define IMAGE_REL_BASED_ABSOLUTE 0 +#define IMAGE_REL_BASED_HIGH 1 +#define IMAGE_REL_BASED_LOW 2 +#define IMAGE_REL_BASED_HIGHLOW 3 +#define IMAGE_REL_BASED_HIGHADJ 4 +#define IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define IMAGE_REL_BASED_IA64_IMM64 9 +#define IMAGE_REL_BASED_DIR64 10 + +// +// Line number format. +// + +typedef struct _IMAGE_LINENUMBER { + union { + UINT32 SymbolTableIndex; // Symbol table index of function name if Linenumber is 0. + UINT32 VirtualAddress; // Virtual address of line number. + } Type; + UINT16 Linenumber; // Line number. +} IMAGE_LINENUMBER; + +#define IMAGE_SIZEOF_LINENUMBER 6 + +// +// Archive format. +// + +#define IMAGE_ARCHIVE_START_SIZE 8 +#define IMAGE_ARCHIVE_START "!\n" +#define IMAGE_ARCHIVE_END "`\n" +#define IMAGE_ARCHIVE_PAD "\n" +#define IMAGE_ARCHIVE_LINKER_MEMBER "/ " +#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// " + +typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER { + UINT8 Name[16]; // File member name - `/' terminated. + UINT8 Date[12]; // File member date - decimal. + UINT8 UserID[6]; // File member user id - decimal. + UINT8 GroupID[6]; // File member group id - decimal. + UINT8 Mode[8]; // File member mode - octal. + UINT8 Size[10]; // File member size - decimal. + UINT8 EndHeader[2]; // String to end header. +} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER; + +#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 + +// +// DLL support. +// + +// +// Export Format +// + +typedef struct _IMAGE_EXPORT_DIRECTORY { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 Name; + UINT32 Base; + UINT32 NumberOfFunctions; + UINT32 NumberOfNames; + UINT32 *AddressOfFunctions; + UINT32 *AddressOfNames; + UINT32 *AddressOfNameOrdinals; +} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; + +// +// Import Format +// + +typedef struct _IMAGE_IMPORT_BY_NAME { + UINT16 Hint; + UINT8 Name[1]; +} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; + +typedef struct _IMAGE_THUNK_DATA { + union { + UINT32 Function; + UINT32 Ordinal; + PIMAGE_IMPORT_BY_NAME AddressOfData; + } u1; +} IMAGE_THUNK_DATA, *PIMAGE_THUNK_DATA; + +#define IMAGE_ORDINAL_FLAG 0x80000000 +#define IMAGE_SNAP_BY_ORDINAL(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG) != 0) +#define IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff) + +typedef struct _IMAGE_IMPORT_DESCRIPTOR { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT32 ForwarderChain; + UINT32 Name; + PIMAGE_THUNK_DATA FirstThunk; +} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR; + +#endif diff --git a/gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o b/gnu-efi/x86_64/gnuefi/crt0-efi-x86_64.o new file mode 100644 index 0000000000000000000000000000000000000000..43fa4c1ef70248af1f3d9f9c0253ac878c5369a7 GIT binary patch literal 2616 zcmbW2%}*0i5Wr_y#iCLvdQiC(6$3`LAV|1q3Vsz8A`oLB#$}f-rAfQQc8lethO7J^ z9zA+A(Sv`A2mSyPO?2k%O#Aw}jfpSm&b;57ulL!v51u~kvn-Hi!Ch$ggaUj%+1B$) z&BHKcpm2DcT3ss~-62*ux=mtZb9LX}z;DFw~#1hAlfik{(N+j~C!(J4T27L`SdP z`R8nM-IM9<6VF%H;nB+T?818XmNPTcPMDzCi91RgU?*4;KheeG1+!q>7&)c-z2azx zhW!SW?B;}R7+|YTVZ)hDz&#t{?B<{iX%nfw4QIRf1tdcW>ocNwmpP2};7$)d--Ck_ zG|Leb8`bIoR6IYZOoLmGyjlcHRj(8*di4O@`x`3@%S-pbtp%06Z7&J{PrY09%Ar&y zD@Ny7VLKndo?dC1sE^3z?@pO z|F34zmDX0)K_cZ@k@XgCz6f+bh~>qA z%uoNfN%`j!^3yA6=3hr<#-wD&^ub2&nchs>6&y^;|BUm0WM`T`y#r=`7nvE8TrM-D zcUfk^L0IDcu=$xz~bepOfnU$@Pmr)lYAiS^s-vluGPSRc(v&?+ReaxK%Ut w&9g_Q-`VgJORAgxGtK<8rsmm41Wkqu)X^G;YY}?mll;f|ulYmEGFD9gzicPPIRF3v literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/gnuefi/libgnuefi.a b/gnu-efi/x86_64/gnuefi/libgnuefi.a new file mode 100644 index 0000000000000000000000000000000000000000..ed1b03d6a0d3014ca7c4234aaf98ba08ac8b5440 GIT binary patch literal 29842 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�$fMBZDQG<`%>RFwmCJrr@ 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 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/crc.o b/gnu-efi/x86_64/lib/crc.o new file mode 100644 index 0000000000000000000000000000000000000000..74b57b6fa002f574a4dedd61682e951e37ba03de GIT binary patch literal 37864 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 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/data.o b/gnu-efi/x86_64/lib/data.o new file mode 100644 index 0000000000000000000000000000000000000000..9ef93f17dd8084ce846b772c50b1a43238980bfc GIT binary patch literal 37104 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 VUVqHDukWu&Z literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/debug.o b/gnu-efi/x86_64/lib/debug.o new file mode 100644 index 0000000000000000000000000000000000000000..514ad161ec2493104496285dea48318b223e1087 GIT binary patch literal 30032 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

WjncD;6>)YTi|Kte@5W+D=N^$F9m)q zkN0;1&vHQhZ-LLnzz)}I0{=4W=Pv@klkMm40)LD7|0(c)al1~o3vE9~^E|3we1aEH zp$`~hR&kuE6a1QQrohjHI(W?y_?=8Q2|URQ)Ix#3$@ADE@b9ty+Xa3J$Mcf~K1=(% zzz2A}+bQr$*4sG(|1IZP7YqDz>~~iS{7X#VEO6b=y99m=kLyu^Kf?WgLE!DIpFauw zIF_@D?MTn#6+GT`0^iH>j~Dn6>~{fyKh5!QlfXa2^k#wooY&ti0{;!Kv!4+7OC0Z# z0w;q6yE;YSr*J=S75JZ74{r**i~T{TtXe-aIG)t8KWY44w$Hf&Kb`p(3w#HU%P;UK z`_X2Bui^f07x-HoZ^s0_p2u^Wz#rvt9T51RdHuat;P_hucs(TWDwhA0z~{03*RX$R z{ixp-fv+72{CsYASm673ecUVX*Eud75cm?d^M?d}Ipa?Wypw621nYkG@_6gGp2pX+ zJEwEmA~IaLV2rE&b77rd4Ve2DemCh!=?$x(qH z#(wvCfj_|QUMcXO^16GUz~5p$yd?1TjK42%_@wI!fOfZL+kAwp7#v`kFkAb1m4SfxK!Y$ zvmSmT@W+_{J%P_-{=@mX?$3OV&zl53$Z_=)fp28{)cK~C^D>X?H-i5SZubR&AJ6nF z0>6Ou@F#))gY&ny1zyMU9lQ?f{>JxY^>t&z7ALjYJQ{X0#>m`BX*A?-a&T(3| zyNmH<0>72x_I81v!uEWzz`xFM?7ISgfaByl0^h@V;41#q{dtS+&?oR8vHX64pNurXS+%Z{8aAGguvfreSSyaZ*x5SK;Ylvewy5l?*B17&KiO5W&f-f_v28Dd|d*MaR2uU`~kMVFAMyW zZ2w;sco*Z}5ctVFFLw((!2b5Cz^Ac(YIz*G|NqJMvsU2Cd0qnoFED>Z;QAaVF7S7G zyyF6Yf$ith0)LX@$(;gkW;uTpxSQ9brJUF3an0g9VWq@b{yKs8^SpNo{6AR_y9DlG zT>Z31InTL*@#h48f$bcAe4Z}d&+~XZO9eiS$2%nO>)9SYFYpGAOLq$VWtQ`Zz&G={ z{ItOFH(v1iy}Q%6?iD_yye0a|C`9uP+x1d!xB+wB(k39RP73Bzt8@AroeZyoqb;5*K^)=mB9C~oSOyyRkriH1^z0}@An11i}nAUz|Z15;RS(T z&hz^hfxpIj)92rMUan!jY5ZK{zu|Gs5%@FgFN*~J9>=jY0zbgMvf~ z1U|@m7!^4Fj}Y+MCGh*${y!t|1FZkc1^xol*9&|u_y2Z*zsvUjfWW(1Z%+yQevV7; z3cQ`;a~0c{)|-RZ{dEGz-QSpPL1~p7rnvf#WZz;*}Ek9PVdP;Jes9&l31s zJe~^#em2LkFABVY=l2GI|APJZc7fl<^1mzatJr>iDDVcReNz`wx!y#jxlnt?a@>AZ;5YJk-xfIjs5)MbdFoTodyegJy1*Y}yO}NUJo}?p;6WwU zSRwG;+@IqFzJdD}6nHP&TTI~kJ%+fzPh>rh349Ub69WGj&*QlQ|2EI##R5;WVO=fo z&+~fpb%Ec<5X{9H0iu;iozH!UlYwz>dK$T3MPOnl@S!@I6*|x7=uj@5fuM z@K!MV8WDWCg=zTdtJd*cb{xL?Fu`)H(ZS&y{=C5d{X#vV?(DiosT=VI*CO>%y6bt+ z0ER7esf`-o&(VM?EN2?SKemH5h8Me!f%bzqyEi_fYg8A+C-T~_r9hy}|KIv6pf1Xs zWFtW9_SyXaQJ3z&rZ+%A_6eVz#|)=5ae+T1?>fMz(%*j8-{Xr^Mbsb8k#1k>?*zc4 zOsw%v6W-z7VKFeti*Z9@Snq@RcsGo{tB=xM@}iz3hRlCET2;~Wuc(806YyZF@o&#e zu8-r#m>|c08emhkfAj)Xe~)-5NMjeUP1XKI+`iT`wvVZ?Y=19cC{vE}YhD21`V{9w ziYoV2_u~?HFjf5-epRDISL9D!Pk&y;^#z-;f$K|L*VFhdP{5^Fn2E8G>o;je{?y~w z@S{*bnX>+NuHU8^`BT<^0Pv~wf72BD$5cqy*Yh$}+t}28ZvR_6U`&_lr>Kw1vI+m> d)y@9L>2m3@)E}k?Q`LWv`~Os_rYgw#{{vrTSUUg! literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/dpath.o b/gnu-efi/x86_64/lib/dpath.o new file mode 100644 index 0000000000000000000000000000000000000000..420678475c587682458d9a92083db706e6f9a8e6 GIT binary patch literal 109600 zcmc$H3t&{$we~r4=1e9NNCFc=K!vD8iSiZ^6)1T!BYBa`1W+)BWCGEU#AL!lQK*15 zRa>+LkN!aeI4P+u9de)E2MrKD7_q+ox@9tEIQ?Ut8PS2miO$-fN#T5774B`~Rby zv-aBSwbx#I?REB3qS|B0WWZnDNN3#2D*uhflw$I@e0FxkeM4Vm-6 zbG*z+zd-$(eB;7nhD=Sl?(l13)AprKoH&uw`SMl3mdvcTtdj^;@wN9?6|q|zXT#4i z#7S&CIIHQ_mdb_4nr>~Z&@$N#vAvI1Job;xZ{Oa(htlWaIw@UN^1$<%VSxD6;w82Z z=Ct?zYBnad7&F@vqUj9+2=qOAEL`$Hd0)+=kA`uf#<4!Y4J8jeGhRQd0(2Al9{mrX zpDB6Z>%gLyiO^Y!&WP6pjR_gS250Gc$AD-12i(W;l*A|yNr)nG_}*WIm4gn9mSJjM zYRoqoB@c|wrp}lDjyX9}cb*PEghbgg+pJTU;w@Iv@T|x-K^QwQ8WjG%z1IhprKiI_ zOqWE9WOV^q9P(Vv7P9cMkD@0UsVj@rO^MW%N9v|V z>MA02(;{`#(-Nh=K^<9L2B}d>K}S}Xlhi3$Qi1YBlS+5%ExRBymQtY5diu@n3*??_)NTHC=ps>*3u{F)Q7tn`*QzZS-QY}jKs{*{uMD@l+8{5l{0 zvxL`D^@6>1b$I_XCHr?n;H@1&PnD*UEQNi^lk@V`2<+UIg?)Md*T>eKB-0)A@t;Th zzV>u#kAG3dYw{?Jd$|vNJRdo|83oK6i?Frs{?I@&C~Ml1o+Hhdps% zR=}+6hW-CFw&3MYV7_!+SA&IqI?4erd7H&vbMX&K-bT`6`@c8#ZR7$k4IY0wN8jmcwLic6Wm)U;u$7gKsua?GcRrzTA&)TG>1NF0JpE!6o z&-1YdaYI!S2M#N7>0>6o$bU6!RfHxxAPM>M+~)l+rmsK*1!vWiJg{L_AU^)L`1q?B za+CejWxLb;N9}-R9glF{*!xR64XV08Z2Si?`>~QE4Ho%k_t?+k7df>=Rmh z{deNy8?EN?6_gB`#$UJsW2E`6>3R&b@Xf+k7oGr1)A(y@>v*hb{AUddPaJAaXU8t>)7~@jAwrZb(LD(V>I5__@9m!>-jHv zpe=wWt&$_9dw;Tf&uhEKe!XXhePZmTSoNP`dyfT~z6SIDrB8@^H<}I%2b&J`&MG|~QTrCHepuj-xL-Amzx2A}iI;rhhfUQOQ+igo z>A+PGx|~AkvIEP`CMzqHm+{0A8-ENV9b0j{SLNkf6POd31!u#oil*_OH1WhBh&0!a zjs_vCY5ec1z4tNH$1w4ay8B5IcqDe<`oA)rUKpzLR%k?V?+c-r;S0_>u4f;19sj0p zL2G}benLo735Ar5kVo;fEf7C&V^GP)gvDaxPc)7Hu4(+|v2itLB@Z+p#9`fUo~n1P z-6w*o_Q8t99BcbIs&!D)5<}jhP)D?G#FVRG_dkwEe(8*l{~hL2Rfiz^1FdHz@xYF7 zeEbQ9RV0<{+Y6697=+*A2X@UuoKal$)nK4C2O5Gkx71^`0*F2OQkWVJ^J0AhU-MKj zNOm{xe>J^Q=L^mfk}<~rkIENcpc$s2?>~l=v1`_B7J|@$Q?xC#rj|+=*Ib#EPdaJ6 z&|vV4^%tz)iQf9f_Ez%1FqYgOW0b1a2KWBhiB*3ww*MJCGof;mW%zAghRH5%*1)t%KD`7_=|3=O{~X{!c8Yzk4@DtG#%K1cz)@4 z5#`B~(Zy(O4F^{rShhlY`89YRlP+1(jQVz-{b2I+Dg70-;9?*>NdtJtmUDv;<)Q45vqqk4B~>Dcj-BQd*X zX{$Z<)xf z0s1?(FovWUUib_h(DaQ@Xp7}0v4cus)A&!*x9fZdmAdqM`TES-N9GUFnBJ^b+bftq zjOEqzve@{tS+oP-+5Tt8Pc!>Hn_%)XR@Ds7amt~waZb74!;F;Dg9T=gzz6AQlUscU z7asE`Fugu_KZa%`d>%0={YC64xPW}Ghpx7?bW?2aQ&<*~NO*fh^#aEr;t{$`trAv~ z{Q|k_NozNG>dBS%33U$y)!m`&ihYGP)5k~?K6CKzP59Sn4Om0gF#g+#R-ILEwOg%L zGvGF~n(;4g)u5HMMy*Y_w^%7FjeE@MwnnU8{5N9tTibxOtXj~FT63)`Txa9jZB+w% z>Q9xm83e@P*FM`?VC?{Qhmp_$X=(iPdgd4!4d_P=cOl!d(3)pm$j~CbiiL4&(CULH2JvqbEEt3gzpXS*v2y_9IvK1+ zKtA<6n7}Nw@yP1=PWH)%d~^wW>Wy42tAo9mhWs8DA?+0Wk>dHQvBp3%1f4^AOq+oj z;TiV$QyA?Scuqwfhqc?RB^U|C8_h9A9gVOa@uSA1XcjXKjcXq0GOxmGAsV}3HA$<& z+%Lk&RUdgHj&>{hRNSm%Eh=UO=lNXCSsXKZfpxJ(x=G$bSV}WP_F0G=l1}S`=95OR zqFTxKsAV2K4Dols&QU#w6lF9fg&)8e)M}y8jKb3?NGFaIc*x_uz>n~1Y{R|Z+G^T0 zdIcy?(v@Vc2Io%LIK*@mb)pTOm;sX3jgis(4xl}RHmwe!BF&_SXgsVxFL>BC*w~K@ zF@*p8G88_Qr>6!S!|aJRCIT>y`hZ@nIwGs*yI*y6XN8P;v(nIG2HiN~|&lWgcQ zKJe!cW!=f*fV|}8v+XP)#ePd$TeMEkTJonK-;7zQb=u2< z4^~X0z-PU|X+HQIGz34}2Ukzu3cMRu9OrQ>R2r-){2b6co?z|7=OA7;>L!vdHTYmX zH$sZ6VIr}FtuPtz4E`08Qwp>#jn4HzMFm=e16xDa{w1REi za1_}ZZfM2r+;CM-2RF1832qdqp5!F5Tun=`bJ8Esn4o&rGFh=|tm8(BwsgJoT{1El z+*0^XV`Tps1Va{?_aT5hI7hQw?d%2$;~FS@#;|NXgJ8|_pTZ(q2Axk4OJ#7l@UMpD z+A|2&EE6y#tYxOwGUEIUy=tQNPkRD%3ci`)2?arl%it}=Yk^kDfv+}S1AG;O4>$`z zBrNYN{_-hUm@&v#m#-nd7VtI9*FwHV_*%r*34EQ%*J5qwhnya$3C#{ZShxTyTlxNT zRUBMJZQZ?A@F+L*96wZ50dhTg4_D1Xqg3%cQbmKWP>s)Xqf+bmg7Y2FajFZt(@U=v zJ??4MG;>O+dpb947T}&yO;iCjwQmN654wgP>c!tg(em#WY zGswYZn&(>QpzwsgPk&YP8OMX`9j<=&)5 zT9l;5UT%c7fPK!NL_pa6Na^)Pz(@UqyU#yAA5-&F)HF6|xgW2lOcc`6KH*#p0qm-< z`>E20jkHf|bJ~dKGt3iI0zR7|;E3}U5m4cNt~7$dsPP>2oAZz!&)T&umiut^6R;qx zq&>n7nYqt9Pm8ot_ba8VjkK@&rG3pG2hS>LdOXiL<>1lL`_0nZjDTVu3E*ab((6G zs@Cat^>U1RvTDsxQlhFgQ?;gQ%PMUrEtV~F&$dh7Yb=|UVOf=3O`D9i>>Sl9Q!>w0 z+GnZOY}GnPwW?KXwrZWHEIUuN<|r?nuUd1J%sJY!dA3swTi9o=yTmU2hOz7-nX%+Z zzvV8qtEnq!g%@JbKLw~KTg~9bw)0_;v%qb%OFK}BDvhf$Mi|pGulnM4HSMq3_m|lm z>lLbRwQ5zWR+DPY)^<1B&TmCuh1+JAK4$c-$r}1D zTHjjRxe6NCPYc{pyR-(Cy`oHK=o`z>w=F~8cGc4QcBrxI(e70G^bB67TGd+n^|te@ zXs>Yh*`;?G?fWyd-<+ZSEg9Nx(b~1laocHu6dqB?eY;)y6(jRthRoaT>YrnA1~uP1 zZ0G&LSLVLUE_G4VD^J{=!S`;A51}G_@3Ecl3SY#1%r0GT_#V&TdqTysUIS06R!C`h zN=0E<+w!#SOoo(bn0E1Kn6~0*m^RmFm^QU&n6|lSm^Q9xn6{#5nD&!snD&8an38!k zOi4Hzrc4?QQ@)CZDf>jjls%$hTB*@6#d|bNF&zz4q(#Ft|Isk{EE*;cM8h;E(J+lF z$_X(VegcUv8m7`b8m7WM8m28h8YZ_y!v|nH%^e4uh*g2Lq)SVsn|) zoZ4!IZVyy%pq*w?e8>vDLp4e#we|E{p*vKoa#C~muob#9Q2j*^F5o!|-4&?rM{B8S zy)#hlLikG6dRL%&4q7qQx;s$439UBOdUv3DA6o0IsimQgKq0AC9f?5IR+y+;N!8LJ z5b6v#WU(6i<$=gHG@{{MxboQV0-(mu!=@&>r$d~${;ELnBfydZebuhlGJ6Bgd(p2H zYzaiZjYc&516)}F4NfT_DdokGQ%?1?g1BH;tfPU*WY8i8aAj8Vgkt51P-NEyA{R5+ zn}m#9q{!%*pq#3FHGQN@+qEwc8Dg$6;UZTum!^1YAaXlXyh|wV7YZefLQ~VeC*V*_ zD1-hbP)U@k@o|iwrTl=TOho*=N>bDXkzf8QE*RrqfyMubg3x@YbSvgjP30n|`iq2D ztqYuL>QdP_wAiVBHxa773!UnR0jca5TIy6kgI1;LyV$AzDEc zKbnYtT&K_uO;WQ>RKxjvAo3xmy${z4(&y1>aZe}`MgQeM}BcxsgMi5E2AGHlBnhkU4HtZ-&uz%r;fkA}PX`W$nRzZKE3 zU}S`ecHqkK^%el-M69M_N5LnY(k2j3iuI0I1@}8u6V8;WDEO3f4vA9kF8H*=&v44! z1)p`QNQ!cI!4c=2AIy@)UhtsmQ;WUebIv(GMc+yqjaBfF>Qjro;9=FL7JI?xopW9W zms-0e!=&ehr@$S%)D+!&lUur=)+!piD&E7lRZ)j}EDay1numsZEDgWC>Jl{6V`=zc)zxTJVru~L z?NtZSn5`OjR2@QNfoj}Y^#~eERpYLzm(WD2I>PQ*7kbZDw+expo zo!5<`TEJ8az9`bj98JPO_9zaHInFfv_^#+zMz%5iE}3By({*i-cb8oX-U#0~X?8{W$eJqi1` zp$>M!`?;ZK84m@+|EKV6M(gjmiq~3Ssip^%fTsVw zb2Z2)7Oe10JMwR6M8hA$m8axU0Ofqq;q(*`oXRS~=i8+g&MP@C!zioYgD%}dSxsGG z)i=+s9)iYFt>qj$G7+88a1>Y8axMU+g&_2h<;tY_wnHkTVbaedEI2RH#O&?DK1}TS zb^}F!L1Y)x-z4xr9kq3Tdm5YJ!hP zu3&<0A-IkR*jYRVFCP>fVOh$Ahkfu@Bloa~50VHP?x#rv0b0j5BVS;GCvdHJHmmd3 zk?(WoPjKbIxOi>BTYq^OJWx*Yq5_Ev8>RkFkx8J6hNt4nObdvK)GYCUS;5o^1;uvZdqJbNj1pU&N2*q-YN_Xmf=M=~6J0(Q;LLzz^U^Dr zYDYecMl}2ou59Di0F?9PTY%6*C*F7{Ktr+2up=*_5e@$uS7!Me0A|q?v+PJ@8c~$u z$`sWA$}gc6!xs{-Y3JCHB}}_aXxoUEGJ#)YuN~RQWIaN5t0AMEx}54;j&&6k9khOx zy+d~7Zf3nlSRWu(=Hj{N@@Ti)k;j?#i$eR7p{3^vC7gFICH!7H@&{)4i!hW-7vVHp z+J^h=$mzgG!)M{j9$83aK8jD-krhl)FBF@E!uR;%)BKPf8DfSpVYq`Bcvv)giGZ^Ewg&MrdAaE%q|>6w+h>z+h?*3s`U%iQu|B6OZJ(hM3u?~FRNCW*7-}@Ath>@ zzqTW{pn(krS2o~206qh_$r&RW{uEP^35xlTcH{|0eF;})ei49TW=Qk>l8I_`5JnoB`Uu(qoYld1W9n9jIuy5?2;EpD5UCQ%^6rI#4)* zwu<^|0%y`$iEa%9{87JEwbbEg!JukYXeC1dhomZv+XIo?(1?cLfh%kLD1dUlu!s54 zHyZvV6Onesw>uDdoKauImHA!*;NzoFl@kuK$t8;ImO$h$%x2HjY%>9I@pohD{ zsiF#75BE(@6_w_CxGSA1Dz5c#Yn-Z^(bB_R~;^MYZA6s@3UK zQ3?30YOTezp!FTqTIW=yu*JQgTI-!Es^VT!tuCjE68djd>nf*;3bsFCKf?oiw^K!R znPscyW~YjZu&{1!ajK}qD%H)cP8AhU6}ma-R8fsoshdMi)%A#j*}9o_svbmhfo_gD zRWqSuscvp_s;)qDrEYF_=FyfO)6E^u0@}6Pbn^zMigxIAx_OgRMZ57;y1Cb>qD^;; zZtiocXm1_1b%gGB9Oo=~x-U5Fls=09Rj#<#Im5T}yw90Ic|kwV7rftb{uPvXrGN;- zQ4~L}(^`&(Da4~;lA|*4^B7`a-Gk{+ACEH$Bp>dHNlcz5QeRaD{(95 z3zsR;FpWJLCNbe@xLk*S{967r>r7^?4LVm7j*nmngLDUp&jxKeB9PCx2JA!Y&$Fzv zsbxPGobD&VK!N;be&jiRN~AKTTtdje?QN?4E&3iKwbz|P{q%W%6Mi}Z`p&hJf$g{^ z(1|Z6>(2+;)OY^5c|RINwu{NO0jI`sG-&fPz2+I!cl%KB`7(}&GEG*4dpHxRO#FgE z!elkrF9grc9oMnkaXbR!UeV)#1#q|e(D=ycZEW-|AeGTQL7Ssglbs2-(8oShJ4cM} z&9v{l4n(&-7@S7a?c9FvZe`$5CY3@C2T!A5k&i-NtE|pOR??Kn$IQzYF`lR4KV!Qc zvrOlY8!YR`s?&MJPFeuf=P!Paz;4T9c^>kj7#hjD5k-J-{1kX&>2J|63cYZpZ?)rN zN4zgG^C2bS4!QFzYc9K{C^&;wg?!W`PYCj+ElA~wlHgSTq$*@-aAGsot$Y-6Qn0W? zFt`hHvL9*OLgxRS$C&ULpV58x-25ZVAgb{bk+(8>uj1a5YS?}1?t4z%{YXwX+^aq` zx}S1)k|rHX)i+4v_t%-izk1)b=h6tG?L*g^Dg2w0XA1wW>MpTkz5rTPt}!}XUi5Um zL-W{&3c;?zPG2A%`bs`a zzM5&tg2rKN6V8ku{} z`#Gpv#EInnO5FwA^#P@3aSY-=_yV@pV@|qu-fnw3^3v zI~BwxpVys7+U@Bpo63xS&x|w7F7o0cG2`ldW?Ylcj6tX3>ptgQNcPx6&Q$suLq-OA z3C8A2(-}k)VZrMXEzM7aK*cVPpXbvbTIp*PDepHK9oxN*%$$^A&Y}F8G6(kPNr>LS zjHtP|!kY_-;*Wi35P_sZVne>U*qCoFu5xC4**6#2=`|K1-HlSrTuv?2Db#j`)Y9ko^M=YS>G~5nar;l{7FKP^jF}YSrLKJU}k);P`x=b zo2jVBFC(9or0C6lqQK~!Oc5XQ_xeO+$CxTvJpx*kqp0sxq@V50>RvOemn@N4o#jl+ zt;MRG(~7yuRt(t+bBC^V{n`70y+=)kqv=o)^jaWK(eRf*M%}l7BIxgd(~kNgNG0DB zfrPTB8X$3*`aQTSwj?5H#4f~EhRF_t@%?jiyI zQ`3M0IrYJ}dii5db;_UrXG}C{f0{F8>BavWCTa`uIOI&)Ng7TODgJ3F6h^t*Mb4z7 zrxsw6AML3vxGS?V8%=+-#9y>}@9zl|l5$ zlMucBB34Q8mtJC8p}lG!BA=_obUctJ3H~Zj^0LeT?ioXC1}mJGGc=^$0z5)QPMnyY z$uPhSzK0F|Nop3ao{s!o_aggd)*36w(x)P447^Vn2bPH(R)um0}f{y zkR07)+3yd``0zhtz}q|nyc+cmW5C<<8E`Pu02K*$1ZKSdpD|#MX8;N~{@91g-XtD) zb3OxZ%4fj-z*&d>83RT=1H37?%NUT(XTVrK19k*vyz`$ipw~0N%V6az#RI8)2K41K zpg%C<;6G!)BF}&xQ`_~{hyfSmGhlH(11<`j^;Vw&8B6&92Bh<9=IXtVJN&CRgYWAe zU*?9Ck!${_sB$X33{hubNcmEGraiTaDo0dKPT}KZUtZJa7^O(ppMeaOt|uwysdPPA zISs`>GV_$cc{|`N)hG{~M<-dTF*R`BjpW8TOc(HGX9^+ku@7BXE3@O|o1I|3*(nIj z*hgaZ=MCqm-|=3=T>Rn$kbUTgG2j(DPwD@AJEQbhDdLazjFErFfS-E?csc5#I`P0S z@)___J_C;1GY0+{1HS7S;H8KMjRD`wXTbL}4Ol=wt!4knp3(P@8KB-&e8#rvOJ4H1 zRRi{+ZT0e|;gseOpvVa)9q>9Op$ z+Zivpl%WSRkqg@B<;xv*dG0HMJ8k}6sTQnX5!_`@$t_sknTfpg+Et3ley?3p19L9g zs}Y1oU13?v4>D$jP!cXc7yFQ1Hki$#s7-F7muKUkLE3R|w06TGrt5xmeN1%)ZU8|- z`_%u&hG@RTGzrc}Yp6mp3-`T^lFt(2>NT0JevItI$38@~%B$^JUSyRc&Jbj%a>$Yex;U$HxqEbvizcaMqZK+ zd1^DpPK?3uPrF=*cd zPPGSADtlF?KU*8Wl5P5B#xi+In_wTB61OaDC=hde8m&k9DBQ26``>{eErae48Kt_y zy_)fUpsryEFAe^fkscJ?A7}X|eMNV(sDoS+cw8ZL5y;U#1LplMV#+2#vU88mQu&^KfZ+AI48nq<&7 zW(-CRdUpm+4d&*I!D!ss{>-a!bN#qR_VLXZ5ze{&!QFNBqiM^2OCI@e$w)#<)-BWh zd%!A5&GrXM-PQRPwa(!&8l8LsY{3UhHxb7Tz77@3<33FNU1*S%)xs=aDUekUd`zq$ z8kJ=Jwe-$YnPVo8CjJwkL|nR~)~@Vb;wjZdJE~!!CGa!GCwTYZmo*u^Vc1N8PKh>w z?*SlU?8Tk{8o@c5_iqfZ6{aieq_7Z;upfxs>Ax(sxlwxp{0ng zO>nY-&491vZv<%=zhn!zmE5r~BQ8HgIDG6wl!jCcE}F?dJFYr3?t&To0}vXgVq{64 z+_og+3o@E+ZteoTC?kKGS)YnL1((_j;8D7)VYgB-B!fnFp9pi`1#8uy&*Y4)20CjR zl~@X{Qjy+7FIeT%t^xbdZ7qn&kNCPSdcfCM`na#L#4kZ4S@;eyf9S1h4GHt}XGmU7 z!c0l=+cq9y?tx3@xy)vWgd=jvvIO~_>g4ShENh}?OZohZ2JAzRw8G92U)M#ueT}8J z`5W){HI{z}jTL^GEYiklolO1>qCc>W&R~orn zNv=O5F3m}XsQJyRkX)z|4Q(+^{#3ZY$fY!wQE+9}T39pcQ}`v@_8JrXji_xS^fcKC zAJzB$RNwM9sscW;XZ=0>{>HGM>l8c*89*^qWR`ii6YwLyM8B?jSMTtwnawPG~mQ4%*v z%QuM0dMJ#*_ZrB4GNjC>R|}gm#XfhMGP~SmYp3dAYJv(PAhpvd15Ky>wPK&o^(HMn7^n11RGJg_?OLgjH%%wpHQJ%tQsC_^f&Mo2Ie5K}QDD1g@-j zS1p@%HhzB`O&!Y!OnsmhGds&KMB}P5a1eXW_)RvVVj)l4xo^G6wgMHm*P>%KIxOly z$t5(FbsqR>3`!5k&R2cpo;mdEo>bqt(=x1^3+p^CW!*f*cvtN-rF*`wjc@N~=usRC z{qie05El6b<7ve21-y9h3&BB@f9!Z)dIkp9Za-LCM7FLgTJNr9nHRa%!l-uF(#0Np zv0r^WstmY9S#4RDlCScy4PU84udt5n-r ztB2;t)#=guarHbNOk0DRY5Xqf3{Lc{G6N}6{)lCouCeiK8YfW7DfDEu|y7jn|lTd)~n2j>kDNHd`;hND=A=sK1K}S7k~>azx_36VTU+uq-enA zdsy?GY4{f$7WhJqv#mA(uQaF)+486@(#|ksZ323no%uNNQzd#(Z}A2v;8!(D4MbYs z@CfruRM=d(36cA-kJy z9&Q0v6Mfd|JAy#KK7-mIApJ%Y`hZHnYc)!FQ(89|!Zrct7?ZA?ufa7QO3C%E{ODz! zLfkyV+m$P>%M)avK*0Kfw(85qx(?x$d%#+7Sl~;wiimnvBS|@NZ&@NBdf4wzX)dH4faR1B(9fL68Hy57 zsU@w`cjy*yy+$eB()yG~sG*!&rN&4;fk^_2Y{weeaabB6TE)GzJVnB66!Ae7T6~U= zyAb@3E28Wq|KTv4KVr3Qtr^y+o%-%i%Yqxv(DKtFSSvu9~0;ego! zo|>5*mUCID#qBn>BnAAgL3IlFf~gtm2AUM`9dBS#g#8x7o)A#P@V+Vy zzsy|cDIvXDmI#8=1QapT}udqO}F!?{x$ewim5 zSMx7#D zG{siKoDk5@oEsP3fcI#3{flv1QoyA+=A{qjP{3sdl@xHfMky<$Rbw8RPCAF8`7Wb5 zAs~(@wdM{1MX++Nv^+H@ox`_j@gf^@D4@v39119c{~y$0nz%^Ho~X^)oOX`eYdg)Zf|;9+dRyu(8BA)*8ZzUX-|cjUQbdAt}X5E*jMI}n`wZ;Ga*fIrYEwLMAezdS+#f1N=nt-pDM0{%UN z&~HXAEQWo@h)D=224d9VTnMa9H5?X&jyHYVbq)j)lMburxmE z(Y>faPkFv~G5E$qfr^4z`i}4uuu7v;VC4%IVXidH2?71gxeI_6Oqpg94$Ojpr)DNg z)SocG7s-s~q=1*buGzxeV3-pE`kC{ay;w5|2h0}m)XZddn`TZK%}D|KH0tEu7Upil zoDk5@oZsw(W)cpVE#Rq{$?Rdx`~jmmDc}b+>f~k%^8v%05YW$@-|Vzz5)POx;HjC( z?E5wIGe&b#z%Odl$;}q#Ck%5!KtFSSvp=Jmgac*^cxq-c`&rFA5#NuZ50<2W#Ts>T zvxV6)%n1Sg%=yj!rq(PRFk8S=Gb=;$UrV(mR~d_v0`?kIr+`}wDk)&UMyWwd>$4uA zfX^FLr-0uzsHA}3%Md56*E~W2rx&ULVb2k8hCw9-oT*XDI%&PhBNTAdpmMgrY{!Yq z)*GV|0`?eGhk)V{vLJC-T3_`D1(dNWLTODic6A6Sqfms>@&=Ie%&!X|GmbK?T&zYQ z2`E-$FB4Eq{{J`tvV4zr#GS?=NdfQDD6%m38$W*LgN8XFpr1May4$Cjgahsp@YKwt z`CiTZu+f|p@DYtVx!J<}pkYo3=x5Gv_6IeSaKLN zH8Yv5KKJT3^Iy|<>?{KQ&7d|2_;-y`&J$2cT zsGn~{Bm~@TP@MvbLQ_jRK0YJkI1<<+(kD z$VN}3fWror6mX|Th44ktVe72J(!RkX&Gw*WozPSGRzuX4OLVU8yu}d7&vW`{U(k~N zqVIVIOPjDL3>sMp0naw5oO4pqqkf?}zMyZEBn1o^RGWZn45~xGPis{EOrTzt{JvDF z6Uj(I0@fLcZ6fjC45~w{^zOMtCn>E~X(_@0?+JLnQLs@!8ATo+2T_fyj|@Y+L0__p zYFYD)%;c~J(+0Ih!2JfbLBLxz3f~;tm7Ank@iDyepwDai4)+N-O=l$(tOCx^sQeS6 zBn320nPG1e@HB(kAfQOh;~dNSqc-Xc!?#iC@U9dDk885$yfFy)ib3T>sXEaRUK#X% zfBcm?Am`{iBntR*gSt|{Uue{+JSq~G8TN#L>Tey;LtUqUeu?=rV!f6VGxFL5e9@qC zJWW1t(%qLEvNi$L-&x3e97r*~Uvu1{?-MM1IgyXV@FSOp1$$WcMvxQfxQzNpum5A? z`^Na#VvF$7iV;|RfvQ5lZ+a#R=$V|e&Tac{P5*@9%T1&9XL5+z{HEr@2TK(0v%NowM- zvf_JfMSPjZ4}TmDIwrqPeZ0v)Vf}e{>#P- zIS#X}L%Q>ELzHKuepYv`HR^J{Q%(wB)?}|3S#1IeXTaJ{lsO-v3mOe=%Qe{Pp>o)O zuyyS(63PvEhk(-!DtVd)YYnPHz($S2k^HX1((sfg1(cyMU9LrKdhpkHPRJ&rd@7T( zN0TA=?%yp937`PJwf>iWSHx z0(u7JJnO0o^0V4El}6kK0Ywu^ECD@nxeEvKp3}m_a?EHhXU-&(r@+kih&kVvDYG^R z_;Z8m6i|Mm{cLcbAdo@Z$v$XE^2nBq12BEY*=@AO} zsSHB$*2zC&*e)X`A)uI|b`WXZ=@AMjrYJ&beas^iPz=NuHn$v>hTq!U`XTecxL3;* z6S0j6DE9q-wU+!WhKP4yqk!TXWn;cc5oVcl#EF1@=KM#?p1@<;PZP|FObU33L3Ika z(x8$8)@T%2nmjD6gdyw{aDzc51>Bgy>lu{~5rUM%M@5*Q z?3tJYgfdybsnZ1VqwU%BGG`05n$_CJ+4Lu)lbZJR=x@>TPew0zxqn#GAJcbv8hTc@v-Qbg#pg;@j~rUaJ)2&R zf8~5v?qPkXn@unMau+%|YtE*hg@Z@OT0+&J{g>j2^iV`)A+_gk9Zb(3?cKC+{$Oe> zJu);nfAiqj+*Dux{P_d@o2>a`qay^&-`vwPf5*}#T}u|v9q1n%+c6hp^Dmy?KiD%c z)|;|UEoT0_c|@rNyfI?S>K*P*Z<&YRh-q1)>E8aq^jsJ*Zwo~>?Az2o*oy`pWzgtN z^#MlWXL#GNX$+4HrA?!IxZl7%LxTp!_zc{e+BCLVwG^5h<=R%ET2E*=CkpJ4jV}VP z4yDts9rAZ=);-a(s9PEe-v=rul6KE0`pXWw^PKHR-RjUE-5T4SN4PXv2Qpf>pQ5$E z*Jp>EEx%J{ltn{NugfxISQ`R6PFKoLP7ykq-PdNgL*aGVoojq!v_li!Nndg81{!Ed zc%C~E%EFhqg`wL+>19Cf^e}r}H#{}G!kq+?XtV2H>qfV@?ud)O0u`O%+Lu?l(K(-U z-C;KxYQ<>E7<(^Y7oZC=o#CfL_dw`&Pw0L(8vY=tD?qo@wXZYe*;ac)0(G(Lwz%`g zTsIC|?JGjgK$xc^w7RU!Jv+a@-nAR^6?MbtoeJJ?a?FpqrZ_5pZi*7Uf&R&^?G%P5hr;KQbm)No}9#rj+GBp%9dveG*&jxGYT;g2^Ygi3g*VqntC!j<51KCwHz z49YQ8(P-I}DBJ<$7=|5oijKO`9@p)1qqm~J^>Vk2=xn!Sor^!`MpJcPZvL#(mz z^Dw?E{Gu`vIUr{h5BXN{Vah%&hPw0qo1PWNTYFvywnDhaN13!UqZ5>5H<$R}6- z4)8u8Xa4TnEMNl3+6(3tZea`w#Vtfy*+y6J4Bhiu=pJaA4ozjGX*FpnM0h#d5xq{~ zQBtzK5_0=qb5Fwr+4!?E?%53N48I7H`*)wp+XH57q42V7Z+q!D*W13naLzQ{7t~@A zfjS6x+V12ZgwqHeXL5KQg5ABISCt#u>`qmYcp9Q-lw&Ut3RBGCw$2SOu-=_b_Y!w1 z-Bc_F$o-+)Squ+7w9cLA^t~94Zs-4hL0X(ia00DzMCV}@qeudAvSZsiOn`GWR<={V z>}hz}cK&>$*_}97VygpT@jVD)`2FgmAdT3eqeqdsXCT*4j2+DO*-v+wp<@>V({(U* zF+^XNzR7h5+;eyjIR{BH6s`^3w+xwzG8Ro$$Qi_1bjoew+u;_T?%F#LKIa{UCfZpj zFz)5+0=IBZw&K^W7sV=d7Pq+euv@&66rCBm$+fQu{Sb;MH7J6K-$i42nc5qiqIGU* zCrmjCcb2)umjGPBo-GW$M0eU9ox*wURA<$h%1l z7x%eEFG1OSo|vLgoUJROVr2tM4mtmBYqp9g>nsdCgl!p%<}>wQXPXu zx;k`@(i5GA8QKVI%fSi*N^G~txfZrKCD=p&(jvV*Lzqv{We|yJqvcFH&R%wDAqM3B zCs}scym=w#fg4R?t{@HDZTKqe6s`lqU0@&u&fWGsC({8V9=&lLYOycaY1a3<8)+Yi z+X(u?&|C93B?K+JKfPwrmgMZm-U1zOv9S^OoTA4uCFJ}b66ZO$*_SO_#~P?j%hh%( zox!vlA>`$HGH+*-(OY=*8Mh4LCQ^QfizZ$gT3_}Gqe?K!%iIcdmOM|IC$6KIndBBC ziG|Cb#~e7#FrEVmVK6UrwQf*oJ4>awiL$?TU=t2chXoWSh(-cvTX#b@e;dD367vPg z6V_nCU)P7ViM3Y20pf!GQcx{Ndu6==~uXzzL`B3+vNw{^-sh4^=wKB4RW)47OW^l zJgMS=Dwl)sD2f!UuaKRF#PDilcIPFQ?i{-DD8@70c@cw|xY3<{5qw&M{tgg2*k)k< zQP_LQJv{2wQ5C7%F{w)+ddIRpHv+PGYWgIxNe8?L1h-m&|nD}`hC zmxy`W*^7{e%cAx{;=vY_C-5l~Fw1eUAX5R};1+G-iAVZz%l6YEKo&0|#V1WDCCHlP zF>p0u@S&9JE=Pc3$|~2*o5ypqg$uL_EJcSvr(zjFH)W^s%B(ED$hDWc#rJbA-$0Y| zah{yQ&=uHzP_j*+I+@TiKW~*W0_mx^rYQMSK*GJnu0iTrygElb?l-~ockuoZCu-hXitd^2mJ@&I*;`OAW0P5j>2TIA(|P+S z2H`A7?*%Io%6fMqtpSRbJ+n zHM;hONkkN*VNht-om^PG=Wp3muw|uob&Dn`8MahJQ?S?k0XBU(_SYJsI`sJk~cQs15KwmSPq(qr8N9qI0owAGT@ zk+vEd<6U(%O?AnpnnXiaU3=XHix^km&>635=!&;?#aj{$?Ts~c4bZTyf3$yS&}taO zdB^6O-rkWE{^D~@qNXk0r5W045;3bQS<{}#z_g^ccl2MEvYMMAv97gkeOD54mn^nc zrP5?atbg;C=Apr%^w3~`Pu_fYi~`o*0nbI zOsnY`?zg(?Q`_2bDAU-#X(VN#(chCw>>O6iiH3EFu0%seqN^j(9&cG?b@Xo@>>g;? zmV&OjSWWxFB|r^shOQdz$IDYAL+s1O?sQ^^{@Af-V0EKghPGQ{IQUt(q$>^QjHZ-3 zn_BD0mtv)Maa%{Ssi7;@P*dN~Zgr&6&8e+c`_NEYnMr0d;o6#bqN}mBy{nmo`Bg@5YbyvI+|;8EFy%%)p!!?+ZwF4p^%)WPBSYtgFD;0H>VKVux?GVp?!ToouI*2cT5$i+$WD$9A?WBC?YFYsidEJ>*k20=YA=fSbSyR}n-cLhsFvyWg0jPm zxHI0KNY*rU)zsIwH*|D#HP^IJyrhRlQi--EYt2|{WTy^v+`2dQ5A>(|F+%w8f<=g} z_#oWT*WHt{I>t5)B6hk*uQC2;?%p9QkrG5pD!qMZ+4C8xKJJ=Oi z`i)J=j+li%UC6%3nD#{X$mSGs)<_yt*X55nD zF05hrH{RKhAr{%DCD9HE4Vh6!3OEGev)ZvyxD-CF8``>cXs~vyuMZ)O6I^Y0*8Evr z%?-_%!%RK#wrz_uFimRhLO$n)wcR6Itpsvi>sY!2%f}bt)~c3dW!=Jsl^4%jG;d+$ zq6G^tUbtYv(#pA82Z!d4qU-#(F!JaKR-X9tpojW$T9j>37rl_M%Eq9=Mbc^W2CWMZj zK405v9Zn5O@Y3Emvb8%+n-#CF<{`WV@KSB#$k0|vR)_<$*;%xLYO#x66CV;;CKI-{ zHFy!osiwVIg(Wg|`+5#>lPx*ptsTKETV05ZC8C4(N8WnUW3)+i?;OC^m!^fy$!KkN zf4XsKL~ToL*rt&Qh6X!0J!6N*ZcmY)?%C2iw3%Xm#3Y%uHHo@ded{WY>UJJU+m2Li z_h_mPgRg_jH(`DqjeA`H>uYZSL%5}>s9K@TvKgB+Re1e%LjwaWx1L@B z#kV2>Q2cjqjz*Ixv7NAX;PHBfa$_6r42O_5GvBWQ#K=H7*X9w3Sq)Yv_TcVC#@Vh6N5g^F*2e4UaXUNHGoxp_mw6=@qYfRFWJFV@_A2jeA!EvfNo^`E zi57ZxLGtJ7iZ{eM%I^c%4pZGD9X%)&2d$bkzRti|i*_nqK&XwQ9goc&Sj8EelkB}& zn+P%wYA7|k@fM1E1bThf>W1|e{{H${%2ErcwNIX9`uZDs`+IA!pKdcdGiNeMB8pJh zINTeMMd@*ioXSfK4`~f5F_KGYdt?z5?L@niwuQ5+283QAsb-vZfT3Qh5 zcuw&)4S(@UXEx@EM3s>Kb!OEJqtf-2S-dCb%{FQ;8=*~&4q37eSje)r*!qq*&VS_5 zl&ffU{vtaH@=|m6u-Rbfuj87SLH_>h@%Z*qsJkCV+m#QtTJ33sx-!H+Z%8K z)6&w=l;Jv#OgzVQ4`i*mJn2x^NxcmtT&rO7rvyZyOAhCni9Iimo_GvLu}Y5^Dkv=s zg$jbDrV8W%NLW${Z(+Md+^4XWOF_J&Kb>#aI^GE%h_ z)g^okK@604_(>GgWS+L$w(K13$MRQ|Kei`*bf@zX%?LJkY|evt{PNWS$-w~}_wh!| z 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 v-x_J({?38I*#)zdr!`&sE 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 STZW!YBaL9rw!AuWz9$+n0rxf+rf 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 MFA0h!gC@NeBsrU|E)95kG__I|+q4vMk#ovgDs6 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 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/hand.o b/gnu-efi/x86_64/lib/hand.o new file mode 100644 index 0000000000000000000000000000000000000000..35a644eb142c79387c7ff3f4b469322314c67b54 GIT binary patch literal 52128 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 E2U)<};s5{u literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/hw.o b/gnu-efi/x86_64/lib/hw.o new file mode 100644 index 0000000000000000000000000000000000000000..f698cfcaab2d004e17524b9a44b4c35104fbe46d GIT binary patch literal 34336 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ΞG4N${}A|A_Rqzg%S83j>9>D{|npkLV;h;>-9c? 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 Z*@lGUlJ-NLO4Wa!^?$-q7mKp~{{>6<80i22 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/init.o b/gnu-efi/x86_64/lib/init.o new file mode 100644 index 0000000000000000000000000000000000000000..0e8363dc593f0b8e61a2d5406a2e97d293cf5fc0 GIT binary patch literal 38184 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

0_ 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 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/libefi.a b/gnu-efi/x86_64/lib/libefi.a new file mode 100644 index 0000000000000000000000000000000000000000..e9b3d4793479993a7414131f975dd3e8b9aef20c GIT binary patch literal 1122718 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 mCx`6d_fb{%3LH{1f`MSU-kiYs+ z;2G2}_!qaC|Cc1^VKhE4egpa8BLwb{oRb7Tl**kZ@ZltXzQ8Mqey+f`OwxKjR^VS~ z*eVkEJhGoEfrlu5p}?P^ar_y9A4UG~b%9rtKm1tWg@k`A@c%>oE{*1Qtj}wSf3CnE zp#1p)KZo$e0{=VlStjsr$Ub)od@cEzy#jxT#_`Jq9-)4Ijlhp2JHJujZxjFb1YS$_ zIgI9mtcOyvw-SM~-;4?TQ_}NZfuBzN`70aDe+Svgje`CK>hHX6W%}V%-;V|T0*Zet z@aM=6r;%MVA8HnBl)#rzxswHcHTmIL0xzU`EfM$&G!9h>{D(CDZWZ`1$j@9Y@Cjs} zHwgSA){nr)lOGs~6@`QAdnVb#M1g-w`3nVJ$$nViCy@MS3A~FGdXd2Usa{tK{1A;h z*9&|-+0PvU|BmeN5rIEK^Redyet_ELO@aT8_!50^SHl3;KNA1tpbmcUp-&oyx(-Gz+a~Lj|Dz27b*wG%>uul z_}?q=52)QA7x;Um=NAM%h3fk!fnP`Mo=)Q)>$!#c-6(+{BKt2BIDdENRDn+;`b`3# zOYL=qz{imN9}xH&vfGygzKQDluE4pzUkIG%!-oWZGx@Kf)L&T-FOmMo2>h?)&)MHI z{q-czLO~y)@~Q-0P3?H1z)vOr*)H$~8u$AIelyYkMBw+3K5r2?+xY_m-$3^8q`==M zKCeog^ur${U_HD@{%|6tGu}$_uMl`6`Hf8iUrly$tH8Tx+<#r-6!`Zj{-D5rL*+dxaNd~woxmT#&JM@#1-^{h@g;$uO8xg8fqz2t z!ywrm>v=itM->SCYwFj$4q*B_sei2(^hc9_?iKj;q~}Wo{v6rKZv_53lArw(m%EPU z$=S5tW&CGkXDbAL9qF0Z$4q}Q2H@Br=-;Axogwf|q_=*7UqN!-C-8ELzaj8d)LsE9 zhvhkw^fOD~e6{}lrFlD~dJ;H5N={9NF_q4pY1{f6cF1ND~@f!|2}IWF)6 z)GpTwd?@wnR|WnQ>E$q*r*OH=q=zX2pGy97w!l9jK7|4wN%mAN@a0smlLY=5*$>bA zSe~y*{x=2v8nWB>1imd-nU(d4z}rdxUkbdzo#5(xT<#jOw?$NM#&4(o*e39EiT^Hv ze?j`ZS>UJX;;dH$en0s!57m#$ok8Q#bb+@Le!9RfAv-xo;Ahgh;Cz99MgHe|0{=Pn zuOA6~3EBCR0zaMTKNI*+@&jW@-(0V2sC}miocrf|fj>v>QY!FFlBZ7KPf&ZU75LX= zw^s;!4cXx{0zXLY7^L=L`S+23A0=>y?Cc1EKTPeCCvbdD29Fa2zL@0MCGa~)zB>i} z0Qt8+34A=&H%R`B<$s#^mkIm>8h=j{_~+zjt`N92S<8Q&z%Qfzew)Cr*5ua10_S#r zR^abbecllG)JdArrvfi0JrAcV*Y{rXx48m8kMMkf|14MYUnKC^)Q^@4{BqKBgTP0V zJ+unEj_Bh8{}uV`a|O;HCfXx#hwSGXf$yXEO#&ZB^!Esy_rV_*_HcsHjQvW(i;6Ek$g#v$#;!6eIPX4G~;O~>1%>sXu+T}Ef zlRRe&{5NFhy9Lg_eg7kY|A5vnzZCd!RPLPupF@7~QGwTx-+Nx*ZxQ~M!1PP<+_+IjR88kj{JB}p1jS=`C$uAu#@Pjn(nJ4f!C|)A)8;Q>ffxk}vtx@0)k=`~4 zd>G-U3;aWB$9{odL3+Mi;0LIEuM_x4(%bCyuh(px~_l{EjEAn@z7nysS+em3#v`+F=;2aQt|g8m%pU#kUv2GO?)oadKY1>Qw| ze5b%WNpF`3JVN*{1Rf{*yiMTukscoscoFICX@M^!{l6;kLuAh%2)vB&uLOQ3^*ayQ z1?%%(@^?Xj^M3si0{;hQgk!qEf30DwP~eYHy($I%IkoSJ0$)h|s9oS+k^O8EIM1(s zA@Hwhe0fFSSCO5(Cve`6`$FK$b9Kf3CGaUczoc~5=QE_A!vy{T*~27(pGo~XU*N}4 zzdlyr6Q~`_1^y86sTKGf^4n_!eh#g>P7(O&RIiN!{{_|ST!D8}yL?aJKOpr*ZA?0{;`Wi;w-B zrTyN$WN*U-K9kyIyukUs<8*;(`@T*8~_Xzw#s@G!zUqbE6>tpVZ9n@dm z5cJS&>i9_Dr%^lpP2i)czj&y8=Km1+u}pz?=4$?91^zARnb&R1=P)X7wxIthjbFzL z{2r2LnZO%#vDQj~^S;l8RYueMd-eE(yo!1@01B?7;I^uzOOu5X0&e1o7L zLw@!lfq!7@iajOp6Up9Q7Wm7=|6PH9LjM0R0zZcIIb^afhvmEi18`&s{87q(gutI5 ze>hFxcv=yV{wQV5$>G=5jfbc zeB=+a4IJsW5&bBE^SioZ4IJh9l*8#wBRpHumRfg_*O zsU2Suco*TX8@So-9~wCF$ru7BI6f7)L--ejvz|9oebYiZAM58z8c#(fl0lENb{|5#B9r1a@z*T!;9yp#g zaO6{@m|4~z1ip~)mkk{G93=kl8aR^vnCL$g_|=4eX5h$&_j&&%a30qJM*P9QpHjG{L};MFH9EWPwj7{Aj|tefbNN^9*{FsRjw)C^vBAe>(A5Ch#qU zR~xv=r@_FH&$UExFi;m-Yd+8T82KT9Wf}LC^i`rv~l^`cFtdzYzEbgx_S~SnlC8&faC< z$R`g4gX2DdhX{Yjz>&|pRJo@N9Qm{n{qF_7j_?-^9QoXcCpg|VaO86j(Z46~+X(;I zz>x*_)2|I2`J~f4c?=sW~dTy_i3>@X* z_X5@m{AiLVX5d&Zx7TR~j(qs}$UcF$6Q8XHj(oVib{aVHxryj66!>+7Uu@vWhuiB% z29A9GMfCdw{te+jGjQa??RATRBcDo4gyS}WFDLwN!nwUJqxO2wphwbSv`_Mdpy%J$ zNT05Xan~>0UZV^g<=IH(juCh_;o}V)A#Shf29A6lC;EJWKTP->14rn5l7ESTBcB}F zZ!8h`NW#Mgj(k|pQ3FRlQKD}UI6oiRL^$g?KzcsKpbr3_&*2}B(+wQ?-$4A&7Wj39 zUm);z2){_+d|zp=fd_y;mwOH2EGK_a`VoOIBl({ad~z`(9B&vn%6|mS&)*jKSi;{I z{G-JG8-eqetS20$igE3Y-w&T9@YhJ5;|0$5#g+@4=Rd0jekSd!v=Gkv;oqq_UC?v6 zI}IH5P)7B=P~b}lzu3Uh-dN5n4IKGgPW0CZoZqYZsevOOuGh^5j(k2OKDP?|PlVrT z;HLc_6!>klPxwcHkEi+e`-HRJE}(Vv(4#>JI2ga0@FNKiKpK|2lK9US^lNEd9})EV zSUEVN29D4|@&gS5pGWw~20j$%!_@9=29A6-5q*ciPb2&^14lkllJg7$M?Oyw{WgIg zAbf{`BcE}!?%reI$mej<^Q8hGMfeX59Qm*x`=!9S9q$%6x8oCpb9=o&_4-`k9}%80 z0}6wK+i?vB;5dwM=EJ`aHAB#|oC^#b>)S{5S|o6O-nYoWhXOsZ3kpPa@2Eo4( z{2wO%-wAv_;l6y$kIS7%n%kzLW6F2xq^jKehj^&`h zxn7?LoS$#`Qt)3(`~x$ADIBPO1b%?<@dl23DrkL?XW+^A`N$;VIBp?!T`Sy-(oJ5T0S+$fu9S)58oL<>BYT#|oUE zBcDt->+NnWhIO<-k1`b!zR19lKfhN}C~$sWyv)E&K2-*ed?wJoN3FmQC%lnxmh&N! z=X8O;K=^qEA1rqp;g=dXmb;4hUm@^%!hbCAeT4s9;8zoVv%nuA{8oWKO!%FIbG<$y zIsY{Xo;FJpNcstcV_mUc9}@q`0)Ly5M7zv2|SJP zQG~Oc+ew~T20hvXKVMxeaBlZ1f%Ck#UGOLN)_Dd!>a&34xj^7Y6TVmArxN}HfwvR> z6T-P(xm5520xv)UI9?WfE+Iaz3;cV8zb*Kb5ua}a&inZz=IC;`y`CXHqXqsu!gB>a zl%Ct1B5?j4vpmANzN<-|WdiReJSO-=h=04l%Lwlg_)fw%3Y_0(I9uQch<>}kA0+$& z!dZTPuKpH*^Y7&TPViAbo(C#^M&REO|Ca>5nAYR337p?I_>gdx=WSl^&rP%=_KTsD zbUbSie2l>PcTC0&f=?Cr*;$(Z^g-}B0`D8H>5mx%FBCYxpIJHxULo-3G<&ON5WGR) z3rRmG4T84_{71REfVM&KZh?PC^UwGo_!$D{e!XoFoNn8w`8;aSU zpWC-Z;QOiFt^D3C8{$pt;2Q7I*ESCI#5$Vt+QAjd%AQ)rMBRA zf*RZLJ3#q5+_Y|8Pi!N{I=Y%62lAm*_&EFe7;w>1ju{jk?eGm1N(Mo!{N}C=8}K{2 z`JG+ySU!A1WCnbM3ckIoEX;u;hv9zD7L5^8+GLM6C;fMq-%ny0v(Q{VZXJl6D8s zq>_I>$$!1#qV0begk}3(1{m^`dOG10opH|pW$)bsqpGg`@$<-;3=_yCBtU|%fEi2_ zLO?{Gn#qe9$ctnW0tz7{6G#n7noM|D3rK=GMJ%*vt)*gny}h=@J}oL*i;s%lTYITi zYg=n+zkQhcsMS`jw&nX-Ywvx|naRZ4-|u(t@1O7YDCexb_S$Q&wf5R;uf5M?=0fpQ zch$doegPG!+8;O|TF7Ho)!f!qwf~B2Zxcx1glwOTSM3!31b}q>OP&`eW%~j}D4$Ay zg{FLpcqX?$Bip~2G_jN0KZCZZ?7!uYq6hUmJmfz)_@~+{|4G$1wS3?Z-I4dm&vnqB zRb=B|a(i-*BoTqZ`)wLnT>qJ5u%sgMOx1qlpG5nY#KXQPx9=aoPj;2`%`K2usRHm6 zu(&T=uz+h8U3%GN^BLOc+g(*tZRie1UAw~e54%GE1!WFR8CR6yYh?1YxBch8AKLeH zY+7jewW71Dz4K0nhMy>Uyvu*V2vf~F`FK}Xi7Is+BzpYfef-DGq4+avLh+xpG=;8z z?Jm&zix(97i?1ups`M9E78c-MQ&@_7q_7P4s|y=&?=0Midrx6M?)Me$K`Q_c7gA#O z3jS%K{mof5@!y5wkB9bGc|-9Z)f`C63l%>aUVJ*_U-8q>{#q?`AorZmfn`BSUzHUy z*Mk!O7C%1Nj%GOSIoVYiPiyrTL7*ZCH1A}kzlcRDVv&kiq#_onh(#)5k&2W^MM9*| z^-tUdp|0A{wmx_@nWPdD?mHR#62#QzJ>3QiAECG~e8wO2AHUktf;VkAD@+hS zg+7OVR=fCjv5P~b_?xdz;PLSvZ#^3tenk%rKW22r*Zrer@tL7l!^KaoJkT?w!7<`h z8XUafDvW4weQ?9$?Em721wscXz-Xbxr~HRch8F+CfB3Npr){Jt`j4lW4^8u)4aGlT zb@s0)>xyTE_OB@o?f>LW;C6P+j?n&!(onpjjQe%ZCgm@%#$TEQha#cg{)z^)XbtTj z-a`_>=O%{s?V(=4@nsqy@CdZ?Z)5P6^dV1D1B@{pjW>w=KG#2F)`Obs}Ayd%+>Mt0!|?(m9*+O5dEVwLWqj2p_l#l=WcOP4806%ctgW~Jv)>hihq?@ z)$IT389e;Qhu_B|y!dth@LvF+me3<7V;e$CnQ#yj^>wL#0jg@^zYh<8U*|EXS)@$$%3_@O&*Rq;e2~7ogW}rX=~q)R zie(6~HHFrbm4)d>Xy3E`k+;zdei;9W|EALbLkD^avuX}>7J9?+Hy}q%{MV0A?njea zC?7xNKaOZ|AXFN>sqSoO-`Sy`KS1B;GV=4Gb>YQt3{4t+0Q8vnb!QPy!v~sSzgP63 z{P2OQv`1*m&=rgiX{ZXtAA5k7U;pu^!^3arK-Xf>-xzv=raKxvQD)Efu7jZyEzRPp ziN6ynej^lrGxY8s=>F(?SB8oo3mr&n3>7~K(H2sLMQCUh{mJWfq?AS{8q?6`;{{P@pt4b&%-Q!%byMHr73>N&o2KTpMJ}q z1vH>%(dgo59;8>c6m+rJRD=$M^tb$1Kl+w`-AVu4)7#ShYdEuc+n+TFWLSIFKI$)d z>{^e1HufU*48+CHipqRy zCvme+%Zk(2jt;@`p2(Z`&Qx&8flmmSOTtp?I4oi(5V$6!i5fu z6jCyVvX{&86<7!mih;j{=;A9Dh2m#I@f#1Kdfv%bXLTKfzb`;T#O?Sh1i*J4z|qHf0DI3<>1+{{x2$&!D#_(+bfIex@>h zxbRJsLkEr(l1)OVM)(QWJxegr(gl#>T>LnUx_{qKxjuyWJK99m`viE{Wy&V!1h#V%Q@ z5#JMJ*>B8yhnaW9V};YZU@-Ut{9yELL?fjEtqO^)CWl0-2k+Mr?n3^m$AqyTMzaJD z=~RA5KW31?q+{}E8!DCGJ}3g}%{)E!yswAyPlkriyoa>|PATROTD5|40c{(C_)!>@l)Y{!Cdx0s)XP;dKPY%ihiS`PeQ*>kJInDnBS@RJTne`#W-?q9jD)K0-qqr z3NUbwBEtOVSQoip=N+logI)jH?X+a8Wl{QI4dwzZj9`eTDt}e7JBAo}qo`k%fnHu}V{)^G@1ndl>@2Na0B! zYv2cEkK7JA_-auWjR=BWX-)i(L~%xz7on0r^~7`aZGRtVk(!t3GTu=nqHH=OzWOt? zzp@aSM^9k`E%66Yu|hK1LRl$RP^`q?V*2t>O~*zojfV@LLb)b>H?efVkrJCAc_aTnG5tA6zE;{f)AV7z+>18Ke?YEIJuz+_@i zQqat!ZqB{{{a6)>9w(^=Ck!LJrb`m+C$JA5V>qzDvPzs98c2(MOWTr9o zo-2jKCkQ>d8WgVlmCm=2--YAPsADdiRK(xrA&@6s;rQ!9pK`C%J{!}>r*ATWa*hPinzpjZ-EDT|JL$1#0 zeGTF>#@UN*WK6~|V&_Z8bx!_G=Xuw^MjeLZ?=z#C!cYx_XsAKb+zQ8CLg#ZE>3FW+ zUwpW54@mvRM|c4I#djCp#pPo>LUc-ZlFJVlp2jl-N#nmJ&!ds2=$S`Y78wU@Qqa%= zc&L;-Mhi160NQg)L0f}#Je3yLKS3ftF7j(WFZlB##G6ivV4Q+*{I|*{_@E1CgqQ(r z7h&A}IEKQ(4jXr@JzgX+VauXWJVLV76fPp0l#xwBu*v0QlLoR03=<*494Xv`He?X; zOn>n)X_)(@VICHKsV3opSfQ5&hen4}3Nk_gFcV2@!sH1#uYZDM!Pa~P58AVx|2}UW z;_qVEP6P8lDPbu7GZHe3yFrra8n6PEQ3)(63(BwI&K^oHDA7KhZk5dZC4#yqwBO(wX1l&VX?61I($Z)W~A{6Rq01XlZ;g=j> z5V-#xM>`@!pg=LkPmS&(2EgBrXYIb%W2V`zU_nb3591ER;Hp^nD1 zvkiHn;hw@RMlGE{tVUW!1OF*VP_sW$SX4Fd=b;0f%aQP*ngiDr_7lND5Cp$lK!O5~ zwdO~)@waN@FVp!_c=&z4|AzCyDm?s$tnX4p#;FO`u>G;Z(D$fK@Bupe3qCjp_xNKc z|ByEPYd_9aa&D5j5+b3EpckF3--CYH(z2U&A%>koDKz|k zy2Kcj@jnLrmB==pG|O(f;=qnGWqZzE74%n}4BnK6cY%-Tp~cS+eG4&XD|CeLwFnma zYa|_FCuS6#Ad-uF1T#r<%<>v%PT6Yssnh7KVR#_?>3Kx3bXj0 zo(*pr;S8NWq=hpjz=1s4k{AXP2vkvCJ5Xt97CsRmK9gWvl1C9hRF~xKp%yv?KZ%-` z|7k)Q=?-c^{+9@q=0aVb{~)2f4$6$?-U}4-HM?@R*l>5=9X9-tyk;BTntP)S_vV({ za9?iBhPS);>~Q#}P0N21G}dgGi#trq%O}%W%WXtHBSht_`~n+aiQqr~Ns}MohV_*JBv=Q(P3{Ol?BS%QPDU*J=m-kBIt}|@# z-IPrZnD>B4HMuR5zGQ#ACX7$xyTy0$%c@d~@Ll{0)+B~AWv5><>AXL^ zDD8m>_n<$a;)4Mm!;FUZPA%;O7o;g43eejOX`_b&M^F%-DNXxsfRxV@3?AV^f$ZaZ zW&>DfqFPI{re}?+eynqfdHQl2>s&5~iDjKvOjL%(?(tWE>>j#cXq|7;nK1r`kIa}! z)f33EXJCRe9d?UeLioLl_YoS?|7%0!>M&=5^(V9Ntq#e8T!CETZZJ|zlSQyMzDHP5F-sbETNd%xy6Y!rWhR;B#y zwVqpz;yX}UBucj##S0Pn%0%fiM)7)-LZWoLQT%C?8bs-{M)7x0YSpG?d76v~)U~LH z7=b$>qAWFwl2@wRVwfbc(0!fZ`!^K)-g|Lp-Jb*?bZ51xi0V~fr%b=m$fU2aA8UHa zv(qqtfO^rv7Q^R-jDBw>?%V+>CpsW5IaiW}7t@WQOG$3gbkOisaMQ4AN|q2!c_0MY zwTAB_OxCZ+$V7sSCUXu=PceMdgJeEp`0nCXUsA2el-x>Ee8TWO#uQH}ieD)T!Hrx~ z(%xa1XTdTCit|BZ;>c1H7~vh zrBW&4ari$-;s3Z#u7ilgHCaTV&Lf8JCrtYb-1DeEhfcElz913wKQMe0wEbTCBE&rE zRnYTn;-b`_mN(JldBeAao0Q?s;%u;+vBm7RVEa3}*)r248wws*m_?n;V*vGjF9k`z zml})elW9KsLOH+pU#JV3@!z5@h*%85j`XjaS=%RIUWYmdwDfP7fy?vMAf$iGoJFjJ zq0_%@a@ZAyPXCS>ATGkt>Br4kUgS4onx{V?>clipf6$zjiMlc#lJti}otWn74~sf6 z&C?$-XXS#jRZxDSp}%;7ZKMx(>Dwi{N6b3tR?-*Y7XCM zlu3UeINUdQ<5`y?m4g{@`$T|rmxY@HTp?->1lEE|tR&t~2BIj4mBf26a4QN0g6vS> zAry*4;nRUrD3prA;lL{>EE0uV13CD69vWwKcKfVh6hcz=V&9dZ^LwjsXW6M=Av=2v zuPNSArV{YwzK?Q??WzUIBU-S>aEzgw?4iu}1*WI3g6AGcWQSf-tzatALyzw{Zt+vq zf>hxal6b)PXC`=G5s-QgOAZ^7^jaR9^gQqG3EM#=Ot2^L8#V>s_Hsci=iXs1h~?Zn z!Ud7?c=vHZj>ruG8rWRf$BicajJMxQ9S99RYto3Pr+NQ0;X%9Cw~C!i&HHvSt;dF> z|Fd~3$avCtFVKC@GP@UXXM?>4Act?#o!$b1gIJ#T5U`_SmKMnk1AQ3qZd<^ zSJaj0#e2|Wmh5Gg?puUPzxN8Gx9qtYP}aKKiLszxU&+ z`RAy4s&zonU+VieroUIwKT7lz+FhfSzQp$oQ$44s-XSXXCqd1pC0?EER zeIrc&2}OUWP4DXVCLeuUm)}djQJQy>C}=?3{eIF%zeno#K8ri+@E4-u-sp>~bC@m3 znL`yIBnC1+PXA2iOoSN1%X^BHI{k?G0Vsr)clnl}f!|w(JNLF0fRKqeaXKbR@A1(O z0QcsU-NC?*=BgSrPmz5wNjX2PYn+A7@@dgoj=54}J6{=zi~i5(`rIWnw{q z?BmD2KQO_YxaWP4RQZN4-A}FQ3+Y&yQUJW@=TspU<&eJ!M{9}I?Nzjgh}I?(qr?hx2h%2|XX+E41dUiS{JPjeh*Fj)rHN9u&f!ER zj_H$ilX&ygOP{9u&Y*x57Op!(^r!+6(%<)Rky*zV6FGjo+J(J2#=1wA@5e z6zaaqm}04-h!91TCL7;~y`-J3``Ve7zCww)eT--+61Z7*>b{$p>=s3K+$N)yI)^e_ z_I2SEyJ-FjdHZzV;^PiQifx?Zv~UpDzdAI%ti4n-Pg?&eTw3MqHt|oTs=Re`|jWdcc})C zPy<$rv=kfizjs7e{h2zsRnUImAH3 z6OO{{om7FYXh=m{zv25daDMM+ap$(*N^Iurz0#){zV9*Z_Z98)L`%%_CA;$t->;eE z6-DwMkf4|J|t!274 zqKnyd9OC$tLh!r7@LkVzH{#BHf1PNP7A?kYAg`Az*LOfPT@B3&BlAU+#~qqghIt(I zqQiQ__ZA9%?|Zm&hf}9ehbZNw3<0f%kG?L*?=8li8!Vy*bDZG5!SGcv#VSRyjwsk_ z)6Px*h%w>wC=0K@#+dOlnuns)W4OJ3t0?7)x?WMrlXCYNCUF%?Y&U%Oqu}>`7k8HF z1pqmGV+-@9*YACaiKutcZnxq4BcuL;JGaY0XRdanRSx06n@l2_-DLP?0f$2%+_~9G zYQ}@aE$o{;T|RAOc7et{CX(50hDogj=Q|AF9u)lE8*pdNcLQJt788Y-h#W^W_!qS_%YVbT!aM0n|&yL7zsAzBu{?83wQ4Mr_=}uAuDb0O`FB6r1Z!YdE&74G9*VKC$ z`(LIlQ?zS|mSxz35zcYZK4JK}n6^jJev)WYg#((pQkowcz9Zb~i>lQ_)QWrH;~y98 z3x@A0rv0I!{k2WY#=ux&9;W}s$f7MWOo2%HTVuva0z~O|!rx>({=Fzo6m_qNl8Vlv zWJhPiq|T<@l>TR9!VG*fKrSiQTm4w zpmaj+#?#CIrPp#dZkYkfrOO0mh8dtdE+k45%>X5BayLH73{W;EcjGx`fF|umL78g? zehYhS5v8eS;47%>7o}-t;MXYa5T!gbkPm2&9Fcs}tc3N>A*1ck(=Rl$9tSMc4I~^s zTw(^kOL?YXGusSMHY(MfZw9VGswCCD)C|zxN2bhBW}pN;NOi9;1C(J)b+0r7l$uL*%gg{J*HYb}8TckjQr#71V35=mQisf0 zG#PIarLZ}RX4*kfT4@Go8r?2Rt3>H8QK~TmG;Qt?rCRik(lS==k4)Mf@KpuZ_f8_fVE zZ13T?1rFbC1}HDnbWz-F1}F*h%HkF?Kq*$1EN(ReltAUlVy_vX9H~GS`^>KwAD3;3NkQtz#s$3+C+spucBVw5>ZZ}J4Ne{{54zrY2?FL!=xEY`ox>XkUngLpk zH_GC$8K6aXi!6?q0a{z}AxzRsOW$XjC76Lg(QH3zW_j;1eow(6I`3m6zmdU4m0jL6kecG4kQ9w5Vr%9M3^Sa%eZjnF|O^OP5whJzC!KE&Ez6)O9f)~2rMJ{-W3tr}euW-R- zF1XwUSGwS87aVfID_wAn3$As+buPHU1vk3jCKnuW!ObqX#Ra#z;B_weY8Sl01#fi0 z?Jl^(1$VmOE*HGT1%Jc^_qgC*7u@fH2V8K>1#fe~J6!O!F8DeZyvqgealzNS;9(a$ z;(~8*!8f|#xC{P-3*PU7Z+5}AxZqE^;6pC>Qw&eAkehuSvuLJt?XTwDjgoNlV=nk! z7yRu!daW`oFXMb;LM~?16#8H-M2X{QFxtO+~0&a1^Yo<_2Ch)Bn(-FFW*IwMu9OxGh1!i5b z17B54tERwTT}*2xKAXPSI)NsE{_UE+Wco!gLZH7x)0a*sEMy6zpY%L^;eUqOgh!ABaK?7yc$*w;n_<94kAd ze6{A^AO(zog;sCK+By?M(6u$D>5XpjnzFBib)|SMJg}u1RlS{>zJ?2nG8*~@HNBM! zWf?UXa(yie9uh)a#f1h@xS9*CqOgGr8%3dw3tL2CBNzHbVbk>MA=(a6=$QUF6!wTh z=VS`yH;KaLDPKU%LGgNxT8JGcd!pY<+VP7wYVPbkF~Bzh;rEg$c%9L=m`7l#3G^!J zaa6I%{MtpK=nhREP0Rc?a1)r43|B-q{Zkf*#WmFsPyNXAh4?`gD(IiKrqB#fmp~p) zg}gNt@-}NK=h(9S#q`uaYfYsWXX?77rM-uc=Tficp*_1VX~IkdBJf*AoY^%SPW@S{ zgw#@(;B-e~p9*=7TV#Pel1Mp+_~@S(Nb}I?T>^2ZLcAyuN3AK@a9#7z4|kQQt^<&2 zuHH(m=IU$BLoe>ai%5CRn6GJlT;J>%dafQxJ9N)3&s=@A8`+q4=ypQ3rXBhQJ=Yq$ zktVr0-IC17sV-TnX%8k>qa%_O{pj>q-*p#u5q_y zrXRU8pj@NRn#v9;tAuOxTT}UnQzC`&2Q8ixN+5-tHg=d|7Dop~Y3s0d0ogpFmnPUy z`S4;#&~v4a=tpiu^b#^Hu|!Ny5Ok@<0Y>#Se;Y!em5pxfYj(G$ms>u1e8tbJP%t4z@yHqiv_N+DD zXQibPR?OLnj=p8KzI_)deJ7>TH*>7Mek=P2sw+G%>1fyV$<}0IWFES8_a(F->N(bA z`YA2*&|SM{_s^s9x$en3yMMl>=UU=J0FoI^*C`gKzl!}O;50=|uG@Fp;~IkIq~Q`W z$#tOS*hL+(XW~;iH0eL7$`|2df4KD5({%mkKwieBH_~`~7h(win3jDKxXW4ex6-B% z(d8ueTWJ@N*q4*IZ>I^zW!|qU-sj;1g}C(7rtTi!XVM7^{E@;-@NMP&STBBL<`b+g zQddu#LaUm(gohhx39(az7&C1Ot!Cz-lh+DFTH2J0!3~J(7E}9|Fvgd6_G|jBX*20) zU+}suE#E!a#3vU)-3$ZT{Y{mghner5hp9Z_E_2dfA>{uv2bYuMF*Elv^!Q)4wMUJ- zs0shbde`9|F}wwiFH!9^c5Nbl*umR2C;9|Vusj8mGBSa_&(ukG{TWa#MEtnHoJ!#3 zFiYGN%c|e|W`SBndYysUK<#nqM`*NpVEWAS+ygToO#01p-L?&iHu&Tb+9Zo;9@>J8 zCZc1~iY05k(_5Krs2`!0+}nmkH^4-NFm2{^_n6x@rB+|SKk1R>k{!yts%jP7y58wf z38x?Vo$9b5Q9T*@=Ol*yUeBNJ_n0Y4(RF8O11cnf`!sMNXi7ZdJW~G^s z@hAy2VnlLJI7_}j_eRQTTFtlhW=aUuCEIk(=kLh2AiW-4>eP*oTdv znS`t#!nP>QO0!<<619*Kd}d7?Sh zEsZ^1w;>X(L2H-i-i{CO%WFH=G;)5ln%ApV%7bl-(fTY}Qke8M?c-+a){w z2>md_d{+ABMuO5pm6wbZHv2^ql85?bBf&g!sNXS?hWcG`DxmbS1s6lTT8wNfjWYHM z&hS2vDE~KX`9HAbf6yqV(*bpfK|5g-y9Z55^`FU7o&Hd%+zu!uY=oc@c;XmA4<`!x zMO)A>K~-VXTaAQNUijf{Nl3QoXNwch|C)ijBpfo zX>-%)>}_eL(vg~&snZgrac1f_Ng8&Gyp$c67?V`TBC5_cCb{*pr6ERA8rA80dV&e6 zrB3=0+DVE||EecwD_r4yJ>TsLmkiQ@T9%Pd>KKR05`x+#U`3&6J9VyyoR}r7qjGRs z_g6Dff{BE2p4Ah=*!OHXqp+|Ts^|1Px7I?=AM1%zj?MVIo@#czu1{5FoK2^i`Wt#e zpsu8@)P)2Bm;NU`W7(Z9^s+;)Le&Tg%eK2PoSRpF6&Ul-!DKIK7Sq*s7BW|YB~$`) zkFbSK=3B^K`emUy_oRPCsJxI>{i;w^)Ev`!{$9?5^`y>&CG(C?IbWB0jnq*;(zj6g zz^7CBz~Mw6n9po))e|O+7=_#PnRHsGE?yV!(DTK*_>El&-m(sz+TLP#Z+F~9Epgky zM|ef2uDg#Nrif8Nezy2>6?3CHA0Vo(g*;t)!byjiH6PIvwxP3Goon=|?)h&^N=Fg@ zkdh9GuL|KVsN?hT4?~CHY=lSCs5&})5$#C3A>1QI%+_Q{q9)n4Ca>C>EKQ}!vP4aU zqz!8GupJY&pP4A}h0?1v2glFgLxqN;a;`;j&yuxD;63vd#?l;Wf15@07vy!LE zgHulwP^Gx?SJ6{Hogh~YA8W{bZqLVSndI3iB5b^JooMo0f*T3kk5k~DPr%upMQPv$ zxlR8#dkN-%T}yLdn_a893?fA>L2Zbuo{B1NzI3-9pKd7eD0`t%}c3(j!2I{(k zP7c&%uOSb!TSRok^g0@8b*V*CKQa}EF7-Q5r8jGJ?voS9z?Xicnn>v6L~l+!E=dr7 znoa+2pdVlSq{9v+i6##_#OfcxBLbP-LEKsG=$JSmQZJ*}t*(Tqo)GUjmK%o}Z1cz^ zjV3*x|#)x>MNTF5K%bw3sfkA>Qn@lLZvsGp$g;T)>*%|Nrcz~C<;O|RliBoov0D>5?Bjl*VA z5!jrIy38Ei%yf6)r*5hLELSUQaRzmfEoDZLC?-$QFUl94=U6OruFXxhm?CB279`75 zDZh=FCiRmI@`xw(m7fQTPsf3@b`CSOAiShGH-QKKBo4n7=QW(DT@T=BWa56$nFCaSL;)sJ^v4e;&9jNK~bORldxv15zqC z7n}>Z1;yf*$RV7QU=G-@c^Zkk1l?-cI`z5qJUklp2gZ@Yk}yuqegr@;NTGS_Au zRT6#4mS~*S#;du#W+sy1$S#gjlxu(Qc)-trRqY8FLv_;9Hj74M$cH|pl zK+%ihrzAAA(xVDCZ4p=JOR&O0DQVS{`58!ov9cFQC6xxmRl&<_78?|(+|<-|?LMjs zj)ohQhL1Q+6{r-X9+V`BPx0{%{EiPY2f8pb6=+NlDDsEqqpDOWu^<%H$#=!^_cq6f z0u>M97)ikqiQ)Ly&63}z<kN=>i&-PYkL8%VhVu)}+8{i4qQ>O4m7rimm%Owu^}B zLbVj`;BKVgv5ni48yni8Rz;rt+&xCU)v9^WmbyiON+BOOzT;i+?wohEqY9@))wMB^ zf;;80yIFSk4cnRx3VhQ>H7f8ui88f;-A7fS$`-3}Y}bv+`qAGF<0IIT(Q9@e?PJ-s zk7d_BmYo|@;1Q)p`GjvMu+>JbS71PPE__3kF0(~iufQuM%G5r->!>O;*>uecR6{Qq zx&?E?O30`!QAB}C2H{<*q}c0PM1k&}BIATf^eLyO>QO1KYpWHw!xp0XItgBHqZ$;b zB!N8@xWra}wE~r8K&3z>FM3p<5*<`-s}L*}FeSC7sj;K4^q?zE!$)L}s**Aq{9A!B zTl5VIR9f*$qzbP)bo60Tx|Ci>a}=nQ5Z#WIU%k^63~=YuB58A_h0@_JyUXo0P_?APbz$b0gY6U)Pqt+|%B{#RRTCG=FDW~RMRY9q$YwO4Ax!zV#0j#4Kt=nX` zN`75yP~bOgiTZaRRfXfWtgK$TJfBse@AD@VBmk8k2v6 zkK1W+`NX6em0-HuwE#6$f`tyMN`g%eYCwW}9Mqi>{IY}knFP}&ik`uKvIGkpRHXzX z4(fUd-t3_6l;AN3^HSnxwcsu`RjY6u>;Ns=x+NIAC}2Ne;}>-VL})s!7qkYs-Ue0iN5_5T}x{$IzR4+%CKoG`Leg8zrdAM(s& z(&rwPPb`Bs$SJP|0jTkOShYSOTO*Tu@!F%R^q9@FMe#f$c?&{Sa(WuOlfrCN>x)`k zF!grG*rLXJoY`0-$=dBuv|71=@&POk<7u~1egH*$;VG>n%?kV(UJ=lRQ!EAkLZU>r zqe}1Fgk!RCivFjPx-hgsZ*o(@ac8a@XFwtow(q+3P7*g{?n>ZXTaNV#%$F!6s=JS> z0$v*Mg+z6c1gjmC0#~`4szSt}yGMdg*r*l-K5aMMw)?0mJnPWCB0*(1QyV;!GT*ya zD*F?=ZBw%4Qg{VYO#O&#dAEGR1^9P6p|~24R9=AvYQJouIG}?sOO)b}qEGPE50CBh zxI}$;pITJvx82cmp9Bv(C^2g8dylOAm`yb9G(KsHhCh-|IJyE2DWvdfRhlZXAXMP_ z5{0vuEp9Q~@YsGLsrtb&pky}5?kA!^)sNW1ySY2?9;wG+M;`?~VxyWAsH74qI$Ye) zSdJ0J@q0GM76mGf7M+q_*x+X5z-6-CCcAyJ0{d-LlL9{~Q6DB`fqbL#W%Ay69>m@QGFV^u142t|vrch$`m zb~h0P(wlI)bgfN+iZOK)IjTxdH*KQD*t_cHBX&2d6_{>!)1*Mfn7Ub=qMI?BT-D*& zZW>iL6YXx+E709dV~TFZo*|&0v0b#PE|eYkrI!*Z`8l@zTGifbi`b$-w}@*~h}e?M zUWN5LrJ?^-J|}4(#TNwN7awLV2wXY+s6xLZtFyF2Z|*vr=At+&Ym@|VRRtVg<*y!3i1-ivaHS8xO7ezOY!uXqaInyWG-8L(5x{Yd7;5iaCz7-sf8FurC0u>uw zTdP1f$MH;4DrNkx9hI6D_$wQ=PJw@rsPSZ^?>nMP(T!`GJyQgs_?0?d_Y`=M3`s}_ z6<8!u<8@2C6vsCtXUt;-o?~-tR-l_>YSWy_6%zK@{F)WGL!!nLr(f19x^b;=Q1#K4+t@R-l_>YAYaE;3G41{YpL|qXMtDIj&RS zC;v+s6+im6Ji0JW3UoLAuf$nkH(#wlB?BZ>pqt~^sjO>zB^O1Pa!to#t8bBniZP^C zpyGjz`8~VFtP-gk+X6a`DF+f3aqg)b+s1Y`ZXVNEu*s6cw!|4e1;%Vtivm9;Q6J`F zisKx+c|?JOHmXU1ZjR%Psp5Er-F&qIx7nzx73k(T)?|rVD>hh{6}ZFZxL$#7j;WSv zH6Zj8pLBgoKEYLiljVUlPBj#mXQLVwm@iRe-o~S<6txMj7W~J%kL`c8>iJsg%?fm+OqnnXnU6~`PROT;Z{Rwr3Q92au6mti_p@4o zi)>Vb0?Q=I(5{oO1RM*=%^eUC*{3qe|9_)XD#bYjMS`2@VCZ#|p3Y2LIUfa_|RHX|YLJ5uYP;B7I3RFCV5mm|IIOeES__REw z`R|u8TZld)pI8$Wc#Dl{Qs7~UBH^2ls?w>+f(H^Y1wJEDf>4z_c1Rs}z@;I_NEK01 zebSbyMS)5V>MUYQ^%a{iqQIwYL0c54L=$aQ$q}?Ad1S?KWJyjnHpkTpTq99P5pLS0 z7}Dp7=}K|vX=tj&0oihbcIfoSJ-jg&t(?1#&oW*o$hiwKC1%AgyH9si9r)^Y& z0#$bqCbiVNWgEp7Dl70mY<3$I=&(z9`u2!yp~!LKuRy2e>QsU(l#{mHK4NXHmEc+j zm8vCh^1~yO><^JNE0BI+h%Pa=RB4(+D5}TY$8e0K;utwPmSf7mj-8Zr>f3GSZdTw! zHfpT`pOh#e_894aQ2cJR8%GrAZaiLgsG5JyZoXQ9N(Ok00^Ja)Vh2017_M7;+|ehHFHzeT=-=$Fqy`Bd*T)C-NivDYd;^*M@;;efy~k8}p4f5F}pX!Zf^6Sjx{z~M=O>Gh@WjQ3DwelH}Px^9px;o@jZT!@;U*gr?OHe!a zTj5it)`Toe*FV6Irr^~VWn5IAyR|nqcd&EQyt%#6q1ZrQ@7&G3Lvx~C-E-&mbZ^q; z4h;?vFn4oD$J`x@7Pc*1FsG-xcWB2Pkj-5@x4XBaXQ(r(eK?!BB_%{D8T@m^h}{GD z70MF)u{*wsEY=Bl4umM#LY@uzHg)%QqJUKZh0bUfV0baZ+xqQ7|3F{NF0}V|+i*u; zuMLBH`@m*VT()VbyC*iMyY~t*AJ{>8o3JywX-LuuG+7bfd^SObZCLqB_=!#3vOKGD zr&(S=hG(sLjc%Da<`mu1J?1vRrf(%Ef+*(T`6qgM-WRQMa#6|z_EtP6Ss4LKzud|& zLes4CHdt1pm0=DnLv6V=5%iN*S(BI2-SYgaHH{dow5EaeO3zvp^Q=ts+LhE(14}Xi z*mJp;?@^D&%E=`qVAE&$fuza{@PveuymvCys+`;$79#(fBt$j|k&g~qW&h^2y5(&^ z!OV*hLu=wEEq$|5KG~W$2mH+56IK>;-fZQfc1oB#$@S<5t;q)gHwYa(hped}n}lb+ z5Mb2f-3utgV`l#bk~epO_~)$Oq-CqDX=|*h_*y(du0kul6@-g7fX>_juyR?9E3%2@ zN-Jk2YQvWGA3#F6%^vepJDvh$psj`H)R<+(tf^g=Z?jcA$MQXG>FYe^eQ7VC4r2(l zvaQS+mOjVw4q2IG%jK3~p86OKD1ZmkK=xCT!qSIZc?{EJtF(ta>!7!8rFn)eAD-zk z@&zmHyMlaGYk{YTd#OP$S(bMjn16%^O7;V;tJVNHJcY4(H*~lKw7J%V7LU38n5Xql zl+2ui%w<)smF~fx?WO5YSr$FeS0+CpB0opqsD#h4((yFzU^IzDWCk(eryw)nlJ^P5 zIXP3PAB=X!CoJ9EQDXVvik=}JHi&0k2)c}zm2URHnovKJ+l}B3FUZkpm}!ufSQFNw zeH0x{Wnn@5bSh#PXsvZVnopupnj+Mn;Mr_VXU03M96Y@*fcqh93Zr(ig~%b!qfXHh zs+b<{3~K=c*9*id>ryVRvCg9>NV%w6*?8)n_oSg9t*AI^UC0EV7v)vfOfIfrdNe14 znI0W;RfsWcWx%D-eMSkavGPva8WYTgD=`~a($uX%{RDFX`8Pb7h*v^nvP^|-8E**) z&85(ih@mD;(epgy+Df;#|4G&K!>!b-+1(|X4J#XAOdmG9F>u77A?}F29?F4vv(eEO z8uTpun?T`UqIB!Yb1gk;O@10}?#+>nEYC|4%J5u6t$N6U9&^euo&b}Et=upnmQ(m? zwX&B%^^j$)w`PNJhUbvyPE?K{es~bACVA!pJB5IwRyHJ=vdr=?2f}bq$nkKtt z`iQMwV(H6ISOqkOW^9?2Pr#j`+-1$Cl9!@|x!pS%9MR=wYZAU|lg*CNGq-gm=zK0H z%pq?9Pc8~XmZuJIrsXTNER0i?W!-4`mIA$b0}l+%fqYNCHoDUpyaz6M2rIKrsuW61K9#C=KUW8IurD@3kiG zh0#p(KubWz!B$k3k{Q^lgoA-5vIv%E2L#WxtdOOb7FgE#zX44|w0r6W(r?mR+@~Gt zv+8XLePIw@2?fc5zeJtB;pZ@#2G1%JPLcg&h}61;|ap~$(>%KA8WPw|utC7ut-7;zUY zfQoeUAG^9xjkv{R6lXHbvl>m5byCXB!-Vuyqm%b`ffwS948az>D!CnI$BTOFFyr-A zd%?&2+O9h>V!1bd+?rt)?zQsGb%cJ1{TWXvgD)Y4`Z-?*8bd?#nC2<1U_j(reyj-Q zZ)D$MV1FVzuE8@4ZgMNW-E|T~HqB==<3a?XDeMc!4xS)8y{}=~P80L$VC!BuuDN%& zZZ3lP&__1ZpJdJikTZ;Eg0MpoVj|6&Lsqu=#obR?%fQX>c&8j(X=U&Bm>0!7FL=C% zT&*ucYxC+7pv|xCMmR0-=r4fr(;&&F?tY?qCqIN<&WE>p^b_d8{Lfv#NmL7i49b^v zA~8oX2IrWc+1&-)FdDvsGFr0i(SyWlIwPpbS9d>^EYEWw&o=8?J#Tr83#YjRolW@e zR$?&KW^iaXW-|iF3)Y2qS~Heg=g+lftg$XcZ1$|paW#I8x$fQF>gYEUQ)0#d2ocb+ z8bX={;I&lQtHjFwoX6a>7nQm-eb}0F$~u<}Gi;f;7$j-fuN}0q9}okDU@ZrVd_cvL z5l<^(oyS}umIUf;k~vw(Kgn~FT|V1$=w53Ek0*w4D%9+3WnTjIJO!AwB_s-oa8wX4 zCsni8S~IQ(ZuzivIdPb4U5=pU8D6K92Xd0fTu8?I>n_1|=3Y#nle=Ev*+tW!(0m-T zIn(^^F10k}d(1~MoQRX`ji0mFD|4(lT-2?_^xSKe(<4T=RzZR2&MnOQ$?2(LD%~*g z=z*@zp{I<_D>((xSGJO?n0KQ;TH3SBf6=?F>Ex=AIB#k+`>lpdiXMmZ3 zg7UH39Ex8File|3n7^_q?sO=AD=0n(%(>=oZHhY_ik-*EcXF&5E$DMZS<;$BL-RU} zSO_tZeHQLLX3cyGB+DTrzRyVxrumay-pQ#Mm|p@_HbPg7w7^#_SQl^{6K-+6VnH@C zAKdM2Jy>$5$Gg)JzThX{m}*%c6-5Ln7}9#svo<#u zI~nhKOpaT5kC8iUWnWKWGRL|CtS<;zxg(S-eI5IaOsu2X=1%fP3dnhN)>N#|T*AVG z=Sc2U;A!7fD>Ih07zd8Jmi2{^oIGA6ycDhvL7g8!XvFiTy*xzdgBlsLCX=RL(|^M( zkvi+NlzFeT^k&Q2-i6>wI~S}mP%jG$8)TvQ3WRqCG5}A`-hz@6k2zCh2WUSX66uRp zT9Q&Yyl1(m#eF-q1T1Txt=6T*_9vwl)@))(WFi!WFYr+4@WoDsn zU1F|%3(3tzE6uB0&B7R!k?dS$7PfMlc>iutA}Z&4%p#gJSRBw*juiP*>nNou#Khx{ zrmN)_#VpI(X6Y@KH3AL2w7JPS2rcrTVj+z-3^qn^*s|7myg%WU6bjQ8kOW4eaE!!l z$;tH$w=R8p&~ua=0QF=UefeIG`7K>;MR=vhCiZGekHD;7(fC>$_59xD`a+Td)$_ zTMYf+UJzr2UW0;Y2m3s?OW4KOMAm1eziLf9YFW>NhB6&%(3%KKAP2(Tw!&0tO(xMn zviZ)~LGn2jZf=86lyd{Z5&~%DGS855ye&x2 z5LZ2*MVf66v?9i4dXLc%Z1={+~>)c)(Oq? zueL5~wXz~WEk^*m2z?CnT+C?;jlMiE_W;x~535rlzf-u|85?QD5Wg zog;DDlNDf+6qR@ zpt`XNy42U#aH**((zYhJs;ar6EfTJ!QQO=NPZ>~s*7e1@yLM_p=_bM6oek}qql4Ub zb#qnY+P0QpV>nn2Q-tfP>$U2hp+TW01eK#x+guX~H-JJ}&>5yCt*wpEL%Vz1wzaqQ zpl@5OmT+UFIat#ctgLLTYHDh$4K~oA#QFxJk%k&=^-y$Rr*sB9+Be}KHP#K$Fo2iN z#{f1oG)F45t?h%?*y7i=?+A8w4nzkBHJTW8(b)FBfosCOP`InTBO306sk*zm9rf9! z)dNwC9%;R~s=B+m+oo4W5>qM~YiS?orjgK^hWh*a24d09n)cq!L$<->u*lic5R8Ph zaBnAms0P0VGZbYv?C#yn2Ee4Ku4!%xsX~22Rbwy`uCHt3L2Yxp0vsRnk?NFzwFc1` zPPnH1n&?nJ%{iD_nz$|2E_&f1hat*`25Z}C*em+BZtd$WAL{Cg4rpx@6vUjR?vlns z!}r#2CYSE&=Bcu#ePF8=!OVsGHuYmH94l%o>Y58G=FKZuTr$68Ucvm*d5h*+_ z@9AzI1ZyC>FvNo~%r;SEn)Z%s=FsVWv;!_jY+{7z*b?oyW_fR4Dg>G#v~7-pbI%-{ z{}aa;gzjn|+}Yc)1@Aukh6d*h^=`+Tg*h?u6snYbd)f!LsQwT(QPI)mDr*#to4T)! zYW4lmUgdcd&3*no>U9>lY` zu~xVh!c^m0_C!0hZ~$2|fKe7fH8wO5g@`+Q5Vm9R|4osd{ZVaAdv~n5Z$JcGEH+qp z$RlGNTRQtT^EzP9_BFvsMX0iV1&5(V7PMhUw7h*VS^pcTEl zqOYfiEmujek-}RMc*sGV)u938!APW0Yikk$B&G)~eLX{4qc!cDqCM0u+{qoYkYWgj zdIzzBMmq~=E@>4*1A~1C8EDkY-3sAlR80^bMh^3I=!m+EUD4MY?iIQqpeJSmi?q&u z%u_8GgJPS8;Af-2HHDzYBk-P!o66=5Sp%yc8am=9>i>&uUOjCHC!89L1{p+ zG2${lc~0044@}$?MJVcIZOHvKxn{C^uuLpV6?szA+NMZVEv(W_gXQR9uXvhp!gbMs zKFV%rJ(ZaO&v&(iS9cF=-QGSBwR1qXDUrF8Ck1p zV4!b6YwjIaD(;-sXs)9*%{9AWXPzTa3nRt)R`m7nB_iIiFkvXKI3L za1QRwMs`=4fzYgjf*htVhw{X+#`26LGQr2Gku#4XeKhI`jlxLwSs*c@Z4t`QXz-9= zi{VzunMxUwbQHN=MNnk9cm~VEHQ`8@0%po-q4Kk9Sb^@(c{7TfA5-w%aXgb)(zXjcJm&}5_|4n$*%CF2(1k!-CA zS0Wpu`QoHuUET1KzJZ;!?fw1H&Tu`ln?W_*omlPct`bI|Axtv~7O$fqgBZzcG$H}5 zej2ZR745wp(H^a$C)z$BLIlr$3fpqY5)qbu;)KPlBVUB`Rkp3FTC3F!ZQT?dsP9s# zX;*huXLo0?gSJ%(qNph<2vsxo!>V3HFPYA>!z0tK67hueviFPBeTB>IS)Mv%2Q8HM zt1X{9GoifDPAf&C;C5q51lR~#19oPZVPq}2^-J3JQQr-rwM}8{Jk@4^lOU1cP$q)J z7fiI8J|}y&GnMk@>T2xJDAC5QFSxaV!xqOD_Y^{K5MdOFWqVJOr=|!Aa?$NXY(fe_ zxttg*4bDVM%_0q}8^%3~=%5mi9o?}68<1v=RV%^>x{Y@3-d0y130JSxDk#wu%P!GT z5aVkK}OHU7s)YZKi3p7n(o;KvYgONU32H{vp z0@x06o)Hlxzt!E*o=&l(NLL8=N>5me84quzgBOY64P8=VsVMVE`s$+>M zj>(mVHpMCA3vS|&GbRnK?H_d3A35EWH_;l*mTQS%cgCp$OJ(mK9B1GiF`XDy4sGqH z_)K=I!%l?7Yv2P4CoDid9FN3gO00Da^>$En2v#(N8>1aP?cG~NoaN3bhOvL5NwhOz z=vbP>1x=(WwL?9zZc4gk+GVFJgIY_px3h1+PMTCYSBpFt2^6**S`UIo0eP56osze% zjb;zXgYSbi`rLK?+P_0^(Gu2`NH-opfzA984?H)#kdI`d}rU z#|Q%r+D9{d0O_6*@(_YFZRqHxbF}h-?oRAzl6J0GrQ3J7?Aa!Rb(mL6#|uedtZvB3 zM9wYurmLbmg$pD^n^4~n!g_K7(13GLl|Wek>bh)iAI85Un~+zO7<6(Vn}J5 zd$(el0ey4t&>*dia)OgD!{Asd`mPa^2U9)OSwuyBT}xGC1Rli$$mi8KoQ*`c_Pg>n zcZx1gc-#7MBq72OA1Y(&vL;EPmAoHu9fKndv0>iW5F$DxbZMh)7)%6z663u7oxuk$Rln%UuZ(Q>8e8MS&A*RtkR-$%G`n- z{oT$2u0oxA9@u8m;POZu>ckr59Hl8WS#T1gDZHW%nYBoOc>PG}*?2|KNz1%Aj8PMl z4KmQ)zoollQ0#*f_&fev-M+QEXJSSoQ_m0dD5kn2xpNUd^TM%(1BbN zlMttF@=%5KkvjmKLaMN+UOH@T-$Cz~##y0o5HU}~Z9Z$D0((;%j{e)^2APy~ z4$+eiyg0hG;S3E)rr2-NVvn_wxs&g?-}|T|2s+nujs_FXXT}UH4GrxQ6DmkTvGj_q zB$b8mjGTelDlN`C6%}rx_ z_aMKx5*A`LQ?4Q7|D}WY^9cU42`uT(WUQCFJ~)B1>Q@i+Z5?wi)ELDOL$ z6$#F)cFxE>>V|rHSf)04P>#M;x+?Od+D#&)zRGQBG@s2}ww<*Ki^Nsxc#7ytnz0vy)_w?=qHW-dI;A+x|L^U z-C~qy<{dE0GYf7`3uYGGU{#Vnm6;934k_-FnFU~x2Nqf7KZI3;jcX*IONkFIvfoCD zn@5PM%&cJ}oLSnQnFX!AML_M5^<}dD2D0U_xgxV{E6njY2%lvB^p}LkBrSi(FY~I- zEZE``%qlY~CA5mZQJ2R2B}u=Sc;i}ze{V`0|KK{?6uPoaZ%C`iEE*w6Oc-~@!$bMC}{n#HWGy9EWzSIV+$S~H8Q&pXz zk?!}%KF*~+p!*HRN@1r`a?o^+?LKYCHp-wjv`WtJK{edJbJ2*p3kx@YL8 z09alg?=Z<5qVZ;VS7x5Hj6>r{RYCnk@UKixB>u%k$DYB=f*WWq3|nAh8Zp=tA|}|g zD#M&jc234)Ai?)`$@dz-E*aUT;46Ky9&>D0YLlWF&EYeWPc`vbm05Z%yov1dp2UAo z;NR4ZZ?m73qMVyXNOa3Lns@9Yu+I%?aLg@|4Ok;8b=HQ~?^p%+h4dY&4<|24# zDLk|Y9$J8@n1`vDRsNru-Vg?dbbLwjJV88JrmwL~?U*UG-JJ-p&spOBWGwdvNE+?Ha7jN(cN#_;N z**pw)8CPle_J>_GZPK(qolQk!(qDF_xJ*qtNm8B3t4bo0{*c%JAN6 z1Wir;7DrN*smVV}9)p*Ec02~3T6a^Mltd|trY8SPIH}g;sF{RB(bVJ@DY z1y_wje;D{|!x?v)D|C^+rs|j0B9>n^QET5d5??0qy#4_)-(QV`e`6f{KgPl1 zxz_~dl~^t&Zq{fr>53Bcb7d@4KJf0Qpj z6N$G=CH*-2E-BU2XJgfem#~e+XArT+6d&hseOwXe%75?iOSGtnvm&@2rcyi7E&D?vyM^$Wb{C9U#mIaa!0t65VWq}BUA|favAtWRa zl9)oXgph1VBqT9~q9|BUA{Ma0vth5;eTrSNcc1;)p1nMKZz%tBW`1XPa)9@5pU?mE zzaO|e^Sx)zoM~s~PIm7V`7^=!gS(*c+a3A74o`$1<;y&KiF}g7*;NT2;&2`+!Z(4l zJv>(l@5z7;{un_2h4;dmM)R3_;VbvTAKwdahyP~%gPnZWVkyCVki*wI+-;YK!MT1| zWjEC0Q;P2c{tf)S$V+*D2j_glPQC|Y2_y1_bd8T0it{}gAKSony}j;mxBj2SQi$aT z(tok%eTVb?r|^TiQiKkcA4>m)*E@W;!>@6;tH;-kgy>*BE}!V|5p+%Tw>o@?!#f=A z>iGd&>TLq0;o}i3<#fKg9G*#Xl5Z-Ocr3r4!-qPYeY?nCk4Lq!yxV_Hz>wDak#7JT5#6mj`!`3 z{5VH{3FcKTe*!q?>&oBaaJL>Fa`d?VPZLJ_AGI@ zYtNq!ckAbI%>TNc-vej;6Y0Oy|F3(IzXa<7t>-Rqt*4EhH65CF!@5B8+rYK{XZ9lh z_g>^@u@j+#^|lHs5{0zk#!8a=20)C$2 z%fYuOek}OKik|>}nc^pbU#0jQ)Wda(%Og6sDP95jTNPgbey8F`f^S#63jBV>Bj67! zUJw45;>*CFQv4Y3=M-OvdU#3k`QWcAemwNNsrZTD?0q|SGZ-RVK@!P<=DgICJ6vgiW zPgDE>aJ~=cL-KtDT=pM?)5D_7k)h)p9deI_`kqMDgGMxSjGPhK0)z!!6zyH z0XXjq@FDhp0xtV7!sRWCd_V8Xe+~J3#V^46uTb$s)Q{|YiT)EIFVBM(o)11>>FEc4 zgyQtOW^?fV0w1EMONx!xDBc~M_ZRpO`5xd6ivQBh%JIGfA0jWW+K z|B2!yoDm)0+mC2{evgj!m*Q)XZx_^u*m(uoUH03BuYup-eN{e$hfqJG74L`mRK+*J z{$j=dM29_G@kI3JC5m5(_H9+XZC`8OiHdLE$MOplUy6QprQ*kc->Ucu@COt>9{g>^ zA3#6(S@8=npyfV5>T^5fWdBC^f#^S(7$3s-LB10e53m3oIf`$?eN>6!VccgPsrVDH z|7gXRp>!Y6qkLsS&BDf+|F100q8$Q z@eQzZjp9dwpQU&o*mIHMTTq|xD1H~({X@lNpFv)eEA=o0_4Tcie+2z(r{dEv9uI`Q zqUQ{Z-=h@&0e<^D#qWgvyA+=YJs&E59r(A3FGfGvsrbL)m$I;q5If&MzEc$c0`Xaj zpO5vxe8pjoSF8AJ_S1ei6pYyNWMIxxQ5VRIH2S?^9y` zC6G&mUBZup-|MCLeV7M_DE=b_`jiNq2j;WVd2#(o(w$~DEi=lPXJeeMR6Gy%oUZu( zh;LQ=IE>$IijRQ*yjSrTG4DU2_%V?GQSl#Or~G|Z>OuN>GW?V9v(O&~DBcftj#B(7 z)XxIN&&Rr`LGgEC|HX>`1AasHtHhpvp`ZMv$qDU!^(9yH)Xn zz~%4DqJJj*Nk~4?KQ|+NisA(*S8v77rF4Akqj)0PafsqeG494Fz6SLv`}$(%K+H$S zDfzSE->y-7AnN&c#h=Bvcu?^z@KgU$JcNECf2R_Ax}bi>VSETrh2J|u@fNiA#fqN- zJvS(R4eZ&j_&k*BNyYa?y}hdV7SwYh{EgW8IOJp>RCpTNt3t`k{(`)FP~^Wyf4E!8 z%lA1xQar>7=}1F4L{C@v+k+Lq8TK5h_~jTc^71y(a|`_QLrT6D?eeAKAEI9k!+J#Y zOoZK4ip%~>lj4n7j~%bL)Z+%l-$XyVQ1Rg?*R_g2iT?Ak;&;I>jYR%p{{`@q;}jo> z`-KA)pNjgI7lewQQ_%lsEBWuC=QPFT?;Lk1UI6{CE500l?03bBY&Y@3D2LedEBx3T z#XZau?TX91_=Mu8qn|vd_+s1#y{!1N=qLYH{A!G^PZb}^2Gh|8^(Xcp2l>g0e}eXn zC|-y5ZB=|7`say?N8ks}R=g+dxm0oa`_PSww?O|#icf%@{m>3luK8%kg_@(EFH*c2 z{aEg&Mb8sxmo_E;maR_jYQ=lPp4SzB1$O)4pG5zO@F!V{Ujl!)P;r^pH!9wN`?C8L zKNo)HBgI!_*aC>Z6nm;M-ghbaV^QAjs1K2sc9*xB3m=5^nM(c!^oL1`FGT!E#YbY^ zk$rB_{{!aDRZ4z}_yNWLM*Wf4EKYm(eZ{DZUTnpI7{7@>VIFw<$I;06n_x*9He+Jv`fC?W6>^i6~74WTch|-@JlU< z9|HNcia&z*S&BaeJr^r}8T#Q3itmT^+OGH+sLv-9zX|R5s^W`L&$4ck`rnB5{a(p$ zf&VdIs-~_j^1WbBGV}>whJ5!`{8FqRMl1db_9dn${u}I>t@zF8=L;2I4qmVLd+7fw z70*VwPE))L@e34}`~RyI=ig`Wai`)pV_thq@i_STeR;EB+k%$xg-R zLH}@Emv-5S_0S_&rd7)U(gRK;LIWRY(szUq4*-S;{e5P zLO;w@{0rPa9-#PD(37orGRDOm#oxgCdx7E?qg)ZiWk2y4#plDG<26UUbSQo@`uX{a z%R2aS#czP$yGilO(O&l`J{tYxam9yVUip{eP3VX3Dn2X2w%-?u%YE0+iq~WQ@?m`> z?H)k8bXR;k+NH1JeKC)R6)yrGr?~7RAENj$*k7RdBk+3_ia&&LU8VRzXvbxWU&sZd zW0m6Xpj_(|9|ga&N%2{TU!wRL)Z6un`!YCJ&-);seo+ zpD135@gn!Z(!OIcPXAK!(ym=FZ-~74ayn(+OYysqevsll;7>*?o{n~$toW1AldE_# z>^w~I7g29VD*itFXT9Pb7D z@zcV?{&RuiS7M%u zD1I8+SMD#x{&OIAvXWm5KXta^ixGcD@zI_=-cbB9_@D0;pO10+m*U@H9_c#B>JvME zMgK`x{A|=iSn<)2AFudvXvaep--3Eup!g8zsa1R>{9dc#U!&bODSid`C5rDt|G8W7 z5XRSIir)$To8rm1FQr$(nnUVsAo^9R;!7~D2P!@W^)pKGM_3^plNGN){p2YwZ&EK) zd=2{HBE_YBuTy+8%Jnk1k8A)k_Pnj+D^aeG9C<%U%I}E(Q1V?c?dbuyR~e>v zFQmAY^1Nh+a~J#sk>enz{z;BeNH8lV#$FDowJ8+^mz ztmg&zx6c({$I9sVUGZd$m(WmqovW8k9D({7rg$~hT?adymsZ!IT}l+c47}Oltp5q< zS?6%p^OCf$!&&|v$Y14fmXAYy-s^Bi|AqXs4rh6J{=zTd;>YBE<8Mcv^~iH4dW9)M zhscYc9OQ7W;!6WY%nK{N1$;k;b9yhu-&UQHKk>>;z zD?TNTF49r%aMmN=?_K0@*7F|ZYZQMAyx!rgCk1}5-QlcfY&@OlSf#i;@8<+?>4$$| zy>y<#xgF)$>geHoufzK1T1TGSQJyREpput%e8%By=f&|hhZht-5BwE}bG|ZP|Ht91 zXBXr@Qv6Tw9~7U0!u_K7B=GoQ)-LXctp7OhE{eB;rz`$n@O>12AAF?ZRanQ4QT%Z5 z3E5=Em+^poKeeZQR*V}g3^Pu84 zfIsSRw|!r9IO{nQ_P?Td1^9=G%lFJaRs12y_Zdz~>5%q4jWeO6zv3&vM=Cy>6Vfq8 z@dLr9Dn1hP?{ving3kq)_Fa`=^>1|Kxqj}){>i0^OZ|VPcpu#V{HFBFb9?%Yu=z+m zY==GjDt;^YXvL3&J>wMb13uB=Y`?5;r#qahI30d0Pw@os*$!ttvd%n0ajA!84mYM_ zzB|d`tmnQUo#;5r;cSom?(ZDM<#&Rc!KJ+dxG%U$arxfNQ;Ls({0EBPiT?H_IJXPi z-%S7c*y(T~zd)D-}N# z{6xi{0$->2!{Dbo+|Bn=aItd-?A)&SO7xQ*O3zqMNXIJ=g`MS! z&jxQ$d^Pwfia!m0HMsQie3JCI&%YgcF4x(x-#^;wWBtre1Mi`@ zJlCd|;@?8PAGp+mAN^{$;(frUJ9@fPzUHB)^f^n(uZ8^$jy&60iA}F&#TS6LJG?u| z%X;ZVhqE5}-po41Z-k!H!KGa1!=5V?m*1`3;ppj3`hSJ|eM){B_`8lg+Y^WV%nua* z8}@wW@a`mk2L0#bM{uz-1NS4nv+Q+g-?`A=Pw^7)42QFR*>@eMct5Nk4skf!e--p( zD}Dud9=O=~0_<#aAmu+Otr$;)#ZH!FF04#SlWXM5!DGS@2pB<$I)_(a%qzv5Zo z&ntcj_`eiCAN)hbH|6CM9d9_C^?U{Sw-uM?Ons&JRJ7xFicbRfVIq@p zdKP%R;-`ambvT||T%`C^@XHh6YNW&2o_mn*7{%r9^wSjo1@bc#{{g&0@dL1ru|V-L z;FS({>$6#Lsn698XZufvp0$e0-?P_&Oa0u7`nlGT=X?XG=R1_VJa_kXN1pTDhJ4>r z{2K88INUAQmkwt=e?$IT#eW0;30&-#?-LImPl@S}_Lc8@Wr2(QSge;0bL2VSk_=8w z&ox$jR))de;SP80Z%|y?Wu?Pe|E18gTJej)PXre`KZKpPIP#pYJTLV=CBGK;HSam{ zobQv+|DocKfd8m?-$9g!j$ak;3I3PE-Fisc-=-7$_rZKI%Hcpp@DOlmuSF>~eSss- zOKN$Jbb}+$<*J80&5B3Bmpk0G^EAbWW1cTuTc2;{F& z`~mPg6t^$U@w~egm%qn9;BdE|-*PzTD}SGUPw~PbY^CRY1}^n1`%&LJ@?4~57NFyA zhqL|_(BnVAT#oLGwt{z6{7&#>#cu^4p!oOTgB1T7e3-*sJ12lkxlT&6_APLDPm9dC z*3rZDS&DgQo#N8ITNRh})xC<3#rkIlxY#4lvH!%8=lUEw)Ef1L;`@Pr<8Zg#|8O|# zISKNAE4~^$d7{mS#|6v33f@!k7r@gU&iTssScW>B^$ZKsiH;G9XMi69F7&PXYf7TXP=;z%Tw}L?s`Wmd8z+;hjV$)gPqG1KLfnQ;coq(;BeNn3-Tu^{v-Igim%7t zbv7%03ix%3KLNf?@dv?g1DAR`%T|x~wBiqff92@ma@~q{`Ax|~+)JKhLsI`zpZy)q z^)NEi$_-RJ3_jH1Zhek*IO{nc@)Hza0Y2H`tY;t0cexH{JugDOK=G%+i@>Gcu)Ok? zIP$DNgmv{Q#m`Npi*%f(_|>@YK1b=7_my0)!ACos^%P+LYLdfQPk-z?Pf=X<>$Ab7pS;?G646nq_*V3X z6^cIqeum=mT&Zipx!%~GJlJ!i;?uzIRQy8l?TViR{*2-~!Cz4P7w|U}FBr|G^}M$g z&jo)UT^#qR)rQ}J8CKT!M!@J|%~ z3j7R-4QUak1i(7$9ayjgMiU2WT5`0WDlWf&ymK%70mbF-BaiHbV>p@nxI}BZIm`Sk{ZK9~Wji`rd&Foe1(sL{>T!v3({9o4jLF6l3{JC5gE`CoxPh0-Jrk_*2 z7JgFJWuoU{@b^`|;y-^neJk`C|HPYq6ho5^9MwRArg> za%a_4(JRlh7Pq!~S%$VWSz;nJ{DSq$dVYa=mJL@eUfdE{F0qEDY9zzema4`j5mIHN z5_5Dl)YD6>aha^~vZ|YwEsM~ruCp4O+9Fx>BInWc!usl^h%aeu&uVUIYL2wDtwK(b zy2{#?s$~(B^8fWm25I0SBK}1bPD9`qtlNc)zma%<3UJd;6M)aPuh_sAI4hpMIG-S{ zr{j}vqnV>SgOWb{y-DY%6h&#{RL;+6k{bJK6PGo#P?MG;1nw< z>ACz}>Ax=jYGPU^A@2#~|Gv7Yq8^KB#_6xw#Ana@hr0-*xRyPg*q-d4vNLJf_ z5p+s9DQb>GueP5zWY|wROaAhC4PD@{PXEQ@HU(}6Bze?+Nq-B{M+Fe*{e&hqF6rdz zLloeCsfL-Cj`SHKh)*fM;5R71I(7OoU#4q&s{cCF|4UHJ{fD=zCB68s zJ>|{W1)t-y=gD)2d79)~UY(xrZME+ryNY z&Uk19rOodsADUm-F=Oc1d^%0~oYm#8d$=t#zax;}@p%4|UTaHD%bayzw~Z_8s7uM; zFk@(b?zms_J95(to;1EV|K!J37Iu7h_>tL1WFMJ*RCeW~$pcR@R^@Lnou!b{j4kZ= zF#pLJLl+tSXPTRfT^qOC%#u5Pph6dJSUq&noOQbxdUH068d`8K8e(lh@{An?9ZzH@ z-<9i~{QjCLYm!fSi<6#t#Lz{_18J|kJu!Rj@xHjW_JRi`4QXoYTiEe?_O5xx>PgY; z3p(P4=0|mt=>?NtPdd$|4bJKl>^7=8v3OkO^_~PupckQZ``YqTnVQBuDZ0JBZlT1Y#M=u=jYqn=jNVY(D5W1$u>q|$1bacnyjv1L)y@Sj(@ZL`K*3M@?8x> zXGDvW-|I-U(oStMSjQgW%(U{(s;@Pj zf88%_#rYdj^Eb>)pLJ%pQ2yknS_T&SUXaEf_b~PI4DRHQM(e*Y^C{DpI(8IJE>2%D zt>DSHp-O3Ok;mirQ5&iHu%(fBuG?jDn8Oc`z`{i0VXrP^t~JS<=32 zFWLE*wQ*(!kIMv;Fok<#dom{{1CRWIbFJN&zXA2tiC;IudSvpI#(G|bnG_FM>(#r_N#l_dtBHN;o>9s5sbfmJ8nE7BH5 z!z*Jt(zheq6fCYF#Am)+$i!ln#y z)4M-TDiO))&Ux7a$IUR21S^)?os$H;AREB%dg;Oyk%&C=0{oin5OY#Lr^^zWL~XjF z9;^|O;vSsZ-*raSDle|YL;_aqFcU$>r6v+@uaubxtSC2;M0=&82U~8NB5rOE?ql8T zm3c-i$wuazNHQ#45O{%%v^BM^?>&^phEFx&Zi#W+G=3iw@fij212S34Z@UM-(!+EQpH&#YZ(uVa`bT|n&|tnC z>`Sc>N8{Sa(YH+aT0;EUzLYTpQ;g(BUnYwpw#k?I6UE}}-;d(Y@dY?}YLMkqjk?qz zmnb#JT|PC)10prZrB4mk8kq(ebtH-I1fTVi9+`v&|?vH3Rkf^Wc~RNISe>_y)IekDVljlJX>&`Pmp zTRRDd_(BUQ!_?p+I`=$;s)9?A#`Tc4h)>h`#HBVTq^j_RHkwoyNGdL^Nd<|+t%TXa zN~rRM9x~#Oi#S(+&7_?5b3-6uy_K~IkMV_mGYS8egj`oPp=k*#w$c|GNIW$drn4yo zSDO_xzdpBOYkZ+RBUUJ4M@Pj>C}vA)kUf-5w%!*y-XuF&l5xdb?Isy_Ah!scY}tEd zB%JT-!fz3?HGhGxS2dT@#y0zUac!gbZ1MGCE$BV}@b%^zNrwR!`T{qT7HiF=z7Rhk zIyKmX&bF)+u-5FM!O|wvRgz{itb*%(p+cjeR1|RUunLT@6}#1n*~r~)Jep$j zyinSxD3Tg{l+GptE}YGPwWKX%7ht-G2^CQkNn8D) z-%QfKB`Md0P3riJWBs9l#A*D~+2p`gWW{)TPU8tT%`_k90OhCnLlq{~;gX80(xigK z>Hg3PBXPV)@VharUZagC4ai>T4{)EbMZUzJ!ICy|GnLsU6nDLE~f{B$(glt6&% z(CU~P7}1v!r3NeLdTQ`-Bg;A2%MZte_k} zOT0A@{;Iz;LgMX#VXVqlbmAQWvyieCo%qi{n6=o7PP{8HjNfBuhk4?5d(95>#Crn6 z9;Iv3Op_$uXRp~|o_N2#W`}v=gMndBljM9W`A}dOzbj;sjXe?wb5+*a*p9%k*XUZa zT|)&2hbB=GQiD_JY)V;5fi!dCR_5{(FblYnU`NX56fr(HczT%2j>s8dzF^me!85~2 zByZP-!L!5tC}P)!!HwZr6v?m(HierhGQvjA4X>t%{bFVCyznIynPjh=AAX7=(`;nR zut_uk@?m>s=qJiGHTVaejqRMTwcYd>Uh#Rsu|~><4-5?>k<{QQI-3-1k4<5EoAEJx zLJreHbB+8FBF`qr@fq1PA&;r%@y|cqW}q1z%2qG;>0C zx|RU_qdpNF=}UQ^f~H>vNBJ_3Wo~1meVKeIXk%HvOkNnJAeUjj(ARV^HTWZ)O)mV# z4x5X4cSmZFEw?6(@dY@`)F9_?N|?A`XcWn(2FKIcBP5y%#S zg)Cqy%akGJ4-)S(x~$&&o$w2x6O0OeGJj7lE`OCVjRVNz)ewJ~Ej4&Gozrhs7rzPJ zZ!Yejv$60K7GM{aW^Nz2zc?#ooBeO0?@gj#B@zGC-%3SO+98nW^MwY`#nj*sI-3mg zST-tVTgepIbfjM05|eygjw2cFCSGE)&rDy4rPx@Uz1G8L+zA$riK)H->!v24bbWlG z^C^-Vyok;w-&-hJn5P3y_QUtfJd}p?wLZ28W8obdhjwT%4Tm^M#5{f(l8% z?^Lm-a_Mc27>{mqc+3~#Z-1l)Pn85)qX|r9@Co+5;tOpvvbT%uTTxll-`Vfjyi8K| zAxQe3FZ7v7`n4qON`G9lvLo%Ksf2bS%$uKpTN@tVJ0Tf7M z1=gRKo@{z2Um!tlQkyo}AIdjrizMw5PHXDcB#Yg9CHC=$+KlY6B6~W^va-HVM>qeQ zjmRY;aubViLx@P&AG+6wJS-yrW|7!vGqa_&ZnQu2sgeDP&gnk-JF1n73M1PC{GlYe zm>T3a+o$tuUL1Wt$GX#0e`unSn?h$(Q#CBBCN0Bya<9kCbuWhYldI)ZoE%HU=%Afa$=t z$FmZ<#<2;m^oMFqf(A)&I!hR*6B{Dj8i;GIKQhAPaM$h$AbY1j^r(@2T4edX zA&zoq=-p5Ezee_Fkxim|PiwSUm^reK`9uBbVrp;@osA7MSawhDfQK%udBGn#%%qwp zshT;JDW%!|ab#cjhmJS0CyVUnsH~|BT7T0xO#IlN!neq_hkfE7bPr=2`_%R~_~XxP zted^|xs8c;wy~&p_6In#Uh5No@^^WizHnym#((y^cjJHh!|Q2PfV=UX{_uSi%dp!2 z@`rheF~Y|F_J?^nG1kW70%2ZW<8C}Y5azY?G<&UUAk6Eyd>iW)2=k(iZzO2p(>)O8 z)fn!^dj`ThXcyUQX@T&C6sxnb-hpr>^~Yu#>k|lXrr1gwOAmx!px9cpNZ&xP{-n^D_p(@M|4CBGL-o^?7!+4}^w6R%%Fb|_GHa6SFF0--1K$wTkbv8DK za;FNr)y9efVeb0dZLByD<}UrPja3A~yf%Ew#^wgXyaas7#^zD8Q0z?`n;!`0(l~kF z#ufy^yo&qW#wr70cIe;P*rGs~7i_=K$w?UDTpo$ zgn0p#j%Z^b%xk0!M4JNP!)Z1jfoNMGyoI7;5p55I`N=7h5M3S!A57EbG(=YfvUp0* zM|5RiEYI2{h#nsZ^9(&7(USsUo{bkFdU7DllWrZNrv$=0w>JCGL)QfYA5q~j+P4N$ z_(cS^DlQ8QaAuy%1N*XH!2NvU6@kDylB7ShkuYsVncH<9%c()`;;BK_V?FR=fdFsA z4d6Z!>Yd8d&Aw&jUY8+*cNxjI>AdgsGOtT`Fz;X-;^$6Q1FO^PF(L6Q1RS3!U&BCtT!&OPp}2 z6E1VY7+kxY`NVIN@3+T<3(3cESx#xX}qWJK+{5 z+~$OrJK>d1_*f^r+6kZFgx5OZ6P@tMPWTije5w;Z%?Won;nSV)1}A)m6F$ocpY4P< zIpK3m*!(@rKZJhqi>`fR`mckfn{RW%H#y-u(s_f)4680D1kB$PGk92a`8_b0pCphP zyps0H%~0uDk;(UZHayn}&+El&AIso9XLk#O(gEuYcdQlsLogx%l=8 zY$qcI8EyGKN^g%meEKflLYYxDQDz0c0pm$l4ioeh`u1fBIikUm5uVphv9PZq@T0H7 z8zvHbVYnL+393sj7+t2k(tSQ&>dSEr0%T5D%<0?N9BX4g-vD#d4|xmw`}Q?Ajh)~= zKI2{`2V0tfos(Ob(Yc5g4)P6f4a^ihN0R*wWFwWzznp&cF8oBp4x_p#_eKf~`wsK3 zCeisU>WyOT8`P=b838NnyLbjE9&IEB4>EfS_5#?D!DbEFi47g(R)tL)9%B9u*-38L zV6#l^#D)*%{N%{ufN%0(x1}vRXfSX4$T5ZkzJm=5Y`SiZm6_5>#VLrdyG2>S&J3VbdKt$gOpoZrb2kWNTp4_BCT!*cb2fMVsSjy7DLWJ#LQRh*)#* zQv}BON}~-Bw`uK~gxKXQx*YbE`qy~!*khXgNmZWVom=*ps4Q!1HO+Z^T-dk3H!kd7 zk>MK~Q@buI8dJN1)Lu?}oUek?b17nDg@2nL?LjXXAvT$-mO72KIa*Y zmq47m*zt5;!1h_Aq62ahU5`dsNi=dPMV!7GQ^9_ZT|sK__e9SdFHO|t9iJ~2>E=dW zawEk7M=aNk{OEVCJWKA#M_Z>!J-Y^y`X}}9r6#7(I?F%Q>)LfHA!_s9ULfh9t_OFW z+_iviCFskR=1P#h_LNLP`U6c*U)Qcyz()e~^{<%xB)T5-`3idSl`ez4f}UfDgoaUo ze#t)QCe|6<|XIpcz! zHtWqc>r5+a_3dXPTrneUkbG`5IrSl~`A*44!*bKVU}ctDPhev@F*0{-C|YD1*|r=s zP_jI(t;Qs&C>c1>&zIot<>eqguR?;q%S_=i{75|pp~+O$!d5b$>bum1nnP}feGKIg@1N`loq4FnUs$pXmbBBrdd0o&zRFMbz5`6LT3A20J zBduq=FCozGi%$vkY>W2=mR%a38t59#qG0=!`0jxovnbRwpW&sH?5OzeCi#N+Abs{Z zl2C2W_}+#cYgm_r1@V0--X&pne1G~(Ss35{AQQ8+y=Q!U;1-{cv+e5JMhXJYpYU;f zQUYb4aw0`HQJ5`!+Ng_9cq@K5#Zym@A0Ajai+HeK&-kvs1U9MPHc}jDI4QmxN#xVd z4t=xu)W%B3Tp9@Z#G>~2o(VnU)8>)*CJM6p!=OI!k{6uM;fQu}eQA8xgh1&OdVvs` zk?;fCalkf{QGd#~OHWfHTr=^356EF{U-LQ&8=MVO&xubbMX7=Av*ObOtyIV(;(PC; zJQfm9q0ecYdm9Dn)>DYebPt6$F|4IPAUQ~xC-^SqaQb|syxWxd9Q*2o;K$rh^W)P_ zitjytN_>xmz;#sr-2)Y`$M0hbeVHkI4^lUT3fpgC{E+KNYIgiUy2_tJ%x7VIzXad5 zDcpVs%qL>{Qd<0h)UKv4t@6bu1#{wqvnbc2P~bysS15?@Hk)W=LM?R?u4rE%C2M|0 z7FBql{?ho7MEX#tqpU_I^oUP6gmPU14T0`In38jSPc^O5opexnxJx`p#`GjTwF$pl zgRD8}Y~yk=ClETx+Or@&ei_=mk<-M-7sUGxiH{%1HMENQ&E`&YKKYu`NNc3cTasH_ zUsk`Yxgk;%Xa-j!_4;j8m}xu1G2`;%`2!Zttculn3G#smRmZvASbuX zqaSWI)Gw)PGgk|Xvu9N16%^)H78I4|mgZ&WT|M(^Gdca>k9zn4C2}Yh1?ovEwF>8#{JV z#^_~@O`}^PHKUJhYK+)e)$)}TsH(1RU)J70Igf5?Z(Gt--?(ISRm+lAy42R*7&&A~ zq%qP`U(J#&)pduEZyrsLOc=c+V|4NO40^s#%^}s4+vwV6mZ@#6Yiem5y`s9Vs)b^d zB|R6YzPfF6RYQGME2$<}+Y*V;V}TmU({j|v&_jYovkQ$>w>5D>^Vp!#)pe2TrH3>& z?Fmq_Ws#O85z^c+n%a~#wvo}bRjsQUtLtcjX=-mB-QKu@-1lgDVp2ndFG6oaRcoE( zSKrh~7piNWxHo4`K`}L5$%4uXYW;~5JliO!VeVli)!B`$^`=X4a~Bkqm1h?gQktT? zf|(Viw#m!0rx)g$-jq8xx2W7JYpZH$D_B;wB;wJptK5br73I0}%PSA7$Sqw^Ifr`A z|LAOXdNk8!S;3qV>Y}B&=&T-_MwyhaYL1kxYHf=w<5+zg71DP9ruLTV$n^Hw+DMBr ztSq;@a$a_MPX3JInUy>oN?FD9_SQL7l)8m`nUOOiVP0uLd2VIyd~aS$eOn}VrRk0` zygaU|aT8V+r zrJkFrjCw&Ns(5-+Q(H+BjgD2+*_&7KZ`QcZO`TR26_*#}EnrOz4PHJKuhXz9p{G)n zQLdCtOT@DV7S=B|ZGhICL#vE78b;jLa+mYds}5_Aw5-ahYHn?Bh|ovX;`#=vL3$Ea zC1*P$m%T-0Np^XDWl3pqc`*%fuCvY~wSsdw1@<@#>0{0y?0w&P_XoyfPl}74$q%|~%ih@S!CAD16 z8RS=t0Xg}(IkRo+P_wiYu4wV7%FEi?7gsdaSCh%HG(3`QEhwYrMjC6HTB5_t^giyY zCB`lFyk+$-BdTtok(@eTh#G_|UG4+OG^1L(-$+?@0;)u)2OAF`OdMzx@$){hf^Q-?Gr%9%|wl2BGiXto9WQY~*tDY2wwFmmy|XAb{hKZjl3;lq+=(vgGMJdso zs+G=Q<}&8aFR%lG3SUt)C%eSUris6$ikvE6#+WE07nPG=S*SfcwAY(OtZwyhNi_;4Fyekjn%E56n9~yrKzN;sex8vZMH9zG_{%uiVH+T zid;Pvgr=vQ{OnSiPl~DWY$5&n(o8M|QlkH+M-@4$btf(i}81 zw6>8)q82hr*l$QjF@UNjJBL<+Wu5ZK%Puc3Cig*mJ*!%2iPm7Iaj&A8o~_9915Xnk zCSv30iz~{x+n8D0tVU`5#PuL{m~O!S4mxiX*T%1DcuEvXS@A}@?Ap=O%1 z*!n|mKk5KfGvzd#_b^mUk1i;qrASe3PB|}0%1dcL)1*=uXY+G(@zXd&6wL=#s|6FD8Due^l3BiDxU4kkZ#5sc>K z&MBq^oXIFQxp9`|P25~kW2OtZ%L%I4s7uOgXm72f=^(eU##tg@CCa(*SgxF2TwETz zccJc*ol{a!8mVrms$T{_VLg92uc*u*_A2+#O=BL3Rhwn3hZ#|JdX+nuU`N^-2nmeQCR1dAh@8L0}XKIEb)D*JO@?D0x@5)DSRWeTy-@X79~JAS(^rX! zo*Cn1)m4qAT1g=$=o$RTS#nYE7fx^Hz7`#qCB?LamWJNrvWmrB-%9SdplGHk2(|jm zT$;bKXLxpfK=T&gKJX}IoyG>U;Af8$>$=o>vKF%b>wol_(yIDaqmajNL8D%ruyq*u zGjeHxUrAAUX0jD-kV$B($+3B9~am3CUZaN z&8w>&!TR~eubDCRYJ%nXreUy4x z8TI3;8hZnu+sIDPj(lFr%&S@&X>T_7BxdZD(o>n)W0^k4$!PzE@BBNp1En*=nz|{k zw%Ta$*Rbp9e3!(dlcodH@?LfuEnpV&9jlo>%<4;S8aW%gCuCP8Cc~(E>r^L|(<}1w z?9F~fV|y!?1(U|~RdO4G+Yc_zLb-avOKqpI*T2Zox2_l|4wCg20?6~ zcDm7Er8(J!ITf^XM(tCYgIg5YWSLV@SYE)}9^%t!CdR6|jGH35pyaN&+p3T&2n%NF zX>?C+Zw*RwMg8ttJ*@J~*x>~vJ89#K&3fCkep_{2P16$7^d#O;ZFbahTB^x*yT-t> zR_em^L_6b1h6a%r!d{Z#Sn1fAIQ@+4iRSC_iZU5Nv{S{<3_)I(nArc&#|!FlW?4Pn zocA{gXylXsvYx#0P zP_)k&4`ap$w+VY^qnEGKXf-Q4Pu=Mm>3rI~>tu?be zJ8^kRRz{{*wMKZZ>ZHc5v(0W3rc(0ZH0egGlvg^@9SHd2h9=s@q*>WkwV8`5ip*>@ zC(>3$H)7N=qGhxb^<2LBjTBZbjx=zg3u>ap-ou(br-AMf%BrbK8>6m-tE-dcom5ok5w|eM!JD1EtpX!{Vqlc<_f#ojgB;%gtth!*6G=N z|tduru}ttxOxDW z(nfu&S-8rOGy5TQ>yb@+=F$n-lIU71YKk%1tW3(ZGew}ufZIw|9Bb{B{Tpyd!b6O&F&u&|u<@m;8Mty5_6YV=h zYC0J!w@Q2J_Qt@;`LkKv57 z*ux0v{5KdH3ubQ3siND%2BT!JyN~8-iTU$e%w5SQsp$;4v;o2!`rLZ7x^AY`O=BBx z3aC9>HWfGd)Mq`rJ;VEJwg*P{9nIenJ1r!+lyXBs%cAmP+C`$3T|;#JsO|u1`NvL% z-3e_kHP%$M)R?VM_+X>1WQJJ}*-pgnsqD=3s zXk3OxNfGT`&vpOaYnKht&djqs_Za+LIjXLphWBS{>toy1(cv_=ptQWg@tJ08NA8%c zANrqLGMpX$oFJtzy6vLaEVRsCD&0|;zxKsk9am!KJ1N#Rv!$xJuD-g}P7R$@@?{## zbnD*BsC?TwB{pe|6{GsY$X6YPQ7CFR0SYpY~Xf^;p?_BSn)8 z?+Y-Et$6?E!k$IRA4YG;(9z4VPIeXsBoScI)MpP`Ot;u%#7yr?d+f8hIruqhe`9dT8n%SeD zpYWFi`0Gs%^Oqd)^)K^22#R{XV@o~X$`oJ!Zi&H-^sOZRRv7*A*&OD(VtGj^XZv%L z($5MMCS{x%mzy-=jQANzV^2-UPMUOb;>@I5eg4u=(xe%WCXLO0B5B0*=aMp}KcAF7 z{e`5I=`SV)3+NX)Ge}!AbY8=sr1K2_%%t>F12d8`PL7+IH0|h6QbzWpN$I2_g;WG* zb@k^dl-G3xCEX4^dHk81lyWNR8M`2qlrrOqq~Of1b8G-Yd-&ilUd4Ie@7lv9svEw# z`+=uq?{*3pC(d7?P4&m>Edw2l`%p^s+ikHV{9DOA@v(d1{C(>^$uHas z=kK5HN&bwz@XPkXx9x@BL!8SihrfDAR(LLqp zU(e`)0_-fTSj=T~a^2DCfhA>csFTEAZ_D=dZ6p$o?h{AnVxE2MH$3i|XI(_O z4}Fj2>B$vQp6>A84$lPFdL}vCwKLDrc#r`C!KXt2jaj*DW8yUqE^2 zH;(4u1TcT6g~UlrIiOLE{Sp!@5hZvN51`t+H?Lu3l3L&F3n4P z)Z34!d^_|sD*h4uCYF!Y_9H5PIz7ULj}z@jls9o_q~mP+5#@)WT<0l%58Cev#kYcA ztN2>(Ty)5H0m}QJ;%gxPrsB85&QBCS8&mu)#rutY^|AKhqTbi#R}s{G3(z;g|rAQF?wu zeV(8=KaGu#GZbHi@wi3tDwOwX#l=qfv8LE_F8bj^N`4UdyNVxxcKkx|iy$xS3eo=u z>a!>85?+OVDE?kJKV659u}Z!N{OvNu8!%p^okdR*FM{akQ1Umi03DkZ{}1ZMh z__{;!0k}naMDY)i?~97R0sr={;_)cgmx|wr`utt->#X@+BJ7g#UJ1X{OYt{Rt|5xw zi~crF@uShMhbsOQ+NDVGlhB_}QM_NWHS`+A|D9p^9g4?eKKhU1b#ibr^{OvgQn`!MdFR9wc@Yl@G9pZQ2}e(o+GKPb)*&E#X3 z;w#awroq2TdH;g_OB9!Nf1Bc8LjFX>Per?*rFbUV@fpSM!g}>h#re@4e0;6=`LO>F z#S5&s*BgFC%5@LgeILa?WdS+{EB-X}k5K$ijIS)k3(|29E! z@ozbbAA)u%QQW?W(DODaJ`??Iv*P6$rg^rf;;0I1oJQ@D$9L0CR|6Hc{FUa?1#qUHt z+^_hz=qJx8z775JO~s!?J$$P8&yfE~@mJBl_Pvd<{T6i{&>!pzabxy($*`I(RPwjO4_vEw6ZGGy_-p77 zk0^dK`sWLZFN6NK6)%IHFBE?p^Jy~rsnl~T>c79@_hNpTt@sYue~jY%#C$%ESNsC_ z$x9W#40@hc{B!i@_Y{8{@h=sZ^8Ti{+`rJ%-pnE8y&B_)9;?=gpN{qXK*d)<)c;cDX`-_#b?0Z-lq5{jEhed{~P132mFoL{|odV zruhBn=aq_&fj?ZP_&1PWt@v{A4#maq->-ND>g_$n|3v+VunrRYAHq15{aWEapg%My z`D@UBwkX~g<$7B2PcZIe-&gccgMUv&I|v_({+y%ugP0fE6i-AyyiD=i(Oz#WelzUr z4SkYt2m0Yq#YaH@c*VP+KBp<3f_Smw%V5tDihqgv{DJ)zm@*5Pt1O4!3#rf?{e7vQ2BjSFPPwe>}?YE!e zt6~3firI9+p-=3eBKu~FcY*$W z6kh~8GZpWN_Fbs>WYo_F#UBB`Tk*r;uRc<|E7~I&?J4#rqP)3^KZX8qjN&V>p4_7N zx6mVgQS|r0y75jWFZ-)I6qj~?N%1dH&+jSDF9YV|YsK$FzNu&ju}Ag+GZbHl^jV63 zhVF~ZPgdN#uaa~PQ2alLk5qg;>Upx_ zJK=9_#tSoyA_{> zb;9F{SHs`FqIfdw`9SfT&`#ef&M#x-<1fV@!F<;h`lKDd1n;Z(Meskv75@?Se}LlE z7)LpZUk*Pb-&2r$i!+RwUZs{txt1wjgnB+s@kEUG4#juMzM|s%c0)d{QTz|AC;q8; zJM=%McnkEuqWCAMpAQw6eFy2MQV(yU{^?a0<`8}X+A&%2rI>&BReTckj8?o5dZsAe zfqIy&_(v$$Ld6e7|F2hE=8sj1cSrnG#gB#k=PCXy`u`P*_rQ3$P4V~Om)=o)Dg5&n ziq~e?`rQYgQqSe^KO+=B8-93#;&)abdPHj-U27Y9v;v*q{isDzIzim{!4gKe0#e1XvuTy*_?xXKi{07V`4=X+% ze)~DaKgRfaQ}MOvw;wCM5Eb{G;`?QoX7qL{{wu~~aIn2D{UH;6J5BMsU{8kPJD`7* z;uoUdPEuUHKQu$}1k`hh;;*8;j!^s+_|-baUqd^#DPDX>@-!#QHVty%8ydLAFQt{tWpGy@V4*ORqz8-${WW}FEd!4WN zg&4n=D}FiZ^Crcw!Mt;i;`^Z88?-DAAWx&UkLwjsKa>(VY={g6t`B;_kJDDL+C2_y>f@Mp1YA? zzT($|9|R(GPD_^71=^9ZFv6;RT1Y{YSB3biAy1 zDfk->=e*m|E+09Z_51+&&lLX@{40mEo(lqWqT@G*v!2s2?sh7EEVwUhl10}`^8K0a z4re|2(BDJxN#MO5&h|_|KN;+B)+6mTOz~f!XQabfkMxrR9nN}|#?gt6gB7m?pXPAZ zb361GI-K>$_rOXN{}FmBz`5GF%H-V*%M_RQH=Lxnkx%9}a%5!aUsoy~ zk9FhC4rl$<&~v-uRp56!ob}6i+~IK6a}(sBQ2aFTXC2OZ(~oFNAUx(zP(^Ce5>NJ-+Sd=cmne0x1&-dirOT zm$jIlN||M74L|FyvYsF8o@K*Tix;;hxF@#Oc)-SE(80xHnw~EMRY;yWZ9kv^EvkWOdH!>_Heqer}D47#HJXF zgj{}}@^txm-0ms=9OQq3>IYi3iPG;W|Lc&y^fS(%t3v0$mKf_4J1J<6M-H{0KV;ZX zIZOWXxq&Y1Dg7ObYzj1^B#)L=(w~R)Q2_+rU!;kROFFrF6$KLMzv?EQq|XpRd`kHR zvwvirI=%eR_k9t>r%wNWF!vtdRaII4@F}?^Cm}bG06_r*av=c;2_QuQ2`St_NJ4T0 z!3H4(q9Ms7H&Vue0&1+-%cw9qMIFc98>pb@IF7x{sN>8yV|N&P_gihBd+yH7_ zl5~BHDZTHb=H_O+8^*i*;okN7L!XlA2d`n3$6ZY(bbT1W3p%Idx>un~<>oTY_Zict zQ_A#Nv*33+@LJ`ZQdU`RnQ@DzG0%+;Z?^B=8|UT|IUgRM8D@MM8vV_C$cGNvj33B{ z?g_MR+ub|ngNd!%L-%B~&VHnKV(6ZQR%FW)@c(i6|Go(Vv9!px=X>8Q+Wi>(;i_mi zFtN`;Jbz#0^2b_32W>@jWN&$-@0DeheUC>@{qTB#Liy9jh4N1vmsuLhFCCW)_sVgF zaF33g5BH(3S(Z$C=tCw>77VX}Agb^D`d}PaRbMu^l(fb9bd+RoI(0q=syN8GF&e-~V zY~sBbxF2Lgy@c-04xn!6?n?iUkQAErRP2M$-H%cgUHy(?3ZJcA+K4F#NN!`SJ||?vTyfeAQEryB~ZZkL855) z2XCT(Wkn>D5Wk3r?ir5Z-@4_S+}Ni@U$jExPx#=-*6mx~&y76tuatXdLP0|JJeB{5 z2u7M7iKIRbVzEQdU9_Wh%h$dWUOacvvp}Stkb3T-U5Knd09C=t$q2k-mRZFl^l&+V(Zzku7_{x0B$^@b5)We(?Kv{etRIp=~#_YG~`p zKomXyL8e>3eUG-z-WQvVK7a%0{9I5uCe{G=$-RFA9I-`&mA1})YW*`H-&0L$y-&7o zhhiSnJ3pRZ=$2sq#SSLlerqTNRwgF_U=FByI+o_+7f*Z}hl z$ffs1W$c67Tz|nv=;GaI1WZ8OAw^M4EVtMH?c-hI_$A|8O^}ADT@!gOhFOv(6*+>3 zW|J$^v&y$jVrcHO!a4In#Nsc1F_f262T)3i4_}DJ(4?GJlnT=5%1}YhMuf~D+(oKr z#5o9AxGE87`iLC}rFfv3BW_117>DeZ?B6I2yDjG;mp(3Mp-ZpJ-t5vH+0$LRGkcv& zug^Zxr8mTFrVJnP2H-wC0U_s8az=cPz(f}qK>#O?A2G|%0%J< znJLAo_W(@Qkg{OVUa%`n$so)%g;Pq2@iS94h*eV2izh(a!72%ebLI9%fP9F9`6a18 zgM|?5RSiaq!c-4NZ7U6a*33w$A;xC0rNl_awZ!;1rH&Z!B1%kvQ|bq!=Rszc4aQL; zotfn%mcdK|F(L7Eg^e$z;9A=@;y%z}`gEex11Z?}DQ9Lp2qoaZ?$O<(JAbc9-n5l+ zu6+pzDV0kzionu9Duk!d-A8vn-2-$F(mj>#4&Bq}o=*2cbk7h!e`D{1Oapl-_oiL~ z`Ee2N3sW1W!5d4Bl>3R1s(c`P5;g^kJs9o-CX<CWnF;*`Z*V z?&wJd#x($ddx?vt!=v5ZFlSS`!3I*>06qokKD*tvX6aTm{6kpHlzre~r4j5x- zMW^AvkeSS(@C#Rl|03pchvG{B{TEyLuYzD99pm~hvGUggH;cJTt$h5tIX{Zxzs$3%DBQuCVei1g^mtp6Rc%QZZ{zh+1KKQvq}J%mt;m%Pbo`=CU7YIryFW zQ1C3cQ`xTrg3C_DMi!Fupv0=`S6LZ<0FWdbFtJ(iOTvZ3I3xRWZ@1gla*a1NU+XCa9#QDRs{EQXyo3%esX zALb>-w_46gq_st9VO5frNStLkJ4oW!O5$N9!PYP|MfOU|#+YD-uC{Vfl9`*K{A2|m zg&cz0CY(>Q=!Sp&%c4I4hJp^D6jHPNQ|!#21ILXw)y}7f_?Vk!=VMZkx#@QPZ-L`4 zQTPwF^YQERIh;1j&VL2CT;^um`3`jOJmwC!C*r73C@$U&@eiU9|8O62IJk&bbr-of z4_nTiBzr&Hb1=WSoS56oA}s&3<-ASu@1s2C%JS5kh?Vl=bjB(#S`tO9Y!l$(Sf_|@&7zfb@RZz zoW|WeaGyOMzs)kAZ9c$h+|2_IavFE@z{B?V|A1rzOYXAAe+k?w<{q)bSRHGbd(kwi*DG;kg^#78s2MyeVO>s8dL+^&I)7Mg*hio37m3n zcm_!E%n>|4yZ{)UIfC26-N59s*ahLsfyra$qA-3q~e#_xe7Li zpQB>Y?KEO|`VMX(hNth~R$_RG6Wm6Ow8-gUY}jnc;|%*datAZu5?oa$13zzYcQDlw8J}&QM4U1rLNf<$}-Ta4z(8PAG_;vrAJ< z8?y`rF@GvyV4@Qx^&^$~22@Wr53u|+2fup{^PiHx2IX;R_q0~vFy}^+!uMy8Q!k(t zMO2(3wh>!06vQPNXRy%0FZIFvr&MwA=b4je!eh~D2fr5|3J!xiaUZ zLQAw96VdCP1tc0#qRW-22;A&6kwBXgI1L4;vZxI4@gQ(F*T-m2@?1t+;d*l5a0_&cc-~#X3jDQP_Xk-%iunNvgk5s=H8?w5ToC#AVl;4!%1k6ntLE?ssKzeZj_Q z=3?VJP3L=3uz{zd4hMpbV{3^IH<`{jz(YZNf|A5$qnJnHcGD>*iAp7LoRaWtTs%2H zU^@7OVk=Wz(|10wvDIXF2#T!%*-rxKlRA z0Fi|Tcs!v|n4%LCKoFahbwifZ1sHe@chWsSQ7yjr3JkZLt4Q`*C3`!{qOlQTZnWj> zB9XmH9 zgK|qXAFyc_TlPhe z&KXu)&Yyq@1z&AqshH29q3f@OTm^Cq zMj{ROW~er~$jT@I8E>12u}du*wb}BOmU9d+pK-Tk8w}edl2@&kO=D^ zxRd8IP?mgH2Q8fCk=HeeSG;+~ayF9IDN5^d)S?{d_{SsrvgQ1m zWPhh*ce%1u8PJx{4+C#onYcxU;=xGzPiqVw9;wlp<4wlncbH3O$#{hjBF~yYVbLjGcBBOJ>{QN1;B}GB?Z) zp8;uI%ni50yMWukT#g<70=Ui6A|q^j43rP{?jT_X4z@FQ0?ow@CmcRZvcp$`Yf{`p z>@coIrMOe=a0Hf0Qru~F823I>-05~0cQ#VoL+$Wuz)5ju*kRn1NO9-bVcY~rap&6M zG{`}UJI@Z|3R{YMgdN7ExfFN49md7A6t~z8p9h>2ccC3ddz-oN5qms##xt3#u*YLh z+s@n~JB;1va^@B@x0AU_JB;1tdghiu?!ev3T$LTh(7%_tYCDV}y_>muJB(|?eatPh z!?*-|mbvB7EWo|WT!S562mRzN=2qBYT*bZ1+)6u)1NwgER@q@(uzf{eObayHVO*CP zCbMhoFfPJ^!mhQ$xWvj7cAXu@1yqi(9d;PkNV&px+Tkt0<_R0K!@Gek6t>q6Pk^~} zmar$-;U-|`3%lMfz$rZ<>;}6KXYCqcPqM=}LpKO}njOa3c$KhQ>@ZHcYlYovhjDK0 zG9^N{*>>6pwYv}OurptU0OhLKX^-;EJioL@;B+&(E^4G6Jaz(9Yba>LeKh>IL~3{}o`8*pALvS* zFcy!-NF{aRV044&Lp*eWhc5KcQ$6%_4?V*}&+^cRdFVMFdY*@#@1YlX=u!_|?x7; zvpn?K9{L;)eV&It-$P&Ep)Vvl760lr5xy67kc9T{a`0Q+9OgH9=-+$jJ96-k9=X_) zQopvxt^tKm@DK182vSR{&&TZ@)5|>c@}aogVZ31?9#1p9V&V;C0bf(c$dUPR`lx)I zkr+QZALpYnn6Y`iY0@qd8Mt!k4)|5GfgFpRd4oBGcBYcV;Ejpk!IEfgq9aWl?Va#0_l191h;vJnVo{04Y?-t8fKw6*sF!^6`6y*8H@S!MDr(#4fCoH zl#|U5>TiBF*OTCeRN+L9 z`4d28ic*^c;N2jNo#7<-W|G1yMEFFCKa9eqn9h$Tn-5amn4f`S5jNXH>_4}_9SIc& zf0&@lyb8ZfOBHu#LTRUpfU%6T#KAx{<_!aw`n583V}hxPl^7hq%kjp#YkqayJoI@U zYo=k|<~44IiaUESj2zP`bw@%waC_}clI<@On%>Q}qhGc>;4L)_&i#@kxu5Rlerb~2 zFH6YX&1qA=oK!WQl@NgOLI$C^xsYck$>yAdY`AXEOlF>lEC;`&FbLW3{a=vTc=NgZJ@k5a_i)rRJYiCfg7toY% zE|uYSMuKlUUG)ROb&mF#2@3}rlV&9>8_3_;3DC?9RC2L~ALg9&f{Q(1L7#_l2hzK_ zEoG$TI06mP1n>)c44ba0$u?Q!- z9JVpbTb@+T9CH5zG!hDuP((LErBu9dlfiVBcRGq&#AzpCLUN7Bgv0~>Y;nOzKgm2y z(W!qhJq#>P;!<56`UDTX)6 zL3*lbR%Bs{GX~VA00K`3+CgO*MbcBud1+~oP29|&JTNm7(lWA4JHwkn2(!ifGd)_q z*=d-?VDTAPlo&G9oG^kj&+?Ja*{(Iw7%IMy2KoYj#U}qGVCbMRU@=!jDSyVt6qrYhP)=ciu(jsr zT(*Gx80+&mYz@C>0W{;meW#hwy0Gjy>on7_axPc^&V~~N0T|CxMNpUt;tl00M)E)& zJ@jJvt}750{al$S8Wb{OWshWfo=Cn)fb9s~_HwwjymgHE4m)D9RG8 zDau`}{X*T5T#|=h?1|T^VN7L}OBRg4LQYH6NvOr?QaN6i4o$$I!e)4_<4bI3_H!Bz zxeA~l3ASe!7}$^<8LDF##$gE%)Ub>Q`(-w8{0x{zy&~1~py;)ZG`H7XQgQp_ z6GB^&e-y|zdQaY=81g%q(PC&_XKnO zOOdRWsjj-j-JtMdFf*RBB4@bJGDRLP(7;O?*n5jik*i*#NcFSfrg5|) zmBpmPI{Zyuj2sv@rpUuw=$K?hQ$OLWN(1esNM+PCk}eb8;(6J4S3W^gk?#pKaQUAV z3H;I*UZAYV*ZvpE(PYZW*Mqyo{Jwb3ihS}XbMCJkO{V-m&3S1u<>c$eTgA6~<8CYR zzMpivzj8F0a&otKiuvo~IV{K<8{%#&a^p|B-CsGHOgXvRHDZ2E zJZD9&`^lUOMPgxGS&>VAQaMv3^5e>iobta=jwVx1UglLa?7`n~yGfC&N3{dN)i4u_?2s zv~@JK_cpf}|J}@#f&!Ej1OGE&_?b6&-4Fcn7>Q88#Omxj{0G`(hyIffy3Fxnk+g$$o*q)K%|r5<4V zO`p%d*q81%8+`DZ2Tz)#($Y*!_NC47rTQ=MWdoUxs6{?s4&nzvCU&D$ zj$YYgOl#qgT>k{W>0kV4T;6xUVxQUL8?@GE`R76ICS>Jb*DoE?9RFM}I@jOVFEKTq zcorvu+sW&pUqY&?p#N5R{nHK@ARlF}Up{U_3}`D!^GPlPr(|VAIWrpkcF!E2Z#c=> zgG}In^#jG4KB&1MIGpNV;q$!;8d-}93RER$`v#lT^1cFJ7@E}fUqdZyo4#CPP2XVp zgjQwV{{WisegZcNSv(O$~N*@r>_sv-38`A*!q|AZeMTHN0 zQvp>9@MDm#VR()&4LQHPX%2mI6%U6DsB<0X%VBaxD*}W3Ysg_VzQ{LYj?etS-NXNXWs<I z90s_m2m6ns^r27^OdSe=g+(0dzm+}*`*$e=oBW?Z8!S8xylNt^zz9}PrEicu_!@3{ zduD?#$6mAuMu!;%xxOsB<1~<31HMDdfoUvUmOla-sW*|I4Im3%m)ztV2T7*A*Jy3P z0jd~H9MO=Q3vJv0DL5FySmaB$s%0oZQ{gJb6=R zM+w1H5Xn^+B~-ja+}=Rg)*%@YdgDRlh-$`ZR`dPvIHmFnqre1+uIs@ zz%+oZ-7PKfPSXyUGm#}3c*E&roD5rwE{w6>+`__-aO$pBDW*V4VF1uVBu zhDJe)F>t!Iv1emP(^^<4boTa4?(J9)6Y*qtr)zr)CW_tm#-6n*zqZZ}NN8&H@WzrQ z71hv2H7i!uL;K8_ZbaK4v*^aImL-iFsC{diiaUDR+;**~s*4s^R)S7ddBwu|T5j8D z@q)@Sqb}Ci9jjQ^xTeK`cb1g4oY2pQ!TR}x&b&fadL4svab^>()y>}X}%YN}r8083!`7i%#}FnG#Nz<22` z?QQAaSklNaXSJ7aodV>Paflogj^8$fNAEi0>vuB@t#R+O)R zIO#6w+DL5!s&y^h7$`j@ov?bP!H1ig^lC~HTS78l(h_TIThbV7g4k+pL#6H$TAH~D zFj%y>o&|Q>u;aA1t4glufQV>Sr7Ve*l`Li_(K{%ZDrS90TN5}I7sqDf(pGdTW7J~H zS~{9LyNO)b62pGPfrZ_LC^aP3MQbaUbG1}fmlQ`K$W&ugu#-!A+hc7I7|Onzdk;ko zM08zOOH*5GTT^Lw+X*e*)$qR?7T-#qoIpnxz?+$mujrhbkbpJT+Yti?6RIAD*NP6P zs5NcaS(HXqXRNJtqoLTInwD;fK5W*7^%bQ?Rqwjh;6rN-bbROz0At^ye$s{QT;A5b zZhd2S3s;Zn3g76A9dX)Jy_R4G!K&NP7F*zn6QjQ4_>Ru?9oz_{Q(aS5 zyQj0eq_e$uT}OW-(Dh(YDQWNQY2lvLztYGG zRRRn3;&NdRNTTvG+Te6bp4~zn?G8k#FU+}0=)?n}=qoT9Cqp1fwC=NSyEirDxn$8}Y z5)5!3Izp@lW_E~Rqa;#X3!{5gV+XV%Oq{SV>F)0AhSJq_!LS&QaahpA8mE&#o<3S% zQ)?_+(^vviXpgFBBf7SYLwq4Lx@vD#3B@I_I;u;sQ(hd6Rzrt3YSwP-X=`e1r#aH7 z?}AsX;|PrdwNY2Gqy~md8fvTSquBa1MbZobOOnQRZKzq%(%4PeM2f3QVdAAJsiUNk z8cI!=l`U(aDVD6}Aqm?Esu$`b3Y{-W9Z>jG)WN)7RaO$k`8`?--4DiZc-DChOyW?x za4ON>o;U!g*pE~!jDXiwxSD|Vq5(}XV>(6-L;~c!yrLB5(Mk$Lw=!u`O1hBfT}`7n zl?xxWCZc3rm*EC;b8~kKyq_M;Q@vq8Q>8(4L_5o&DzN!ykpK+9JkC-O7RO+rwi+hR z9yJt2U@^M{mQk@z80K4HXDOE2tLJhVn} z@dup@mN_ev#1z<-Awi}Y<)u5l7*4s{+z1*$1wRuzuMb6H=&JOnig)uR%rqX8-__S4#5<=Z9V;$2vAKt zw#37A!A9kqL7lU%sj-9V6lN(|Pn6>CM8Mc0rS~*1*1OvcYpP-0sTw@#+6BeE!y$~I z6;%tVK+xn1%V2UTF2(5tSJqMJr&JKkoz}+~Zk`}+aTgoB4ptGABvfh}+j__#_Tq{T zeWF0Wr0503!xFyT@t6$%j^N@08~h1#PU ztu3yA{(!ZJ#j7pDp_J!ks#e&_;R=5NEHKx!XcN&gIFRjCliKpewpe**_u>{#8=^lOiQ!4VG@VBs^0c?av9x9I!!>8;_QIwGQ!J*2$fB89}+Yd*OuoSh=9SyqtH#^&P!ESOAH&1sm0ZUl#gUh9lwNgeuIP zF?gm!f2dbR%jzIRxKAbq8+87Jf_geayt5{(=FwbfG*W`0m_}S$`BDqR zKC`)V4Nn3kjqOczh*Z+u1g`Q9UY4Ay=#(i>Gb%%ZVBnGC69vZ$gX4!Mmav<~=idLK zhHKX%TER}G`!p$W9gIxet9fixhcU`WDle>)qMcA^(xKJ1Q4WVzyib6lOaCtB)fT>b z){OxgCn(5qF2WJl?W@q`$}8*ZB8IljBN+ zSUz7n z;8ZKYE17wq3!~VwXnnMN7PZszZrB^f+or6F&az7CYwKXDS7#Y+elXy5!G<#4Lhf!K z?3TCHx4Db!gxr(N+E~__$cnlO7!6kzmzF{Yg8{B379aZ2QBO~Rk*Iw&oF^w3Ml0@y zh@FPUse@Urx(b6}s%#c<-sFPAp?OVvZx59n%2C=2n`1mLz;y`CUvNkQU5ffp!a=C3 zPO8OCU2X9xw4}QQOmMTJ94_rk+j^QhVT0b%oZzwAs_5ZMrEO}{RvgllEzOni6JxzF zuks#HP3oQ_M>WLOt%SXjtY*1c@njf|Un+~?WC*H@m&mv#g<+$7z1p1MfQ$!K+Rjid z*x}rtw0XTmJ3$;eWvK@3MoR*;k6Q*=G~!BxszDzL+=|7&Cm5dEE89T1@Sp{Y0eERi z;+Z`JFilJ)jj*AD6(wXi;BgqG*3jQ&;=_bGzN5w~gFQZ;7egPXttmDFtU(!DM5*T4zI5;mFH>DWIcswSdPV z-#u%9U6@ROST0(x)vfJ~HNzRCA?p=^mp68=lWkUQ=XwJbqaEbo9MaxmBKYw(Tw%k+7>@Yqj3O>v8OVo_$aSiy}H?P_>3ge?aBsVF`ep-YKd3$(YeyRmC+TT>5@;0b0i8M-NK zixXh9qXLG)Ymkw0J2p5- zhgQd7yDo;k0f#3JWL%a}^wQD?mW_B~Lq(uJ4wN^pYir+_e47nN>j~RUckZK|Jo(O> zCUw*aVNzaAI97z#&a~0OjN{8FcU>sctsHEr9XRYEqSbIl3Nup-4rDvv7nn;*4$IA} zUk!(Fz5JKm$+LTjo0_lvrB|M*!fycKGi~@iBKVUqK9)q^N|LXI@C&6O&D>OLm>V+9 z1JeV+?eH`a>d@=9;8Q(;hFBr|$4h-tIs$YlA%?LNKg%*Qw^^kbIa}>T8N1C>F3Y)m z*cI7V4*5mqRT)>OU*qfu?(|!W-}>vDZ@m7OKfm_sD;YV(donVM_u{XJp#AM=11|aA z6Z!WmhWPvKk&MD+Ae;@@gM!m{@Bxns{$dgwZGR}Zw>;{}M=zEQ<;Tm5VBdpsj&!P6O;3;vi9#PU5Y zvSZMBxDb0wup@&gEc(9;6E2dsGgSzVXc}qkN+qqEW=#@Os)~91zZ?P9<2(WL4Cg@+l|1)B%6Mo> z{!EeIt;wH0fc%9b|EwmzeE|8ZME)&J{>lO5e=YL+HTmlXkpI2N%X7|#dhOHw1IRxy z0RAVjGhfDJt12LJi}ug5N6m8o}QcJXa=QHQs(C_)fvqnEQ#~>f77u zRcPM{uD;N|6L`FAs2B7{eRVyTP`JUK1)fso)e@{WVYNgD?%G*UoR!B{`W?ICG7BC6 zfscB8x&=4)xT15K^rEp8Q*BDO#=N%Ks_GRBd09z zNjow4OW`qQ@fG59DSVBz6TBLQF3esa;`13MJE)_sLLro$ zKf~)E@j8@0+#13pG=u-ACf|nBG zrN$$L_ew!e}@V`hq4$|;;i8nQFDLaKC zH$szN&BZbf((r!^AJ*{aWeYb+!?PvcrfPVu^lSAN66MdqvgK>k=buHlEs#_Q)A zUL^H=riNc4^>e9)kCghkR>NNs{uT{aemp}{thk%;i}Q_Ww;1}OT9Ko+21R2M{Dw@%6PI`!+$CB>{<=~NXENP z4aZ;O!|Oy1KU~I#do_Hi#L4#>UMBq{P5O=U|6kJIM`$?yI2v9PH2g>zf8b?gbSXQB zNx7;te7E>>w1ykv|M40=P1lXb-e4gW~|JXFKgQCEqE|5EBw%RTz6%|LYn_H)BlE?H8h(|Glh161 zHGH+i)hrF)FXKbGhPOz0>ot6|*gsXn_ewuKPs62pj9+MYf!J5;UsbLPq@ROuJUZ>&H zrQbcP;axHwzNz6D8+d)F;a5v}ztQm7GJmB?ysP>gByuw}{B~*g3Jtd;J~wLkQ&OKh zG<=EF!=E+0Uh2&!ddi=Vq`c!b{9v{2((rs)r=6(bOC>(9(eNvzT<>W3?c(Q08vda0 zpKADFQV(Bi_z$vv;~#>K_un_9TsfV{U`~aypzw`s;|L>%~Ox5teNx4>NxT?pCHT(jJpWPZBmU8_^!_Sa@ zmm_hc{82A=Rq>^8wLd>zlOHMZe3gcODebjS!#|U8(w6x_*)NrLpQqsuOB_~ecn&JU zb)<&BCHPtmKT+nd^%{PQ__I~RAC~%jM8o$;KMIP!%KuH`XNHDz8opN6UE4Jre{~G6J2bpn;_zh+?-Y4U>PeOBNon7S8r~&*t%h$F|F6^V zcJcoP4WB0Qe~X5X6#Q-tpCs+_n1+8V{p~XiKS0LEVNwoNu6&7;1sc9z>Y+x%e<$O~ zu^K*6_WSJ`ew&o{=Q=L&bEbx0E91#-4S!ks?Ux#!CiBrui91!U52fDbYWV9?Z>1U@ zkn%3oa1~FdY51R1Txs}niKoA6c#6b%nykN+pDMqZ8h*Q!cb$fBkaAt2;Ri^&?AGud zQvc6r_}S84uWR^S;`jR+uG;-84WBIj_@zBnx#-6>q2CSF@cA+i9;V?X(tjfwUMB6e zOv5)wJvVFkAyVFM4NsN+uvx>^e(yXD$6v$5>naUjCFA6c8vdNL@4XuSf%LD(HT)#0 zhZi-xS>}tsYq&b6+ppnYN`LuL!=<|$=~92HT~3g=%GdDk#s8Taexu;39h9B(rQPc^ z`5&cS8a4cS8E-o^e5KU$Ng95Wtn<&-@G>dq6&gNR3jA9QUnO?#((n$6^T#w?o!304 z;kQYD`KyNiL)H%;Y4}UhzTay2E~&RvX*X4$G2w@6_zEdkSi^si{xVI&ZM^qvJJPy$5%rhJPUKdxnOu75)+p-!A>=It@>i`npZSZ<2ED(r~rT zct*n;WS)3K!&iy@4>kNv89%?(@GGT$9BDVzUig!=c#Y8Tp;E3q4KJ5=oT=eQp+UIH zHT*gSgl{=D>~n>GA6@&7>$pC$f3 zrQvr+?Ia&mWF>Q z@%f>K|3Yy7N#OWC`Ut7F6tSn;>mbQDQ^OZY9FElRn`B=nCxY!-1;cC5JsNs{ScHnso4WBIjL^S*e;iDSCGojm!wY0w{Z7NLmhuMWfnQahcgc8_t>I6J{3H!8lJ(L|4eu5|OEi3y#9Ot7 zmr6YxrQsJ#fA7%nv!!2b((rGk-cHx>U&uIcp@tVpd9Ts%jWUnis^J0Y7Y}N9sf<7S zG<=E7FE47i`upHpg5$9#hK_m;^-E3uLK(O1T<%cVURVWE{YF5;Sqh%t^WfMdy%GmG z9vtly!+*R+=F$g^4~WlY))bcuvH2G1|FWNjf=6f>y z$7@|KeYpN?V%F&P;8-qIKPP)|wDS=B$Lq9Q`f%;s!>nNdG-A9i<-Rh^DPgKeh$Zs;CefkK3qRj1%J}gQJ~$MgD6Ize(`m7!ZO> z#ZS46SLqr)NALqR{At1IN9{az?iaj3lix1=ZmNc>=VN9HZh|c|afHNAtw$cqtNz|_ ztR}CX|31|tkM)4RQ;yd*4gXN^i#5Dh^1WQc=L-H?4c{dA?=*aa;J0~j^uJlgv4;dV z0mJgD=i1-$$fN()iJiAKT=lO{HT*M?|5C$07TiA;jKZbby;S1a(eQbKXL@k-zYTA2 z9Voa7v<3gw^Kf%K^639XVrRaFpD%c|hCe5GorXUtc$0?DmGNhdhEEZ^$AhEmK3Nx? zEV%N&%YsC>c6j8`|L?`lbsGM;;J0gd43*%zTf^H0f6#-YKVxJ*eL`^M&wPu_81H)I z(Zok$=R*zuhv467c#p)JaWLCc?Y>TMzXwNuzLRzAV8N9?)X0!N%_EOl?h!jPHT+@0 z=Xh|m|E|oB3q3g687AZZVhzs}yvBp09lwcP?e)naFxhF>B0S(<(I3jZA%uD&C9kA_c`c7N4lAIp1)#O>!AexsV*5uXqm)bq@SZ~?r09;)f zo+GzuaZjs-k$*cJMlLtrt&y###(D1Va z|A&VELGX7p{0YIo)bJoW3)id!-6QQXNt3@-%h1D9{{;y#r~rj zex%?}Xm-^1d0z9#W4=$wzWZ%WK2!4b<)K&c^{{#_B~`;OlYDbD{8hn6YWRzSj}aWR z!>N6uU-easo`%5-lO4v7JQ=z$2hE$bBtdLuFA`$H;mmLdGudBceO{uv*q0Ej~ZSt_;VV* zRPdJtSNWz&#$RgqeiVRf$VC3c`bU2*6g$H-{5-)A6kOT=TI>{gOs@VOeU z{tjL|0KQ1W)!+512EdnV_}LEobJPHMlZL+~`?xg&;GG(Nhg5XW0Qk=}{I3${rwo9f zq2Z^?`SaNW;1_9l#LwluYyfTn(SGZvI@WsBUM} z{Uze)vd%#aFI{$35)9?mmE%2r?#Wz#{i7fuS@}2L$r^>Ch~>v6g3Pm;f@3her-{I~)VlIf3<4bEhxD4$ACeO@d2nwYUjZIHACrKjNAfxvaLr2zS? z5&c{ZSLIjmQ$V0iUB658U)2(H{k@=@tp4x4i*slYeXM`nx+{G(ek98qH6s{UaAnHk z3y-C6?9%lyCbcdGh+#Cu=)+L&9bvA2tYP;`rk{B)YrLowH9RY<->-^*;I9rCrZc7LZ!-cfk2K-z-Jyd4Fb9FY5ceympGAa zyF-03Bv^Y%-``Mger4a^Tn)~tzv702B4>kW&WuZNV>rx=>zD9ndK$K711}OHImYMX8`isvu`0LMF79 zvQ;$V9E2ama4T{*BVG+j1^)>Em)1y7ap2%`V-MJ>8`{ zv)8%w`s^cJdPCf1%J30yC_E)+#OE$O!b6WAF$k)Tikp(>q4N)D1l$+ol!?UoGgFFF ze-AK~A!Wg!ybNh-dU zi_KRJMvKB!4@PY(4Sti=NU0&lX0fHjNXE6q_&BAG81W)XOn_7B2czfQ6e-IFzXwb@ zrz|J23}zaL2}$j&u%7`Z+3Rg1?gJgBPbWG(kb+H~a%RTuPy*_*d^d@<=q~RcO*z*- z8-$d~r5O{z(m*PNr_i0hQtKx=K=&ZsQ|a!|J&o?^bRR_b4Ds_f_QQ~=KQHCpRQ#?E z7xBI@wP6~(GT%tKpBSmi2f{rdE_L)^_!M9=S?8fJ7CwiWhl$CRJa*aBz%-pSr}z%Y zd|Kt>J1`&Hk2Cd+B*r8IzESxoWpQ}C4kU$#$p(F+?aKgye-Mjf#$s|Ph~sD|h(3gZ z7^I;fhHxl|{)U1%Fqwyfqv4LTt+B!Xh?)5#aI_5dKWdIbMd2PZM`2Qs)ApF7@TDi2 z%BU} zH5LXTeiYpQv^lB{xEfCTqdDqU;2M~F#vJt@;8rpBCvy~5_gdzjHAjVk>*ANV`sbQX zI%E+F4uN~tT&M~xMK;z$_7J>%2DO%rrKX!`)tk-&(uyc8EG=n?#8E7PYaYYjXgWV5 z@%2g^D}XccV-;=AUV0TnHcyAW6nC!jlY2VzR`tYeAdsFSeYU$o}ncCvRT@BAafQ2Zv_7 z1wz5U07{*Am4CaHxdx`%;rJ^l{tK-9^KjlBUeRgzFJvZjIQ(#z;lGHv+~N3^c>l## z{&yfKJ@OJO{};eXkG#~%p9yPj>5-RN`Nsk$J@RrZ|6<^zM_ys&-wj-YF*MU(XQg7+ z-0)E=yaQYmuAaG|6nB|rqsLtKBP|Et2NDY240kH~6F_j;sYfCU$(3MERsAX}DW1`R}e*89ainJoKjL; zH(Ac{B=$2UhE>F3IMrq2qGNH@m0g+8N8u#!9$pwH?NX_z3u`_o7$4xoa z&i@XK2{+Bo$0X^|)9rkGXhwSUp?3bqz{z|t%g+B6xLmd}+s-e5ztQ9|cep(<54b{c z@otEJ5Df)yhkI5LxQJGD7r8hOTh6N_`zG9TFu%B*nA^)DEdR9S;Bz{mUVjE(sE5_&*f!Q7GxO}c7P3(f>7n3Ws$x{; zOx@OZdWGoAuOHr+6c zA!Qo?wA!l)_GJzQ3Wr4_cvhIcWy;JsVNBqKWboYZ;lS`hGI)M?Auzm<3~mpv2PT(w zE(l)@Odc~Ag>L|+keQ3aPXRNFnM=Z-12dnQ%g49Cp8zA`d%lAYiiCm_;7-0{zU(`7 z2`*tFNijXssUwXQN(2324eAm!h~iChnD5}LT0+4-C66x0JVahxO0QX~ghqKDdP#X@srB z@Qx?AjTmW>)5F-X*^Dd;)7G{v+r%TN&WrxFGxI{0FkP;jMEKMB>7 zO>`_j&A~5Xg@WfR`Rh;~=Pplc1rBp=A*s8R)T<~(5f!J1-3DC|%;64=Gg#=nPpbQs zYATf5GwITd&Z5;0e#tr%JP__w^ob}+b2$stJ2OaNjuJQ$1t_}dh68yvIwW~FJFO&- z?-(J2n_YQNwr4u$kQ6@YkaI0cV1sz`J>R*RB<_Se*?9$}D7Oj}C9~*fHYPv`(12`@ z1D9o_Kx;wR!A18ZJLXT=l=yGBlZQj#xdq~q~K9dD2Q3H%4pNUmsy8`-@=_#95|FG6_FTcI>P}9 z1xLZ1Bxaz*LhNjGL-Qhgi0PD&Y=x3N24!jd^N2N@&T%A$@8uzrm%C!PRLRCw2*o-_ z#VOc-+22mn`8BEjPO0LvaI_5Kwm3U3yB_wxB>Rez{oIws1r!^nnTw6@G#zUw7BvWW z@(W)W#m2F<#D|+qC!fToD6x4c=8?GFbQY7uQYF!;Bs@DaPtFgR&WWUOno`(_3RD?b zdae-~(b?5Krt^DJxI-yC?JAHK-o)P*Oy@O{{i~7~EFqJt&LDMu@r5ma~UMo>C%zMiFcXB@(urcSz(T zC4z4S^7J;EE!n%tmXigEa6Ab2oB~&l3gn6RLt+0za>XczZvpby`#c^_^DL){0$}Lcu@7oih9ih-@^F zopcCjupHkAR7it6DI5SqcKo<3aIED_Ac@IJVh&1BtqmO+IL=Bv1$d77g;;Mn_#&N9a0lGUr+b0OrW;Knw5tyV@hxx=TX1K+ zQ!M8>f?k0;>3t4_M-NMtjToq5m9W~Gu>XbcA;JC^?xcoaOX5Z%4fp1Dmy4{72*`Nb zM2uZ(*{IEyue6-iz=VSMz8SK7IuI1V+)>a7uW?x6I?K6;6s}MT_n-s~I`N)Gb0{m^ z1o2M_Pbr0e^j8pX?zEi!B>RPu4Z(9S9^;;__n_tAJKkXZ19$TLaFitA8aJ310z_+bT z+(L8o{nHwAAHvN2i{nkk<9C=#=d^d3Q=>C;?&xgUnAy-X1D{!`_?{Bpt$%KLckAC; zVf@Jp*{y$Ph2I4(m#u$qg>i|I$J`HA7?%@;%%#|2Twcp=-Dih!Ej^#p((Ev<<08zZ z+hJU^$!>j+9mds|?AEjFFm~EiESYVGpMcn2%iJ(Kd=8{_F*n=}?*VQDb2)YxUj(&T zT4aQ6kB8cW!h(buIM~koHJkx(al;9R6O-)l4scD1dx#z04V)BrsvTYe%^}5|W`}X_ zBgLI=hjC{k#XZyx<8$0n+!=NlHziWsId&K~0aDz#b~qDqkmAm>!??nh;vQj#acM5a zoo|P6aV^Cyw!;?zC&gU|#~%>+o4N22dpvf=GnuQf$74_1&fFq9jNRyR<`y%zletPe zjNRsX=9WP2z}?DRl^w>=zn8gcJB%T{o4I;BjBCSv%q_FSxCDHbx#iF-z`e>`gH5MI zZ!x#R4&y5BUFKHWVI0u+Gq=hPGl9($HU`H}z!nPIYljbkxpbDWC)nY&z|I$Ty}oOIU;yVVZk+}dSIgl@BKe1i`J4fggOcIF!p zpj;I@?NOeY=a=?q92aCiAGp@GZwJXx@Gww?qbS<0V_yyhF~mbbv;%%HO&+@0L$`Y9wI2F758dveJ3Mrkhwk>! zF%Nx$hu+|!H+kq2J@m;Qdb5W<)kAOb&|5w9=^pwF58daX&+^b`d+2jK^m!iod=Gtr zhrW<#`m^4YgAMr6T@LNv<%|Q4>6<+C?>+P#Id~8b{RRFU|Fu1~9TY;rf5RV2NG+{C zAGdc*FZ0mLhvIUF@rH?be9iQVi8qr4eD@9`N9M=rqw;Y^V*KcQoR8qt6CR~VpPKn8 zsL^R=`m{9K>hY0D`g9w=j_z+rpPhR7I3+T76m8;Ie%??_-~-R}l7n!o&1anHrK50U z;8W-H3QEakokf(wr_SlsL$3h?eCnKDLkyofr!OUDKI<$S{VNcQFmu!>td|<7t4dg3 z!X^vgP!J1YV~Ns_wtrOgpy44L=BT83gGOf#4ofixh12O=fGiH0n2OGFF$NV5y&Ll4 zVhox=3>Rb29Aa`gn?ZB!M?r23W@#?=n_xg)>Uk*hs&~d4##n^S#bc@3L`1Mzn657H z8RV)na2KL3$N;dK5%?FPR4N?;jMgSaqhmh;o7M#p7OKzrl-Qc^*Pg5>2Xlk70kHAI zCZJ8e#ycK{$h@&0B)w<>7?H({seYX=$OcX=LQDAzKS!*5xil_9RwGHQ7AULiK!2s0BuWrM7!jc$ z#z-i5Bh=p%v}2Amv2D#8z{5fUMrC4CGCev2o3M!RG1PQSk4?q6<2E>WFzUwrW^~+; z`;(!Q@C+y}JGIF$$IVE@IEOIBtk78)zXmgQi)Lg(<0HjEbx&fH>oUfcF)EWKdZ~$@CO+URoMt6Sp=f z53G%Zw2Um%&hX|F!rakJrkmoMord|qyJX1&U@NlF?hq*g0kBIOYEBrzE@k`3lc7=s zF)+;Ihd{%{SJ!3^8o}J~0K_-|8s9jO9PxqkqBJtW5g&}Y(>--_#0cETj|RxC1cvCH zO1UCR88SYmz&v7vs#`1pw$}Wd%NCFyV|^am*6@24KrTq1S)tN?tb&V=Az2HCd3sGzuoD)9D2UR!>KUYIBV1 z0j^rXO`~3s*SpZsio8Lf6ysB~euv`zggpx`(>Pj@>Pu2AsJMT{1r_;@KrE;@cX}|6 zX45}?S6-V&RFS_CEz_t|q;eUvi@F8)qw80lB9+T5s5tc?3y!|rc~ zVrYj4c0f*%>X(B_PI<1r{tR-8RE5E8{~z|=JU))%=o_Ei(Xm<^uWcD@bIO=CHX!-L z*kFid9oE{qkXEt{3G!;Sk~UuNiq#6+gn)^;F#!UEBZMmnAprt`KsW+{0D&A3!jXp@ zB;iR&IFdYEfj}U<->R;joh=KJ=lA>P{o|dFJ=^`A>h9|5>gwvz%#>!7*>v6$xXfeb zXq((mpr~`aGj;ZMdj!HxXpd>WeC^zTvq$ySmVCApt93>eTwFGh9!=l#KPax*I|P6k zT&zyM!|JII;^eIYJSNS*Ccjn$n*IY+?m84oJP`Qjq}_0)VS|vJ!2HeG!u-*J{)O|i zsj)&nmz|F{`D#;x>G|_B>3(Pa*l3;-^M{hj`CFGQ?OVE}7Vm+KZLI~_{N?l0*<@yH zAmw~~HS_E0h*B!}&xr9!EP3Sw9t4FmAHW0mwP2%em}CVG`_tJ0WT1q|45S8;E|c^L zBVGnCB^JC)VkGUQlew&yMi0F-zdmVl21e^>V01W@LC*`tW*8YsbE z;sh!J+3*rDyshKDX3t2 zHA+n{lvgEyURYf{P3jHKHg&ia7nSdZa^dy3ek4~Ls<@`y-Mu1oRmBEWKP`_7ZNwud6TXOkLozRV3 zGM8CBmL71rQ_zS3r>QyC*VWS=kF_=RbvJeO#u}Qs9lTGFNe>O1DpqH5{fSI(BA-t5 zXHs023iY(d8af)A`WiY~Tk*D1M|)qaJ>JyST;I@yx(hLSHx~@x5!GCN8=gNMNe#q0 zxVhGj`o^ZlzF1rR>ZZQVu8w#I>Tnuz+0k4k70b3HvICivgEww#8Wt|BSzfoOZeh)$ z1q+uiT(DqSP3`7vt~Q?4O_^Ncgsn&kpH32GJ~@0OCU@=9B{j7}HMJd!YVdCFz>!I`Ry#OCG=rnVxqP8^OL91o zM-ENmo#1q`P@Bl46Qiga;9x$L!Yjd9OjOD;4PFqgr5Tt?7IIXOUm31V4yTfvj?Cu9 z15j*pDnFD$&6!$^2-R2s(}Ri8ZQ0~7EL3i6w011J1+%{vFGy!nbW!TfBu0mAd+A&j z7m|a%ywgpSIF>D>@`H(Fs$}@v+F~6TyUq=LJs7v8OPt2k3F%}?gior|nXJ!_rg^;U z^F!T*M84qgIkq`5lyaJq!?}(u4`_3&wTTn)ruFf@qkEdVHuSYYH$KMl8QaP>w<|S} z&ZC7BNL@P7N_^W$s(agLA+?!u=>mG@X$+m`roN{2&gxWwMS)h5+)~F#Dr?2zkN_4gb;i)!p=@fPhTe2)&LoCL zsk?=-QD+Ru;zfN0$4-K7jIJk6Xzs{1dJ-GdnT*qoN>D1Fa!j?Y>3$ZNNVW~DNg?Gl zkV-V2KrfgdJ(kLEYe#UEr6z7WWPjf!Exiyy< zz!WoMqvu^Gw7Gi(I#3*@hSsL~uD2{^kG?6kHTZK0V zn1zOxriQhqKWIMRx+U*ml)4LJ{XN-q5=pC+qtsM>Z&~wj{ z#!TPa#xjL8jQ=h&80D1#bEbPFl}rz&la2ZG38{Ps{zLK}J+n;xUxlwJY>MR;*^0dJ z7|RyGc*$tPipR2$e`26%D}IL3G%Ibv_FN%7xXrQI(auy}W(Dcj>YiAm(>}JjAFK>^ z!o-YnhiQ^K^%?L0(_TL?kWb+&5Y6fQ<}HbQ$_ST4*pBZ+*y-6$UtyqGy?Bw98P=@U zR;Ouey5Lt-rzg89o7<8#Bh6)?+3lW4v9vXJbhQ~x$1Lc=1SnPYM*2WS!&rVamv6{r z#x@(nSW=18l+Wk#(Dm*SOz@&qoQ6zpG-Yf7YV9hODp$33!(tgl|SbJwryl-vO2Gadl7A6O4+li?GRt}>PtFY!^akJy)>2R?rv@T1& zH$vHM#j!KidTmorC);Xb7DIx04Ao?H_ghAB03aYy3RvBROJQ{(l(xiH->fJ0o7Tt7 zgg}RT+S}?ooq9L``9yLXOGD;FH*8!(OCK92Yd-jT_lE9xQ(Ir01jzvGAWb4;uY zuP2sk&L(Lc$oGuo$*nO%+?gBYWr>^?%$heU)&<^CysgW4r4%Tt+OGO$a8xw_3e!ic?&E=D&Gx-qb}H0zcn?40c`6x=8{Gh z8UumGF}cT?IIQ2X?uL%`_NIn7j3j0zrZ?8B)>L)~>llUyd%R4h)Xvz6)Dm0W!ZudS zE5>l?64E!C9UXn^VvX?@rK?oDu?}^Q_4A6<-O>bEvXz&vGMB|w zoQxGa$7J;LR0hh;ZF)-sSsMq7p>IWoX2f&N3Bw!{Hn;Y4w~%u~^)mtuZX|%Ta2dlG zRt0Alp3R{-nXiw zBVOE~Kw;oI*~McpUEk0d>q;dviS%Y;Cmgdfm?^_vVc$6FTQpzP4o?F|R!_@%(G}=! zTNT43D%k|lEae4?9cFAk26Oq%AG4hL{Z3MX{N@C?w+`DuvK6dDkOXs)O{RPjVH%z> z)L7F%dZ0d8z`|`g^~|%iG;K}sdTg@bEc2LIxVT~ShJdGFhTSzN$)KH>kV!*pN4Ho- zERy0?eT-)T6UlllYhiDCG)+d!t`4SlnN()@1nO)sS=$@dCvnHHqC&KglfB4Yr8R*Z zO!Cf`VcN18;_Ys8I%78w{v9tf2A?CH8%QTvBs^`ni<}*AUh`C?svFazyE;LTkeTI0 zbzZg2a_Ja@kW6G*vRGziZEsBVj}4L2YmAF;j7bf>N!!_hZLuBealJDl_nTvw_*naD z?u*%7(^lItt_7Aq+O^Q6=I#&=tWwm&qE=%7ts7-FARnVPU5WH4S4eX`meqa@aVLhN zu?ZWESZBPW%YmVRWrh*-nkfp#tI+C8XD*k)H)F=IcKCLA4fr%yE-Q+|-jgSCnY}Rl zgXtl-1Ee*^2o%-BaBGXOF45+xV}yu})7e!YgW6jI*wsXijBy#9-gLe&=3hZsiFm7N z1ZGx%`mWXNH9G4O=|XcZzcytY6LYm_c&LZcTVjG(w z1viM=Mn;P&L$pPutzV7nBu`c@(=4xvo%LOCSm7^r7bir=sm)MjV8=;Bn z@NDhEC*a7&vC8^(xK=7Wcqqq)fcP->%5T`n?JK~743PaQ-Q1BiriBOPVEf}e-NqF! zu8>C7>?GQqusB0SV@#z>#Mrm0r@7hOm*~lkjZz0?O zO7-&GjyH8f`OM5NRbrTs5<&PTQgO1E>~mN|^{ov(xMhbS?P`!6QcQfnww~5_jGR0x z!J;$RP2=M^zQ%IN0t{uu%><)jT}`&GU8`_JcxKe#g^*!q`^|nnkAERKJdhjW!3TLJ z$#?V`@<}ji?q!OvZ9C4Q^WRZ)*5$Fg!mz@`_|%EL4>S43Q$(3vxDQ4m^4uvIn2&Uj zX~|y5PW~c3FXjTU7qE23ei&Ozw?oJ+vRtzS;LgQ!aO}7YZ#K5EEEaAc4d^77I*#}r`cG-;|$oE0{ju>^M zb8BiqvB#LV}Dd)j%;YD*Oo z*!4jhyk443P%rJSQ>}^q6mDz|=3)b0$H&KHc5 zT}7LKyHa!ykneP6jCX-0%oqb~mSK)@H7KN=F(_$$9LIwM(b=-0JJtYE)HgO_?y@cQ z_F>GZZ)(BpW%}`#gp!J>7Edn?)5TkeP#$xq%cJl%=Dl(J*`yO&EHh6A(=15bq{8&% z=~r^w+lUM$n7TeWk}fXu4fzyq2AJVyUBM0nPH{4aJ0Pin5@zjQYnRD@PVfjD3q`eH zo2%~{m_bbqwBnnsV+ng7(E1_1JJNQAfkOfH^f@uy1{5LQu~s}E{!;;NrnlCc4Qw-R zdqaM3u(4=1Z?W4gS~TcRqS_7HeF**<#0q2_Lf-w7#TIJ@#b?ijhKe?Z;`@?2#d6AK z@n@mpEs5eE9O$o1j!(SelNc8sYY!gDF1^tW<>nQ#A%QJohFL1P)ySTw+^^)To&2Y| zqE)iDS$TAuaFc}o-ax|v*LnmFNwz@uP}Ln@bju8=S$#;6#Amkmag1)!qG)!sq-ADD zOWI3+Vl43@Nl(*gIz3$ z{JGhyE;c~&984GQc^hMdZuG{w;ypgQ$Tx%Rp2^snkG*e0f|9>a*j{km>`2k(k;hoP z+wu1I-PmXG-x`aCj*67-uc(#P`NYU@Iyq_?!)BD3{7C+jBYSAX z0~~jA2h9+)_ja=>Ft@Rq6PweSZR6j4z+X|!JSV5HWQT6nTJ%AgJn+a1H}}izFYSJm zZ5HFaOD)w4Z%@jWofMhxk+RI_FTHjpV8)BLe@Yx%>8k)Bqd$8;Vb3{U9rftQ^42%OmE1h!5N z>@~46bOD~OX$6Yc()i#Ay#u~{ z{e*5`ZVjH9{g?wyfydWB9FN4Mhm6KKJ!^Vet;e z%kWN?T#={05`vqrmEu8UxttT+vTE@YEG~5RI%Qp7yY{ldEBsk6jc2aCv_IkUSF!zw zNxK|5Vmuu0SdDYI@=C3~b(r#UFvw<9OrI`<`HfK{0o)cG>lib*?+~umy*G%)=>keHs5foV+Eh z9iw%JE?vHu5dOmzZwSN7 zoF4swa$VEceFT1(!uPB~WjKyfxP4f(N#XAsa%Y3ajd(u1R^vi{v%+otZz|mOx12hJ z!}iO{)6Qgkc&%i1*>NL$D*iu=|8z_-KRj~@Pl{=xS4-)z^k+$XG!}FaTLN)@9-j@p zt&^YyKAh^Wmv74-s_-9*scBI78oY^0M~nIK__+yhiqUbb`SI|jV)oMtzd`EBD*Uhf zI+f#`r10zUE-xLYnjf$Jn`PlTU*W^jFR}}CSh;n`f_I&PJ^WC?zpn7R@Qwlv~-MT&k*@M{!)j`a6_g@0Qn?sE$Ng7EpG!mkv^;X{Q#A-IiMWBL4& zjN?q1v=%?Wuw^vxwY+7!N$QO7w(;jf7y8CLjXB8P&)&lCFX z3cp_F-4zPAF{7_h_z1r=>NwXc{O8i{O$z_E(BH1`GSREY75+3WKscUO_)M9`7xQ)I3qQa9hzh2e2@c+8P?-u%Z6n?n$i(Uty!|KE7GLEk3i^cyY{k3oNS$sha z7k46x{wxDKyDQwf%6ln%f!N_$3V%ZE)m(*tO87Za;b)4&vQFVMiD4WA3jd@mR>v#+ z9+BtC3jc)2XQ#r?ka>5R!hb0FuPNN}d7HvV#qNDy;Q_&)S9qn!=VgVTC-nP?KHBl3 z4?WOPtMHr2`NDC8!p{@A#T33=@J^Y(zft%lqW`nRK3O?GEcMJ+c$>_}BNcw3 z=)+ot+xfde;hUsid4*g1vt8lV{+zGy--w@crNS>0IX|!Pzlz-cpzyI89$x2Vg+DFx z;x&ca*xVl|{4lW_%Y-j0&zFR*PvL(T|NIh#|3mcWy9z&0{DD6x{52WZ*A#xNwEKa= zCkXv~(QC^meM^&$BNhHtv7c)d{sWos8x(%9*r_3fcM2b43cp_ZyF=kmi5_04@cYD` zT%+*!Wc~W7!YTL!9si^73xuEd6<#KJ`h)--l%=8ly7+;E3ZEkSZ~X#GzY%5V_=2MU zw#e;%h1>Q0rwV^T=IO5#{-p5#lEQ6l%eNI?D|W{E#g@S{b-x`H46gyd` z@J%(`U1x>DpOtZ0qwpP4|9XXgTj&QBzFG2P3V%@gb)mvvkagv1g)b6&XxD$+-|raq zoqHAiiBivx6n=-yum4i`Lo%;lRQTVezi%phqR7pB0lBDe<)SCnE?Pb(%6!~M)gi^A>x zd8@+tdzcX3RSG{s`2VKD_mcJQCklUBh0}M{>9BscmA|!*N60#C@q&zdyTa+~<#e2^@b8HI`KrR{ z>z;J{PT_Z3{)8{v?!H2Qu)^=D;cA>?6;7W^q2pAAA1(U%6@@3IUw={fAEezk6uyV> z`45FZEOPjl!oMc#U%6bj{hB28Pf>WM=;sQBpC7VpnXxo|Jial)|S;`I8m?is<=Hh5udV#T5$QTjcW%g`xx#-S-n+h;jb0_OrfuoepveJg>JsWmxx@}DSW=n z(;F0CCH#L&;aAA~`i{bP2!5}^KPlt#n8MeJJ$YB*_lSJ#`fvL+Q}k!G_yrcH@8QzX zqwwp907p{ctK@#s@d`gy`nz4>Pm2E7zZ=+gtE9h=DEd`0FWy)9bv4Y6vqI{#^>m9p zS*7sZ#9qY|{%zs2SK(`9-kz!OEmp4-exS(bj|v|aJ)bP&X8DZCIIU24RQj7&`0qqM zS1Ejg=<_2Ar;pds@wCEElJR;$;dUQt=e_0Aj{66S{$k;0g2>g<+kNGp3STMyz$X-b zv*>4=!cUO)j#YTMj7wVKcZ%G$DEuLzKV9KznWq;i{5tWIu2uMJvLC!f;nr`vPvLXL z4*x{qJ4Ft^RCtT%&z}{3vy7MBM_M@_C-N_oUyC1XhTWN>aEhrzN1eilq`xZ^K27j7 z3V&Pj>lJ>t$azrV)ivC#Q&9MWQvc@^9u$4PK;iVwa5}D1_=)0o-K6jb#17n}@Ije( zk170HvJU=2;n#`$|ETa4;wQYJaQk-!N7}dJGDq^06#kfu_udM>UHWy9!tH(eWeV>X zyVR_3yU&R${5_F>zrs(Ic{HN%4dVZttnk4a9u{Y(!oMf|x3cp6i zafQOy%KE!j;S>#*j$;(wEA^xm{;0@dtHQG)w=)&~S<(M5D*QVlAN%}>mBUd&ce|oL zM)-eF;X8%@pDElGx&2n*i)DSRs^M;X_g(iD`@Dz3FPD5w;pd9|=}|a+MxKsD4V{bk z*`5}^ZgUO8Ub|0;{%=#b37FzIrz`xIvd&(p@J{LHmld86JN6BQ|4!s{hr)j%@_A6< zuZSK$uJARYhrd*KPWX9I;hj?d>k6lEg>-yS!#|#Urit9}yp^UHpn?6>k4-_kzM7ly&Q`3STOA z`(1_aF8wXv-;9GD$Gqt66ouD_;Pz2?eT^wUPvM7(T{=|ZF+=XuEBwzg-`f=ap47iV z;g1XdDTUVuO#{a(e7VT^vkI>i{A`6+$T(i2a1$d0_XiZdQ1tL-g?~3____Udh#dA%_*&`L zY=z$;{4Y@WQdt*{RQSz7)7~0|A0+c}ox;x)Js(i`O=YH@;}t%!#^5I_{Bo)PT!jw^ zKQ}7;QjzC(75*9Va~@K7wb-906>jD8yuz(~UQxL1?>h>&{Vj`{{@HnF`#V+P=ZYQJ zSK*UgQ+}S{0c1r4d|{=cxB9TwhtrZQ>gjYS+|=$kaUV{sSUL3haH{9$QXr}D2L&JY z;Z%=(9%D z|L-dN6|p}*_SHjG-zxPy?W4E6(4{~4aO&@0q+fql_@4xSP2oog|8FULnc(mGaDThO zIfgOPH)?mM&{rt@9Kok6{64|=Qur-`AE5B#L_g;$-1?2Rf>SrCikI=9j!!E50FlFH zA6^E!8o{^uaH^-9D#3Aq5BKZCZ9bgncQUo(JmSN}H1L)81h@0__tLKk2bzKwxASYd z!mkoLJX_&b|K}_GY0>8+6#lN*u@=Fp`+hkbt?2DMJx;6v^Zuhf4`v|;37$!MO6^vNjCN_k1#y1IH8n5B2hSpE-)QxW2 zTuAiew~#l#!#0)22Y>1ccmv<5!>0!mPF+8~_F0$DnG9d$50>|(@$nDP&{wSb68-)8 z)Co3+FNLB6)gxE)_>KTxZp`P2DtAyVogL>LC0I>63>uA5xmhGw91F~kch3JI!Hmk;$C3eqqCq02vxi{r^ZbiOI&mp^UEY{u=E+*#jE=W@O*@x?9fv zXUmSi)U=#iPFGq^f1rT$${CcXYB_hphflVg-4JTo(J(pCvg6^JV;{ne`6BJu^RNDK zur9LSXpOBNbZ$q8>Z(SiHIxXV#vKpORrS2`>MNhEF`9re;x75U39epd zB&UM`Uhr7*!RU;Y0E38Tfx|#^XON>=R#uKLW(aifj6tFb`KanYZzISA6=cXwO}pNfaMLp`^3tE4vD!;-p0?dfXQz>cFlBSo zHhbwU(~j}dTZ?s;O`rL^#mi>Q{JWQ)=}XUE*XIw*eG-ssYF3yyjE8UzCF5;Z2G*^125a(tn%6g~J zMrES8vX03nnaq05M1<1~?h|0r$m8^xccY9+pTX&gm1Q*KWoJ#g4Lu;UFK6@AaF7xC z`bF7!?ztecMZP$R!hU{K5ys2-T+ZhTJ|nyyju4-#_#Ealg6ZLy$miYoJW2Sx-n}1< zR?IECtLj{|XS#TIl*e!azVPLg-NP9X<-Jh~8ZR>XUi1`XCYv(%MXB>924>m)oT-sE zzV9wZ)wCIP%F6eg{8QUb`CjvA{7j?edvhkhwUzHPkEnu1J${2Et4F|8SiY}&DIolV zF3#GYE=M@3VI)L6L_(ybkr1hHBt-m1LZnF%4!=6t3`xad!AZwqyUogYzB(;R0HXoQg|= z^M;UHW^!K)&U0bZ%mZT;mj>q@gj|ccc3E)VM&vq8?(*Qg&mp(onLfFqJ6J_cn+x$^ zbQ4&VT#w0xq`SRAmpC?kKPHGsMbxDeapt~XgoNokcbl@fJOkBP(Qgb+x)3>D^ z)T*JU$z5%-rvFg@rpU9wFulAB1AsHLb1)LcW{mKuENCcZt|_*{bxDRMbCf%GA=g1c zTqB`Jn3g1MEN%Ew6NX zf@nW7HKu|Kqh}#A*JLh=UX08Flesv02Qte{=91{|ky&Xnm(A(K4ZRlOeO`DXE=599 zac17BUBf%i7}6Riw1BBh`mpd(T%ysIAbv~<);6{=bdnZUhUstGkx;?X6U#+Pyj2(uh}-gH_nUXmPT%GA9r&hsPfYO~9F3*$)ZR3Z-y`I5#ZK54hB1Bt-3V z4=WD}H*#@$uY-#ZQ}OZE0YkqyOi!p_{j>C+CwemNzR{{YJbVRHU1O=}^D<`DDyCS$ zj)oyYb>xhh23Cik<)Xi~Mc<;L#Wjf+JVV+MrbRUpB4?0!-yI3#a~Oi2@GK@c&=NEe z0c$s($PiWYmv0RHK=^2;UuWqzdGx+!&kAp0s?Xv)<2<6E0r9tcewZG+iiEDlnHl>5 zQE_WABIRmnNv@^~AfyV!6Rx~;(*FP?T+Stqnn>wN_c2fyuCEDK!Y0A~f+zR&+x@x;mn=+fC$KhRZk_ShxElL61y~}`G16~@aNx1 z2w|{Ip}9yHDzBuO0+oS4_)w-j!qOf`v>urmCGIdcFnwa>q(Ie0pfO8EBw#iRCO6sS z%1jQS!)aoP<5)R0;8NW@^(vOdQn*69zDS6gGDY?cgny4r zB=jeoxyav<;37hCKp-5POcWuUnPL_a)r)Ax@QJDy+Cu{2I;LG>Xu9bU+AV?b_n7tvmiG4^ zE%_Iwa$dPifolTczjA>$ZGlQ$FqPA2Nxe4(!t~@@B(x{aERlIc=A*bR5MIg@D=ft^ zmcqAj@wI$!AUwncHroQ{QUUH3_1;K?Ejn5UW za(^~Cv%XZm6qrSg7$>>%Ws{pGZN3t4sSz}be*P^G-i{0w7@V1buOi`NfU|5dBB5_G zC9z-%zY_@G$IwGKbK&10VG46f%KbMJktk$4Rrx_+QW$qMcQuewb0FxxghHm7@?iJ? z5Jy4>;mpmnAyG{g7<$bOT%4lF#Ip3ErSO! zgI)(RbRMxZduT8`2NxruLx`^4qvQJceuSy-s9?CA>EbwZZ%-mxwP-PRFloK4T%QBc zo_1(f2Pb_E`Hvi$wLy0WuA2rsg5mEYgWU$s+~6OOsHO_4$29@#gW=b>0KFT>1?c69 z>i1|3FjXEG3{M4w?KjR$aUfB!)TZxU`RQQQr;#^WzbQEDKAMLnmkIi{ezVC2gtU(qho~$3!aoV$h}1rsgYx;WlI< zp>CX+q2rNY1vV3fDltBeDe#qG_+&0{nk{f0QLxcr%f*UFCu!j(=sy>@!xngA*8)QO zonZLaO#6bReXo?(H}$@U{V)DP0sjYQ=6ntkhG}-pe6$Y-!;6`AxuyLi(T-;hXzB_# zPXxpC8eb%ov!%|WQrt_v{o|wkMKDaS_C-Qpvb48&v@8saCFWt}AA^%=i;P~ulD-(6 zMK_PEbvF7Y_V~{xH_=eOWOCLzo1ABzgDy2T{jAEjf>nP*?PfRr_n?0_{?B0a8h8b= z8-G6-eHytMQ~L+OD7hGOP3~X8D7h1|8!vOC~-$F-Q;L^n!K zo9xDSbED*q$!@&bjnbsuXeg(-(c2)8VUyd#jc&oU5tEzlM(G=hTTO0;8~qb<+hs&% zy6zP84|{h|1S)5{lP^HpbT?XZ^Wk7OdJdS8?jGVs$s3jKE^?#G;3`RX7rRl~`$%_} zxKY~KNOuo)qx4}7>F!cDN}Cet?g}?bn*izVk#3Ye(IDMD%8inTE#3Wu8zt9Vy1UYi zl5;KHt#_j*BPZQm?MA7s?WXfB?i`woXPI2gokKJ20+Usp;$AYjJ~v7R{WX)@=tjw5`v*VPS($L753xY9yO;qoY{v=SsHVMsG!Sfn>+r=ya@-%Orb(8|_ARrDV6bb+n|n zNOr5cfL85J$$l1hs*qhT+0VIAT8%eKc843KMR!=Tr@2vDTSo$-p{Kjxz^p6?1Jp)E3b3iFM~1?ibBJ1D~h-4G?ybGQt?QL>OuF(&vae7 z4YvRawa zl-ajC?u2LWzaGg*=uI@WFTU>_j_yyl(Dp@$jPQZ`)4errGknk#>W4`m;!D^0(hGd) zMZWYBUwWx8z08+B+?QVAOCRM+uk@u?`O=NPbh9tr;!CgbrCWXJHeb5km+thXyL{#{OXq#* zf-il7FTK^5KGByx$(KIam)`D6pXy8R@TE`lrO)uC&-A6w_NCA9rO)-Hcly$w_odJG zr7!fQzrbn!v)QqDy0{^7l4dABIgb{!S=4Z# z0d<*!p3b5paOK(>$Jw8gjZ-OYkJ)4#0_%)%uwW!acH;ob2J8pI9j93?2d*>~?Nd?_ zNO9j|QuPFP(q5CM1g2I_#zGQ2z?m@NC_uR9vxnnOI()(r6P8b)cf8Bw3OZIE0TJ%5 zRtF|bFa!Y*;BUG``enEt3It-+bfs#R6RW20orUKh0s98Zkgb_0Czb_{nlJ&)6l>dU zE^6Bw*Ctg5+)4g+aIc6+VE}!l%9l@|mZk{L$P&fW-2(^CG(1$7bJNqj+N18iz_V$^Fp(CNgd@F@+Cgmd}8K`nJ~(LJRulp zKhlO8A?5ZBKC3S9iJ4Zm2hOCiS~=s3tC)-Z%Y8Kmr+;@92648(YQYZph&n_?uy{&p zi~I(h9-I8EKxNLGfu5^v?(;=LNtOHzOU_mjaJqIa*;P_xoJ>?OaAT88JgD0y4;9ET zXmg(Wd(U8d4IF|LZrb61I{OaWCm+Pg2#8&W9_0-L{yAwkoC7pvDL;R6wlIHmpnu`~ zY-$YQgtGJT1Z-_;Fg<^MCfz?jZvxgk^T$T>3=Acc^S3Tr+P8E`EuO3$+gc0q`OD|0 zv&qaDqK^HW>gwuutg@8^j-=8bNvr>To$FJfD z8Yc3lgmo&3q0w!^+*2T)uAX)d@zveb)f+=_dIZGWmO*536PbB+CfA?H*r-`v{3jd! zs~D8J7^JLeFztmb8c7YrIw&X-!hIp$rG)pwli4*53m2-;JTDUH;C}iNutarhmV93*DhUBQ#({s z+p(wy&wvjcnM7-~gCj&U$kDHAw@{EQFuCh%`*{CZLl4o+x-K5=-$k2VCxdXO>sH&fdhpZVSlCw{>L@o(aKQ7%o< z+`JA@e5rL57QL}!wS;s-sa0d6ZHZ9?=;Ubeh;O@z!=PGicPLWU!lh1Ep(}-`qN6FM zXwD>tMt2RLMIp&KsF&6EZVJ8aRb>OukWe`8YoA2a+$9J)huAEP#KCtaZP`gzgJB$|2KSf-F3DTb}}_%|^d zp}E~7sU!mIB~8q>aig^n?-D6b#dU-b%@STRHn6p^EMzy7rb%H%CxNSNcC<5<_k~(q z-4kncY-~vrhLBYVksrMXt435d(59Ur6mF8I7(!c85ub2kv^F?R2sY=}AH<2=lto-c zqljGQBST>JHMPgP5cjiG1365k2|bQD)MJ}X0NRpD9F8T4ID9&^JqMjPGmdnyRD4`9 zb%Ns5@$h>w?%ELnou+cT(~PlR%WV4;-Zv>}4z+jo#QWAZZ6JM&WigMjvYeP2;Avq- zdKD}_mKHl4o{5t>F$;^!sSPk$pWRj*8ewAF=qy$R-&~_^ zHm#2tjYe}l?G)~`9_wsAku(wSMX9@CK^j_&EkJ~7+xu>RkYlP1Hip7=8oP)fz{YWi z<(jie#1<~(dq(mU!_y3$7w;GxBMdF#AA{2rf~mIDcfnY|$FX9g9f+05X%OxBF+edE8{pq`m(+&PrST3-Wv6p^+h{t8sFJi4Iz1zJ zbB!!98DtwHnis;3o;VG!7pNDL596y0+y=z2=4K?gZ3}{Wrt&u2s$J+z`0ciSV}NKB z%xXaqqQ_BQl5%6L8|!y_Q$rjU39|!J3?b`VQ`sQ|!iF&6=4UdcbK5F&OKf!u8#J+H zkT}PzrfSjlx>zGDH&#dV+v=rRea3Yd#`@W2GfzIt?+G6MYYp3QE^2vo$4DpV_m6aCXwE3rj=t1B!?q~`NebJHkz_uZHm*H zs^<9gj;t0|=-w*fbhoXFK{v@U^ehCaHM#3%jm;zqgSq_Xk6AuCMpD^g%|x8wsJrN{ z4W8`lHc77u@uBOJh4cxY8hDLc>)zHBuSb+)xMD0J3l}#7o>V)wz%!@&La4YikzwzF zdfw35(JjUTD}t=^AG2OcjAmGfvHWN*-;2oOkct;NS0XtZ?KQSfpk0F8+L+LoCoBmo z9PT6;Ns6#dj^MIBvjZ}lsA6!^k^<~>V=+zV2GS-7y)PCl>tcFzQ!J-eZV12_hNAkd z+Ggu@cw%)Y6IqrP)(}~z8tJ83*aexSzF{MYdee%dW7~lo*QFqGzf!{d#oAY!+0|CR zx(Pvw>l>lNqvZY4yfc#ut+NwL(OHX1iIK6+fH4;zqYYh&^e9(Ivoe;|t26N>bGfkz zPHU_)ju7v#1+Z;!&%9=eBJnD;cBhkK2e;(LV10dC14PH(oXd(vun*t~TP7b&=U{pW ziyuu6Gl!|uX6y~Owum2>k{cgb1sjd&JM9BtWrDJ z>|pj|;X}x36L%B)%Ulv&ki}q`5ou{u!<;wVL3$ z9HY0sE9L>R%KL(_qiOO5s1~#7vk}}&Vt}`ej23l(Xp8y>4eExDCQRr~rzuMY%*C!A%M?XWHXUUCs5_{O}4y!r<8zZ|aW2 z#Pi%LRVGa05^eG+baB#^c+EVf^{ov(tsE1*t3mv2yQy#MX^qD^eG!$54rDh)SkGj{ zYKUV9jl$Lt5v0LvSCg&9s!*}8BVuEHBku}=&#-x9zmkWukQ^S!4e?llJd@-bH4XVB zSTyrTygS=vZqzIQwn2tqI3!-Sg?)Tr{`(Y%*v8@+@9DNPMHcIisewGng}Av@NG#&> zV(EN0jEtGaU4{DO@nh+{xkq4(9&H-Qld#OQAmGr%bC3qtz#gx|fy)#0y#g|bX8KD^ zd3xQ*QwlZ{tm?F)lmxoQ#A|Nt>27hr(@R^h zRBNI?m7&hW20Y6&j-T3qJ23g~ByO%{xf+`7BnHa`mxU?bHTt-jQDnW~uXn{(^&l8{ z>HPw18;EQFHpKev#$_yZy&5_?H?ZvRhTcL}Xm*C#J1p7Tl&V2N zeLwD~;wF-wTV1%#F^aXtsmD!GyA3pb!1~=iHZp>{L?v9wQiIt_WWDj8c=IwI2onsR zm}Ya<)J}^=Uqeq(^=B-Sqw>jOD_RMri>*FlE)M97L zhVEDcdRyPvh$#abmMRpjJ2C3hZ5W+QKW@*KRP6ChN@JMD;B?36&X$8gH}@;JXGG!c z=X&D{7cA(^jEx#amN3+L_QiO9?BY>!38t=3j--pLVnaTKy_6YI;+P!k#`I`1haGQf zpoCewRnVHs9Zjay?oviEHPDJLq>QoAq2Ahcx&?b9YzkS7UATP(x4gR#H}%BlPjgSObZ6f2Nv~-uw_*$u%sw6(DV_V!U0!|~64_)5dkr*Laz6;`NOMOQ zHY_yuESH9k#wOqDV()$N;5A_vO}Ac2`0yM@u+C=-bfarmFWzoOp+V$uviFjwC5Bt! zKdY2@O+DF+=NFk7ZqT_V3(c4b|;Ee;jTWcV%uySKXt(RSEOFR&v%nD2I)$A!7yMVo0j&oC{y zO~&IQZCY1fy!++tAZ_KIt#L-vL)p|o4Xad7cC#$S?NEhYzXI^zglaquvCCGx zHbC+mOc!sgdfn)ab;Wyp2CEq+WY`hk-xz`JSR1)$Y;)u`QgKltLCJky+Y7Fn9Shpk zbYqXex7>>shDNh=Z$P!I&L>8O)5%d|kxMG0%b0uEk(R)ItzcbRSC4xhm@=~1(A|(_ z4uryg9D!QVE|fLWbJ;%D0VPr_Gu{?qRZnv>EL3-aRGe&#(N1!dSS8sRp+?(z5}Ml^ z&56zF%(n42w7AJ!vf=ZVF5WXUt7b1_?+CI*V4P-y8av+qkf@5Ae$P>(sX%|Xu-#`v z0w+J-fjfzgv$~<-@S3?j{qV)c%%3-FmydC7(LD9%PX6;f{$7p8a@+~tC6o|P=Y z@$#oL)dr$R+CKR~V>8)%grHaik86#K*8!(`?6WZTX{;3=L0^1yqI6S(M=yPwO?x}0 ztK^TPK7!(IR9Li=neD+DLG*)&0Ta+MFl z>Hl>m>y3oPPZycu!EQb*zEN;I-oyuKvOt`lXJD?|uT=|tIMuZq4G<3dB#*6sf;_F$ zU@mh#bnSiW9F7+ADR>yKU@rvmAB>7d;$frK^6UC5&RtrKL!tf(Lvw1qQllh??uz`L-XU| z$IIY9rEvb{0I=UGe3J0_io(wm{B4DIiTv%!^H~!f$+al z;Yoh}-ErC!zEbKxM&YwXpNAFRByuPy+`IDLDeUn%40%DlI7rf(?FQKj&Cl8-2SJ5%HRABF!}@_Q-Viz%+~YSFj3 z3jeFf|44;DAohHn!k60luJ9c)UyfHeeU68YlND}b-t1KP-7+69Q~2YO|C+)rpSLM| zK>GE4g})*EKd6@O?#Z|Eh5NZR>w3e5S19RWhHf++Gz2 zYP!PD5c;UXZH%0w6uv|FX;pZO$oW`>SIf8$D?BTFe?#HcF5IH2HU^cM=0QKBe#%WWC5JyjS$_ zGKE{cxmV#&3qOx3e3t0dKNW6cuPu^tRz5a{`X>~=k-2xA;}qT?a@(%(72;Q1sql6g zr*A4eCG+Agg?~ZX{h`8b?5k%KPM;2=3bK6@Hf3lam#0dh0mnD*Obg|1yQYBmMlE!fi~# z+Z6r`ZANj}n8KF-XQlq1D*7u#AAYHEY4=YGKVRy9Q{jh7JppPEhi!M3tiN{uXYo@+ z{)-iTtN1-hh0m3FcecWRF74WViLE~}A{!flM$R}_AMtRwF#{8us_b3`6i{$a6K%N3p%{Y)$TM3KY! z3co<)U}Hwx`ri=xzbpC$LXUUW_^|W`@hgV752oVIG1dy9S^DD&9%_ZjI|i^6RT*inVk*UjiSMd5#t zd3vtG2SgukQusWvw?9&NQ0B$I6n>=W^E|1~@;}4siNfy`J>R16!^Iw+uJD(H{$hon zF8H+y|E1{nGYVfM>(|=~|Ef8p2i|9k0IOyTskGCEFE_%kxTw<`Pq>DLPiw=pb3 zVyA7p*9-p#Df}6++s7(=hv@T8g+C|bb(g|l7d!c;!mkxSuugt0KNVuPS19~lseg^a zZLGER3V%cNYDnQX2|ope2V{J|t#BJ-{2vOZZ`aWAFNJqWKg*EeZqEyza;cuQTUMP;SUx5jL=&-Sw3e;zxI@Iw)mf<{3?a#h5w5b{u|N1 z%N0H-`hT^;I|RR8;aSo1+ZCRddG$wy+kIe#^uzKWrUZ^f3U8C~TdDAiMBmyKK3nYk zCl$Vj$a9mz-;(uotHPfZeY;iR%_27&Gtu%tRo0^eWqw$EKk*Z4H7@lpQFuo9tXH_z z@4Uhf5&3*Y;olMbX9~Yo^!%R+zg+rxpvc4WKTrDmDTUuC`f#?wtHmzes_-)D*Zm6L zA>;K^g?}LY{7T_=++R}oM&ajeg?~!MrCjvX_Uk}d2M<#CQklQY6n>WEn-%`7$T_a? zD@AVB@3ZaFH(lr$QS>*-JUv($T-<8C*nKBQoe6A4w4^%jPs)&w575)Qhw?W}! zBIlzOeyiBqK83#}^>0@A6Ec54qj35p5glhM{2B4PE>-wWspo47zf<)5c7^XH{)XLu zTlsuL#jPDkOe@Xgvy28(sd32G&TSZ^5RrnO?*DVU) zB>4Rbr_Tt|@wmdjBK7}9;WoC>s|w#wv|3i_FjWuuSUlF>i6#ZJ^|0abW zEd1Z2@GUZ5exz{wsK#3gPl$aspVTVeZ>f^?WjE0~%jYpdf1tv5irkhc{C!zBS1H`y z4;@qZYO!ypD*OYH!+8p~e$wR%zf0!V*A%{5^zGXUzgX6Bdq2$f_kEGqk2Jm5$!8UQ zgvj9qg_nsP{;R_8l=|OQ_!Ba|`^WxRf_@C$|hd4+#V^zCJZ|3viX?+X8%tZRXNjhyVbUoPwBZVEq7 z?B+~`x5&B>Rrt?kel1k^pTuq)sqn9gKExFMxaeVz!cP~wmr!`jbjR7OaJz5ZrtoHw z%jpX5lkvJx;bmfHzO3+!$oU%zKV0xT6uw->@j->tSHbCcT;W%VV*OI#cL+Z(D*P(Z z=hqdU5_|Q5!cP=FtMF|yI;=kYNXBb-h5wi6=PZTW*w3{Je^JJ3xx%|-9yKX^s>tV) z3a3w$(=n{@rNU=H;q<9RI<_nPOCsl;3O_^a!_^8uN9M(i3O`EL+3za+BC%r+Df|hs zS3gtu%Q7x6DEvL??_U-Eg2?S%h2JLYOL+}<+Z#vw{KQ1T>9#7VPNyMrW(#h|-L9u~ zKAc2g?b{-S;}RdMYRoUyL-f5S>onJxgvGlA@ABbvZMoQu4T4)fh1|&~ddue)A5QIF zECoKJ@STF&eo&iYdiaVA13zIaQ;YEvjDH{~>m7F%ob3e;>2= z|JEqIBsY?!9S0GYvr-bDw}AZGaj`I&ADS8~Eg-)yHJijn$&)%!J2I{RZH(S0q@4bd z;rHM}q)wUU9{!(}Uy2gCPO8L~KedK(#Y59B#HI22-?G}2`Tbn;OZ_MP*8N`vOxH;z zI%d%sbJwrT$ZJ~CXN^(0-r00^oHxynch#e|8qx7 z5nG=6PfMZhe*u`TlS*!r_U(N*!syVnIbh?pzh2sxWx=8LX=&2!ZwE$oT0W8FW9J<6 z`x)^|1oqmue4L95@V3zoA#3~k@9|w(wg?Gz{t)jHF1_n`5IjF zAGZG%`yLWhr!K!<%CEPC@~g{#7kC-|uaxWdXJnl5rzO#rx8pKi+f>J`(*EzI!{i2% ztDwu1PU*Q1$hko5&(W0e9a?_G(|F~t5&nPZD@#dTJ~fC}n=|+jqD0AEP*Xfi+MK-@ zxeJ#rT*@T>d5qkZClr}j$;p+7kUNcI%e%87VTb4gM_7=sslYHZT0bGSYt{6S$l3RX5o?kuZlT=rn$<;a~6HqLvX z<+6tsKJbvg3g+kB>1RKA?z*yrD-P~0tNOvYt3wAjhv;|W!Oat^o}@xGMxij&ENk%_ zixPOYm^4}&+<*FVV6F+f%ZiM!yR8J7u)7ADJEISfgxxjJ!87tiWy0z^ zffmlZjO(IlCM_SZrV04Ju;1~h@sgsZO}_^E!K|^yf0fEA$aMNr{xsjgA0|-WWc27%%re}COy}e zp10@8z$-%L%0Zl~q&U1k2F%hx9NwR!4aqd@Mh%vkD~+6~Fqx*^Opz+$;#c?|CdpJv zo6YV{K;?v^`nIam(4Z;T&hc?2(=mlgdvSOv;~KJ~`HD2$#hG$*rJFOtMVvDfwGmwQ zOd-xgCezE&b|;$5IwqTBGV3`L5l%O_uM!Jf!Ra#}!LLc5!D)mNBOO2--k$;9ji}7I zG?bVra-Mqw61K<}CpE(4d{hy}#|ab5_GWuThN@OORGWT&ft{EnCzX>fVviQE+iK-`2=P3>^J+;hah{H=mCYilC zV?tRY4lhv!9afKbk!1AaS$o_8yY~G!sIJ`%oG%XAqhxZa>5NZVHsmGwH`;n;T6SZN&!Vo*v#2E-5 z21<*SvytNPcEacL;_z-E2XJ?Z!%LZB9A3&5<;k_C;8;6(bHy03x_bjj|ImF?moG%V9acugIIJ_4k6A4|4 zGxz;gBuw8QK@HWE#pOd$fffD6;H2k(?kakz6LEO&#C6jE;_$wKOeFLVoVfw&oN0h+ zsh)?Lt7p@RQ~Mw#MG=R$7POJjVw|}sNx~H6fiNu~4sV>vjSuR0$Yki$)$t>ad_zgk4We?OYsv+VQM4Q6k5dLC7mz~Ar3E5MnYtq5p|Bw zc|QM~g*n9|ML<}Jpovh!ICB^2ndNFCHVVc8VP65}1%&-34KWWh1%#!lW|-XVE>HU! zlS4pQs%5UpAt3B$a8uFf8wG@=YewHFAnd8Qw$e}{AS_)o`bGg^>6+0u3J7~9a_bEx z0>aXb%8e$6fUqRuVUt5ZSo$N?h?(RF2>Uko@_pM&GCI|KYDXdJKLEBc6cF}$WZ1$W zAT0G=GCQMu!CW~n`cou~@j^h@=a4bR3jtw6a2RV0*@e+MWagU8MbX2NSzt03M~_8j znaNxdJp-AQCUe=Gw~=WP-sgpH0~`t6g)@&3wQG1M;S1FQrec#8IxPH0F7b*jLHw8! ztc9%Xbds_w!_z>3PEdh0}SS9PP zkedH&_o=Qv|lkkAg!m=z>+8fVNZi-53HMn>d}C=Kj1Y2!@y z3(O8RV0v)5OCw%M0bvipZ6VX@8}nW+w)!TAcL)moTW$zsJijO)Y!fmFF^4k?tPhE5 zK8ZS|0I-4PfUs8~$9hQtVV5BzIRu2IOCfU&0b#d;XJ0_r8*wob`Zmto$|FdaRw#ul z#JOP!0b!}hNQm0!9wH#@D~!B`GZ&vU0ma8NNQQoKcux>SLNz!u{Su-l8{-=-1cY75 zRLzzuO;oH=#S~}XfeAu&(ThThlgS>b&EM?$l4p0SuHXh8h! zo*(`MQ#9esLgFa9+}a?Ka<#-~HC;eeRDrl;2nb6rtnIpNG2#lRSGrjcnOV;VhK29> z(ocj}piCsR3g@ZRT?(>WO$i}>Cj2QTNa8#rt1kX6OpiH3A~<5x#{B(G!PUh;FGHDzBuO0u&JT*Gx-KO)xF}dDPbcj}mJKH(&z7E(eWSG7u1! zC?tn~u#_tXgr$k)3kXYfPa$#&2AOWxaNYL`#^pm8Kb+mA?ynleQY5cUjYBB7l) zGpk>+MT7zYVQ*lHZ&`{*iQ+lTWpkqHg%$x}eW7-Vfxi(gG0a>D83Mxo6L=&qZPNBTrAdgqZRzHtKk;`VV8n75?W!4_E1qS#dG}wn(KxZ0b%=@cG%LM;n5Or zrgC1nOaTOhrBJz%(B-xO#n&~J(`ZS(2nc%*lRaR`enwWTK9kH~R zd9>{RJW@%f9mMXK+ zUJ($she?jLB=mq2_t=skAnaBqIoXn2N+ir9n4R;6#O96LHsNEUg_vk!g=>-D9 z{*>vS!gE6Scd%HhwR9F8Tl3?R)7A?kJC9Rj0Yc7Z=Anc7K zF$9ENi~L6p4FbZ_%MYeO1cXf?6A96G5xBv#k*KB$s>d|}2nhQ{E^wtSa3j%9hi*uf z2nc%@Q`~PU9w!Qxnh6Ly8Sa+RYy^b;70pAFLqJ&Ssc1a{!cwjn5SDVjfUs1n=>!78 z9)v0*p#?Z|Ct^rc^NA(QyRS&7gNdkhQw{-P`xzR>naiDlgs&X+s+us=O(HSH5D=E0 zE=Q<&TkJk6M(nX1iYITnARz27LE|42sSE*OskEsX0b$=nCK95zcbK8+`13p~u+ey` z#P~R-00P1u01AX!#+eJWPyseNJo{M@=_D;6AZ!m8IMx;@>{>u*5fJuNrajZrUQBYQqEdu z(NmGyD?yhUGXY^Q#?u>KKv>^y906gQvB1l2906gsAy;GgKtNb>G3J^a0>Y9zvB2aI z5SH9)*^QUGQSzl%nrjFMOMYC7$xU>lNpxveHQ!;S7lZoBjp0b#$33;e)|2?)Cs`*<%PtgpKW2)h8yOLq@( zqvVZBcNe+Q-@;Xr?k;wtwD*zjE^(u@vytv1AZ)JK-KB1nHYL(s1caqcfOHoDVXs9_ zx{H9Y-9)_gAs{SGj9X2v-Hnp!-(_+L2umvcfXN{sEcu3ynOrY| zx58C=(&P{jmb|*>Om4j!rKjP3Z*m9-OJ3YdCWnBqWYAwTIRu0yhpiY8mi#h=9mL70 zL_k<_!h8W?$;I*oge3>c7Z8?wq#7xUfUq-Rk$eGRdy(}8guM@0UqIM*kzFZex43n* zr27KG(yHwX2umxpFCZ+f#v7$90>aXw>k9}=YpXvX?6sJI7(|-w2nd^nf*MgEAgpiY zK|olt3%-D`4WNvKe!|=G_xXkd&E-glR6G)*de8+(4FO^4Hrzgx3GXqLmK%!aS~YwB z`7~B(GGF>| zUwVZveUvY~(wAQ4OE>z`&AxPtFTKW>ZuO9{Z5<4gDY((8Tc zV|?jP`qIbw(i?s0gfE@+r3ZZJL0@{;CbNv9+kLMO0&Dv{Y^_Ru0g(@UT{kiDL_6!aSjQPwmbFKK*< zkOi)M$7{T22D#;do&&n`2*=oKa`9*eU-CxCSF#KCm_6VGj@g|`+GF-8kQzUN#wmpK z9HI!+dxe=9g039F^M$6LtEQ6avJE$sG~BpL!>cE~2#MN*8g7|d(y(c=&TEp#jGKH8 zO&&-k1M|5_TZzFIlr&{nTgZPu4IDjtq~HXWOr;9EBNC!W*mEiGi+gK@61dXTy3aT* z?aNlyR>XDBDy@6m@VKQhaou9HTz`066Xg~k&7ml{m8DT~@wZkR$u(9@@n-QCOB10s zY@_7^BqyWXXO_GZmlxfUw0g$xV`B6<*omH0{lRJ@exy-{ILfe zZIe$4w3{GdtYslE98n-nywK#+W||j`5#9mzYXq#7U-Z%@j}*v6&z4N_r>x8?e1KOt zZj&nna-G5{yEGg$A?ZP4+Zacui!BvDKnyZ$ulcZx`A2hCte{Mi0Vi&gwi@QoX7&-f z3IsHdFWh?^zHM>a`Z#mC?hPLB@3`Xsd*h0$$f6h$f&yXuqk+Z2*Cc-GKNBe28yC~!xT|sDKmNrb!gWOO ze}@34s51Y$5a1NrQ96AZn`Xd2KvHJfT0lg(WkHq(pNM3(Cz;{g)!y!S? zFN#Q}1A9Yw7z~;E-xA-O0yzHj!Mt%2a>JCl5!ooTizggWe1-}6gwegpm3)=CNBCNTF4tx527Kf$lm|CklqJT2*z>$ zOcd{b2kgdx-4vOLq89!mVY;guTRq`}G3xq6@_IKy(?1@YJAYMsG{3uPSwVh#qz6KE zwdc3A_vFInJU<`47t8O0h)57LH6H-kt)p*oOt}B=LwDoU*}0D9O=$K1Xb^9=kE@F? zP%rJL{s#hcR~PF5cu@>xhbF>_RYDB@p9#}VA@4kc3cWjKYK*Li&B7Rvy@xOZc5h&~ ze_2d!H$?V77js*74gXyMwo4%N6irG0i749?uJ1n=Qrq3)xN-e@n^v)JDQ?`~6-j$u zLtBrDTln|J)5bWG6sY>YFnD$>nkuax|BGT}Q?yCze_#0PUV^vx$VLn{YV$EV^8d9! z*f=M}g51LfbC0-?5Zl!akWD*Yy2sihBsLC-|AUdRQEdt0T2!(GxAl7qj?GbR_Z}k~ ztrLqF`R~BkCPpUApZ^Yw{qMlo|1E*BaWwyHqG10!?)AUpUjIApHEpDu8yX}3j(ZJH zHvi>uuX|dX3M{66B?4=m5 z(0@E;w&%4*kDz}%W;VR?-OJ&)5tidKdy8p}9RGOCZ20g%9r(^ee+#W@4(U^TgB|fK z#-(5J^-9F2F)n?Z!+0m-(!UcJzkzYLk0Y^XkTvc@C--4{>`|TjFaRG)xdc5KK#|fT zXi-TcF7I+6j{oItD|(}zF~t3Nf@6TWxWAcM#xBD@aZ48RdJ(o44=kQcDRau>G~)O_ zk(H7cVFW*m1s5s)E_l%&k1BI<^*I~9Ilx2Sni4s$!(0A%w3v&_kH5EoM~}I<_(v>f zy~5YA!A?~8Vemx)9^1^tl_RmkE>QSg+^&li{vjLhI)y*R_)Q9b1zvQ<<9>5->&0(b z@OZ>rT>Mlt2psZ`qS)t6oZ#Si&0Jjm8n*NM3csKA`BLF|@IDwGI#%_|Z2wf-4l zC$RsVqwwol{$&ckh4C8{p3m~{QTTYqUs3p}+>c)<{6XfI_a4Rm&+$~ZANQx=pE91K z@NwL~6BI78?ktx@=|c|tl);a9L7PFMJH=D$$k z5~Jcah3B&W-=pvc;q7KT9#r^sT<_xwPvG(Xtim5*zj|Nc5;OP{g@4Zaf2r{AdH#{# z`jvisL&hUt1wV|(S3u!2S$~O9FZ`RBKSS|vV>=91_&4}98yr~*zXk=uk*#q2IW#=R zD14EDtwM#bV|t>(?@2KQrYd|r_hYHT4`zK9Df~;G=c5W=&3=2V!q>w0fq0y%aQuBP zJT6f9Eo>i&wIX)Do5$TPihl{y4=7ypd`96vW54=?!V4MyTHzAwJdt176n!pb{@Dt@ zlG{61;S$?)zQSL^4J;f#QTXvZ?=>oX7SpW?-_G+%hr(B~|Mw{TDV_(9Qg{cqYpcRX z^Z0sL;mg@ig4~~CABokPsql+=yk{#so&9Q@!u#_2I9=fh+%AbZEcHIc`m`$kPuR|D z6~3JP_Be&p4G#3nBMQHa$K#U1kJB=R zORVr?6fUvbE>`$@o|m3f_#I5YtndL`uld5 z;dios{z2jR%LaISpzvIlKal-V+VvbJ;E;WR;8k32f#M&+@~0}ig6Y``FXr|xQ252{ zhY^Jz&GIF-q3AQ6`+bAr$Dhc<;}nH2X8GqU{7tsQ&lO(6fY&oF?;p zCVD>0`sXWr9qWIn!q4Jydbq-`V>u@%{7ar^b}0Nvp5K0{aB1(Y3YT^8L50`y_sGV0+2_UF?&^Pdy)$o>Ah!mr}}Qi!jZjsGR~)_8>v{}6@uVO(M`iu_!*!+OPk2it9j z!XrFh9#i;K*5^+OU(D?s#r-e!E@uCkr|^?m&It;aSoIQPO61_rNaFFV;y;DwZJXzH z;UCTZT&VC&p4X00_)_k#^A$dc`~3xlU&ns${m75*{%VVlC2G5>iAf1LYwm%=wNy<6e0u>KPBNA&px>wg%_6Z|6{N2Ln?E#nmm z|AOtmP~j~+PEJzzuh>4Y#*{1OGcs+Vb;aBo}^1Q}*e)zq@59Ic~tMKjYXPLa8l6KuGex>jV z=I>GXOYG;DD7=X4lUSD`-^cBB*iM2Ma=Y>s{xz?6^Avs`%V|>h2ws0$fh? z$>j05kHSrq0=R!s`0sdqDOC7Ve1A7h;iofyrNaM%$JgNs|D5fxLg8C@e63aZ4CX&x z;lE=0pRMq)F@trf!msD~;XZ|5$ofB}@D+@|qVRI|!}k=P%69&X!jEEobgb>SSbjRU zL;9nrvg z%=3Im;cIyw-e2LvS?*|sf5G}sQuy=SzcUrSliO9VaEIrCCWW`~`qZuPQS6tS6n-vV<7zFD3NiX9r*->z5uKjn7atMK96k54H)%=P|3;eTZR(XqLI$Mt@#_%qlJ$?Wf< zXA1jmrowyJ{|{979JbHF3O|zR5``bj^IMI=FJk?dD*S#PFC7YhndhaSDf|guM}DsG z)7amBukiQS4(}*@Cf6&m&BZ=nvY&jf__whC2e}^MKbZC0N8xvIy~7p0ndRmwd@}p_ zAqqc@`*()I59IM%qwpy#{|JTWu^+Bb_@&IhTH*Jxe{NFvv5cRp@JhDZ&lG+f_xqI! z|APJeMuk7k>&3kaujYE6Q2156KK@qWhcf<0h1=|(A1nMnnEqPfSF)WG`6VFfcQdQP zyCDkS$@&jb_({Ca8>R54dE8D=_$21nF}}C6zf~&!ZuXx=3eRBsH!GZeIv5(!rSJ^a z=NN@Q!}GvN3SYtPJxAe(u-{&)@C5e5>l9wgcE3~MxjZjDqVQtwfaerGne};1;ZL&s z_Z6PRe*2}uF)S4xK7J8M`rZ6=G6YLe_#e5y1}pqc)<0X}4{$#gD!ec6H>N6l6_1x$ z3V)6Le4fHfc)nVu@Zszy?Fvul{#vi_BY1u|Uf~Du{C0-I<$mlUh4=6{x=P`9vVHDX z_*J}4J*DuC*b#8NtnhWL|Jw?Gm-h*uD*R8pjwJ9457NKC=6(q=j&6XazX2=~Ga3~hX8cHn*D&6r@L7x>>%p-fCpoMkkTH$vx{s)Dh$m8n`g|BD)V};LP!~I#|6B+;BgJZi6V1MxA z3w&@$yQUEZ?{qRQ{Vwe)_Tc0q?1wWIF7IvBEBqAZU#RdcjJGJ<=J|Q0!Z9iv9!Gj` z)O7(V1;3}vxU?$^nc+B1@xR0K;m{%P$00fqNr zysroM+9A_}qns+{-%sJ?jE`3MC5-1Qd?({Ye-D_rIWxuR_RFZ1M&#r}>))<&(oriN&PmA9^E5q zmjUb==}!XTG>sE43c%MiMGpfS%ky;L<__Tgb^%Uk_&~sMi}0T6HCk*hG%&16P?a;Xx`b7r!i!| z;s8_VA@AVog?Di;7?x~hy~iTqIdom~Ag{Of-ySuEq&&7C+pgQ+0hpGFCC}&jr~Qrg zuK?cO>fg=v^WzwJ$K5=8)%E`raI9bSgd`m=k2cqDc%Q?ttE=dIJY@7%{)L&QM6ML% ztCW-LXc%3!;QHU-2IFlEF0HzJGGKb_17w}Z&!O#y+x*_j zukA5~?)Q|%q%PkT?T&Uy;O?xftiKhzdt71RgmJ)^mG$?>?p}bM%*QmkPO}C=OahFh z9lC8`=(f~mh`?QNJNDrR`+4GR-{j|z4H2ywqRVgckYsxPW5-}-HR^X92m z+14+jvmvy1bVk9h50aXtFEPZj@EA_5HG~A6IOB_a{Y%7yaZtgtnI!Kz$!P9j9ODwtdRBeua(6*p7-dZ%s2z z+y^kw?>PYC^qVIdf_7z_KMbIv(Vw7}3qW`>#XRp#&#GUi+{~8QkCkoPZ)U~TN2xW~ zzs}+ZK?N8%IIgU406k1Gb8-55{rE+=XJZg8*z{hH4+##T&>S^Gz&x;@=PA z%lGv8U;x!yHtCVo=`rJcBK_H0c`7}G?YZ@VSgAjkZ7b=YK=snVc+kYM-}?2|uXeqk zu=$P9wv02jB~*K5qCV3?x4s1bf7q4)xeshh*w}pk?v&82&))w=0+{QJGW)r*oR{pc z9-NzP<~^8^XiDJiI{K|Sj`GYZJ`+}+5C|(j4LE!zth|9nQZRQ8D{r9Dna#*$!pa*c zFLND2CIq&D3I?4*vTy}3)0l7EAe=3H=KWB^b?_jZrF|x>JV6jv{z@qUVdc+s(81gLzED~LEKCGnj*t$Y zh}KBrI%hahfc%J4DET&+M2(QjekhTNDvI~+hLR`!4clDG;fiaBa6`!>8*5QVIc_L< z)Z7HQO_)a^>rIf`g!#nghLT4CA=Y%E^E@bNEOp$VJ0QoTkEb*QA;o@&Q1bX?hQjbX60ZA{0Qa zLjm-sP~aorhY)+%F&I!DzY!p_nR8sv5Z;TKO~@b&D4zqR>7iueY+rCQ5TU?UIQO3p zRb2y#bUI-j>8MpYjw=(r6+(;yngO5*C_mK?_c!?YW#Z|+oCpwZKzSr$0p*d31(bgt zDD&573@G0P)I@sLng{{qQxh#uK>6`Nm6<#UD8CY@YC}Ol`E5W+KzWpJG9aM*YEY3W z2q=$~C!joPY}yV1 zYcekclt-U1dP6{Y?H^DIo$#SuIz71y1^lq)kV{QW%y-gO17*6h z(8+lo3NUq$lY?0SlQ+)ExfG~0LydQG9tJAYP!pY;=YYyG)FdYdXVH;{I@B5U1LTcm z6>kOq2NL`r&iyBViYQg9Xqt1cFL*ui-U8=LtS`pL;vP0EhW|-l@O9#U8~L$T!%qez zlG{HDsx?Jk^acBauAu-fSEGHj=Z&jezm zAaIl<8R7nZc$CMy%qd5joT*I{BI^y3T{HSt_pSfldm#LvGcr}%v5cB9Y*c2+k z%w0iz|2`DJuUbfHY+g(xc`mcAr@l$b3~WfQf@T{NYz+T~nnkBgM406}u$c(6dT}el-vZ+yG~4-9wN_rxUx=69CX8mKhjrr#Y~RC%+7gv2!kjET(ep9Lx%s zygWN+In>B;{{q=|Fby(8fqmdiwTyy~rNMlSNGSc=HQu_r?T+>)6JW(MD& zqVGsi3@PtflW4&+tW`k>UIm5w!I^Z=f`r*~7>4@b7-A?ChH7LW@1_&ZbLprM*WDC6 zocNas|7w@tQ|*btO~iE~oHNfu4(t$by{82)CyuM&Oo}~)TvQvz`%WjZxFn}z2DAVL z@P0Vy+|;iDM4ZoY8#UH+hx0sem{wjK><@Di%>Qtv+6o|HbV5nA9b?vC1g8*dv9Q(% zD>GadJc1aSgyCppAY)M*V)H@Ltt88+aJMJ@bnp@q@pBY`&Ak;xV1ny-A&7sS4+Zes zgUshu=EuR;Df4YOQ)2?~*o_wbbd1NFj{agCiMBMR`mcicon$C57|vAaAS^`wg_9qZ zG(#ZCwu94%cZTq`BCpG4dWjlL6%6c?lxinm1UzQR2-)VA!BA<2N-$JEo2C=qI41SC z9h6N&FKM71yd8*8;9fYBj?Y0Nold`l6y)H&Unqc8nIc2%;0HiJXmL1G5qyM6MVMnm zT!?v`VaFiH6dW;hLh;Ny#tu$`%uwJkIFqzmnb^i5n}_2@J6J>)9a9$-#W{qF zzGer5@K`$(NP{yqH4hSomx{*f8km{%ww-(=WE)3)#~wyH80uX^ne`=Uw@opn%_ceN zJws)1o$uQYRst$QJ3qFA_<0K~FmNUXu7`w20U~L}2nB8-PE^4Z{)-)aj39g?jS5qU zdD59uTn>L=26i=I1-_k1`p!-r0FUGMoFG}U?Q=eJtMU7S`M?|sjE6H-gMp*dQGl6G z$dk!CF#{N}OO1*lUvMR0p}>)Frn2~zho@NV-YaRKFL*BTUMRfRA}z67~gOC6@mXmT!?IHri;lG}`6*g2}LV2n9lL&Kv6)3o)Ej`_YuC*7Ij2It zsj$iyd;*A2;8{3Rg&#vA9R;NKIt4871;3#J_5d!B28ncx+sY!3@CEk=2yVZHqYydB zY6JI6TH#B^??jB(uk;Oj0LP)B+Ds&M_WD(ZGB2YgwHqpvE9vk#DAhD#jW2i_5TU@? zaHd9F2Z?k#k%j4|Hx#&;n6P$JZi6rQC_(rk3YGf+5}tC{s&vFaHk!l~JJA>Xo{Hg$ zL&flgGt)^_!acdecXswUSlPf6lRoz){}rU0yYVl4-n;Q{eBrBMSHO4U-}=I@0hMK>f9Iok>LU&H zy)TU0iLr)CaKc&OM0_{ycfz=ro@Vk=oG|X=$_&-V3FD@%+E9HV%so(iH=gc-UCi*aKgARgD}e2gGnt;7&l=7CYL*5++w9MxylLS1}c-ub|;K`q%0;o zobWNQ+>c~3>V)yz{;^EQpfoPaE1b7!NcHD6y2`lSPliy#X|v<1I@>MrsLpaxc!j`?$aNan<2GzR`LPE zhl5!|f$xEH$n;t(IXoPnfDNgEyaR{hqcJLyJgOh6VbWtf={!$*tS4RQNssfSCwS5m zJ?TR{>B*k-R8M-ECq3PhF7c#ic+zE_^ej)h!jqokNmqK()t+>XCtd4F*Ll+Qp7cCV zdVwds$df+YlRm`5>8q*r*-ZJu7Mi%lupLK zdWDBt)=+lst1|}!W!(H4Px@L<`ld|$qem8wq~yOk!DIimi@Z9;Wc6(j}r@vC>{2WW3s?bn6{rFv39)? z_*9(0Y!djC5lAKBWCY(~duz_)Onb*;S(bHRcY$T!nfU`)RgUboNV{dE}z*U)8%ZOIXzAlC8GeyobMMi)sROEarGJ@*3(9|)CWFH5m z&9Q~A_KsXIr?Keq{pn7ha}KQSf`GFp#HoECX>npdZ(BzrzkM?4!|4H-KL%SM2RzLI zrfq4@f{M9);3NlGDu18{f%OWFhKGG>pF~it;H@ku^)j5~Fr_~6AeL1qnUk|E>mV;N z&aU@$TjT7x_E^g@hFA*BKymDuW4LGb=(3|Aqt3S)vwcTH zN%9f9Hm=#O#dZ{qkY?BQ((L-UX0sC%xgFQSirG7`UySvp_ade^PK>c$NiWtb`&-s4 z>;Eq3`%hRe3G@W(`H!-WwuT$mo+#GE0RVZ8Av9>)63LZj40W~m( zhIyfBm@)An+jcDjzhKT{?Hy-AQJTvJ$D5(M(6aZ9gRDcn{vGS2$3a4zGsn5Pb*Oh# zkuIq8jvug;chZO-ONV-$v%u9Btq|vtli$h$X?6K=)5a9$xB85>W9b7R>N7mRPEAj7 zQuj^mXZKG^gF6D>2rDIJDnRh?ejm$8JtXDOlu0S&un$h)99ZJ~*%l&+A>f65X}X<~ zV)$%8;T@e=v5AnMY}@7Om=hcZ#qt4xzv4Ink&G;T66~odDNs#JOy7|pW)xZfk&H}JOU(2WOp>tk$$w?fzo#1(_KWP9_u%z?n`CW8XeKrGDUol!YntNnWnsDoE!l^HS`3XjT5W z7&I0OdHD;FAC}0io8XoV@?e34B)B*x$DIVIFZ1;2(9ZF0b*NOV!U?_LmUXZQ!7iU@ zh_j~;LZOr5n`q2%h}W!^b!Z;cAJ_QF)Gp9tN}h$?+ny>t%fqzVF^P42wXJ$d%1fRJ z7R-A)nLqB*%7xnang}mD1b!I2Q|NA2=-jw+Ovul06uHHZq~b!$&jbhHefx1?6s)D# zmdKEw8csDTkf3oR_S>TbNRVIO=34u>O4dtKt^p8MFrvpAzEhBa%p8=Q1AIFLlV9Np zT1T2vkSCb@B0HE@w?Q^52}&QIHP)^609VIqNs460I?~>w8Z4{pacQowlCPkWBo{Gc zdR(ZU7^5Wdg+)B}?i!TMTs5wMI!TIb6i~NQsH0+xlJwS8_cz;A;tH56Ns)~;&2?+) ziZM#kThrV_(Yhs830c&0 zf{7jutqu0PR4RgPt47P)tAm)0iY-O+-1_SzIo?&b6V#1b!$DoaEBGl2Z`|1-Q{gV7<$zcRFUrRs#=b=>SiaPnm| zNs(bDIH6(^_gH#utAVAgcBSpvb&xfJvxVKZ=KfvcL1n(*5eX%3MRk&#!;tYyGa(2j z*Vr^7$lO>dcN!5))bvW+Q{O!dZ2V7aiXJYiieT_?EpKnr$S0=TtRMIa(}*PTjXpej z87~M+$pn|JPLi>bdo%(|nqwnh@8>JjEXm)w(BYDN&4ubE`8q>pAPDttjFD5lTsAWH zFkfLPNb5X}8pSk6X!HNs0_JI)sWz>}7P^!cu6uhmBPTCFJ&SD{OY|FkdyZI$FohG=mUVqJ{SmElQ; zTm!tv*r&bZ#cW_whUFpV6g{ztl9n345?XLC3km*t#|VQ5Xr4oE={*o7Wqix^6lU1Y z*E9JlWBm=LWgcbHy~t`R*YUiV$x3=2)3Qr(3vxp4YUJu?%gAlXQl>lks>=)CY{e&c z6LKF*?@#H%K+pB#>%=QTOWXb?wJ)4$&O$nWReLnQyJ=ZLetV=R+SSpX-_qWb3jqT2 z^V?dN<#+Y8M_X4#to)wtE&^H_8}rvroUmlVxZJkZ_MWx5z@9%TzqP%wt)~h2eq3B$ z9&)mPzmNHEaKWzu(O3QOrzp$njy6F&`drX4Z#g;)G-Fw7dlL}wzyXM+NHe5i4WRVu zPM7HH>WI2TLuad-ZtQ4x(_jxb-4t2Y(_$zCgM~q8SJY*){I-?s_NTMIooM_0iL?DF zw!aS~Q=0wBiGiP_`%|3tglzJsEC6UB<@ys(@}~ip4gAjPJSgZS=P{D#^tlMKk`q7o zr^7Wg**|!eKP9o;h@A|)i-Cl)3lp8bn;?O;+Rhsmq%za}{U9gNId6mQAK>h^HbKsL z8)i{@vcFH%KLGVw=pWY4KOBnoON1;Ead#q@3IK^5Bj7r4vOjs&EU2IdWS*V{dgg+p zx2$G=pUGIuFE>0!g=dp)_MxEH6n}Dye=wlwvrzS3^!9^rJ25>@`N>}0?Qy*-@?=u?C9Gjn9w<9?yT4B}>N+Qo#k$(gzEIu33^bJ=u)fXy zaALE6AKQ-{Xc9mZuZ1)e+YU9PWOAQ^ITBy`(Oy{q_I}uca(%dGG5`RV;OZb_B@oVl zEK}V(7%XOz-vivyng^ zhaNv54;T^xS^i|aqL1Mf{ESE=CjtG9X?x8k(1WGKbp|jv*dcg@C(}T%Hj}k7n0e;{ zaj4*Aqf&-H6B71le`W!+aY}~2Z(`b1aM&qO-<=+o+2xS^IA(|Z!w&Oj9Wo2-H`Q}aDXskIT9K$(E-9|6sDR(@ zsH$92URhUKGoz@u)PjoPyWozlb#odzJ0nfyRaQx)ab81PPXq%scXzZ!%G=8t+MC)U z7-TrBxS$|wQeI(RK~~||f=LBq$4<=3UDe)^+ZAcbUEk3jF;v6qwUB6NZ0uRp)7B7; zo!Vjh7wq)g26=vnaEIg$V zYRhfzM4smE#SLWip z9BGVpU_rbMG&E+i+_r}9}LRHhXAm&Ybcp=!fcsOX{HyCXBP{U|sC0Th|$x)3BD@ zpt`ZBy}Q-zyYkA~x}u5-C{sD3d}e)(>A$+7=@q3`ZM2~)TE42GC1O=Kww6Rzw>Czq z8=}j}Q|d|=)Ge7?Us|(p$sFkXA6Wp+LX7J&dP6nHM15-4bw?wskZO%WOGu%zNJCSk ztG0E0gsP}5ty?m`sIIuIq-y38bjunPFukXHP6L$fssV1Rsx#6q&TL_u3noz6l2Y{F zCDlcBWmXR~xTQVPlm*K!1PHE;nkr_rHMDf2#G>Nra^s|x^J=Xg;5w)f0*Q;C*Fw)m z+&YRoI@jTs?&$cX^GYl0mQ+^NmCsmc)j}N&(Vnh|WwfYhT}HNJ@16tukSI7kdPeE$ z2xv05C(^a9xS_MVr!4}PhGne~w7WIZZ7o6Bo(3$buBoc4g3-0-XsQOMt?h)+@3B59 zt|%?4SyEeEQ(9VS)pT@3b;n`fE-5Q5DnWZfP2e$A)uqz&3#)0+PKScEkuL1=?&1#E zGtoq1I*m$I7su(yzSW8qPVZ`MYKfG0h|P?%HMgROuGNtyV{3E*<*yT=mR1}PZEaH4 zjcrer7MGP4&o*WU@9e5r(`A8~Yok5O>f2izLCqLDPI;!~N|AYy_NI<5(rIQSisOSs z&je?yM4z5h1sz%iQyPp3m<=gYX1LnAnu__xY86$*MRnj{(lzBq?>Rkf(N>se_t3wa zECkM5+ZkzWZEkHW>1tga>8gVNU@n)R^g`XIw{~k-PMsU_C@UVnf2u*R%OqsWuQZIHH>i>3IO9UqcPH1+_}!0(b~0Y zO+#12*vtZZRl+Y3%D|{>0Ndf1JE%}w2^NG3aM!i1QLiIe_3bO$JJz(DexWkpd6lja zVcnQfRWrxTK`^vx7Se$CxMB(Z1Y&VdS9eEOaYtLvs`fpFz(9ogqqwc3J7UHe7_%nc zXe5PaVS+**ViqXUAhq6vb-IJGb|tL zBTdxzro*Shv<~Zs^or@$m`tb&YUjnXs12L|*0-Yeb+H~Yv*PU1`fAfz#{O|skv7nBtDDCY}*mUtMF( zYiTHkwX$2xY}LWa4fTWNi5*9~^f>|0{-R>o@YKdhn^9C(R|SLKs$RaXyS1^Qjg~~K zz7u|m6X$H4x~gpk%lg+rmU#41lCzvlG=+K zsE=fQtcbKgFU(nHW-9C+=xDG?9Sp!;EJ1ErUJJ{3WodC8F6VVMFa%+WhnF2&V9f>_ z!;N!WTl^#-{$Ex;vy5gwp7fw2CX7R;L8q=-GQYe8*3k-bM%Sb@(doq{(GJ+pwXSMt zvub;m(Ue|-mc}7S%UEyw3TiLDgGq_vRh^dW=uJ&s5%_&mtd{JF&Q8XJzN_n)0VYD{ zm`Dt;Z838&`DIZQdUqKtvE4FFmBGGs4(z6)9k4bOcfb^2j!Rm>N?Qw(sUZM-c=e*6q_L0n>;HnZ^KYJjUAX|IWTcQH5? zXxhgnSHpg~xua{Tq6vZS!e+F# z$p+YaBSwnBGTqwI)Y?dPm;t*u*u>6+JFyzr$k9lPcEGqZD@tqko?8U4iJ4boE;)Uj z=w;Cmt!->*Cj-JN#Y)r*~y;C8~p5>J@&4`-= z4OvoARaAnj2=1!uU@W3Es-1Sr=uk07h0c=AhM7)lZY3t2)}*TWJ5` zTAfEG%)!mAEwH?ztC#^E^9iH26d?yP6~m;5b1Ipzrl=ge9nFUAsVT+z(JaE&Jb13x zBP-PWhSunej;`4e*#CjDtT@(+yKb5p+JSd@B(~GGc#WB8EFC{lRra)*X9ZYoZ*w~0 zs7&0V%JVZXbI1a9;3fl;=H9WmsJgZuR!_JVO)sw~uPX;vpVQeL^8w_I`5$;tE%<0d zlesS~ZO2K?Y$tGIF~4DDq^FZM^)#4jA~-HrN65>t7(9Z&8`?NCLpd6!(3!ZqfyuG0 z3Fngd8wzS+T~S?qt>vyY##FTZkvl5h6;Lhioot*TmQ1goF~i);*0=X`V*_~RpT17^ z@Vs}&HY|e29%lH+zR)aCs1FUay3$&30yE6w-3i8XTthv+9UFgf8*~&}TvSn94-ayn zQ)-HNYcG!p=G0fzmE&$lrsLRdwbsG~7atn5wZ+Y!7Pu1JlbRiMO{s|5Q-Z~|Bj3l( z8cwS;d(sA$x;NUmys4vw`WD#R8tM5@aaSYgX&!L#CQ{l>mNRRFR7em^B>dz<;8;s= zKJYjaj>67%yd6U8{75m}jTX?Jw2;mRQ2`jFFw>YpYvww6jv_izdtq-=*8z>DGPHlT zX2A0%v+swd^YAV*J0y6TMvUYDG!2l4iCRZ;RVtH(lEZrfPQwIhsMVpt3OW zw!;&;*d91$JZvxQ@@vYc*VmP*=MnrY$$L{HyM42JjNgUPb2nIHtm=lQ0`gnhL(@hv z?oKJ*4Q6z8tlDFDNdvK}a$ado-ID4ms)w3ax~ws-Wyn`kI&O%)C8Ej_SAn!7Mr zpFPhDWx}jo0#6NjuW7mzAJM|Yk%}UCZUd$=n^)X1!oo9SjocjI^ooy>)V-N(rQrem zk33BF{=GL}{-|mO0d@-Ay5YRZ+c4;2+6*8E-skWR5ceQtH9al3{eXW5usp^tT}w@Z zTNK#B!tEA(c^&_(9ekZurQ!y-|7j!Uy*}Hb+-mxpNo)p@XK~cmrEs&3kAktUU|-n@ zdw}*RK5tXc1EE=R9}CUL?WplA_X!vMH79O!Ro~v`ZlBa04eWk!0>GgT%XoWJLst_$ zc`)K~OGpPqut z?i;6jcb5&fPrTY;yJ%-tySyjb1P>4`-kC5wzoBat-_O;+$Ff+EpPbQlcMl`R4HHy{ z_h+8xdaf2`0ml1q*i6Gz)Uh)5ym)?5>@l2s?#rFbc&iK(s30NIJ zca~O=Y}$z6JrCWG&{n7x?jGnbII*b-HHg1!KzTE}8akJ^Hg=o2JWecT!zhGX*f`kh zALLc@i{QZtJQ(I>3LmLVw7@*{R~m3Iylurou|3_7Zc~vJ7AW_gf}OQCiq4LclkrpB zVv%#wHU=xLr2a5ZMrJguYHeHB`yDVm^^UtSbQe9k%_UXM&5ztHffLNAA{@ts>P5O? zLQ};a8n|0LUT5L&eB6GTQ{Y~pt_mJq!dH*Q#fM~#tX~GtzIx2xRdXlx5LK9?{?1A- zWfAb|J=J!kAyW0oq<)W7%ud?0x$r1-8R0Em($r_XEqpe>@Ny zOR3l=!T5?)31jp!-i*|=ZNBNLnWs1m1QvA()s>d2BuQnNr@CWuR${&Z@fG==nfjLVnv zH4CnP;Pe)}mZqj{_JM>4Qv)+o8sTi(gRk%4G0a>@Rt94Q9&99I@&!G%V=`j{JbcxR z$u9$N)*csRORzruVUG*|98pSTI&QDUXE^w3Q7?x>y}oCLL(yP*!{c9b6As5pmSo)3 zu~On_AsnlZB;&4*`B~mL3<-yKDxaFp{2vx@v8#yGkyc(Z#2!myCj9}D613nDKmLt`67<&+O1XbWXm?Ze*hT$yLOneNeesZa z07nFT?rDAdgE_j{t{OkqgJ*d7tJr?X@5R^c1%Czj@X-8;2BsKxl14~I2>g~YjiRfW zPdr}mTj8TqJfvR)Z)H8;qhva;84M9E{)YVcUyiYy5II};w;{$W+{aTvvBHbd7;u!C z3(3Y=;ALJc7AyQNyxfoC11@O*CQu?l~Hr-IWIel@r2EQJ@cpI@qQ z`E2y(3SZBLzeVAf!l%u6+-WYZ9X9fm_=v(AxbvS=_#cxD@S4Iu;?8_u;ZfHAONBqr z_J^TQhxG4wmY=Hdvi%L;V1?hz{XSaZzu|s7Sm9gP{>2KP#g1I1@Km07=J>OTj#PpO`t)<>Y z@Uwb&^yB^%d@J|k5QUF0?AB<7=%2*=$0`2zc--w&_&w~0S1A0Z!A7C06@DdF1c!X5AoYIE{I@Iqmze)Kg=6>= zJbtI}vsnMv6#g;KGjAz;Jj;1s;k(#ApD6rk+;GDoF>*zJhwbpK;y;?({kyd+{gGI6+V~y z_hW^B&iy@!{YdH^jW-f-9H#I`**>KTU(KIa%~tqpJfF{1_)ezhD?Fd)lb&>{TaG5=VF zf6n_TiA5~@_pv_n6+ix9E*{MaAHn_7t?+to&&>*dhWq_ag|FrQ+NJO%?6;39d??F* zLE$H}|AcsaNV`VxIGv#Ibgs8e;otE3c&frz@Vs=V!Vh6Te^lXDF#dwVmouHn`J(3& zJU?V8{0`n%3|IICyl)(<@ZYn2rYigtwnK%&f647#r0~a3F*uehJcs>fjly^EJb9VI zr*l6&qVTs^pXU``$bMx)!NunJ-P~VOxSZJSCa!mu!k3cv5Sv%wC$Zg5R`_O~2Y#;b zsoY<;DEt~87Y{1@0L7(*#q(Z~!awKsRxA7!_Mf8^j*(;V*s5@YTGlxVzlY^trtkpMHz<56xAz`} zkKlFi35D;+`<#~){wCY!Erp-ScK=l2uk$?fy~2-TIemECNWUD(a0|Ap7P1fI{N-hG&_K;d(_-%Aw!0Q+ZD;dik;f2QyxZr6(n zpU!sU-{N=g>({c~hOs=+^J*TCa}|C&>$yhZ3)w%MR;Pv_(h5wrU;WmXI z!}IM63Qy;8A^UyNe=z&=IF={)a`6*|=W=^DDZGH^!|e)R!u&fG{w?>{H3}cfc6eRk zH?iGp)=TuP=kb!O@Ta+5bqYU`?Q)vJXR|(cDSTgU*M|x}fyZ4s&(osM9~mF7aJdg} zRyalt!Q)(o@80RiJWtIKAEU-_UFSC{wV8Nq3}8E2S+RX6!9yCXE6Wo z75*u&Ly5eP5Ix`E_7p079k+M6!iRIaF2%ou+x57@S8#v5r0^2f`)!3^ z%kn={_)FYhHutCKGnf58P2s7$4vts&{_LN{3jcxWxeCY7S$Hf_xXkaX6#fYF|5V{u zu%25L9_Dd$uEOW=Jb8t}@8x;yCWU{F27%*#g_pA(o>6!`uNSW>`~vQ;4-|e0+y85Y zk2cj>vhS0A8OMG#g2#d2@3a1e3O|?eX$qgjepspSyV=f%E4+Zm=?aC{U-fY%lq35h5NW&2Ppht?#DufSD-*RiWJ_;{adZ@kGS3?3jYJ!p8_l zxCtX?S*Iv`3fpIg!dLP*`lZ5u%KG1?@cyj-!wSEN$IA-}uV#PyLE(#de(uBdi~Ubx ze>+U!r}F$WTj7(q-uVj05P5hsDm=jJW{1KrW`Fpp!vDnlCn)@Arq5LPA9xkdUdiQ$D*QlFR~;~P9U>few3;Uvbz{_@`G)gFG-=X>~% z$MsosarOD!kk)+)KNSVS@n9BRT>j%3f82wkJ{@eIZxt?oPYMr<$wB_hc|IA#IEqF4 z%k%SM#s3KVXQc)P>{0YX_EBpb*H+XPtR~P%$ z$qN6B7xD`jw}BT$$a`#;d-%~b+u=VRH+yhw?*#7m+Z8^B@q0YDSI#3I9OcM+Hcu%0 zUY7Hs2S+*2!hby8_uwdJ-volKj};zb{4)>kmGi9!M>!8OzX`r&{w|OBeT*j!H}%+X zLA%wm{WBDPG~;=U%lN&A{b#)5m-oOc6ut;;AaqM333zeL+Sk5I1KZ)_H6h4am@H&NOGk!bcqR%s|&;5JBUsiG&S{9vu7eb(TL|;V&^> zsPGwB2#yH~m-k?1DEw;XpQUhlZ>P$GqnvR3ZKt-j>6AoJXhhT zGk%Z<+Z^tIU6Z!hgf~K?;}mAr4mfN$d|(JUIHv0JeY8Uhr~-??$EIn6no=(PYzl>gP0G z(l{;cm8|s$z@hOhLe1WdO+&~yg^Qn*DSRW-YZWf@`6&vQ{lJq7m;K%w3b$CP1lAu( z{4f5Ksc`AvF$$OauW1UG`^q|n%l)#I*S&64v|$-sqh02@TvA=|Q%reL_}vF94}Lwd z!OB|(KlGPJDE&_Tl2-iqKhLBamM!awtQHD>1v8Gbp$mSa0)8EVnT7Jmf?xfQNH!>7 zRv!EwU?dN|ZHC`>hM)If8o~qQb#`@h!jDj{1mNq~7L(Y{G(MigdU$(d@naYZhXvve{P!MrYk)Jk zdtKHskV2W7{qHS50m^EbC|t_d^SDI}56xQuSa0p$#qD1(o{G`8mpHz4`=|FJ6HD|P zg=fn;Lp4m-kKhepu{8Ck+F8?r;?als6+5TBv9_^2hCZ)XeOK)`po3*PE z&+uG@6~jM2q``k(9(_^`F+gBlYNm^Y{o_4UbLh+d-pX&h$dr1)TNu*1{OVPC9r;%~L8%ir?`0SWO+nTzEe60SfH8CZoQF5BK4}6LJS!l@D z8>bM^Q(IfMjs8S)2lhtU<`1*V%%6D5PF^tWhvy{|D~nOcx(BuSp{&IZhK7RwKiJ%y z7aF>SDhLgoM)eiVFW>q@(Y&I1_>GyZpTqCJZT$=?8_AVboV4Wm`WeJ9%`)w(darqz`*u0j7$re?=~283VkAYx6@R7yqQ_@S>j- z9Z|Hz=wtXkxL4$(Tq;@?&wR-+ zB|ucdY0W&-O|QtD>84j@Y;@D@8ROh^N5(2Qy(VLkn_e4}nJ{qBtAZzF4*J4P5Avk5 z2lWNhkq!wXJ?Wgm4S@U2SD*=_h)PULC`!H-U}{6c^u9PJFj3qW>oN^aC?Udpd6iJw z7mEa}04i_~B$LflX6l^bbO01Y9K_E_#(1wrd}TkB$V62?EbU8ySRz(JH4)~+)`Yo4 zaK$x5_>F*CB3O$$B9cr_eLvLPbVb6ve(wR%$K=c>wp2qbAR@%pS?D|sN*b+?8*~Sh zG3nze-6tslyFB5<)El7%=AMeqHl2NR=HF9E*yfxJOj6{W)B{1%-ii>OKxaRl6X~2p z=K!6P=^UhU3Z47Vxi6hlS=Yij_RbNX2AG!KygX5mL_iZr5yw_$pHM}#KhBmIg5a>29$SLiDwuhZ2-hbu@cWT zRMr6e`KZLRd^wK+<5>E$ZQ|L!oED(WOSOsT_;MVW)TWudbA37ZP`k`f=lOD$0#$9O z^L;s+fLdS;OiQfwC1celqs|vz2`VyGZ>Rt_cb?BdjZNDZ`GQd(LV@*grna963Db6J zHjZIUn*(1U1pp^7JXyHUWQHr)B zrf9b>m!MqG$IBe5#Ae!#O8d$F_zThe<)h(sa zlvIj2PVxm$BaX9$<2vCm($F=T_h&u_eZnYop)U(L4RIZ`pQOBkQf%;_&rymwp<6>Yc>2dnha^$ABJj8kr#czBv^=H0)R8AGa3@HYK-x*Ebu(;7Mtui zXhS1osxuNlxd{d8AwLv&n0V3BCVN*xa0O*|Vih>z@kNGoWHz0!HtBjNtps+b1In7Z ztfU*9Z~|_5$$UvSI@u`77&_@DhbCBK=%ibmFiJ6oPP)~}ei3fb%`i{8-Q<~Jo^*$k z{R-qwGcxZod1ja=-EH#BFi*PI$$k?!7Z}d_oa}djT572KoiLhmxuG6#vOj{nPBXU# zh6nL`(@}AO51b`;?>cG}CdyfYZY#0x{AMXNK|5e3udxDSiOZx94&v9Kp+Je0Kz&RJ@-~`d@WeGt3*uLz zp+HplQRNsvbIl|!Q$t(uVk&{ZDndG8Q>X+pcLni-(NN$~VZi3aM3Uz+>w4;&#LU2k zSL(}MFI z?D52ez^BQ_yS4r~C$=XGe3pYNv5)ybckoM58Z?2Sc5o*Up}-Yzrsm%PiF7)#JK@hD z&?J@_7;UG01r+&ZV2qtZUy2$k*UrJLfT8m2oJOcIjcduagZL6vD3AhYss+D!Gqupy zZ=nEcZdA&*9jr1G!1}3$Nuz@JO=l=DONuYY;=Qc{hX0@-e(MSApYWfG{5Z9HdMoLW zAb$B73S2B)4j}z|9~v zeE=lPp2INI2l2zvP~bpeC`AVHZaU#SmyQZ?-AzIKpfnViFZ?TAeowV02J!RKP~d1d zXKq6d>=19grv>pt(@$jaM%Y1o(=ZeWz?nFPK_a~n zM+}`%JoApRgL%Y@-`)^!8S>&x;1$_q2kVJ#v9N7+*>I&!$DJ+ty77wH&>vhwhaKEb zMe!>+s^NMpN~LJ5&yVr0v4eLL?*qd7hRcil3nQFXE@O;~?chgL;4>+Z1Q|v+_7>}K zjUCJYJQNrVXVM`D**qLK+QA9LFAwo-|TZ z4}gT>rJ}LA24*I`Z6`NFwsF*V>|vyXq24u=SznTN+rzLDvq?^R&rlg$=liyUl|Z%7 z&X4WjMj&8;fio#^IV3y^5J@veC~y^Vq6(()U+myL1U(36DvaNbn8K9ea(^TyY!BZ~ zC4Fb72H~}zJts((Z2O$uP{>r{_XS4)b0{zh&QuM4N|}xV%zQ$#FnK3^V;KrymzuI6 zUvMdvZI-ed;)})Zy^;p{f~OGg8Nz!h@}jUoEN+M|cs;S)A}kLh3wDICgnhy1h~;;} z@+q>Ajx;6FYH75~^##8t-UQe|WDbIp;d7a}+VQ?%He`kZW00@NI+s9 zUmcvuQureydeI_mGDv4Nn!=_D%Qp4{Pb zrZ4p%;PLhe3p>Z>U}+=yXTBhQ+#d?m!kH905)$OVW}u)Dv&S(7F7pMCp#oc^z@^AR zlMYQk0??b-eLBu;rcn?S3-lhW_x~$F9zF;er!q=Lqh7++AwUQqHczA#73!Y897YOh5 zE-x7a`Vz)r(p$bXyhVmq!A$zLZx}v2lG)k#8_&n@8mf=s+-)eCoekyA&OQe#8+c;U z=f32RLAtpc|H9|J8~?@^#;?ctZv0zc_<5kRjP&n(VccSjG}QOLFm5OKZal#Wfht17B%n9SxoSQq%3FGFPn_J|B@kd;^xig(G*0s?zzRbzS!FZyf%AIT+ zY1<7o%L(H!I?qtE4Rx`hDx5G5n_n1e4%80baf6{MoiMuo?S`sy!sybw3{~%hac}sT zq2@VZ+yXvpsQJ(>K>f~83!LyzV4S>RsD(}#cX7K7wZsYIg#L-4mO5eFuzf`@I3_hX zVceHlwjo=bFmA#EOfGlAxW!6ia+MRt4OAwR?M@i?NLfsFIN@$s?ng2ib;36QIhM&D zCp-{V$%#y^cEYtlPGfS7lZQ)s8Ix^Jbn#FCR@_EZJiZ7VE9}}h60~K9YdzqTEXyee0DYjg0ut=9F7mwsIuUwe%Jt$ z9^*;pdD3G&=|WF>oF_fOlb+~FAL2<*_N1qJ($hTY>7I0nCq2WHF7u>kdD0c0^c+vR z(vzZL5uWr?PrAXAZuF#^Jn3dndbuaP!jo?E zq}x5|PEWeala6}Qt3Bzpp7eT8`Y2EO7*BemCw;6Zz1frA;z=LxNuS_JZ}p^4@}y7p zq)+jrPxYiv^Q2Grq|cx<{k^OXzDOI&u6=c8IZ(#Uukoa>^`vjg#6Op0;kXO_)fs*| z6bJ?Gf(PqVtWSLo-WZznJWqQ50Nf}Ue8DJuux-){M?FsxrpmzXvnVH)UYvt#nc+M< z2UoITSg}0|WSQd^e6@FkAZs{M_U!#}YLLTV6+mgy*>3*5P0mY{s}8d#>fp=;4e4opGwS#3+v_R}9n( z&xTUdQ=HU&Q~TNdlhR&A7CFi$mo#nr>ZktXFd++=7z3g9m&ffpC z_O$le)5*E}Uq(^Q-{HGX&O3Ol*X{VR(pGayFPW>Qz@f+fNnOdXF}Kb|BkmT>jo9uR zPR>JnOTo*}Iyo;GR{Ht5sK6c$hHZXA9$3UUkqhRQO5}+yGJZ`E!rr*_-owzPyypdN z-up@jwR`WYgz|&8^4hNOp)q+5&I{VT*MBbL1Q~0P+t%5)`s|;lcwTU%_xcPa)z&ck zQDOE+dT%uQ)+=njkk1?V|6+>xyz_#v7`KGQXz^a%W&zF%7I^Q|IVtb`Z3r#!<$foG zTDs4TRN5_=4vuCx>nmGv{r1!6#1o0{RO-W}u zy81g)e~;yG@??=@0{@us-;oLedX*$!109FMEbf%WU zpHKhlo-lx~_a9o?DGkIJr$1eS(={kY$Sy3zt;;0p@!g5j=#5QvS-D=0X0 zY(XNPS1>$&X+d5*)&pN`Oj$u*EPZ=HX>8;ncyQB{Cw_@%PcB*(k8S%VWDDYlmXwSJ zv|YjIcMJ0NEg0Ph>_$oD%J>=a^W#SqY*$h+Iv!govXuqHOA5BvEDlPPKP8Xy;w8%_ zPe$6Yb<5%_1sNWX9sA|@MUjV~OUcVqB0^=Nmv_*OG!dI+c{IxvfDt7+b2F z7t~dPyc%D@b%7|^k^9Z->Ry`c^7Mxxk>A!d=Q*B8Fu{ccbv>Z7ZVW(y2i`^y|B|N> zziue2oHor6yp>H_mFb=YlF&)Vf=$welB?IklkDi|U!_FKle+t}%e&K=<&%=V%lq&s z+n-4t2-a6{(szhtZ^w!QVbPOj%`BU=ylhhA^fLU8qVvEGcl3nR!ACd;R3ib(xM8=$_sEeUth#Yhc)u@MDy&lssg*UEn_U`GK4g z4?31b!iL-v1ba&EDRh!xm(Zr){rNbukywHP@qqk&}y;(ku0U6!t>Y^rl6*s!2Qd5)Ed z(OYo~8Ze|^hH>_+laJ=4s!D6!9wjHv_Vv&3)8dGC6Rn~zLSGsBtZOUG&2yE@hBimnu<1G#2r2hFLp*n3x(Z@rKnR5Putt*$(j zbeS#L-ugAYLc!aT?O(bTt-X?PszsWDEJ$TKyL;7~z==74MYo}P5vX(<(U6S|b(QUv zjTqxJUq5bvfwF!f>{7}WYgE^DVnPkHRSh%otTe*4g3OP2_8DU|ai=iFr_DvU#eYvc1^QNZ+uE?y*HKQ9Ob1c3PN0V?ug(heSb7e&% zl(W-jwP$ryNv@6bPN`k>qB_?Hgp;*F2&OAAt@b86){_&`yH5vyDLIJ1vt)1&Dr+m6F{C#nGiX3e zk)2q5WRo*B$B50fH8lqdmM1GQDfW3?2CbN)kq^|X;?lalVHFSx-AXKIS_Y&B+S%4d zbpN1f#k#(92Uvn-?hD#_@S9H=wPo-Q1|cEVsZaVdIxO1Rj75u6VB;38)K)Z9)mI0# zn7mTG%JYaQekQC>Er+`2FLi?!xp7hbR*d3UD&ukY?ay+fVqOf~2Vp?|54 z^IE3JY!Mo5XJ>B;zn4XWw075k1yfpfw&oS`7%TUANNC^Z$DCR$HVxIfYhU;z{jw)zsM5DuvJWaVb5>*)f1}n(;*qr1snNTv^}PQti31Gh7$^jrkR$ zhAw8wn7$z0mxeMz!t=TP%a*0EUQo+*;~$}>N*DB1S9NhgfjI?w!}`-d)cRqqtnAtS z=p3`rH?)JNS7F}Iky#IjpasJOobK*Scc>nePrj*Q9(GP@i^>;nW_u{X4GcN+o4d}Z z8)(OB=}2Z&W0*@gfhij|#syY2(qf|3uv;}XHr8v_(uRXBLqt4kj~M>y8s@p)H6JC% z8mOWQ=G!L=W9fIUQ!VXZt_xma^Um2LTF0*v+`{&67(#P0-KPmkudK`1XfNmmULk@IhBM7`f;a8Sl?^A`!V`rInm!YKPfAxO8l6>UP{K=GN8MwbsG*<#B7pT)?#$sxe2+@9E1KjXcd6 zEKIHiMxE?*TTZt?bqfVqGAvB4O!fEZf?m5@GY)2ukx9)`qT!{&s^s#4BNgIlPlg%j z4hQ|c6N}PxM|US)JV1@hWK$K+K2CQ73e3r0lXf#V3Ozs_?Q`2|YTP!pEz{p8Lo}y> zx$FF*or`rT_~Ces;W}AEYjtx?1$J0EWvQxUhtgV&jVwFkKlv9VnuEMaAWyud=I*&Kf>Lg)q`I z=?)|qOEN$zPoT@{~IaD(sP zyHS6Qqwf)d8oWhvD|s0+)4kdLWLJe-C&`cRLNm~jM2%Y}9T{!I9*n+MQ;(lV2WC&B z(zSR+G@uMxX>@3esru%mvKxEMK;L(jVS>|0O>0wglYJ?fY6ir0Yf~{P4`U$4JK(Nv zyaJQRk~pS+%oc48I$z9BWs~XoNi=R)cK51hfo$JW^~t5FE~!jir&dR2v#NAoPq-E6 z!lJpQ14_zh0@AZZ0X~0?g>gEAH*UF=Zcc47bYU^yTsOC^wc5N7!=hTs8{MP$MZH^3 z4qTE|Ha0C*t>Krd)6{r%rL0TG0UMuz22j)6y=trVrsmt&u%NoRwY{lP^U>;6FYOpm zGm&eqo`-i?)y+A3j=p>9a<7#zC%9z|R@aV)UZS?t&1BuDU7Knbx71;9YpXSFLct=uS;WlAz-79NPOindx{JuiQVRSjTrQbC4puwT_obI(8qahldpq?tnG@4ew>4GiqQJGb^q#)f?!!~P-A+lE zWAJV{vba%u!rRGiEIqlv5!FcFaqsE%O}Ag3%NQSS&ak246eso4l~~J){%j{+4F+74 z5MG$M}IiOQWxwuA)zQp!Px#?Fn=2(qmIO<;M z#xOCig%!EiYB0}FdR^U@UY<#HmZ^ocWma+GZormzLDUl5EE^i6pKkfbw{Wx50< zt#R(yVec9L&odu z0XxWWy3=Kg7S(Nj{ALM*Kux3K(k)Ee>4r&Em3xaYU|Hw4%vk%kHsXzB5X`Hr+`nu> z+fppp`rY3}C+*j-q3ILN-%0f&09^3LZ+zW~KTqR7{-P>>CBH{7{DEAZej*EB-m%R= z-rA9QJ8xTiEWA2YViqZv+N$JOgE`Co$F5RxorW+S}U2+;_cO zJ&1)TM-6-w(^Jg`ViJn!siK47kuUusk7EHo=^wTVfA6HW2F!f}@;Cl;HE_Lw zsXezl&b=}V-=c-DjB-+uH(di4Pm+5edJ-opk^c4JU!BvB!-7SlEF`vMuXevZecpBS+5HXK9U2k z*SFWhAE>-*jeG?af3v|oC*vz=nuGHYy@$g8tVTbgBM7rf%6|{`+WTw z*$a&PIvQ!G!Q~e!;?@~_KjNN)!>4~R@e7Q6HStXbznk^F+u*Nq%6Y=zS(ft!gWrP> znZ^Cp;BOM&mhI`wxt#4d*5JFlWP&{megN%ohQV)Q`R5q?G!BIG4L*nIA8znz_?%bV z3WIwty{y6IXIJ9Z8~i)$cV9I47TWnHgZJ;`(z(Xqt7vc68T=N?-(>J}DF3j*+hwr@ z_cMbZ&ieX(=G(<{RQ|@uZ^Lw6F!*Nn>sJka747E@gMUo-86dFJ(K%XfM8; zi?(s~8gB5vGJdha*E{iG2ZLY7u;&i;>7UFAYF8sajP^Fc;J>E+4>b6x_;}yn z4W8wEcZ|W`ran(F_@}6!a}54<_Pa|B?$7AG+TgyNHyXT+_4=;Cf5-AaWAJ*~`O5}B zis?+I9eF)J$NJ7R_-3ZRzrhb=znf$5ksRM@4BpRhy}{*IqQK86d5MFxM7||Sg-31z8~k`n+^Uh?e`8Rod(}T`~ibEG5n#ySF*mt8PAvJ zIIb(k7<>iow%p)1Q2#Rwek#YS3WKj^eH#t_A5s9gqYOTp_S0qXdfMTo1}|kh-C^*1 zS)Th1zCG>gLxW#IJDJXSUOyeo_h5rB(b5OO=M27(dRuSsL%6QE+~A%A>FWmXW53v9 z@Gmf5&*|yQDW^7yd)&zXj`jSl!LOu!zHaajI4*r`@K-7CIdpu!KWF>yM7?_aWzH89 z4Bo}`XBqqs*0U!Ej#B+p}MfH~3em{}~3a=Q!D6@L61^ zZ7}$6nD0df{}IQ@TMRy$={#rfBdMQv48AwlEityIJeL2yz9S9p*CC%axE~+)G`Q#1 z-q+wiX1}gBcqR3|(BSgpS#ezkzlG)Z^P4aKMI6V@F!Cw(#|sR;iT&apgFiuiK4NfJ znjm=E;M=pDuNeF!u7BP)_=9YZJ*W>~emUDl+TWjSjNeiFywK7*f2J)UUrO`NaKHh3HD;W~pK%JKFA zgTKY`>SKfNKzp9Z^nCdzdOI=rpQz_G2A|0EPc!(g)X#+mznkfN#o#}oeLrsSEcNz| z!OPfR#<9G<{132Rbq1fv`k!j>LYC(SgO{*g&l$Xe<@DU^KHtlU@5%Ao<5zLqKEmK~ zpo+M24E_Meu`L$oy6`Q7%K>TPCiCv|b*EF|Zy*MLh3Ow+@Gnb5xJ3q!a~@f4@Kafy ztikuEKEG{o_M`U<{wVv)#|F=`p82$EU$1M}54SP6U;mXFypHL#8hkIVyVe`Lh~@aI z!M{d3ywBk8F#R_TK85w#iTd;9|A2CH4czWn>MzDF7SkJQfwgO^bMHyC^m*6VJA*K%Hd$l%+sd`}wOxBE*5zl`O1 z$KZ9e{{ptNuh(kUYfpo}#rbiz!S7(W#^CQ#&#eZ(o9Qn#_yugo9)o|0r~GDve@!Y5cZ!Czqds|-Gp^2Ztco3yhH2LB${ zU6&aA5tj36gWt=3cay6|uoc|s+_%E3L(*}Qt+=b=OR2$sPxjwagZFapTMnhYZO3wX{Xffg+{xfG zX@}ztu1p!w|7Q)p3(J!+_z@i6jy3pe)Whip_v@iA82m}5|7C;EroDaL;J0udzs2AO zG5mdl-^OwB5ra>o{XA*#KXZI|(ctf~J^c9X_3Q}Pg5YB#f0PfieZ2g!On*m%A3%JZ z!N0@)JK5krp8iUVbI?V>hQCaFfXK>H?eYC-UNjqF^aQ|NNWP=N#jkxm+ zej(?(FB+WU!8Hc=`;8k7{yNubcN=^I+v~>$zk>3=F!+PCx8EB4W7^Ma20xhk|G?lU zbDtjH#ns!l`%gG-Zg23D*dKQ>_zUb`dm7xoUz=s{B*)3Q1}|p$8Vr5`$GyW1UgwG( zEHn76EKje&&t&>17`%`6c9y~OIWApn@MEdxD-B*t{96W}$9BBk;D2E|-e>UDG_1!A zej3a3YlCm(`tucopTY6!9fM!Nat^~mhT?p?3-gG$5e6U2@nI)}f0Ogq9tM{Ku*FR` zcqRMMK?X0Qe%cJ~|8AW$_}(n%DueILadMr(w@}Zg8GH@Lhf59K$9{2@!H?lQdxOCj zaU8qT;NRtVb-%&4;k@vq!Ea?hebL~LQEzV={Bfr9vB6(w`xcaGGw2ttVmdu87<`Jj zZ}&@R|KlULs6d{J+pA1(8m4L#m>R)F_CAgqpN-%mzXAWn9bBfjFr5=!FsO>)lFoRx zZ({_PbUb%&i@`s}GjWT`^cLFlAJ{G(5nR&wDc>_MH~53ZyCS%h$L}}SL~u!G7xu^F z489Zb^~5Dvfi~m6xXa4)7PiYRE*RWs@JEP0WbmhnzhLlph`(=ef6(2IyE*}>llX(WP$(swLb-o5{w&0>X-XnK z{?)sNNvg-nP6Ikv{oiB#@7dGEm->r++xpK1X48}ye;FrNeBV0E-Tl?dHsOKAM0Q@e zi?QzS#9soj!Q$UD-o>BlZsFC+9)Tx=)ql(Cf$^pOvedEl&jPb)O3c@pf7#zDe>Y?Y z%l{?j&uL%3v6rdI=D!}8{)06x zg4e6GzbtuteBUmE9bYjpWtj?nJdH`_0EAVM~ZK~Tx3ls zZ2;|P@wk*$WB@05UU{jsN0gI1Z$fD$peQGK-d?2(L@L5bo;SHPEl`A$Ja5|A<25a@ zKBvOGnPWE!0mn%mJ4^%2xLE^^lRVa<0hXdw1CEnC);3B?&Zbx}>Q@Lj z+RoTQ6?2^Au|*mnCwXjfOn$ncT8^DI_G^ga{HLoQw2IQ?u`@?pi5hGNFRz2pD#p%@ z9S0#F<>C=zkkThbQG5`}Y{mZxPV(3_v2P*M_=MP&;m09Ar{vqpwGEY%Ja)SVsLDIa zJ0MOS-C5p^fMYX_-Bm7?cl@%kyERZoU3@pT8gBk%P2ZcqSD@G~E~++!%K@C^<5g^u7ZVjZG3mA?(h*(rNe)aLoa9GotPUSbRH?Bj0Z#H0RpK-+ z@ntXJQWMjpEI7%zZqKh#tnlvLh8jOQg4caefUFJ&rDyaH5BYIebt z*vKQ$kzG@QlY9#vF$7L>d6aO^z)5}vLL*%Woa9Or?n2-szZK8QTnL=xuOKwRg}_Pv zJVN9oF90X`3It*QxNg5IOk7g6MRe5xC;5dc`$b$!CBK{;YYa|u5pnY1B)?bXe=PEn ztCQE>RtE%c5L1PWciSMZPVJ22OI(p-Tgt(*f2gIu1^9NyRBT4o>nPVhicId3=j|=DK+toa7JU*&LS&ILRfR>*jHAlFKvK z&Ew!C|0zO?oFq8Oe~Hi%7Xl}_sB(o1fs_0hJR>K0;kcqXs6ug~23M`+;qa8`MOqn8 zmH^O!y{T}+$k!1Ntpl}p_jIHz15xH+Tn-0~fZWF%0rjpgGIaC1iC`Q^tAh}8szQ&r0O_br+Xk>bQmA4AIHVyLz07$X-q^Ayf0`kcyldU+{wPM%WpRLbSh zRdl|_xY);#s%Q)f_ZEFy1#a~MQoUS~YPl3WR@)|CT6p5{nW(l?!TR#=X|?onvIg?q zlT$RnMmSXiZgEq1ng-Y+rjCH>R$2&7@|O@&yDS7J`N;?{ z1Ws~!lyJ|$N#24SJ%<@M$^VRp#fcAb)m)0P;CH!*4^O1zu1Me{mn@4DlE2n4zGu-) zNP)-)SB<_%q7OC?IQbbxohpB{mp?(|WoVDIR($`WvsCJQFLjehsYT^{8mz!Tg6w56 z<}#R9^h1sMppW{zM9s}fI^j9d#-i6%^c^o+fH~H!Ih;US(I_Cri7~ip<@ON)wQjx0 zI9DPCV&0ua6)Hc^%O4TSN3uP$Xt_$Q!nIV0$xEa`qWNwt+Mp5}an*cp6e-PZKM~br zWlAoQ2PmKnm& zlqAH%JRUE)Rt3I^Yv~sA@U^0Q_2G|k)e`s0neFZ*aH zD?198xXxTIad479qY-}RBfJ|%kk(=uz)7Bu2*rsaT(y>C;nCD60ZwxHDia*dUg8ih z5!tvzat0^)LXB{gk8qqs&}vETokny-2aeeSoaAR}1o^5}%W!QNL1W2UgpET;9ebf^C71zmX)LdR;O5@-pUx3HXY{5ycWpE*I zl1s?VFL7{^OD1lS90w=4gvfdu2Pe5?;tBvx@*V^*!QiU(ybzv90W_#1MsebcDk(*9 zk-Q0K zXOVqH<^Y!@ILU|YAW0^0)g;HjqjN?u=2LNSk{^z+vwCon%UcqLz)5~H0LU(LatV=>JPuBBN!8^DPVy`Q#ff8a)g0v$mlD0GhIP|hoVZMdBzG4NoaEOjbR(`B zPky=)i6^xx(Vuf*0f}n5Xy7FOokn}vM=L~aTq9|W@Dg?xaFXu^nP{6ZF>sPgY?m@P z$>qoX#feH>wLnRD)PSAEOCoNK<062QJfjh^KEfA7LI<5(7ZGb@4&Wr0&!9lD?jzj2 zbp*w%N}U6uWdm)#M2PgiJNm_=m4NxmB%7AGd+sAEZpILQ}ltacx3t;Et=>g%6~EI7$eQ`xhq4cm@?Rjdo-G1S z@;uZJdw1a^kAstZJ^Ze^dpj5 zI6|y0ILU8Ah}E4HE0;|Ps|!wY*#xk<;3R()AyyZhZQ8m)Up;Aw*QGBPC&a{y6Os<9FYC-$OkTr%S^~p& z++L;|VHQv9Hm(q#`4uOA2T5TTPn3_7H(F=lJ)2kldL}QI26J+bVJ!F@u6cQu|My>(*!Le~CLYN9iz=o<-e0H$0mu7` z{;PiF{dIvJ$NTF7j`!F3JCyg=`MZ?U*ZDhBpg;h_FG3E+YX^SP)1lw%>EY#ieDn~H z?hub|cucz|kQt0zN%@}~snNeakM4l8>i<9F&XqIe2M|EYJTKM|JMQ0O$NleNypyGab8>e4OUM#z>i-C<+L5_@8N>sFU2?q;h*J- zb$?~IY5wyZvho|$t=%Vc$l_;agSeQUgtYa8Sjgx(@L7!C`3^+o+W>q=W*mO%7K|E( zKXudjFAMO&h~hr%@6#23^RGVa@70Ru^ycvf%1b+l^Ye!hf9wDH|r*GkzMpEx+>)<;(b%IMPTe z5r@xE)p>jgt3Eb@dmRW=7QrQbe}-}c?$2*8aqxIZg!vcWH4yXHNUp zud)0O7~G$Q{}Y23%ES-%bAxYSzkbT#o2a+v4E`I+|K8x6sfRxr{B?Y$F77RZPv#Wr zxi)+|dO6R9>hblO3XUtG-FbWy!`m2KetaNql)*h`bE&~^qy8ru{0xrg^9(-B_jiLI zf?sEdOB(!j>eHXS@5}#n>gRYPzn=Z>OoN}!@I?mq<-F41Q(3R;4SqMv|FFR)(awKm z@Yzgf7uu08|JkhX?gl@F>F;UqpK`*VYH)w%`z(VW!|(wHKa1nZT!Wv^dA8Qzo&&Yf z;GQ$)NQ0NNe_d+uSEz?)4DLBlUp4q0?Cktk-0NH?kic zVDML{=R*zt8;-Y&3_hOayUgI81N91nKfw9-YJ)#ayS>ifZ_u7@Gx)2tAI}l&^&p3^ zh})UtjmKv)-@^s20xVY9~r!Zc2dM~)aSc~>!MPF z|D5B)9tLk@eLWYCPiGd>Pa64Fjwcy|Q$4|P1}|m$XBzwmtj|RTZ)bh4G`Q!!yWZey znEssxKY;D-Iq7`8mNDO782N)a&wB1}FaJyG;SD4I66gIfA_(W@r%?a98QgQAwix`! zEdM%#`?K{=Gx!}GC$BNM``IDR=r;K49Oqv&_%N3LEra{|`d1k8SgP*VA=|P2J^m&3 zqn!-yIeh$?PUm{Mf*I#;Qz^b{m9^#u$&JYd3Iqzq9vB5nT;BtfKGyQ&ppT&N0s=+;H+UE^^HSPOegFjBa zy=d_D>@VB1J$?D*&^~ed8T_wozpTMm(|$G?{57WYQ-hCTIo~sQFY%o?e*5xx4%9;p zUQT;H-r!ep9NTR0ud}^=XYj+=?z`~r^W984+}q$kWcvFX+|M7i2EUN=*FuAPPO?se zf0g?Diow6ee)N*TJ6X=x3_gtYeB0p1vmHM)_;$3zgkRUd2BfOLWII(Ed_31(JqEv& z`FajSug~Ee$8It5r&9j62LA!ux5(dFo--*o-QWkY{HGZF9F~8B!4tIqjRt>%{qACe zk7T=i)!_TFUp;Q{cRBvNV{pIj8OL_>`uPj>FxBAgw6}u{?%(6o8~i@j_XvYuO#4}3 z@HMROCWCv<~(egNm?I}I+Ueu(?A!F{`X zE_h$gVbt@BMt*nN|DO&1Ec4xo?cme-6YX%EQ6oMcBwLWJ?q_>LU6&ocNvoR2RxxEv-b?iz#d%=&)E;3L_;zHjhV)Z3#5e~A6%HwNF! zWgGm#;GV2h%^w;5}R?tTgzZ zw5N3jzl7`8GYmeN>G=0LzFv!H=U+AQkF$NhZSbYk|91_3Jl6>i8~h};?^6c9ka~OB z;B^eYYw$-|uL8#N<-d#bU5UYe#Bs@U)_eKQ9Dk-5`M0V60}Z|p`_Z8W_Z+B;4Spfp zce%k2WPSP#UPC>fV({14zMnVv_gF8_74GY`Gsl5%8TlmVxw{Nr&HnI^!954+QwD#L z`gz6Rzhb+;Z}7+2E(zM5FXvrs$1w&^hydIk2LCM6*~j30OsC4=eqGpNa5)TL+){&g z)BcY!_zLPL%8e>R(m9kn&&d1t9hV#YdD{Qi4PHsT-DdC`INv>Q@JSq>-!S-7w71=P z_j-Pr_Au4p4^Yns82okGNv*+G(EeKuK7!?3V(=>3XP3b}XY5*o&!U~5YVbm~@A(FQ zkp1^^gD;|9HXHm5+Rt|kei!BMF?bWxf5_n56Mw?swbYwme|h~s$aa6-$ZtnG^zRS6 z{Joqn5`6FL@#mWAJM^ZX9p$g*2=)4emKgFEsekwC7C*-+|-Rbq4TuS=OQ?ZqWD`8oGMeipiFQ2y&#LCz?cZmsw(cs zMQKNNb;bV{r(-s?HXBS9uC8G6(!Rc6a)gjEjUR8~nf#cuJ-KvgZ)){`$I0GgW_b!x zoJ3bTlk)z)Y;Q2RqkGjVe0Ls9&U9x}ljk+GP3p@gJ61BhJkviJ#}f6Vdb8_XDgVn? z=`PY1UJpLOIo@OL{46R&cZE+dnpKF;p^wvAh}-aZJQ2*suVsvAn+s&)PXlJlByv7} zS($`#&dTnMM`Frzaw6(mQt5yvq=0Z@OCsm<=kyXB2+XDlC|FS@*C6)Un&VL&Si8@<;87l{i-^BL6G8!3v z8$X>%XM4JmS=^O||2?&QxC~W~0B_JHOSLrg5iVzSEn_McRXOw_& z*tD_dXj)YF9=$5`uNi%K=wF*lGk?t3XFQ%?I`+?@e{96R$Jp(lIxSEBgouCQPD$V-Ak5!W zL-CRM6~pD^R;_9N-0gmdBpImOPV#aU&acvdqyEdU-cF)`fKUo>7reto5hNhYuZeX7 zDiR#Y&mX=V9l|BwFiKKnpmCJMb_9g^O&V|ng!zYQfEhPyz!4DUw`hQ+Xw`uG!YIFO zl$6{xMgD?OFC*YMdh!>lm?I#}U!(yN5autAJ%U0yO`SIOHpFrM)71|S6>0MPGe_Kr z8n{)0UI*b&$v-!CHiUeXi${z{N}m)(@&5w^g!$LR?nb8Z3He)wpN;&Sl5Z>5HdF$_ z{M$7^Ro+qF2XX4?&hirxaMVTlca=-!9hp@A-5MyPF1{O^fuwcqlwYvZNFfZ=d)*y66^bK5XyI)x~`0afN(7W#fcMe-Tpvi z^%ZzZ^dfnbNU2JsI3-dt2wn?Rw_Qu(ARwH90Z9o6;~*eB904UDjDvts0*-(%4gx|6 zIRe5s2ng>-XsYhH;vgVgj?iou0s&zRgW4Py0s*1?@}Sm*KtQ+zp(Yms0pZCA2?1do z1cZ{ldjJB$l_(-ZARv^G=aB&cp_JIw9R!3~1VA`|tJeJjcwF7J+7iU$QY7G24+6qF zfNrgNrU?Q<`H0eG00P3FBT$@p3RlfQD(5ngR7$o*$|Z5Rs85G}7Zn7ABOzOykUvpq zRMCWsstw`9KtQ;!iXG_1L`6 ziEnucmztO+WkEnFHsJ~c0z#2=0T2-WTvK^UQptn;ye+A?ixli_Tu{dkfT~H&j)Q=3 zB|4aEN)Qmg2UIxuC0mIkI(8KtNcCMG*!7T(vlR!IR6zDPQ73=7BI82na=oE)5V6PSZ5n@Vq$j zLzNXxyT>3PJX#;i$CTRmCrTC~>>6QhAqWVouoP1cfI<)u>StG~zCsWXN>WbIg&-i5 z~U*Ubw-Kq${#H!lPM zp?sXP$Vq~L@b?HUaUl>8iYiyQ5C{nWh-V}qOpGgPLKTV=3vkt1%Da{ly+|wLNe=)W z*qag?M#`%T(Q1%5t6b{Nz&Yjez|9$nbIbQYz|9$njpfr3aC1iD{PLv;l(_^xUw$S6 z6I|ee@(U4g1cZqT%Wp`LhVjae+(sXxauEaPvZ9V$rsERGiozS1r5b>&mV@ zMyw`COjRl8-?!)>jZx)eNO@cgwKg4N*b}$IeALWQz@52SJ5VoA)mHs znWQQjgTlQ<-&27fc>$?jE=jdqiXN+N6E97iIJ^qgb}Cq3{!^)z3!JP0H*qIU(EuCa zR1LVrP2w~SutiQUmxd()Vd9L~AGA1;R8jb2x#vqFq&Bycehz0kv+u$Usyg1!CTv zMTe>ULNC8El#gV4X3-jz655f{b45ZLB%1HWqRUj`3S6~d-xn#(txiNWS(%bcH*p!hKZsvtIUdA{&aiR?-S<24l7@1Oed%ka1H62neMe83F;Jgd723AqWVi zV{zeF2m(S$Tf1H%2nfH400`G`)iVAFo)W!03?H7zuCF*DS-B`6Abb{q;)HxEsZst6 zk4B*c2ndJa{T>Lna8-$2;VGFeJw`8*JY_*ZI9X+9df8f$l>$eT1OZ{2iXGv_P6@?i z#x0SRt=hV?ibJLUy7Gd6@O+JWv5$JaMAcZ@*B9nwK|pw?%6{L=J{!u)j>09bGnY#o z1cZOo2ygiag?Qi+m)2q#KtMPeI0)x(RgFv(v4{i+2xqCp0bb&8FA>?eL~;fJ;c|_z z%11a`B51Xw_D&-@q65cl1Oh_&=&(5PWgp?zFoMRC3(E@v!h2Qr$6of$P*&|-#vPZJ zMpfH`1hN4E;a@ds0sai2Rox99C#z9&d5tM81OeePJa$G50zxf=3xR-8LT-L31OcIB z;ugt;ARv?wDXt1ZKq#5G0)T*UJp!0uaMc1_1y7^^8q^V^IPrCrlp?suARxR;p&#I? zk)MXgMOGi<{Z@sfKHN?ff`G6HfAiaVfMm)bAe3)XT{a*f+#SNji9K=EZ05sLA_=(h zL`Pw@PI&-9X;K##1cXa~6(^SAs&P*o7%jK=Dg*)HIVvj*Mk;%y$Vy^l7c2w;;q@va ztVSyGLlF_xdl3*2KBgj1c#$_mM9Zi{lFpW{bRZ!7SY`9Ef+!t}i<1k5Sql&l?tzCO z+!VQrP)^g+_Yp2V5D+$~Tq~|xyyHbyT3^R!H)$!hmsmY#u9G1o1cdUEp%4UwS0nt1 zO#=c#`5e||2m-?IB7ofnuA1TR;3<&=N(LPQKtL!TYZNEs6IP8-umfa2kU7952?E0H z0b%=%t4hdUlXcDj0bwBs2#-eCSv?2{YXGA2qi=U!a@)bN~$hL z5D=b?1s~bp*<&vkp%(a43*u_%N{ARgAE7Lby*q^5T-R&w~uwE#L`;o z>z{}$2na7y+5hyi*N3vI474R|sSpH&vPDL%&~HFMC@+uv=@j;nPc5D?0ujk|FW5Xx$dyKxW@N~c}oBtbxU zBlNMtg+M^K2G4q22n2-JBed3qKtT8+LhIQgARrut`eE-b1cZekAUq#_S6vVgMyd+} z!n05qRu=?>vKnP|K|nYgOC?qp1cb8pVRb=3C_5Wg7X*Y4AjIl|fKWCitS$%$WfQ>a zf`ITtgjih=5XuUh)dc~eEX`S65D?1Zn$-mX;Ry(_x*#BwywOvqOl+Y#@0s*0Po6Rl+0z&B+H@FZ82*vcbxDW^k#iZ|XArKJC+VFlC z0s)~c0UvcC5D?0$?gnj zLJ$zj2gxKLECc~z3xabP7X*YdrIUcL5CnuWYmIn!7K|uH+EEJIRb`TKW4+C|o00CiS<^chrj0@b)7lMHBOOPy1l*7XC zDoVHO(wB=9V&cUKNe9)Jb!IFkui-u|fubF^m+3|b2#4=BZVbMyDo(rwNg*H{UOrCV zfC&NN@bTm1)tE*ZzUL?@hV$WC@t+;>pA+$)7x8b5_&*=Ovj40VAHe%-yqw=;d9O4uFSLG9&oOkfp*oghN`Rq3PZ8LtXwAGx_OXiNnDHjES z$LmUzYjAHgI9>$7$pSRzyiMc~=Q{zG5ewSIKDOc>T$RaA>FZoNZAvE9pY83=Ou_eW zlR(oqWeWK9rmUSkt9{nYV9LKNLtzkpThkGsetp?aa0N|T-qA66g{TM>S(?stB7nY& zfFmNrn*#MK5upo^h|mQb5ux)tB0}efMv#*8>$in2PP^ECGO=dc~Qo;OmrazksDp#aBR#wY-((a7j%4APp ze^&~(OM^Wc1E%hJfZyLa9EWKU13v#znJyEog?lk7-od0ML%wYFE* zS64K*w^TM)S2qOB-QC%$)arCcswtUW;e>>yq`kJfqN=*tbCVcW!oPC{up4csM20jS zH(J)=3}C02rpf^o&{LUl0K1fCZg0ACd8)2^-~ral(vn2)>QtwzU+cOasBAtc#3~z` z7Pq%SrL%+PR62uCpu4(!+`0@79bV>ZUs+pSd1$+~Nzjt*tzXkCZP1eKU)q*QcXW5A za^j9;N7P~p;&}Mf@aLtntvC=?RWz>}%`D2D4?3^b#)i5|a(YQiwISG8Ro&jw+FZZT zsg#FtH#I}Jvavp>bLF1j-<3`GbcMzg7O2miTixH+(v#{)FH3h+^`=*+dK>W{>I&tx zTvB$Pa6R2C!u3=r(H&yj0!^ZBeU+#*3^r4jf$o;4<%nh(cFAY_y zG_S3$Dro3mwG?Go)|8a5)CF#>n_nFaQ5K^6G*mzn|Av%>(GdxT(bwITYV6Ol<*_6g zqAyeuCpVNS@s=MVho}r?>>Hvo^b<3trf_(#9-=ZFqB6u(+m8`+c6&BL>t2(_`cc$=VSjv2VNqM-`YPiT2_*ZFh< zT{5+FBr`heW94H{w6E{(NM>=s{eabAMZI6EG-911YYU;H9CYEKD*#ypHMX@jwYAE6 zr>{Pu9zFs=ixg4N)0pyF0qO+!75<*j!Q9Qr#~45rsBa3wvP8 z;+EFx`N0B5c&0?}!NO!ZThrZpXbP*e?(VLNt}bc6bazG@T9=NQWLL|IRBk;SU{G>P zW!*x|ZEQr+)y)g)Dq&U){av|248|`n#TlY9T!qzcOZr&1?jJzp*gm(drbhNm%hGL` z{yy0ny3I;3cb#8eb6G9@dx*+#h|17yorJb^h{|w?$`Etw(hfgg=jMazd36~5o5M+c zzzd}=_pS(|zuTns2|cKP|I|`9uc4xzuRJQ2VmF6ZOikTbh2%E+n2=Ye`!H<;70dC~ ziCevJYHsQ8>A^ds0j1(BGGn^V;0s#YT5D!&aYKHmc74-S-Jq|MD%+Y{8k@uS0%3mG zSoZX1@g^pnS*~*(Uuo4fBHfyFTUzHZd3`e=cWg_Cs0@Slmb&>(Sn1U@$WjY$8mgN^ zezPGe!yzg|w?1iWs;X$MZm+CpYH6#lmZ71qwfpc?Z?{{OH@54xBDZcq-x{Ja#C!Tw zXIaOJWN*-xS(WTjT{Tp+)-90k<~v&73Ji;7{h2-|jxkk7!-iCLO?U6gaOkS*6l%z2 z>D+)D4(to+np@j2JXcgzVU^z!)O7Xtt?|Uh>uAbdRjvf`o)<672fWOUy!;(7 zXx8+mFz|PG1ufVT=zcTD8ZYbmfm;DdWnOQxXGOZB&yCUp64S{+H=qMxzdz8oz!F$k zQPU!XS>rT!1m71rT+g>+fux` z?=RbL^7P5mChga+q3IJ{xNQ2=Y5Pr^I(0Vwbc?_0;sY!E2^aryB#iv=_#VOVcVl(> zl@@$?$2JFfYe(koylr7Zc(VlOF;xT4wsFz6x*`hl`gi9%#3yHixKHLb#0M;cxLAO% zJ_m7waVO$aw_tnxE#15DTZhPB%Ra#nG>ZJ-R~&x57kIyfC0%iX%MUcKlmMK5KZm== zJ=Yb!FjeRACGJBEe4p=}l#q}D6N!s_^lOc&5nS?po@c)8WAKmlmy6+1C1H7fhVKl; z)w)}VSJD`dF!%&109@MLLitfN?2N$=#uuvMj(4|Eej~m!6nB!lh4?&tQ7LYtyM_2R z_~J?2h3*#Oo^#Oa+w1dLD(_k&Uqr>iO3O z_nd>T7~FFXzGLtMsef;(zFw1={s@||$8V(kP6oe$#8E){m7{A!y>s1T*A%ej-F}$(;CFI7Uuf`seSbIj ziJY2`G5B`W+X)8$jVzwv&N2AS?01(M+;a|IZE#=C8x5Xfy}oO3&!zi}!4ILGzijYT zOlLCf(YND0tnW;NZ=rtnH+Y==ZjQk{r)rJC&ttgW;PU%6am@z5gY)bngL}@wc7uCP z#x8>&&T?)x_-AOhe>Aw~9Q@GWud}}o=fcbD?RT`#F$O=1{j}WRt*qBU20xYMsWa!r)ab_ty;WIR~#d_-{G?-fZw;w1+zl?l}h^FnAg5-_KWGKV|Hvd$Hem z{6Cm)(%@%v-aN(NKjye}y}@VD&iz@%KK(Bff56B$F#MsxSF@iEXFQ+IL7d;m7<@0< zZMnf8p#FWid^%@R4;4m!Ki0R=;O9z2xT6fdh4V$1!57jFFE#iyw$mL3zn|r~-{9kD zS05U@RzJqax{L9Ay)w-AV1qBw(g(rk489Zfw%*{L8|!j|@6LAmy1@@%zu02%FEHQx z4DQdIf85}IWIcataL*z5y1_4{9e!+Zf42X&)SuVSrEK4w41OKw(+LJIV*36JZ=a4o zE4$jruVnhi7<>cAlM@V1^#o@dTz=Uq?oxyQf%UxF;QlQ28x4LN$ARw}{5q!pkin0k zJ^aex8=3Em2KQW6e%|x?*_P?#2>|EuPqSZ-H+U!YKf~ajbFjnUe`WbM7<@DHy~yC6 zbMO{}Kf`pMGq~r*eaGPYa@`VRd&*-`iLbBcmiM?{hkV+|-_Cxtr@;^5ytc2w<%Ah= zejn-6Z((~ZH1eK{q|4ynWBJz^d_T^EXBga{!G3|k4`RQ#$KYpiJbc99uJkx5(BRjy zzONYk9L{&|8~iD@#~##&*TZvcch9-%@rAViw2@y;J!~}ia_Zs727it6e>Qj_<#*(B zpYIMFpKAddes_yPp&Ka41Ou~c%s2?<9vO#!I#h;t~2-uj<*jO{9TS$9~-=c^UFl0 z=ga>WhSLT=m-Ss^@JUSnG=qDt9nV?h(?62we8tFnuFb~{{%PvXbBOtLZf1WO$M*EN zoCGMY&fqgyf6qPZ<-bAuxxvVfVZEL+cs=`Jg5$JL=UU=>8r*XZ9%1mq*-y_gxSwyf z82m>ZC*Lx-9N;2uGVi`T&(IDJF!%=?Cl4|Bwoz(wFlt%FX3-k1uEWFEIG`Xn&U(+;cu%VemcJFRn4T=T5rG;2HL} z=MC;T!Q*TnU(RjB12^5^)7gG=41OW)t-;`)bMQ!mf5`f-H28zGpS1?Rj^oJ<2H%V6 z{NCVy;dnBh>m6UOcc`~X7NkQLp}5wd=&Ao8vHWiKQZ{1Xy+dqyodD} zPks3Ek6?X|GWf}?*9L=^@IBZK27j69+--2rIrxylA7^=!N0k@-^@cr1;20xc}ev`r9VEca0;GT2vCkFpE*9rc8w%6O2*}ktD`3I=C_YHmm!-ahA z(<$J%;W^tq{v`X$Zbtqij$_jd?$^@?8{DrKJ(sCZ|7iB3BaHkEjx%Y4Kg0H2WAI+q z>okLRP|p__d^g(bR}B6R>vg@sn>Y^KZE(-g`>?@}W%^GW+;a}TYVe)eUp_GS2-@3l z+Lzbc8*GcQK)FOTOO>^1UN(f%#B;FqYM z&l`C;3|gG$(DUinv;5Z?`8<~Yc7v~Fe|f;*FHp~K8+-xBXLr<3?tRPKw6~eO`||9< z@n?>~KV~`W4PH(?EHe0)X#brCuVguU48D%`dAz~pxF2z68hjkR%CroYADS5g1>8a&SMqXs{X(8kMe~NZ;fWf~{dH-J7r~fOCKdnao3eHDM3{LT& z%izzj{A&$<8`pWK8hjVF*ZBrtLHWxK{&m{hW`kcz`}vN+{ok?fG5C7!qaQN3=MH|t z;Gf~R{k*|F$KvY-|2_NlM+O&i25||)J?HIpw88!Uq0HcQE}39&gC9%%&o=lpmZQqx zvuL+X2KStUM;g46dR}4hQN*(bAIWxHZ}6wtj^`LWOT)U<;GT2vDuZ7^d%nTohj6^Q z)8L1(ocA02$84|14gP)F=d%Xy;r#LkgUivG;@&fO1N%`vPG1t|``ycw-`U`vb8x)D z{rln>2KVnt4>tHE)bpVRKaS(W=L~)f`^C`)-+}YsYJ+>u!IKUCV~&&O8T=8p%O-UhKM>4yz%D z{|rb!!|#7AUZ$~}Y_vT8x48%-^o9QwLPAG_m|D@ktT%}>H2&*Ox|Qh2>({3^hn}de z1@ijlV?CEl;&c1#;h;M74fL>CLU25M(gpr^<4;3eo2Df0^Z$_cB$zlWyEiZ~`8oI> zb+wf)bdMAePRv~7*j;hduX6|DX48}>bIRlz1dp4CCKxn9#$pn0^fyO62JMg?EPu<5DEUiQw)yt}lQexf;Z=9v zZtmX4afEPKR$q?e@L;g``&GCYlYB(peLR0ZmGO;Ou#E97?&EpFIoG6mT9 z(x$fW0t(95e`rPmsgwMoPRcb{{1vp{TcX17+xV++{F3KYEQ6aW7dq#6SI@0DW9qco zGxhmD&aJpvjFfJU-sc26;LCsER;=Cd-i9}7fA;JTaDrqc{8A)bTYUX}2+ra2pVprC zSauu4oAy}kyYJL)80Eb`c&N;^CA6&7q zXc}|$jzct!`1GJSF+|fiMAL{xL*Woj;}A_F`4NX`8o7oZqG`<0Ob*dB>K6~ghiDrA zeQ6rc$h!?wop)vQg5-P(GMLEz1~OP9b!S=_)m!LDl=g~)QLXo z5ced$0R|yg8jCsEBW`}o~$bg*(dW*gRS@{cN;)RIp)^6_>_0|f%KJ;B*cE; z{C7+hE{N}V4)b3BRZCvb%!lD^Z}{AoQU1Fl_sB;H1?l-2x=}1R0@wfdm@f58r++<` z%e}yISx^wKFBpw`UTo~i@n#Feh95#`tjZK;Xb|?Dx2!u5zP$?T9gY(4}xBh z?EQb9M$;V@E@ya;z|dx$gh-;^`c+kL9{e}_JkJWi>K&d%OcUtdU@ z;h0C|nDd6z+N|$14f5*=>3ksL5Yviqje>Nv9vo6@)7hwL;Yj?pt8TWue-Mrgd(dlTPG6WK=$rl9Pi%J1IpUm z(f2`RS9f2^9c_8_B2!M)x!~CbA&DQ^!XYu2Rqh1-u&pxdawMp3>^!u(t;zAB zy2cqI(~L5`NDKSM)fU5$I7FcN_XspUd3KMG+)v^9S{dF3T~YKeRff1o|B;RofHfw< z{Rdi}*6x}lcp7RenrCYpg~SW3i<_#0iY$nGmV!^H&yPv9>E$ctcW1h@-Jnyh>;_+f zM)OQ|uJ1L2SGrv~pkzP4dVV98E}EWW9P-?Qt=+8{^lqPhWpmO3O4vu?b41`s#`XohX~D{W}6b?d6D(yxP>dg-s8N@6zqHlC^7d zW;<4Nb}!eqgm_m+KiV@@+1r6#gX<`k6i{a8%KAnS(fSOv966>Y4@b&@tx3diBn6N< zwYIf*)>*FE|3*z@2QV#=>vX-&VC7p{8=D;^ZdH198jM<<0hT7M-KecfR4>3zB~Xs5 z)XQ0MB6_@+R4 zliM0}Sf8KDCe!niXiM#fIqK*IvJFesCzqzW>N3l^>pH`M4(q>$>dIEIvSTNQ?VxnB zu2izOr2~9mnXo%cQoa-#7w>j@<*f~NEtymYx^gDl3#-D8R+?4cI>|Ptq7@X+bK6?0 zgZcBZB&%#}TCDuScoU=sgvB1%=UnT20$-uZNj$6tgQjHXG_~AWGru)q zQ=J3)z<(>lCM=s{1`M|<1x|F=)9U7f__eCKzQS#o91FZKv4bM6W=&nDFPqGCr2G!d z?7lepRtl4$^asZ!uDdN6E9dqvTZSHu!BS^>k&t~kH)ZoHn$X{%89M@m?|79Vv9dRX zsYGAt43TaQk#45eVNUK|=@cQ>w6G%gCJgo{2Akuf&n*kdqWP~+y4f7QfBd^tn>Ag@ zi0q%fCm&O0=d?$2nP= z7;@Ei8P24|a;qj;DuoNB$b0kF#+r)Of0lMr|86hmm*Dp$|1|fe#NqLOf&ZjMu&MYj zE{at-DCBz-xkbdvc>kmuJ}1B#EB`K>odds=@O6smNoPKkyAQ^-DNkemV8@)O`aYSn zQ#87@8;lcFN*Lwx^z9^P%n0sN^0>6I;AOar^It#7(M*E-_AZl$;`k~z_cxE+=o8sx z^lH>L%fw|4c>0>G|w8m z&)^H$_>UR<&vMWc+^^j&O#exi=M{rDu>9{Byqo%m>8kVPKZxl^IYQ;x^OTQrgbIE) z+daw=D)@Kg0vF{76=)LmALR%Y{13#V9HD~0!E~Y=p#pjCq$o$I;GX*+$`LAf8PCFu za)b)L2l4+^-ub}RRn>9)jYfe8Vl44kLm}#PhlL`+NKL>^)m1 zi5gFG-@Eto&N=tobI-r`w%(6BLg7b>-;~wQc3rPKLWv*FHFt!cJhM z@NlKNBNTqJ?xQjwr4fo zx+4^Rx#GDa6#lU0Uw4GUpVmAZ&sK)9HFAW)dw5B~9igC0RZe$=!u!=up32I9qw;Y_ zDCh`{C+-M^@2z&_j!^h@itmn4_=j{|?g)i%R(aeJ3O`BZcSk7v)w(b42!;3QdfX8T z|AzXbJ3`?{=^2#n2!$V^_TY|Cc#HCPM<{%O7Pc{8!Pq+0Pu&p;|B~i?cZ9-k)coj< zPDi`CBE5emOk+#R9tb2Lu6BNTpv`l&lY;Vaah-4O~uLG9KZq4001e%uiX zzh3p=j!^iZuGbx*@GtO^f;&P%k7&MdM<{%~#z}XC!jI7S?~YLTPgEXvgu>g@uG|p{ zzh3Rc9ii||In=ZCR%YF*)uQ25chU+xHnpR0c1j!^ifv=Q79 z3Xk^cj!<}9r#nL7;jnc_DEtA<%kBt;e@E@v9ii~g>;AeU6uw>ag*!sw1IphWq43Y? zdc#!%W4l!OyCW2StHu*|gu)}lIydrJt^C~)%4dJmeR4-A{9#?MJ3`@)Y8-G!C_LOu z?g)i%RC@?#8;tEno!1?q@Q*2fcZ9+ZRX*+rg`cQ??T%3RRjPk?gu-K;>W)zO8`SUI z5ena?^SUFn;F{mv5ely;A9sYpYpQ>Dgu<6_!5l|?g)i{R`Z=ZLgA0A{O$;ak7*u^^&^b!QjOd02!*dzzi>w= z{8rVcJ3`?R+z|?YRM+c{Q23WM-?<|c{#Rud&%Wo7?RnjIcZ9;%t9`m76n=y1!5yLS zaKE@C6n>!Etvf>D{i?Tcb->t$G(Ni{6dn#ZcZ9;{seQU56#fTYmpek?d#V1zX#``t zTG!={Q1~6H2X}_Qez_wQ{($BScZ9;v*0|)3Q2000p4|}&|Dxt= zcZ9+>sy(i)2<5Z4XgqXBDEt}4 zcSk6ElejxV;s4OQ;EquEsj4@3gu=tkoeaj-r}d{hLg7y#ug59cZ9;P)BNI& zPWccZ9-kR=v3+6uwgT(H)`iFR7gF2!%hR z`NbWf@c9}i-4P1EM)BPd3V(=~6xd<R;{%g^#P=+z|>7N2@zR;creG z!5yLSr!+peBNV$Gq3{QF-`x=kKS%ZKj!^gyG~T)+6n>D((BW84u6KS1NKJ3`@`bzSZVh4bKaf;&RtXQ{utBNTp!uFD;v@K~?7BNTp{)?@An zg@0N3yCW1H|Be#tP#D`=RX^?sh4-kvxg!+b$Po&U?@{gug`c2t+a00s#k#-l2!)3W z*BznoD^x%32!+2{?baQk@cT5*yCW3-Bh`;PLg9O>|GFa-ejzU@xFZzw7qx$Pgu*|e z{^E{M_`Ygy?g)jSr}5bxq3|}9(;cDkgVYY)5ek2u&g+g)cun=-j!^hkmB$^S@Da5K zcZ9-k)I95sQ21+9Z|(?%U!!r%9ii}LYFF+Eg}15yx+4_+1C4LtT!gWGTYTQttNBNYA~ad(8muT}qYM=1PJ-FJ6{!sFlJ+z|@jPx-hb6n?zU>yA+PsOCp^ zgu;KPcH)ju_&tj6j?f~$#vgZt!ndiO-4O~`^eK)|_)g7t?g)kdT;JE+5ekof>yA+P zq~g0H6#jtPn>#|`_p1H4BNV<^_3w^Q_zjxZ+!0!E%}4GCg)h;#?T%3R7G1A9LgBAa zyLCq>d`#`o9ii~ws~x%{6n>fdqdP+3C#Q|zj!^j3Dvvuti+nT=xFfX4NA1lWq3}kI zQ24u5&+Z6?A1&^VQ20FEM|Xt6<3D7%BNV<-4a*&&@GCVhxFZz)DYa*Jgu+*8ymCh< ze67mqj!^gxjfd_Cg~#~oj!^hVG{3kb6#h%yFL#8(*Qg)4BNV=$>c<_S@Ska(az`k9 zsmke&Q20C4-rNxizf1ka9ii|EjSub!g-@zqxFZxksQJYmq43jHPIrXDcWAtFM=1PH zx-aesh2N`w>W)zOES29Kq42vjzqlh5eu&EXpd5|-cORNgSK0_qmuIpgs? zf3GU3$~lDiC#oOqUxk*ODvM$Ml~w32ULK`?eyEmvJ@C?d_u(pRaauQE!}I3OTP9w7lo4vVt6)@u-Jd#;ZC$JLA!QUP`CydHik3xfhNN zRZ0bGdAvORwHJRl=j^{q?^@Ih&5OE^`=;uu3~1+_0rVdA9k?~^kY2+_;L5f2y{S9I z_3*}Yz!0{l>AO?fJWukE^KY+mv@7Isk4zuY=LdF0DfZ^Py#(!Z%Xg*;;%T^@*73Tm zwM@5+c;a<41a~ zpKH&rpJ;iWr2L`I|4{Z}c38O}#cg!{l{&wsfePnmOv%r`J~8r)a;DuP+;VvN{soQm z!u7I7Ij&3}G)jN^{4zyHB-DGPi}w#JeHN|qex=WOqznGZw8IdbHIvF!N?(nLdXMW5 z{Pna$o_YGsO20B9>OD_?d*Y4ie}n3OnbJ}JbJ7;+Y(w2vxzO5wmZx4C>v3zKh{xOw*t0zwTdHVE6^%sn;-erlM&Jo+w-Bl`Lt21}R zuA_n#28#EAR2Q===hP++txb&Vb4G1qY|f&Ik%Jdaj8zv+T++U1;wJd{q=p{Y1yr3mY=pXY_;6Ed?t?g(Q`a^;#=dgk6J2P@EK#br7&$zg_Qij2Ic3B za1Euq5|ve0;m_(*=czxMm3+Jw;!5(hpuXZ1<9Wm(bH*1!o{x_;d=~e=O5_yCU(49y zxUG2I#gEc)d&W=Kag>34yf&MaXHVCTo**dXNTo2~g~n!eeZFVep+D?@(%W^2BE zbV1SHXs5J?=y}0UN-WQlQ_d0W!M)|%|5n}e?r;A4CZ?@)mPMPM{8|RI)HCuB$r|V};>LE`*l>S`%k~Pcg ztB&c`9NowE_Ew89^EF5Oy#(bLC<-%>{xuCCr{$LOlDj`Vnkj`xkN8ZM8PU%W2uEFT&gA1$7R(=j%_c4RC)_pxL7nvsjr zM{CDd4fl@>uNq!+{tz+O46XeCczW@SRvMLs^XDI5ZC|n?J$i4vtnQA!@#3gwZdUze z|D&C6^{TGfmH&n&-)>W}3cN>GL@u(%+C}9*6Nhze)Os z6=AyX@r#r`y-f*wYfhK~(?Og!ICEm7@A2{bPcnX8 zvpMZxH3;Tn4|(~U&1r2)udmbfEb{cj?>_(Bi`I^>h;P!<&1pTy_4T~iIj!9m`2$5s z%J0#&%b#q2;i1~)_q1I%~)1#9o?w|Vc;)$)hu|*S$+Nupc=&emIXd9?aENDyL z(07Z{%gKu$xSq5j;CO5WiNEJvPMQ-cr zxvgfeC{A&P;wp+FHoD|9x80v|X{jtsuY3AqL%reb_H#qaF|!7b8a!;UKfNsCW$=XJ zwZD8jE8fqty{Y^8QT_Pxv+AM9CH=MiOZf8zV`15Cqn9R-!uq_^lz4_~GOMT=ttV#s z%SBm;|MlN5=Ik~ir+>Romj=&&3E`i1;rg!tx(n(5^olbVdYGFIh|e75fnS8+%pD&1 zeg_|RnD*%=@T)TZF7dBse5v@887E)z>B!p?O@wt&S0(nk>w7)*y?OP$qw9Oe)c209 z?;Tg)>#gtg)%Uu)D)IXX#qgrU>Wq2HS9~!C!6Q!EP1jO}JfE1`f=B zLU4X3Ahefn_1}r&_l+n6@mV`ZXjYyVwXU?EdHz>^_lf$AdhmM+YfT$0Ut`{tM|z0ppI7o&IZlM>7GOsMiftm8G*FW9wKK}%>k_-s| literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/lock.o b/gnu-efi/x86_64/lib/lock.o new file mode 100644 index 0000000000000000000000000000000000000000..f5e5c95b47b0615f86cf300f5738d8d6468c7441 GIT binary patch literal 30456 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 X{|CIOc{oHfU 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[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
+OA8$0b( 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 S;p%&?QB@wbYpQ~*|33iBt$w2b literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/str.o b/gnu-efi/x86_64/lib/str.o new file mode 100644 index 0000000000000000000000000000000000000000..7a4774c970b3e19da503df1c16c8b9442d89ef00 GIT binary patch literal 48808 zcmd7533!y%^*{c;^D>jk1TujH2#OMrfdnNGL^eUmK7ni`69_I1Lo!)3nMo%TwyH%I z6<6HqQWUCP)Y^*HwOYXiMQdBD)}^hMw)R^q+ET4s-G1ksd+s~$oJ?w;@BjZizu)`7 zJNJI>xo5fe+;h);XEO86%GxTIX&U-6jZ=(dO{0eK)`Q9NQYtPr#v9{|_x;EI`)^qH zPuh$xSoc4W(Yby9;N-(II(PaX$nISD*x(HR1J$nJ)~DhBQ}F+769^Jn!R;>$zEQIO z3I8OcWIt3A9{_pL!Qk~zbowW4Lw3Y(RdB~ED{FT=6+Hi)+W_(x&7JBmI%jH5g}HNU zzRU@3eX{V0ok*YBj*X3~6~TZ`Vs(N<%Hd9iP+426sGNv*Q32Yj!*t zglW#M-SKvC$KRoW(Aph`&MZBn^h}ub3N^na`!}CzB*s!bxOKm|d2xm@_@Qcdj;(*v zQsrOwkN4l7z3qj>j0e$G59h(S`0vllz`p+bYdv2=lYhapiNpT;A17}j|DqC&zyJP> zZTk}o(BT?`=6i>arT*0>_@-I2<9TpXv!>_>kW2|Kd^s@_WG#3s@kY_X+V=gmJN7>T zB+2=%0|Va%ijw_@-$4B;ONb`Le-ZaTFdp5%bL+ng67QFM*a@CL{qSj>JGZ`F5Pa-^ zMm#tl4DmnkY|&#(7;JwmnE4ctB~H3*+3wD*pSah(blI}!p^&*Q^Ri|85Ltf|b_JHD z&~w86t%p9@x_|!RN7Oj(I06I6<3;jecu@YwARm;(1v=qy!OrEE+RG{$pNB>I z1uo3Y%Njw_zcbhU5$$z&cPEV>&UJHe$NS*NUjGAr{{t3I@75<=!5trffK&b3UI1&> zR{$&jwk((;0B88Oqnmbaeu0Z}$d~s3SR8V1lGe9FoxO<`rLqW&qcOsS7 zK~eNR!{!bcKNLQYP;N* zx7jX7^XA&+SYDr9UY~cGUEYx7Ib!^T*8z7=fUzMVBl0JFfWQnJm_UGPoHk*UjTbt~ zMMs?txW}ugW>767XGCe{0|3)7j3^s*0QhpHd=yF@p;{`a;!%~#QL0NOYVkDm_Ti9Z zuyR$_Mu6Oi1N*wnue&tI`q9Xd**A>F-ma{Q@J3@qBULQLeg#!na1&MBs->AKtVM__ z8LFjaG-~cum6fA0YK&BsRYaDpDy>xUv!<)9S3yZN9@{581btNb0xFNp7=e>N;-c(F zz=Baww%;3|J8I(hqO1D7=*WIAYVG%;Kl#1y0ey~|7|(oHb`+up4T-v^ z%nadahS?a6vOVQ4s~CE#%5s`S<2<-IGuW@Dn9MGXd z&pbO^*6q-)1a!N6e}RhMdl>E{0F6@ukW21F9N}?zqf!p)t-21ld<8)3_fCU5b;XfT zU1=f|*(R5-n#k%j84i&m!^NA6%TY}qN?_*OT)uOu*H+yNhmv|R#l%wW*iT#zBNse2;eL`!w=YmJyn&5AK*^;RcxG8S-+-E$ z$~jiitI(5cCt5|=%RT7jx9w2FMNzzbFFWNQXS zh1sm){owyV3jPoGF(-qH$W^MS%z4!1yO(Hx3io`Jm!xBM2Na2-f6nE5ljz?@dX%c@ zX*E%m?Z@p*b@`3UHy-Hx-ecfS>YQwMqY<26m z0?1wsbjE#F0J*4v&bZ&2_LrmeGS7HWwW(#E@sKs`FtjbDDam+PwW(#E@rY_u%RJ*z zYuZ17vQ<&;v!;CnwKb~tm=(a`=vKAIt!bY_Tfd61-YLE{V1nP<33sw`6BKgkhO-PU zn*pHk-ss(tljGxv?!7pGwyW^&y)-}#FhGD@7MKTAYUl7?5h#O-+Bv*C197MnD6%U9 z*F&XHRjv+v7b>$=<(j|&s4P&GYXe81vQ$;BpSC6o0v+pK~*RTGtx(CgbvJ?_^%&=l&y z#BtxRiQpAYfaWDxQrKY9O*A(d`QC44hQMq!1e*iDCbQ_ag(_PR~Fgmu~D%zXE`QSibjoGsg>=Jo%;f1heQCXyV#Tvk05Ks;$^8 z>H~>6EM=PM8w-to@6m84DYKxUq+khJP;;fyEYm`felN-=3o~Z;Le%{<-F*XgPqz;! z`V)QIi2h2i!Xm`w3#vnAyHih_xziX0w=^N_X^+bL~$3~NwF7@ilj9oDX~R8bFl#|Kn9!-XIz*4C4h+Y zJta|NO?O$Z0)?`2k8eE0B#8fTCu#Gbpmah`l#Vg!ZN4%h4QkR=nv@BC>}w~29!;ig$ z%qTzfrhRM*#G+jE7v)HfdH&cp0jT`mNpPo53$PRUm)%n>feh31RTAxTO&dj8n@r6T z8B7AkkIcw6Gj9bNwPpBC+P=7!qiQ2m+h~)*2`7#jV@wNq)6&ZrZ~A@)6~FfhxRZ{r zKp~fIuR{r1@a*UJqA1nnSkrd|Dt_;WaHlTr9PYvtQ%&C(fc)NkxD!PQQk3ChqZ_hk z+7nFQDMVYLX)Ath5{#Mhv#%Si`?-+NKEb59eguA|B`usra_l|`-jmU|qU6ZoL z=V$!I%v=Y}%2EHvoJ=~X+Fw;o?JpT`nUhh7N|H1FrfPXC^KH{YA)qVR`FGQ|6DqL5 zz?~Gh7Ya&Q(w(XlG5p@25+$mjI)7yPenHTSaHr1iKtXk;68C$Lh>#s0r!qb_vyaM6 z7a*Cl>9RhCPD+g1<(mt{e(xfe!R7lERQ%rGz?}rX4~1N0kefCH zw7Pu8SnS||J9QWfgHTh{=hpN`= za(aEAs^zJ+sH)|&keJItuF8n@F5fj!@q2HCJL&WjDCE+OMwkx0e(ys>gwj>NZ@PTX z5%dDwsoxPOIQpSgxrhO891_*-BA3qsrTpGZxKp?3P*9UZJ?xvI=j3Wvb~(^E=Y*Mk z%VlA2#rZ~;?@Xxpz3p%(&gVmc99S(BWTJ8$)!|l`?{eyJjqY#{Qc%!It}NO^Rfjvl z|Ea?P-QkU)9ax)tUB1Ia`%g{l8=u15vGg8+^Di_){sVW?d>+!04t+4gxenSVUA}Un ztGne(CaUq+Z|Dy{^YzB!M3PIA~vX`MyWAKh(7QY+4!&m`hlP8E?9B z@Q4iNK_vZ)Ycf7O($QJ@8^`0ns@h0J`If5b=&WjXbaq)NZ2UzT|8ix10o>JT`~#Qs zH2$e8uotodK8=6o3j7&r1&aIUt^lSOg{t<2D}d?5Y*ia!1u(tl)41CTU@pB>wPjfW z%;SQpHWJR*z>`noqpSdCV|*IVwF0B$f!CnM=FYPMcqn0W7h3^51hBbFtUwk>U~^Bg0+?a5xu;qI zOwHNcrB(owYc{vk3S15~Hn-XeAivGZ_@Ffn7vn{$R%1=Wm9|sWmRSK@M%Sy_a#h=- zYPD7Xm(6XeRtM6dwpZ2atpK|IgR0hG1<6ZM7A^Ebc8;YqJ6v(2uCv8Y_Sa+s6}e$}+-M0P`}#RMjpkfJvB_tKC)r zQ>+}W_E`Z;pz^sIwE~zU6>v3X1-3%9kgEwRupg?kxjJYCro&#kfUE1QKs!{Ia&^5` zj9Yq;s~fD@xNA3Z^;|1}J9H~ow^#w(jn{B>s};aax0|cmtN`w<{U&?pcFW3|pilQ1 zyRDp8!9mqf?6Hn<>^$GGj>WjZ=lP6VEbB)=>Gz%l{sxbt=(vt++3!Uc_j{2K4jtr~ zmW7Yuj=_p=+!)+$j%^MZna53;4#VpAT5vzMtl7v6Ou;8$$2LLR^eOmgjJjmb7>#PE z@(GS|v70QO4-BI=B~X3TFT8P>96@HDZ9-XPSF8uHTNjcY@Mcwk;_!G#We``kZS|L%DAdj zv1h=z;brbx0qsgcb*dc-45ot9+YNKMISQY->T7yGLOCf=FG9IaXo!OANWlT%q7*#d zG%k*P`wg!v{Nv%ADPPj9Ohx}@`Ig< z{ivbrM-OE`MzAkJPUZ(G%6Hk^dx86mffB>~FdvKhnlUiPFh5F#dLvQ8{5ZuNSOoK6 zOq7T}rHDAy7V)qa@#j>2DB{f&h#9?{!iYv6n3=oW;JKvhD=EE>C&hk8`F_)%@QDb{qdLu6wBHA`m`NZa7G>F+6oS#O6Eh!q< zhF njXu+G-LU$En;075$jV#C?hwdH}d8oVr?VUOwz%byg50dM>arz8#(%on7j4W#eF6lneivYff$i@A7Y@ih*xc!#562h#i1Tymz7z>Y*_ z7Nn?IjSX;_yHF0PG&yCwNTn&M5N$cfrR)hDpvMt&a}V&M06m^Mmf&WWuXrqQ+LNh- zgY@^HM~WdSCfXj#R;k2|gXse2c9i6Z+fK@cWHaFnNd^3ctb#G}Tyv2wXa3xDR3JG? zQuRB^>m227M>*^$uXdE19OY$>a=D`nIj#xslx62;S=mQtk2c3-lA?C zUBYpOmAxqI4*AFvWleym0mf0d4vr?KZcv_S zCZ_O!1%Aw2$Do`#VKF?CI2Is#5EL|NGB7J(Qj)Lm$;IZW6SPuj5YE=p{Oig{k11}4 z!mjZTl)*F}w_}S5vkPg@#am3nm49U!C>uy21Ynw?Dgk4rvo<7^nG^y&YUsp@Y*oN5 zhNv=wdyva8m*bswGIj#n=%kx@j9HS~WIkAy)iS;{YjxHtn$TjmQIgBOW@&YC^k+*& z3W&bMsexh4QC+Srn}9~1nA#_06zB5bI8{0+1%m;b=j84JVEz!L;UQNs7?Q$!VX=V| z8O_!U!!Q=5Krq4_5svU~;PWWJG+J~~f1Z4V0SV-8rcZep+BuZ2b0}@+Mwa}2el?9I zUDSM0a#PyQ@U(77_Z7PPKWvUIy6EJ%Vi=Cvv?G=(S$yV$A)&Vt0G(??Azf^;p_MDS z_>>KW-r(Xfwo0MtTwIcbbaA;2t<=h-zAA1*6%1)zN7qE-bMYO#8Vp`(*KmeqXS#{+keU%|C?@fQqP z#^8Cob>+`VI>`|0n%zDoa~ZRD>+&D$uB}764ka2gC`#dzm`kh8twk5V#tzdXi3(!!)mnqKo>~3!e}kG^UhH+^vzFOzZ)?-*I9@;sSuJeB@c}2R;>GQ_DtlNW0wRQ2KuT*DAuD>~Bj-*2UYuQu5Hwp>&=9TgfZZbxuEEJ6X5ulWObY4PUAD(9WTBozttmnb}{I zl&p(8zEbkg&Y^Uj|69o`(sfQhVEwGyhNRlMxbZ919@;sSu5)^|8<~AqQnD`geWm2t zOi`Wetc!JD**S+Pijtjman}E$b0}Ts^fs@dum|tq@GBfkbpYs zQ9p$pegoCLbq~`B>7ui9dgnXB9`Fk*`tG8#ZF>7!jj)hrW?d`KREST3eZ|=~ec7YL~$}yWA03JJ_Xa3I^%GG@h`D47X`y@^HhT9%Xt=x7)Ma zJ zCt5z>ItwJ!xF>qdgnJx(vxB+VJrQ4uL7wINDJx)lMlbVNr!RB6^AVo}LaeZ>3bnE( zo383H1)k|1)3f~XB)$8n z^*~AWbi>GbLE%i#YPb7U=#jguxL6Nzo_n-OGw&{T2VhDq&&@Q$mgz2_s_7n0uQ02s z?s*tlc>c}vpgpS-`2Q}~on>tzv0L0(t>jJUc5cr(?i_eEmqYtH;N-C~iy6V9V71si zdf67}d?x4*-r2b9WaNarH$oF=VS1JUvReBwd8C!O%=XD8KsrcbdBMh{uBfT3lzj^Hp(PCjz59U8FEFU*?{-*liy6>`1H85}@5i zwBv$qf2}*qvl29e)vK%?r?{F?k9Pv1-Z}2kU1;rsJa=YpZl34nJKedS@3}{>c8`Vj zygOkXZzo-HJykGwRy^U(d>v$16K>9>S@2(T5NNE?#knLk*JH(6-Dt<;#qL}T18S&8 zd(NWvv0w?djs?d;6UTb?((7o?KFwg0=RKH%>MfvEJ81<>aCmCnqpZ<4tEsoHs%quQ%=UUM%K-C4hgU7EKrrggyRY{dXoiY!iT zEhvCFZiN;Mh7gO~BVF~mZgaIOIL1@xfbEcjAqCYkm%umSm}XOCAd)beBM_N8jLNE- zwx*W)P)%KBTXSX8%9`@ZW&^%;rMIW6J7IKHcJ@^F#@2>=SBB#~;kCVy>cJk>sinTA zyrH79t-PVOwlq}JP~TQlAF6DsDlM-xpcj1IMJ&D%zRRLN(oxg!Rr`?If68Ogfmm;( zCK?P!J9;BVb$v@gc}YpZ!s0o_B?WV4mn!j>Qu**SB|v<4^;Upkz;bVrICvCp-YG0ql%NA_ECfR#k~6 z+gsA5V2&DBx3$3h%$sY3dO%ocV}GPB zyn*JovAr}p&|}YQO?`8yw6+%d)K}G1w=}7_4V9MFRvOKTa6D1d7w(D}@SPRFmCeQ= zP@OoZEn(tpe=HH9)QHW)XWL25WL7>^iA z(b}H1G`ze3>LC3~M2vEDp2~F*&~3$FB)+jc+&?hb8-bVb+MZq*t;m4UCQNE;Y-$KK zz~UUb7#qQ_oBPA<8{c)oy7E8#<#$jv= zR+d)a9KdK+uB@yNwbeI-YN}R)pTx`iH`3fd*XBqZ9c7?A2H7hGA2rp~udzIJCRlh~ zBoXeZ3n$vaw>o>UQ+!>dLrnoXi}33Oz_$k%PH(RsPQ0Dk#a0tE>zMXu{qRKyGjj9Z9{o!2%Jn$ zMvYRkZm>7e1CF8j+tLTfYrvzM`y=f=ojvUp@t$>&cmw>8L-MWZNeNW6tT)zvc1>(f zN&}AAU^D>=rVKrV*P18{R96o!7Tu#hmgwo+Xz1!dV-Lrr~SOQ>ym zxF0&pT|xV1nluB3a2ih-6?r><5nZg~BRZYeHloh-;~@D{VANVTX-}+hJ)#Gy8Tk zgpTrHTWED7xCAd$V?!d=LqyH1n?sd#ZEF8OFHl1Ukp|a=iW-%zhDtJOVpY-h0bHOM zcA6szHHVF{0ooD_P#+dTq7im>@L;1nSlR^9y*?a;S%i%f5|em576+ zM0hUg<5;6DjZMbNu5dYQp#yrLjZk-wa`9@IbUojC5K7A-J8DkhQ&k!YHNb*58oM_R z^t6Y2X^%8o`a57oI8YnSHFb>;E-BPDw1jZ>X^W&C0#cH2uLw1(BjGrS36|DZz{X2k zQnWlw6QwuI+DI2nMcrBzl5mb-cwsz3u=vu90l802Gwkd2mE|Ga-$PBX{2+eAXPvuX z6Nk}-rxLxrsR2Oyez2xG2wK-;HUasf0aGwjU?35Xw)gdijml_;WB1?~7 z*$Kf%xw;CY3^kUksy2?|Ip-I!55b7S@aRUe9AhqKMVL`8fW<@sfl|h*o?e|1b26)j z3bS|EqI+T;J?*4#736G?#8$(xO-0LB z+1wtE(wM?7#rZ@9KD2|_!qz*c7suURhK&u7cj^gGo4X*nGaNz$t*NgjgJ8<5D`9gf zt-$RBGizL@WC%*9{21NM;lvR;*-&|~_MkMb(iH9)AcnY#Yocz5_l0qSnllUf^8SQM@4|7nC8ydY33%*ZLoM1i(DlFY&l-j)`q ziAfE0^@F{=q%tkqwCBxu6n6(~=LpXmA`CX|hR^^KFf~CMb^0tXZES9V?G|23%W7(C zLN%~9>iP$g4uiBwX9ag_28RxJsFQ7F6r-bBOPGVK3ZESr?5A{}qC`^!7xKCYjU9G_ z2OM}LPMHMgM++O~A9JDvEdLISMX5&()B{f2p_XP?t-NWefuej#pRYKLASw1)IAuKA z%37+b)M>aSIyis^u&B6TdWcjWZwFP?37%6< zZ8`~6+l&@S5Ck56e4^o`F&IA_zJ$v(x%d8uZkW54PzF1P?kBRv%@CQ?s#dX4Ka9~j zlD&{8g<@bd^`UIrsDg)9>YMrf zi8=^Rq*8Q1j+DJs*3r`$m4MOXHG1BH>NjqPl!XT(xZR}mRXHyDlZGJ}!-ffN$ImFp z2YO@hJP!6y(q3&KE%mg8I36URoaDB;5)X!v+VI*)FWOeqVOy6bLoV-yguJ;OMlNbE zdt{}RqP`HQqwv%(nMNna63vH$LQ_pyOQ=#jyMT-xy^@n3=fMbZ%FZ~~Q+aAK%cGTr zkM>~4GToA&C{wloDGw6 zQ&~^XvdUYUnqjNg&oXRz5b*lpK$)B&`?L>yt9n{`?BqH{dYWAuZEXy$Zmxl7*j8Fm z0SgQQTqKbU{ivv8B|s$VT?d^`2@L>`6O=UPdG;i!3 z93b1lj*3Az9OLr>%tL7Zf`=rqq-YJLJP5VBQ`ge={+{F(S{{!83pK4shpBx<&p>+& z4(O4N6pi&!MY=Cp+ukEG4xY+LM{PLTH3<8vIs@uW-SNm#huG#eI4f~BtELs748!A> z+EREj1jD6LWXwq+Y*ek+hZ79Q_@GLh40XZ|&;6;l%9rRQh@q2HHJCR_36MV?88~Ug zOoWC(h5~zF@%;qDF?y97NQw$tkPN_=mZUzj2M4B&sXPn^D#$27;INOwsI`&amq~^R z{rHY1uM*Dq_`Dd_I2}!K5+Dcdhm0Vaz(;kdj}pOO?2JPnlfm(lu46wWqj!)}Qm&S0 zubothgAwFJxXN)o!ww(q2**3<(TyS_D_R;WC|^*?9IlgrQ0%lwJf?;Vb|5_XB=a6v zaQK8AScZFbo()5Vt3Y#8_0*(yk(cdaT-KFPCBw3@jc zfDC>UgIug7+Q++jJv=F0S?Neb)YfZzB<`E2IloI`v#aUA@$BqLK1ZWCfM%?$X$rMC zqZp*)kcw47nCUk7n4n?uH0ej3;3icKgyTSnd8UIF3Qnd`c3#NaEkD@OCvZ4J zgc{%(DeO!Mcpw`!jOz08MFoW|YvCc>pn7L_=E6a$%_$P^^zvt_@GpSyGi~^HMDUg{ zek_UpDvAFrM17$&w3(Zl40A({dGyE(?@stM5%!_4+k#j92{goJ!+*T=A4&(ITtSFo z?7`Q{?40ecitPMt*0SvV<~Og)zkb{ec{h&vcFwNsn?~O3+wI-saVe&1D)`up}^_Ux5FoCnw=jMLxX10G`hr8GG5 zeur_VJ^GW6PAm`X$IFQorok4c!5Y(G9ceKAaayO0O9fpa=&*+|`nr;;?3~M7W!d?c zTBX?q7mVn8Dm%aIx$K;>Uu1jHzUP>BGAa)jVuu(zl@Nvfi?J>T=H<_d>93l>z7rWM zXF8nc*^JRw^1xhQfOEaos?IKOec;Q^FMk3i^Qmlab=D@Rm2#~j3y7+?g5N?9UtPz1 z_8{;74?cr_@FeppKwjVntI(N-xzO|x#y{#3%KS?-0!18G*U-zdy*IVZ zf*W4I0wg;v*S%&^QT#1iN1-NFZUm+OMW|4;sfx)iPLqR|+W6Ur(d}X7! z(67h1*wLV@{TxR?|3!+k3;G+<<11b|zQA8E6TSvPxc1N;{t_Hsi9d_b@nRC=`lH}j z#|uBin@(;G;K*k-^U>eu(a5-7&l+FNct6u?yYR!o>G-c@`ptrV%`o)%(OT4Jr=UM; z82Uk`*KtDYGcXMOH<^B~;D7Eg^cOMxenEf1F!Wb3{qur;=P>lUnEsHUzi}A)?=k%m zL4WHo^gm*H{+zR+zxL^;!_YrH4E`(Tvy@}aWT@ly3jD|U>Sz2^LJi{&jPGTpy7U19iMC7#Gw>|LJ-Gp>TsU3w%mhWlNB4 zLbgN?+{Lq?WR*X@GUTxAiD$_a>PIhi_i7`R6rY)r%BNa*8 zOs5OHiiP(G{6*#ihY7kg|Eu9kiSg3$NaKTS==rMImg|NuD#7at^<2pal`rOC(O@jVm#_tgL`)uz)ffw?8{Yl`rvY!7C_#93> z_208-eJoI1$@8z}zQ}Sj z1pYgo$58_BWq;FgOY@n{bQ1*qT4k0oN#OtBdO+YW@CJ3f!1LJO<_Nri*R}o@60Og1 z@YQH|g$4aez1{_W0w27-A@C9&=Zge>EsxK)1U`|+=N5tghU<3;TF8#GZn*RZ&J44W) z&+%lfz`w)$Y`4JQ<#-npIQ|+RUgrq>WR4FH3Va3o$>##EqhJUKfK;22poSL z4X^0}KaJxLd>I*Cn$IG(t6t#yS)VfmZm|Am3;aZ$mkk2n!S*~P@L#Z9`viW3_v-@! zKcD^fIf38IdcG#`pR@nu@%qsA7V|niS>T&k?$-r=3g=^23w%GvrF{agV?TdR;14qX zn!vxo^(=1JdcMx_VS>Ov-=-2fZI^d>gOp z`GWo^9{+NIH*=gE5crR{euKczV*S4-a39Cvrv&~ekHbF&?qS@+^M=h>yoC3cT!CwQ zb-ttNbsjQP(EpX!(ISB_<$bMM;IFaV7J-^BL*Ti^?M|H@>4*W)>g>E;Ri9-j9afxFm0Hwye& z9?#tZuj6s}t-xD&+}zwx>+>$#J5Aun>AXweMVzOdBk&dMpEnEq2Da<30>6j#d{^L) zaQ%IOFXD0dMBra={-)o8(RRJgc8z4aHU2lA_xS?9lei zZGpeb`OhN)e~kC**91O=*F`q>)B4Y3e_kl?_c+dM6!=!Q_dxlEpR=K*9iPd_MiO%53pVT6!?X_?(*4> zv_AUFUA2E{T%XU+7W5O@pLYrTBc88=0{<7sNsIRf&A)=@{S<*e%6?cY@O zWdFZQ;1e0YU*N~{ygVWBPkFulOW;Rwd>qGiXuFEoPs#*-gvX&#;6LPe@->0a;PZa3 z!0%>zzaeqxPp``{vhm-G4!3cQl%Yo)+9@Hlq}`~*Y&<^Kv&v^7!d_S;u}=B=FB!|M>#HgK<3%n$HzH@6Ce#OP-goz;EMt8xwdN zkMp?#zmxO)O9WoYcHSWH(QNP!1ips(+$ZoT`}q?B*UxKyE%3W}z5GGof9Cw*U4j3G z=l4^A@8faH(>f=C$FPh1)j;{b+^FpWV`kWT<00T6nHD|6R!(=4fB6T;BRpJ z{8ZpK^7#08-t>IoPtxKwLEvNAu0nxV@jT8K`02*Y0pU&V201k2Im+{1a) zXo0(U->(q(uX!9A1wNbQo+0or*iX6z9%TPd2>fyOhs^??#r}Dzz~AKh^#WhPaqPPS zU&r&iSKwW|ejgF|HC#U^@Pj=5FA3b@b$UqP@34QqBk*rCu6`0Y`5f$29=8$9PtVsR zmYXB+W$cF&1%4;*%Y_0zi{;K0_{F?G>d#+jxg!~`74(M~Zx#6O*snSS4!>GNSHHl! zS^skczLWL8NZ>beo^*}C^LTvs2poUv9IrbCzKYkyg95*Z{pU%6k7WAi1%4x+qkk{( z(|8@eCGb%k2mdAT)7f775EAIC$A2>W?MPmi8o!zSAz$E6G2f{I*ZKNvfgew!1E0qb z_)OL(DDYFc9uoM+Ot0T((0XQZ{O=X?MLf~9SMui$YwUEtU7dXEbH5?&XZ1pXv(^8N#OeZ!9$GWV^4G){W;W+1pQSUx2*!T zpm4r$2zdC741p^u_UMM~wzC=}x$pxyQ^~_@bU&Off zpPN{rDnYM5cYCIwKZe&uj{`@!=fQux`U>d9)@PHd8gU1XcIojs&w(SKpTU2;wiM8d z&F2ACH7<1E&hhyc&-_PXvA^K8@?v!_2<9OchKWF;O~^Ez z0j6;2d9Pr9_6htH#&aAv>feJmxQ=Grgt80%>(9e2cF?2#S2Lfb0>6Us27&*Y@n(TP z!+5*EmvH>)68J2}2OK!6?&iGcJjS*D{Vr&PYqx_Q_5Ymt+$!)77{5p03G4*d{Q~c0 z{1FF^`b_5i^l8SmK1*H1#(2v?k1XD0KJN(p&y0U2@B#KW<2c1n&wC%^9tV#4e8zd~ zXvVcZG|A9@qJthqKFNIM3;a>W7dvp|{}%6$)eao_jN|yfT;Ms3H#%_S<6(PGci;%M zGku%D+ZgX=T-&9;YX9pFdL*3<|M5ECfg}H$n9p{B-@y3Ag1`O>|J?%Del3!8PR%R>d=>KAwpR{wCwI1b&F| zxr}T5H?lq}9Q3Ha{(Nbxpl@XQO%D1Dpr6d=;`0Q44C7k`pKj)Jt%IJHkQ? zX8K1R^cg_+HRk`gz)xfRX~9STJGxV6tv%j{(Z)u6Zjs+f5W&Qw_eu&4F^4^EY$M0 z14sQoWIlfv_#-uQ>jw&sEH4oWL(<{Ak8C|4*1tiG!Zj zqow$sGz`8(;QD>=(qZsr0@v^B)enQO68I%PrO)ZZ;OzoG#OJuKVepv1f5HPjFbw_; zf&YR1{F}qz7Yh6We*S#PF!<1|4`spa^7{s*;%Z$P}AMFTV!G5RxP;rOnoC4SV2f4GRxAQB3@8tga?-n)v9>$*% z^m`fCe{ZPi_cQ*Xpnsn6F}yxB{UOFr5V&5aRRY(~6AIXH6vLtjnJaKT4ncvh;rcZK zH&~zB1fIkAeu2+s{8fQBGJZth{fv*`SFQhMuICGUC)ZC9_#Un=75HAR>%T|V{P#1i z^DK=&&-gil&mpdB`I`O+Z`*!-<++KM&N;S2V7la~3c^ zjqhRqm@9Do{QMk&>-P~33S7T$ViXT->`R2#!fPU~Ub}TE4qv8RoPaN3G>YK|6T(LE zTKLZYVnXQ$0^54G~hT2b`I@Bfsi?`t=s>FUX8#`hX-FbUzK>0|m^J zT^iumM($rAaBaVapM?VQl>Pg;|Er=w_CEl9(~bXw_bCaj+#kmukM6p^jvwh{W6vNu y7F;=;eBom$j9s!n`lMK5fEY$=f?f>$y(6kN)You%rR$&bpz86G?#Qol{QnO@>=#%7 literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/x86_64/callwrap.o b/gnu-efi/x86_64/lib/x86_64/callwrap.o new file mode 100644 index 0000000000000000000000000000000000000000..c8a6d3002da8771f035bc0c75a3c0fd964ab8615 GIT binary patch literal 1688 zcmbVLUvJYe5O>$X2J8XeCh-y^B!+~Orkbi2si;x~dzs*AZ%C8lIDfRnu54#*dEsjy zJ`JCPPXV6*&Z(_-Ns7=cS$Frl``tNrm#^a$v%p%e53 z1tr&kilZ>#tkP2OAmtTiNgf169tErM=z4S>P*N02Nftgu7ay;@c^G;Vf9Qwaa1c(y z!C>s+k_#+ZjK2uZHWs;EfkG&)%BmomVNvN+vt3gXeZ zhf@!K8hTjicuJufP8KF6QJIh$FKI?3SWr@FAZtvDoG3^QU?Le)n(%mI)-iL zQ7sG+{D9Dm(VHn3T>#KZCQ}BP3rqz!88tjQA!^NO28|Mx!WCcUJjR+t1v5^Yw;(EW z^>V?%L6aT(A5FLYhSno=F`vKn&aR@0>uS?(JgI7H_`1=4gbrb*PvJg*3nM}Y2>meF z&e*|fAG0fm==Yzt$8ftg$>5N^({Sq6Z-XQyYQnn2uL3t@4+9o@tu`LzFLvvTr+fy2+2UsSu?0Mr(8}g!n|Cz1 uCiKjLzbx-DNOK+k)Z&joHfLvCrxrZ1aZb4JcJ?z+y7(_GC|sbGP5xiE0MS$c literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/x86_64/efi_stub.o b/gnu-efi/x86_64/lib/x86_64/efi_stub.o new file mode 100644 index 0000000000000000000000000000000000000000..32aa0188ed168f6e39fb45471b419c59c4dda07c GIT binary patch literal 2792 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 Q)lBs#SpK^$&YA1~50AwR_y7O^ literal 0 HcmV?d00001 diff --git a/gnu-efi/x86_64/lib/x86_64/math.o b/gnu-efi/x86_64/lib/x86_64/math.o new file mode 100644 index 0000000000000000000000000000000000000000..94ae8597894948a8f455971e4a8273c3e1ad85eb GIT binary patch literal 30184 zcmb__33yx8vHz8>7g<^4#0jxO3r>ifIACW55=ug3S++&I2rW)RD2^=2wumgbTC&gr zDFhmp0wwH!c%%!IwzQ#8D1{VCffo9wz+-uBS^A)_Q0T&gvM;4?X3m_etBK3|zW?{X zAGtd7yK~N&GiPSboTF=TR-m`b>2MhOau{okGNn<&xOt*nUPr}s#%yDj@s{VX4|~pk z|NJ+5o_g^C&*66ZRU6&o+5Zb5*YWdz?>YC$;uNU2?8%<@-t9SmhAuwvXtQBdQTr|u zV=9$xw~(#ubkrba;?3!8T!$adYNQmjs4)WNs;cUAw#d+tjU&kAvT?OH?nKDpf;)39 zYq|&_XKfi;*>nR!RW|6@rrQv5l_4`V>n4DxcQf6%*D9aZ*lm@^XYI1e*;y;Ca&FeR zRo*`9WUIWR+-B9BrWZ6`)!6ioRc^ACTbibU>PUvFMYeM5+&JLXF7;$FQ8o2dzPj%N zOk=3(nD!7f$%KCz_N4|~)k#E+Vhc>eDlWr?0{j$;b*PA1?z79x0pvy;n(wO{b?O%T zXJCum{J;#X?VQpX-)U5Zh%i<2ClSFNhl!|GPa;IH6j35-)sxr^lw3_k)!>ZRfS9VD zY#_Gjir7emhb7%)J_bT6eVp6$6R4xg=TUiTZ52*=)t>3M!3d^7k?#&FJLzt6m9Lr? z0+X(C<@ANn(!Z)gcop5N>0U$kTDrUFUPpH~-KWrfD&42ieL8n~lX)+6TC=F?uDT1M zKQ+Xkcxeu&gyKn~>TV)fmG^iHz|J~4;5`e7dR6DAUL1U*BJL%knftiUTmel_$H7-s z&#iw{_fvgnE6$(lwE8ndIH-Z@&$c3$Q<=x}P$ctks0OPKGp_;&{sUW_HyTO|9I7=mP3FDUX`)Rifv$Hp zBc~#M0OO}tp2JogU_WnTE9!=Vy$v@Qq)0V>FLbM_JmYlN z!a@uI0PZBtkx(diqm++zf#(sc+VQ4|I#g|}H5V;jq9B)X{ z*WPKiJaeda^V+-AGv(&BKQUXLgJ&y<_j9#GGeo7diJw!8$K8x`k$X3L*| z+M=lYO)si)Oi@2KTmA;mCRA*7&3A`j2p-oU+-a1jL7{jE#1T?Ka6MP7WM)(qEIy)8hfHN$m@cR3Jh&2U}n9R{Kqr^Rr6&ASJPMT*$#y&Q<8 zin!c+2N0_iafSCqAl513>Xy(H2y`rat9vRu^0;Qgon*&;mF(m(Xf=jwDRHUtvF^20 zqf^&Fc~lLuHi|KL;~v(zv&3K2{3vpnpSik;OZAX(@1q(w=^8i`s=>^8_x;51OU;18 zD>q4&%dDr<+|)F>&Z_H#VJj8v^8PyxOA%)ip%!k}IYjUz>?T4bH?DJu;2Am3ixWGG z`}m6aR}u$1P$Rg;#2K%ta=lr1p4IE$Tgy3_>#bH?iJi>~SmjS_4o1+yUxzw|EM{5Fltmj@@9PVn! z_&u&EaHn1lhl1(_OYj6GS0XKOnAoMqh5geAYZtpasrre!`WRN9Y#mViE8IomKV9=* zjQkkdZL?K-ocmhh+NZf5KrXVVa*4>3AdrASn2f0oy4}xE)#r58x3Ow@O`-))u@1O# zQT4bm8Kj}lhJwmD6hq8Cj~Eteh5#~ z=EK0DM!C;j3o!}eKisLe7APp0uq8^znDu7&a$;SjS-UkWGyK3EA%;zwA&(5CEE+>O z9@O4RZ7C5B*vgN&ucRif!zOUJ-@_)bz~F=E@S+0L=paHVd*%$96jS;czvUnOtO;l7lrUa70@$Es9| ze0@Wice}%VfOvndd0(`6F~3la)5@h9-{)}ujVipQE7ZaR)i}-;%W#XsJqvJ;YcAYL zBdy40xTE@_su)AK>hB%ye^S-znLN}ZprClEYPqjD zjkPa3>PFzPGSpWb^GF6o{Yg=3eW`ubF%LUYNpkILikiiJ{@Gz-C(td7^L2-N7Z9+( zz@2pcEhyLoAd(`6$Ms#}L=jZw_Z;q@67&Gvsq*tsP?f2~_5MIiI3C_k)&9dV-Q6%* zfaI1PPV-f$q`Ikgx)%Vm$F&&l)J-208n6KsPbdnLb>ahH#3@yEJx=!)z&x%IxKrJ; zDyx8kzl956Z zt(Ho{{@8xY@lJ% z5U|ndeuFB!t1DE`2Hp>G4Ny&<>U7Tp2)5sFrzRI72Wf52XKGJ#)}02lvihygc|S!z zR8+=kxB78K%~H>@ifZIea!wOlRXuKZx_1NNaa{m+>hYUUXrLQum^Qs0*LR2sdsp?& za=H%?^mDjVy%(WitB0d%Kn&VOm8fcaobI=%+6TJY9FS2>64kJ7mb>hAPG12$_Br9k zu5_AMTeW757wel((#Xt_dlHOD~R|1Xx{x6FDV1&68y0CkIs7B zBEzU4lD_PmhlfWxIxBnQc>E_tO;wz)DoRIZMOo3=X<}z{_SC-Zta}|=SG)0doc7)L zM^5iP$O?Ej{;|{h6j05o^?x|Mm|`qa)F)0arV~pQRb_fHz2@C`wduuNdYyVU#q?qx z*Q2PZrWcbo-i=Q)y_k*hZoI+tqSJ0soU=^tZJ>`aMIB;#x5KjuMa?n2`+?e_s7BNK z3Q)UvMw(1>28<8(?!e)wJ;JQN6v}G2-ipJABTerGAPf)pDASACC=YkJ>0Je>5)XHU z>BYSd4|k>M#hncg_h{4m2v9uSV@xk@N_e=(n_k=m@Nn0d-j9Id;jT5km|^p9PcXfh zn)7hinO;n;dAL5)dnQmk+-}p0eeF_%?=f4@8TTkEXttoIU8<-PO)t99)rwlLsC|m+ zHNEIIH!G?SdI#&cRZ;z>7ft^zMGcrHR$T$%~5GWO^}+dsR_GrWXVH8;aUudNE;p|1&scwQOvi#bv=lR48{faQJ>lSR{eE09Z>EScUpuu86Ca+~Rm0J)CI?PfbJ z={-#DFqh)09b)nfIH>}1Ba>&FUR;g0FnNyY#YK0F$=#+G*VYLKTj;r_`4LzsKga30nXG3vbY@dWI!Fg#m0ACJbUO5NfaD26H@ zWh=Ma%1dqK<+k!lTlpAUd6lhvoUMGkt-RJ&US}(J*vg%@a+j^#V=JF%EBD&UeYSGH ztsJtI!?tq7R*u@rFSxd55ihx~=>rTlq{|d6%vHWn1|iTY0ywe4efR6BcIf3Fd~WasiNw(|FF<=Y$afTcND&HF&N6N8h268xJiaLJ=y1XNL1U&0ACT8`B%Ynm%|Zkz$bO{j9|kOK-?`*Fbw$8*mUWZk#lO5W9^hF&`r6uX^Wt> z&%m?k4Gwd`)Y!v!kF6vw?nDXY7m}zK2y;~HJIQ^n{G~MI=%@O34kmmDClrB zrDkTO{uMs2-El&b)-4VQXKP*KRUIV9{AydQPbhfmk4Y-%AUXsox zGNok7_+MIUZ%0n6(NFJMG5;@38pe3MIM$xPu@s6)c&VoiL~I{J^}ry8)7c~t5c+^f zrbeI)2Q5_IHenGH`CQQ=;uC4BoXBOZGHAmpCsV_vQAH^jY|W^47-!F8yRxc)K|OKRy%7pRX5f+HdaqN9$H&dJ)1a> zINRxfNerh7siH9&7)eLc;}e-wf2z1Wm){zK;p7szOm``rG$JV&MA8U!1&6}1{%Ei- zFcb-d2ZR1V#DLdqGU?GV)kJqDHyqCl#`Ed;a3)1{u~Mu*=pX0|4EYCodwtR1K>tv% zKN<*k`TPL`I)=9#a`~O`3d2My85}VDxojbqNd>b#@oX}aGP?U?&HiP}npd|kZ(r8D zeCe{)%a$%()!a6o&9&uI$+pvT*_5K<+jc-9o=B9&OPP2v)s`z2M|0`yXj?o#T7XBz zQZ}__G?h)|(+T9vC&t!*b+#R|vbk-vxou#1a~l}IngsOLHZp-cBZaYCzSy=sF&57Q z1zi@3P`TI^&!po8Xd1wgd@5Bag0PAto_Jzw8=6EaQOsdQcn(NnES1>0CYzfKfNJBZ z{AdbV&a{EPvBe??JrXbM%qGUbt8%46TPeF8%(1PA`o)LbZYEwB)BUA$S$L2bvC&3f zUvL1_AKEk&1J#2wM$^z)bmv5>FTR6jKa}ug3u$Z0g8h-GueTTK^mhfjV_`LIQC~-I zz=#y%`C@Q9KAJLma|zJ1HWspwXkcS>=%iR6ylJQpCjC=?{;h z<4C28FceFoNFX}2!58)SbPjY6p$&$yR!6DO7l#V@a0=c_8kk6BEn#q^%Z@QhFs#vR zD%p%L>-Ci~#q>lboq*ZG>OOxcsLZc_Fk+N|WySKLqMfX9hLpyxJM!t|XeyY~)1l^ZB#lkvx22Lw>p0=UI9EY0X|(=KM%N8yVS-2W zQ2jjt|9Uk6V2b(P?Rf(f9x0ZFW7%{9#4NL8SW`L>f()jz$y}af>P{8W8E8D+U}ODg zzkLHRwF3~gzyToQ(L)`@BGGW~1~5L*TJM107loP9lN3~Pvz1wvV+m9s4S~%@CQ^y? zNIKD(Pj5@*2jCy5%i<@wQ1*^YF0nP3TdoyhDY29-g3J|j17S0m1>KFN(H(S+{#-FV zveUBrRNl}}3ZYb<4HSpc9Se3E{iX3?5N9L=zFnXZqN5qU49Ed~?n@@~sY1c%O6SM7 z$MY$rMFTY0pW0E>PSYO;ZKCt7ST6Mj%Rn!f@{V-TZdyhxyEU8Jo>enNb-)(;Ew#dG z(KQh6Qy~c4F1(36-)5Yh@nYQYm-2;N-k-~q#P(pXZq)As&A=%8jo!#udZZYGsEVBIz2H!mS=eCV)aZHrp;&Zi zeP9z>aWD&U0G5{1Q%N!vWgi_7@?mY!GpDSeqAQSt*Hde*vOCMOsAA{(KrBR&6UBzf z;e{4-!gc`RZ`m;r{y-0~EZ9602N2j8RDJ*>i}m;ULWU0(+I&2*lZMT%5P=Bf?-`0> z1ktWe&m)^6(LmpjT0yWqh*Ib~Dv$;?8Y*`P=DM&{ zhG12PNi_UDzA(i2{&*H95f;rPfKNH-$Ez7RxOS_%hZQJi2} z3n|Tl?+JGIP$1+O2pT_TC0Yj> z?ZD86U}v=FQ&x9d>c52ZYg*kV%_vI4v=WfS<<-xCmt1X27)(|)*A*|)tgj+DAVpCj zm<-NWgy|fHwYH#RQV*o2eULd7bFeh{bKu-mEgFI-gu@`;14Ha22SlhZ&^G|73$<5X zK5z+*=1|Yte8>sy%QdLPa(M13o3u&Ki5K>Pt~As!Fc2-L(J;%Hi-c2&OgufVT+dMP zHHx_&I1}VILz5U*+4Zq$%GwNGhqSEL`eQ`;I)Y%m71=o&K81N4ZV2+`kz9WKQx+zB zk`>G%a~u;jBalr}zu82}Hf(G(kW43ii6Sg@S|TfiX}9VNM14UB@%|o~7!8+q43=)m zA2O7V;DG(T0}+lQu#Rxz@F@#0gcQnsdAS%&7t*L+9X2~kBO?%3R9>sXB10j+BJ~g` zK6Azaiw@`wl%OBd_%McI)`V&0DsUX~e%fSpr87FuwePb?Fj$t;xnw#)dgy{w4idp` z*l3Y4rV9tB1E2&IHOltau~Q3TkY7b0-zAN~62mK8CvHC>Xz);NGlp8V{34P zN%ItBw+A|ijluqIIJql|hnuK!S^4u$Fbrs7I!oDEbu?|e(04~{T%`^tn`C>^gG#ldS zVplG|KDE<8@mN&s2UBVC^epg>rON5E!7IforP9j4(_hM{O+Go(B)dJtQJ9Lgk)tlJ zR>%TiIE5a!Ek)*p)!^&^x1<${g?i+HFnySe6v0oE7$quq3D&Zq^g}6% z-X-yhPED)j7=*4E{ZL1&t4nQ0W7$#xrRMP6u~TQ`oQ0#{C&Oulat@ucskH``L2eWc zL}2EX6IEIbcx%PzY?fR0u8PDO8}<8o{V_Opftd*VIVIP-`@UFjG>Dmsj;`f{nFwz4 zGntA=Xn^U!7PFt^4+nHB2Uj*&ZDie;V_|@#I7s;=O=mGNmduUPTmpM0K_@o;d;&yN zCsCZ^=^<06D%$G~34#d0XB8SQ4+0(CW;m!0SRkXZh;|9i**~QP%qN#oR=J$+D|qk` zh$hNkJJZ`>?*^$Sq$bfEjFvbkuQj^hXh@~uFlP2+-bLY`>{ydd{!XThO9RG4D=>g# zb@j#~J%-qt5O)up`)CDOHPBlj^3iFC%0zHIg#F15&@Gx&Xh*6eUP$4JP*GXsmuNv6 zhIk1JSSAPOT(F3dys%0`P>=OfSno>}Oo6Ebs_D@m2=m!7IEN^o`-`Sv1mXXD?pk|-eB8x z=rmnrft7g_ot2>y;m_Tck>yhEO9@}aRt9Guww)w*c@gc(=f)4p7ODS%{=q;vIush9 z{-|1DI8iZDJ7gRo%=mp#*d)|65ERS5nnCxHzUL^?j2iUhm+eZ71@;v0suRLF>> zGlk(~sDN3U4~|3i{?A&OBc+K6I9{rdiWd)%W!641Z2w>?NkLeAY zLIXRf7ZtN0^uya7l}F)V&a?#i0e8cLYG^W^;cN!y0)0dsz0(P{&Y>~F zTRSM&_2_d#7#F2ok+D)S2?u-zXCMr3i08+78y3!OH?SffG*T{mkP<6g0mb1w%ywRG zNud^9+%!X`4ACaHwS2<6!B;*Bv$l-7aVz{7{Ivm@R4hBr%XL2-Lknw=58s zNtB$wN3)s>LW%%KvFY;3qY4}_jKN?y8neZ)E{G~)1}FL|E_~{~KWv>pV#j=Dtj9yW zP#S`pnXXKH6c!8EAkeogi^+rTCpDWb_^%u&{g$rYI>$Ox z8s3_NFP7mSe36P@Y5xo{_%@p^di4%Uj?=@2V@JK?(5bbqOW}KPtV6FI!l!FVn!k zfj;;$)!#}U^uQEvN@xZX|CDu-%d|97`Os8<9a{+kWg74b@FbT>vvKeP)0&0yGklk0 zCVa84FFjB2wkP2@H+X3r=NS2$5rj+6;X)`QuIIZMAL7MFx#jOX%F)NR%P8j#s+Of` z)RbN8xjerZwJ|5TQ0-wtAYkg}yyu`};w&3@&;_nc66kbrm>u&X7^_zy*vGDqZ z`mpc~Jo!%w{2lu9WW)Hqz@KG#{w(l*mj7LW=UD&R1@ySqa{JTSH8lQ5=ASF@dwJel z1pXte2-k9fx3T`$3jD8(pD6G*xt&3QU&uz96nGTgTElCnz?&IAPv9+#?-lq_jPDcp z6FlB~1zyGT^;?0T$8x?b@c)Ll5Aph^z~^yjo67U4^`GE*Y!dha)r`?1@MgBd6#{>V zdooJm7j$ z;Och<4C6h4H}JUrA@Cs2qsjK7?dK~TXX*t05!d$!d>2Ur>xjT_X8KTp|Bx4`c>Gt1K}@D7%Lv%nAGc^MPA@%_B+#|3^puaD;l+~ByhU*LUg=LZCS7vqlz z{8Xkt68N?3r*&LU%Q?*UJV)Sb*>1f8znAs1Lf}`j9()2{&*L2s`1eo%xIQoN=Xkxy z2>gp2C$AQG3(wO%0{;(|=V5^_V7vNA;8(JpEa!S!KbLX8CkT8CNpBdZ3cQW=woBmc zoL5{Y@RdAI-xc@}`^8-Xzl{6+g}}AFJ}q!P&OZqJ47SfV1pXMW%by7R7tBAE^{4go zU7p{$0)K+ni$wxo$L${@@Ne^Y0|GyT+y8>Vzt8dHOo6j{44vm{IVZUNs|EjuJkA>h z{w$C8Hi5suao|3IKhEtxD)8NG55E)m_1y0(0>7Hue@ozpb2|?98$B)``}IPB?_vF~ z5V+1$69S*les{jWAK-qkkT|cqcM9C#c3u*A59{Y$fp6yZ#pLZSm3)jt{yA!57@5*0*|rYHwgSDUhgsjf0^aqDexSxgF1iI<2r-m&R)S^WWV^C zz`xJ>d`#fl&Yu_f3q0OG3;b4I?>-Rt2Rt7wtPd^c$2{+=1^z|0&$Pg=Wj$OX@atI* zzY_RNw%d0EzJ~eXPp#$x>(?U;c@*&;7->63j)80>HiY= z?W~8_1pXf9Z*K^^jmPz|z*~8~7P3C{cpu|&^$7eFj!OlBA7DM6CGa2cdVQh5ce6d* zBJkxLZyynOHT%UU0zZQ7xs}_~^5bt7;FT8m1FYxm0{; z{6@}iHw%26?fD{sKgaWRm%x9+aq=yJ<1Yi@)y|(<9`)DqhH<>WKj!vN6!@c95w48_ ze~#^HRN$AfJVk*|=lT7iz#XjT_XUo>G0@wPg;{Nrxo?$cK8c{zrg%|7kC4YYc9{T?)P!#>kxQ}<=-ptm)ZWV5qN>^ z{|14d!uU-B|03)Ec7b2Ue)UIz>-}U6k3-8p4GVBB7x*C0-#UR`$@bPS@Yi`=K1JY% zvp)6up!{|{_$w+eiK_4X%$ujln>A?G!^{i9f(Hi>ilD+OL+Ieh}hzaqvf zFYu#TKi?EM{)`u1IuF(I+|PFYk>KCU<5|f1(EQ7Jyq_2NU2G5M3%r5j(yaoY#^btI z;GMiKKPvF|Se|DEuIK$#fseC1?+Sb~+kZ9NsU8>p3O8Ph1@2(~T_x}7B~Zx;A(aNuy=DeyMV2Obo7H~ZI< z0xz-NUKIGTtpEQO_>rnx<70vUjpIWT`+=U9yIKB)0v~1kXn{Y@{rUxdD(m?qf&ZH0 z?U2A{u{`4ff0_OFivmBJ?d*JkzrlIeRRX_;+qqHTI=P!N=T)=X!WVy8dXR#fw6FB}%30}Pd?_oV`6!`rtPg3BcY!4Fxzn<6G zFA2Pf={*9!nB&;x0^h>(yHDT?*ne*k_^(-CcL^N-9}0LqDDYKGKOyk%aGZHw;P~Ur zc)cp{OWD8P7WfN1@9GzQ%JZeahnvdtqvvZXx6>%_>xs;14o? zkHBB!_!AZQ1FYvQ0%vw3Bk(tPz1t!1=Q+>YEpY9(mkRts=D$whkFmYoEbxceetsnI zKGy%w1b!{=qaT$x$F<)IJjQYRj{?7&$NPrB@dwxO`dHvOwnNup>baixKeOG;68Kr{ zkIe!Ps_Mp30>|H(#cP$o&tf?`1s-I33kkf6w!|Tg~0-wurKF&BE zd!p$qMdiTtis0{He|cNrdY|uXrfSxF`Ph%9*>F^u4)Zevu4=>2uG(;%`oH*xs%XxS#E0pJ?CU>vqAf z+rMAnx_!N#pl*0bP*U&X;-{7$%XpoJ09+DpCREKitBjD90@r%z5qLAxrwClzkI`P( zIbMtp!)GzCKF4&a2!Hlrw8QTq#Etf0__>hwJp8R@JN@3(P#XVKfXngW;e2YFrr;+= zDmdft*IxK1EB4y(b73jX54{=f3HV!Fc(2}Qhd=R8wZjX}@bgUY7d}kG?~1igOWyU9U|4VL2)rA{aq7dm%lez)iNuik8(e>>RZ|rt?;yaFjek{6@$33H zejK|TKeEX-vF4N9|8K-YK^mt4?_~XtasOJ+*gwV;+5Z;-!#1^?P^9ZSUiJAsj`Iv# zvT8Zbg9nqd2-lsHx5v;hv~ zYWc#6XW%g?9N^58^oYa(X6&7Mz1m0!MzVM2n{R%0cH^9Ewx8rQjge?pM#t`#m>p_kvW!a=DWdJFAvP-%z9EA8-P)e4X6R_*iG@XU&qtjNn-5s)Gv zML>#x6alIB!}@lLHLV9BYt3a`D>5j313V@bG*Y-%iF#jlbHSdA_^p^kfh? z6ZUlLMdjgk<({#&mKIWIuzv-LCviT$j9&+jN^~}(f`Of%f(w^RVCd|MV5O?g3aP<0 z?0jC)KUPG1S&m3X$a(|cgNwqR33I|-Q4u>+eK&S=Dpq1&^K zj_ZuQyIWc5|gV)gzMCRJylQE?4b8uCN zMU{RB1iu7D)&Fquark neutron.nbuild>nbuild \ No newline at end of file diff --git a/src/quark-c/a20.s b/src/a20.s similarity index 100% rename from src/quark-c/a20.s rename to src/a20.s diff --git a/src/quark-c/drivers/acpi.c b/src/drivers/acpi.c similarity index 94% rename from src/quark-c/drivers/acpi.c rename to src/drivers/acpi.c index 6fea5da..7ad542f 100644 --- a/src/quark-c/drivers/acpi.c +++ b/src/drivers/acpi.c @@ -46,13 +46,13 @@ uint32_t acpi_init(void){ } //Check the DSDT - if(!acpi_sdt_checksum((acpi_sdt_hdr_t*)fadt->dsdt)){ + if(!acpi_sdt_checksum((acpi_sdt_hdr_t*)(uint64_t)fadt->dsdt)){ gfx_verbose_println("Error: DSDT is not valid"); return 0; } //Search for the \_S5 package in DSDT - char* s5_addr = (char*)fadt->dsdt + sizeof(acpi_sdt_hdr_t); - uint32_t dsdt_len = *((uint32_t*)fadt->dsdt + 1) - sizeof(acpi_sdt_hdr_t); + char* s5_addr = (char*)(uint64_t)fadt->dsdt + sizeof(acpi_sdt_hdr_t); + uint32_t dsdt_len = *((uint32_t*)(uint64_t)fadt->dsdt + 1) - sizeof(acpi_sdt_hdr_t); while(dsdt_len-- > 0){ if(memcmp(s5_addr, "_S5_", 4) == 0) break; @@ -137,7 +137,7 @@ uint8_t acpi_sdt_checksum(acpi_sdt_hdr_t* rsdt){ // table mod 256 is zero, the table is valid uint8_t sum = 0; for(uint32_t i = 0; i < rsdt->len; i++){ - uint8_t byte = *(uint8_t*)((uint32_t)rsdt + i); + uint8_t byte = *(uint8_t*)((uint64_t)rsdt + i); sum += byte; } return sum == 0; diff --git a/src/quark-c/drivers/acpi.h b/src/drivers/acpi.h similarity index 100% rename from src/quark-c/drivers/acpi.h rename to src/drivers/acpi.h diff --git a/src/quark-c/drivers/ata.c b/src/drivers/ata.c similarity index 100% rename from src/quark-c/drivers/ata.c rename to src/drivers/ata.c diff --git a/src/quark-c/drivers/ata.h b/src/drivers/ata.h similarity index 100% rename from src/quark-c/drivers/ata.h rename to src/drivers/ata.h diff --git a/src/quark-c/drivers/diskio.c b/src/drivers/diskio.c similarity index 98% rename from src/quark-c/drivers/diskio.c rename to src/drivers/diskio.c index 53a34c1..860623b 100644 --- a/src/quark-c/drivers/diskio.c +++ b/src/drivers/diskio.c @@ -32,7 +32,7 @@ void diskio_init(void){ ata_read_sect(i >> 1, i & 1, 0, 1, buffer); //Go through all the partition entries for(uint8_t p = 0; p < 4; p++){ - uint32_t p_base = (uint32_t)buffer + 0x1BE + (p * 16); + uint64_t p_base = (uint64_t)buffer + 0x1BE + (p * 16); //Write the partition disk type, number and MBR entry number partitions[cur_part].device_type = DISK_PATA; partitions[cur_part].device_no = i; diff --git a/src/quark-c/drivers/diskio.h b/src/drivers/diskio.h similarity index 100% rename from src/quark-c/drivers/diskio.h rename to src/drivers/diskio.h diff --git a/src/quark-c/drivers/gfx.c b/src/drivers/gfx.c similarity index 99% rename from src/quark-c/drivers/gfx.c rename to src/drivers/gfx.c index fb0b317..8bd10b3 100644 --- a/src/quark-c/drivers/gfx.c +++ b/src/drivers/gfx.c @@ -43,7 +43,7 @@ color32_t* gfx_buffer(void){ */ void gfx_init(void){ //Read the VBE buffer pointer (it was written in memory by the second stage loader) - vbe_buffer = (color32_t*)(*(int*)(0x8FC00)); + vbe_buffer = (color32_t*)(*(uint64_t*)(0x8FC00UL)); //Read the display resolution uint32_t res = *(uint32_t*)(0x8FC04); res_y = res & 0xFFFF; diff --git a/src/quark-c/drivers/gfx.h b/src/drivers/gfx.h similarity index 100% rename from src/quark-c/drivers/gfx.h rename to src/drivers/gfx.h diff --git a/src/quark-c/drivers/pci.c b/src/drivers/pci.c similarity index 100% rename from src/quark-c/drivers/pci.c rename to src/drivers/pci.c diff --git a/src/quark-c/drivers/pci.h b/src/drivers/pci.h similarity index 100% rename from src/quark-c/drivers/pci.h rename to src/drivers/pci.h diff --git a/src/quark-c/drivers/pic.c b/src/drivers/pic.c similarity index 100% rename from src/quark-c/drivers/pic.c rename to src/drivers/pic.c diff --git a/src/quark-c/drivers/pic.h b/src/drivers/pic.h similarity index 100% rename from src/quark-c/drivers/pic.h rename to src/drivers/pic.h diff --git a/src/quark-c/drivers/pit.c b/src/drivers/pit.c similarity index 92% rename from src/quark-c/drivers/pit.c rename to src/drivers/pit.c index a9a12c0..6dacd85 100644 --- a/src/quark-c/drivers/pit.c +++ b/src/drivers/pit.c @@ -21,13 +21,13 @@ void pit_configure_irq0_ticks(uint16_t div){ //Configure channel 0 as lo-hi access, rate generation, 16-bit binary mode outb(PIT_MC, 0b00110100); //Save the flags and disable interrupts - __asm__ volatile("pushfl; cli"); + __asm__ volatile("pushfq; cli"); //Output lower bits of the divider outb(PIT_C0, div); //Output higher bits of the divider outb(PIT_C0, div >> 8); //Restore the flags, enabling interrupts if they were enabled before - __asm__ volatile("popfl"); + __asm__ volatile("popfq"); } /* diff --git a/src/quark-c/drivers/pit.h b/src/drivers/pit.h similarity index 100% rename from src/quark-c/drivers/pit.h rename to src/drivers/pit.h diff --git a/src/quark-c/drivers/ps2.c b/src/drivers/ps2.c similarity index 100% rename from src/quark-c/drivers/ps2.c rename to src/drivers/ps2.c diff --git a/src/quark-c/drivers/ps2.h b/src/drivers/ps2.h similarity index 100% rename from src/quark-c/drivers/ps2.h rename to src/drivers/ps2.h diff --git a/src/quark-c/drivers/ps2_kbd.c b/src/drivers/ps2_kbd.c similarity index 100% rename from src/quark-c/drivers/ps2_kbd.c rename to src/drivers/ps2_kbd.c diff --git a/src/quark-c/drivers/ps2_kbd.h b/src/drivers/ps2_kbd.h similarity index 100% rename from src/quark-c/drivers/ps2_kbd.h rename to src/drivers/ps2_kbd.h diff --git a/src/quark-c/drivers/usb.c b/src/drivers/usb.c similarity index 88% rename from src/quark-c/drivers/usb.c rename to src/drivers/usb.c index 65598c9..9c860e2 100644 --- a/src/quark-c/drivers/usb.c +++ b/src/drivers/usb.c @@ -24,8 +24,8 @@ void ehci_init(){ unsigned char ehci_add_cont(unsigned char b, unsigned char d){ //Add the controller to the list ehci_conts[ehci_cont_count].pci_addr = (b << 8) | d; - int bar0 = (((int)pci_read_config_16(b, d, 0, 0x12) << 16) | (int)pci_read_config_16(b, d, 0, 0x10)) & 0xFFFFFF00; - ehci_conts[ehci_cont_count].capreg_addr = (void*)bar0; + uint32_t bar0 = (((uint32_t)pci_read_config_16(b, d, 0, 0x12) << 16) | (uint32_t)pci_read_config_16(b, d, 0, 0x10)) & 0xFFFFFF00; + ehci_conts[ehci_cont_count].capreg_addr = (void*)(uint64_t)bar0; //Reset the controller //ehci_write_opreg_dw(ehci_cont_count, EHCI_OPREG_USBCMD, 2); //Wait for it to actually reset @@ -35,10 +35,10 @@ unsigned char ehci_add_cont(unsigned char b, unsigned char d){ ehci_write_opreg_dw(ehci_cont_count, EHCI_OPREG_USBINTR, 0); ehci_write_opreg_dw(ehci_cont_count, EHCI_OPREG_USBCMD, 0x00080031); //Decode some register values - int hcsparams = ehci_read_capreg(ehci_cont_count, EHCI_CAPREG_HCSPARAMS); + uint32_t hcsparams = ehci_read_capreg(ehci_cont_count, EHCI_CAPREG_HCSPARAMS); ehci_conts[ehci_cont_count].port_cnt = hcsparams; ehci_conts[ehci_cont_count].dbg_port = (hcsparams & ((1 << 23) | (1 << 22) | (1 << 21) | (1 << 20))) >> 20; - short hci_ver_bcd = ehci_read_capreg(ehci_cont_count, EHCI_CAPREG_HCIVERSION) & 0x0000FFFF; + uint16_t hci_ver_bcd = ehci_read_capreg(ehci_cont_count, EHCI_CAPREG_HCIVERSION) & 0x0000FFFF; ehci_conts[ehci_cont_count].hci_ver[0] = ((hci_ver_bcd & 0xF000) >> 24) + '0'; ehci_conts[ehci_cont_count].hci_ver[1] = ((hci_ver_bcd & 0x0F00) >> 16) + '0'; ehci_conts[ehci_cont_count].hci_ver[2] = '.'; diff --git a/src/quark-c/drivers/usb.h b/src/drivers/usb.h similarity index 100% rename from src/quark-c/drivers/usb.h rename to src/drivers/usb.h diff --git a/src/quark-c/fonts/font_neutral.h b/src/fonts/font_neutral.h similarity index 80% rename from src/quark-c/fonts/font_neutral.h rename to src/fonts/font_neutral.h index 089b038..edaba03 100644 --- a/src/quark-c/fonts/font_neutral.h +++ b/src/fonts/font_neutral.h @@ -22,33 +22,33 @@ static const unsigned char font_neutral[] = { 0x00, 0x00, 0x00, 0x00, 0x60, 0x18, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x62, 0x51, 0x49, 0x46, 0x00, 0x00, 0x22, 0x41, 0x49, 0x36, 0x00, 0x00, 0x0F, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x4F, 0x49, 0x49, 0x31, 0x00, 0x00, 0x3C, 0x4A, -0x49, 0x31, 0x00, 0x00, 0x41, 0x31, 0x0D, 0x03, 0x00, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x00, +0x49, 0x31, 0x00, 0x00, 0x61, 0x19, 0x05, 0x03, 0x00, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x00, 0x46, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x02, 0x51, 0x09, 0x06, 0x00, 0x00, 0x3C, 0x42, 0x5A, 0x5C, 0x00, 0x00, 0x7E, 0x11, 0x11, 0x7E, 0x00, 0x00, 0x7F, 0x49, 0x49, 0x36, 0x00, 0x00, 0x3E, 0x41, 0x41, 0x22, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x7F, 0x49, 0x49, 0x41, 0x00, 0x00, 0x7F, 0x09, 0x09, 0x01, 0x00, 0x00, 0x3E, 0x41, 0x51, 0x71, 0x00, 0x00, 0x7F, 0x08, 0x08, 0x7F, 0x00, 0x00, -0x41, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x41, 0x41, 0x3F, 0x01, 0x00, 0x00, 0x7F, 0x08, 0x14, 0x63, -0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7F, 0x02, 0x02, 0x7F, 0x00, 0x00, 0x7F, 0x10, -0x20, 0x7F, 0x00, 0x00, 0x3E, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x7F, 0x09, 0x09, 0x06, 0x00, 0x00, +0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x41, 0x41, 0x3F, 0x01, 0x00, 0x00, 0x7F, 0x08, 0x14, 0x63, +0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00, 0x7F, 0x08, +0x10, 0x7F, 0x00, 0x00, 0x3E, 0x41, 0x41, 0x3E, 0x00, 0x00, 0x7F, 0x09, 0x09, 0x06, 0x00, 0x00, 0x3E, 0x41, 0x61, 0x7E, 0x00, 0x00, 0x7E, 0x09, 0x09, 0x76, 0x00, 0x00, 0x46, 0x49, 0x49, 0x31, -0x00, 0x00, 0x01, 0x01, 0x7F, 0x01, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x3F, 0x40, -0x40, 0x3F, 0x00, 0x00, 0x3F, 0x40, 0x20, 0x40, 0x3F, 0x00, 0x67, 0x18, 0x18, 0x67, 0x00, 0x00, -0x43, 0x34, 0x0C, 0x03, 0x00, 0x00, 0x61, 0x51, 0x4D, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, +0x00, 0x00, 0x01, 0x7F, 0x01, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x1F, 0x20, +0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x41, 0x22, 0x1C, 0x22, 0x41, 0x00, +0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x61, 0x59, 0x45, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, 0x00, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x00, 0x00, 0x7F, 0x48, 0x48, 0x30, 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, -0x00, 0x00, 0x30, 0x48, 0x48, 0x7F, 0x00, 0x00, 0x38, 0x54, 0x54, 0x44, 0x00, 0x00, 0x7E, 0x09, +0x00, 0x00, 0x30, 0x48, 0x48, 0x7F, 0x00, 0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x00, 0x7E, 0x09, 0x09, 0x01, 0x00, 0x00, 0x48, 0x54, 0x54, 0x3C, 0x00, 0x00, 0x7F, 0x08, 0x08, 0x70, 0x00, 0x00, -0x40, 0x7A, 0x40, 0x00, 0x00, 0x00, 0x40, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, +0x00, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x00, 0x00, 0x00, 0x78, 0x04, 0x08, 0x04, 0x78, 0x00, 0x7C, 0x04, 0x04, 0x78, 0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, -0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x00, 0x00, 0x48, 0x54, 0x54, 0x24, -0x00, 0x00, 0x04, 0x7F, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x3C, 0x40, -0x40, 0x3C, 0x00, 0x00, 0x3C, 0x40, 0x20, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x4C, 0x50, 0x50, 0x3C, 0x00, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x00, 0x00, 0x18, 0x7F, 0x41, 0x41, -0x41, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x18, 0x00, 0x10, 0x08, +0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x7C, 0x08, 0x04, 0x00, 0x00, 0x00, 0x48, 0x54, 0x54, 0x24, +0x00, 0x00, 0x04, 0x7F, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x1C, 0x20, +0x40, 0x3C, 0x00, 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, +0x4C, 0x50, 0x50, 0x3C, 0x00, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x00, 0x00, 0x08, 0x36, 0x41, 0x41, +0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x36, 0x08, 0x00, 0x10, 0x08, 0x10, 0x08, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/src/quark-c/gui/gui.c b/src/gui/gui.c similarity index 99% rename from src/quark-c/gui/gui.c rename to src/gui/gui.c index 7fa1ed0..85cd889 100644 --- a/src/quark-c/gui/gui.c +++ b/src/gui/gui.c @@ -141,7 +141,7 @@ void gui_destroy_window(window_t* win){ while((last = &windows[i++])->title); i--; //Calculate index of the deleted window in the window list - uint32_t idx = ((uint32_t)win - (uint32_t)windows) / sizeof(window_t); + uint32_t idx = ((uint64_t)win - (uint64_t)windows) / sizeof(window_t); //Move the windows that stand after one that we just deleted, one to the left for(uint32_t j = idx + 1; j < i; j++){ windows[j - 1] = windows[j]; diff --git a/src/quark-c/gui/gui.h b/src/gui/gui.h similarity index 100% rename from src/quark-c/gui/gui.h rename to src/gui/gui.h diff --git a/src/quark-c/gui/stdgui.c b/src/gui/stdgui.c similarity index 100% rename from src/quark-c/gui/stdgui.c rename to src/gui/stdgui.c diff --git a/src/quark-c/gui/stdgui.h b/src/gui/stdgui.h similarity index 100% rename from src/quark-c/gui/stdgui.h rename to src/gui/stdgui.h diff --git a/src/quark-c/images/neutron_logo.xbm b/src/images/neutron_logo.xbm similarity index 100% rename from src/quark-c/images/neutron_logo.xbm rename to src/images/neutron_logo.xbm diff --git a/src/quark-c/images/power.xbm b/src/images/power.xbm similarity index 100% rename from src/quark-c/images/power.xbm rename to src/images/power.xbm diff --git a/src/quark-c/images/system.xbm b/src/images/system.xbm similarity index 100% rename from src/quark-c/images/system.xbm rename to src/images/system.xbm diff --git a/src/quark-c/isr_wrapper.s b/src/isr_wrapper.s similarity index 75% rename from src/quark-c/isr_wrapper.s rename to src/isr_wrapper.s index 22f17f5..b08974c 100644 --- a/src/quark-c/isr_wrapper.s +++ b/src/isr_wrapper.s @@ -3,126 +3,126 @@ .align 4 exc_wrapper: - pop edx + pop rdx cld call quark_exc iret exc_wrapper_code: - pop ecx - pop edx + pop rcx + pop rdx cld call quark_exc iret irq0_wrap: - pushad + ;//pushaq push 0 call quark_irq add esp, 4 - popad + ;//popaq iret irq1_wrap: - pushad + ;//pushaq push 1 call quark_irq add esp, 4 - popad + ;//popaq iret irq2_wrap: - pushad + ;//pushaq push 2 call quark_irq add esp, 4 - popad + ;//popaq iret irq3_wrap: - pushad + ;//pushaq push 3 call quark_irq add esp, 4 - popad + ;//popaq iret irq4_wrap: - pushad + ;//pushaq push 4 call quark_irq add esp, 4 - popad + ;//popaq iret irq5_wrap: - pushad + ;//pushaq push 5 call quark_irq add esp, 4 - popad + ;//popaq iret irq6_wrap: - pushad + ;//pushaq push 6 call quark_irq add esp, 4 - popad + ;//popaq iret irq7_wrap: - pushad + ;//pushaq push 7 call quark_irq add esp, 4 - popad + ;//popaq iret irq8_wrap: - pushad + ;//pushaq push 8 call quark_irq add esp, 4 - popad + ;//popaq iret irq9_wrap: - pushad + ;//pushaq push 9 call quark_irq add esp, 4 - popad + ;//popaq iret irq10_wrap: - pushad + ;//pushaq push 10 call quark_irq add esp, 4 - popad + ;//popaq iret irq11_wrap: - pushad + ;//pushaq push 11 call quark_irq add esp, 4 - popad + ;//popaq iret irq12_wrap: - pushad + ;//pushaq push 12 call quark_irq add esp, 4 - popad + ;//popaq iret irq13_wrap: - pushad + ;//pushaq push 13 call quark_irq add esp, 4 - popad + ;//popaq iret irq14_wrap: - pushad + ;//pushaq push 14 call quark_irq add esp, 4 - popad + ;//popaq iret irq15_wrap: - pushad + ;//pushaq push 14 call quark_irq add esp, 4 - popad + ;//popaq iret diff --git a/src/muon/1stg.asm b/src/muon/1stg.asm deleted file mode 100644 index e392fe7..0000000 --- a/src/muon/1stg.asm +++ /dev/null @@ -1,128 +0,0 @@ -;Neutron project -;Muon - first stage loader - -org 0x7C00 -use16 - -entry: - cli ;Immediately disable interrupts - mov ax, 0x0300 - mov ss, ax - xor ax, ax - push dx ;save the boot drive number - xor ch, ch ;clear CH -lp: - xor ax, ax ;set the segment registers - mov ds, ax ;data segment - mov es, ax ;E data segment - mov fs, ax ;F data segment - mov gs, ax ;G data segment - call screen_clear ;clear the screen - xor bx, bx ;clear BX - mov ch, 0x0F ;set the colors: white on black - mov dx, startup_literal ;set the string to be printed - call print_str ;print the string - mov ax, 0x50 ; - mov es, ax ;set ES to the load ptr - xor bx, bx ;clear BX - mov al, 4 ;4 sectors to read - pop dx ;restore drive number - xor dh, dh ;head 0 - xor ch, ch ;cylinder 0 - mov cl, 2 ;sector 2 - mov ah, 2 ;BIOS routine no. - int 0x13 ;BIOS call - cmp ah, 0 ;compare return code with success - jne print_io_err ;print io err if not successful - xor bx, bx ;clear BX - mov ax, [es:bx] ;read the signature - cmp ax, 0xEBA1 ;check the signature - je run_2nd ;run the 2nd stage loader if successful - mov bx, 160 ;set the screen position: 1st line counting from 0 - mov ch, 0x0C ;set the colors: light red on black - mov dx, error_literal ;set the string to be printed - call print_str ;print the string - mov dx, error_bad_signature_literal ;set the string to be printed - call print_str ;print the string - jmp $ ;infinite loop -print_io_err: - mov bx, 160 ;set the screen position: 1st line counting from 0 - mov ch, 0x0C ;set the colors: light red on black - mov dx, error_literal ;set the string to be printed - call print_str ;print the string - mov dx, error_diskio_literal ;set the string to be printed - call print_str ;print the string - jmp $ ;infinite loop -run_2nd: - push 0x050 ;select the 2nd stage segment - pop gs ; - xor bx, bx ;and offset - mov [gs:bx], dl ;tell the drive number to the 2nd stage loader - mov bx, 160 ;set the screen position: 1st line counting from 0 - mov ch, 0x0A ;set the colors: light green on black - mov dx, successful_literal ;set the string to be printed - call print_str ;print the string - mov ax, 0x50 ; - jmp 0x050:0x0002 ;jump to the 2stg code - mov bx, 320 ;set the screen position: 1st line counting from 0 - mov ch, 0x0C ;set the colors: light red on black - mov dx, error_literal ;set the string to be printed - call print_str ;print the string - mov dx, error_noexec_literal ;set the string to be printed - call print_str ;print the string - jmp $ - -print_char: - push ds ;save the DS - mov ax, 0xB800 ; - mov ds, ax ;point to the VGA buffer - mov [bx], cx ;move the data to the buffer - pop ds ;restore the DS - add bx, 2 ;increment the pointer by 2 - ret ;return from subroutine - -print_str: - xchg bx, dx ;swap BX and DX - mov cl, [bx] ;load the char - xchg bx, dx ;swap BX and DX - cmp cl, 0 ;compare the char with 0 - je print_ret ;return if equal - call print_char ;print the char - inc dx ;increment the pointer - jmp print_str ;it's a loop after all -print_ret: - ret ;return from subroutine - -screen_clear: - xor bx, bx ;clear BX - xor cx, cx ;clear CX -screen_clear_loop: - call print_char ;print the char - cmp bx, 3999 ;check if we have reached the end of the screen - jge screen_clear_exit ;exit if so - jmp screen_clear_loop ;continue if not -screen_clear_exit: - ret ;return from subroutine - -startup_literal: db "Muon-1 [a part of nOS] has been started", 0 -error_literal: db "Load error: ", 0 -error_bad_signature_literal: db "bad signature", 0 -error_diskio_literal: db "disk I/O", 0 -error_noexec_literal: db "Muon-2 didn't execute", 0 -successful_literal: db "Executing Muon-2", 0 - -times 446-($-$$) db 0 ;fill-in - -;MBR partition table -mbr_part_entry_1: - mbr_pe1_status: db 0x80 - mbr_pe1_start_chs: db 0, 0, 0 - mbr_pe1_part_type: db 0x58 - mbr_pe1_end_chs: db 0, 0, 0 - mbr_pe1_start_lba: dd 9 - mbr_pe1_length_lba: dd 2872 -mbr_part_entry_2: dd 0, 0, 0, 0 -mbr_part_entry_3: dd 0, 0, 0, 0 -mbr_part_entry_4: dd 0, 0, 0, 0 - -dw 0xAA55 ;boot signature \ No newline at end of file diff --git a/src/muon/2stg.asm b/src/muon/2stg.asm deleted file mode 100644 index 45cd2f3..0000000 --- a/src/muon/2stg.asm +++ /dev/null @@ -1,241 +0,0 @@ -;Neutron project -;Muon - second stage loader - -%define nfs_buffer 0x800 -;%define use_verbose_selection - -org 0x0000 -use16 - -dw 0xEBA1 ;signature for the 1st stage loader - -entry: - mov ax, 0x600 ;load 0x600 into SS - mov ss, ax ; - mov sp, 0xFFFF ;set the stack pointer - cli ;disable interrupts - mov al, 0x80 ;disable non-maskable interrupts - out 0x70, al ; - mov ax, cs ; - mov ds, ax ;set DS to CS - mov byte al, [ds:0] ;fetch the drive number - mov byte [ds:nfs_drive_no], al ;tell it to the nFS driver - mov bx, 320 ;set the screen position: 2nd line counting from 0 - mov ch, 0x0F ;set the colors: white on black - call nfs_init ;read boot drive geometry - call nfs_load_master_sector ;load the nFS data - mov ch, 0x0F ;set the colors: white on black - jmp krnl ;try to load the kernel -krnl: - call krnl_load ;load the kernel - cmp ax, 0 ;check if the load was successful - jne krnl_ret ;return if not - push 0x93C0 ;segment 0x93C0 - this is where the map is stored - pop es ; - xor di, di ;clear DI - call map_memory ;map the memory - mov ch, 0x0F ;print the debug message - mov dx, krnl_debug_run ; - call print_str_line ; -%ifdef use_verbose_selection - push es ; - push ax ; - verbose_prompt: ; - mov ch, 0x0D ;print the verbose mode prompt - mov dx, krnl_verbose_prompt - call print_str_line ; - xor ah, ah ;input a character - int 16h ; - cmp al, 'v' ;check if V was pressed - jne v_prompt_not_v ; - push 0x8FC0 ;load 0x8C0 - pop es ;into ES - mov byte [es:16], 1 ;indicate the verbose mode - jmp v_prompt_escape ;escape - v_prompt_not_v: ; - cmp al, 'n' ;check if N was pressed - jne verbose_prompt ; - push 0x8FC0 ;load 0x8C0 - pop es ;into ES - mov byte [es:16], 0 ;indicate the normal mode - v_prompt_escape: ; - pop ax ; - pop es ; -%else - push es ; - push 0x8FC0 ;load 0x8C0 - pop es ;into ES - mov byte [es:16], 1 ;indicate the verbose mode - pop es ; -%endif - mov ch, 0x0F ;print another debug message - mov dx, krnl_debug_video; - call print_str ; - call gfx_go_best ;exit the text mode, as the kernel can't do it on its own - push 0x8FC0 ;load 0x8C0 - pop es ;into ES - mov [es:0], ecx ;save ECX (gfx buf linear address) in RAM - mov [es:4], edx ;save EDX (gfx resolution) in RAM - mov [es:8], ah ;save AH (gfx bits per pixel) in RAM - mov dl, [ds:nfs_drive_no] ;get the drive number - mov byte [es:9], dl ;save boot drive in RAM - jmp krnl_run ;run the kernel -krnl_ret: - mov ch, 0x0C - mov dx, krnl_error - call print_str_line - jmp $ -krnl_load: - ;load the kernel into RAM - mov dx, krnl_debug_ldstart ;print the debug message - mov ch, 0x0F ; - call print_str ; - push gs ;save the registers - push es ; - push si ; - push di ; - push ax ; - push dx ; - push ecx ; - push bx ; - mov ax, ds ;move DS - mov gs, ax ;into GS - mov ax, krnl_file ;find the kernel file - call nfs_find ; - cmp byte [ds:nfs_status], 0 ;check if the operation was successful - jne krnl_load_ret_err ;return immediately if not - mov bx, dx ;load DX into the indexing register - mov ax, [ds:bx+28] ;load the file location into AX - mov dx, [ds:bx+24] ;load the file size into DX - push 0xF0 ;load 0xF0 into - pop es ;ES - xor di, di ;clear DI -krnl_load_cycle: - cmp dx, 0 ;check if the entire file was read - jbe krnl_load_ret ;return if so - pop bx - push dx - push cx - mov dx, krnl_debug_ld - mov ch, 0x0F - call print_str - pop cx - pop dx - push bx - call nfs_read_drive_sector ;read one sector - cmp byte [ds:nfs_status], 0 ;check if the operation was successful - jne krnl_load_ret_err ;return immediately if not - mov ecx, 512 ;set the number of bytes to copy: 512 - mov si, nfs_buffer ;set SI to the nFS buffer - rep movsb ;copy the bytes - inc ax ;increment the sector number - cmp dx, 512 ;if less than a sector is remaining - jbe krnl_load_ret ;return - sub dx, 512 ;subtract the sector size from the file size - jmp krnl_load_cycle ;looping -krnl_load_ret_err: - pop bx ;restore the registers - pop ecx ; - pop dx ; - pop ax ; - pop di ; - pop si ; - pop es ; - pop gs ; - mov ax, 1 ;tell that the error occured - ret ;return from subroutine -krnl_load_ret: - pop bx ;restore the registers - pop ecx ; - pop dx ; - pop ax ; - pop di ; - pop si ; - pop es ; - pop gs ; - mov ax, 0 ;tell that the load was successfull - ret ;return from subroutine -krnl_run: - ;shit is getting unreal here - ;i mean, switch the CPU into the protected mode - ;(opposite of what we've had before up until now, the real mode) - cli ;disable interrupts - mov al, 0x80 ;disable non-maskable interrupts - out 0x70, al ; - mov ax, 0xEC00 ;notify the BIOS about us switching to the 32-bit protected mode - mov bl, 1 ; - int 15h ; - push 0x050 ;load 0x050 - pop ds ;into the data segment - mov ecx, gdt_end - gdt ;copy the entire GDT - mov si, gdt ;source: predefined GDT - push 0 ;destination: start of the memory - pop es ; - xor di, di ; - rep movsb ;copy - mov ecx, 6 ;copy the entire GDT descriptor - mov si, gdt_desc ;source: predefined GDT descriptor - xor di, di ;destination: start of the memory - rep movsb ;copy - xor dx, dx ;set DS to 0 - mov ds, dx ; - lgdt [0] ;Load Global Descriptor Table - push cs ;load CS into DS - pop ds ; - mov eax, cr0 ;load the control register 0 into EAX - or eax, 0x00000001 ;enable protected mode - mov cr0, eax ;load the EAX the control register 0 - ;YAAY! we're in Protected Mode now! - mov ax, 0x10 ;load 0x10 - mov ds, ax ;into DS - mov ss, ax ;and SS - mov es, ax ;and ES - mov fs, ax ;and FS - mov gs, ax ;and GS - mov esp, 0x4FFFFF ;set the top-of-stack pointer - pushf ;set IOPL to 3 - pop ax ; - or ax, 3 << 12 ; - push ax ; - popf ; - jmp 8:0xF00 ;far jump into the beforehand-loaded kernel - -%include "nfs_driver.asm" ;include the nFS driver -%include "gfx_driver.asm" ;include the graphics driver -%include "stdlib.asm" ;include the "standard library" - -krnl_error: db "An error occured while loading Quark", 0 -krnl_file: db "quark", 0 -krnl_debug_ldstart: db "Loading Quark", 0 -krnl_debug_ld: db ".", 0 -krnl_debug_run: db "done", 0 -krnl_debug_video: db "Choosing video mode", 0 -krnl_verbose_prompt: db "[v]erbose or [n]ormal mode?", 0 - -gdt: ;Global Descriptor Table -gdt_null: ;null segment - dd 0 - dd 0 -gdt_code: ;GDT code segment - dw 0xFFFF - dw 0 - db 0 - db 10011010b - db 11001111b - db 0 -gdt_data: ;GDT data segment - dw 0xFFFF - dw 0 - db 0 - db 10010010b - db 11001111b - db 0 -gdt_end: -gdt_desc: ;GDT descriptor - dw gdt_end - gdt - 1 - dd 0 ;we store GDT at the start of the memory - -reboot_cmd: - db 0xEA - dw 0x0000, 0xFFFF - ret diff --git a/src/muon/gfx_driver.asm b/src/muon/gfx_driver.asm deleted file mode 100644 index f3411a3..0000000 --- a/src/muon/gfx_driver.asm +++ /dev/null @@ -1,87 +0,0 @@ -;Neutron project -;Graphics driver - -gfx_go_best: ;switches the video mode to the best available one - ; Saves video buffer linear address into ECX, - ; resolution into EDX, bpp in AH - call gfx_get_mode_list ;get mode list pointer in ES:DI - gfx_go_best_loop: ; - mov dx, word [es:di] ;load a mode number - cmp dx, 0xffff ;0xffff = the end of the list - je gfx_go_best_ret ; - or dh, 1 << 6 ;set the linear framebuffer flag - push dx ;save DX - call gfx_get_mode ;get mode parameters - cmp ah, 32 ;only try 32bpp modes - jne gfx_go_best_skip ; - test al, 1 << 0 ;check if mode is supported - jz gfx_go_best_skip ; - test al, 1 << 4 ;check if mode is a graphical one - jz gfx_go_best_skip ; - cmp edx, [ds:gfx_best_res] ;compare the resolution with the best currently discovered one - jbe gfx_go_best_skip ; - mov [ds:gfx_best_res], edx ;if we hadn't skipped yet, store resolution and number - pop word [ds:gfx_best_mod] ; - push word [ds:gfx_best_mod] ; - gfx_go_best_skip: ; - pop dx ;restore DX - add di, 4 ;move on to the next mode - jmp gfx_go_best_loop ; - gfx_go_best_ret: ; - mov dx, [ds:gfx_best_mod] ;load the best mode - call gfx_go_mode ;go to it - ret ;return from subroutine - -gfx_go_mode: ;switches the video mode to one which number is stored in DX - ; Saves video buffer linear address into ECX, - ; resolution into EDX, bpp in AH - push bx ;save the registers - push es ; - mov ax, 4f02h ;set BIOS function: set VBE mode - mov bx, dx ;VBE mode - or bh, 01000000b ;raise the flag indicating that we want a flat video buffer - int 10h ;call BIOS routine - call gfx_get_mode ;get mode parameters - pop es ;restore the registers - pop bx ; - ret ;return from subroutine - -gfx_get_mode: ;returns information about a VBE mode - ;input: DX = mode number - ;output: ECX = linear framebuffer address - ; EDX = resolution - ; AH = bits per pixel - ; AL = lower bits of mode attributes - push di ;save DI - push es ;save ES - mov ax, 4f01h ;set BIOS function: get VBE mode properties - mov cx, dx ;VBE mode - push 0xf50 ;load info into 0xf50:0x0000 - pop es ; - xor di, di ; - int 10h ;call BIOS routine - mov dword ecx, [es:0x28] ;move the buffer linear address into ECX - movzx edx, word [es:0x12] ;load width - shl edx, 16 ; - mov dx, word [es:0x14] ;load height - mov ah, byte [es:0x19] ;load bits per pixel - mov al, byte [es:0x00] ;load mode attributes - pop es ;restore ES - pop di ;restore DI - ret ;return from subroutine - -gfx_get_mode_list: ;reads VBE mode list - ;output: list pointer in ES:DI - push 0x1050 ;load controller info into 0x1050:0x0000 - pop es ; - xor di, di ; - mov ax, 0x4f00 ; - int 10h ; - mov eax, dword [es:di+0xe] ;load the list pointer into EAX - mov di, ax ;AX[15:0] = DI - shr eax, 16 ; - mov es, ax ;AX[31:16] = ES - ret ;return from subroutine - -gfx_best_res: dd 0 ;the best resolution currently found by gfx_go_best -gfx_best_mod: dw 0 ;the number of the best resolution currently found by gfx_go_best \ No newline at end of file diff --git a/src/muon/nfs_driver.asm b/src/muon/nfs_driver.asm deleted file mode 100644 index 84a54fc..0000000 --- a/src/muon/nfs_driver.asm +++ /dev/null @@ -1,223 +0,0 @@ -;Neutron project -;nFS driver - -nfs_drive_no: db 0xFF -nfs_partition_no: db 0xFF -nfs_status: db 0xFF - -nfs_spt: db 18 -nfs_hds: db 2 - -nfs_part_name: db ' ', 0 -nfs_cluster_size: db 0xFF -nfs_mft_size: db 0xFF - -nfs_init: ;reads drive geometry - ;input: none - ;output: none - ; - test byte [ds:nfs_drive_no], 0x80 ;check if it's a hard drive - jz nfs_init_ret ;return immediately if not - ; - push ax ;save the registers - push dx ; - push cx ; - ; - mov ah, 8 ;int 13h function 8 - mov dl, [ds:nfs_drive_no] ;select drive - int 13h ; - add dh, 1 ;value in DH is one less than it should be, number of heads - and cl, 0x3F ;sectors per track - mov [ds:nfs_hds], dh ;store number of heads - mov [ds:nfs_spt], cl ;store sectors per track - ; - pop cx ;restore the registers - pop dx ; - pop ax ; - ; - nfs_init_ret: ; - ret ;return from subroutine - -nfs_read_drive_sector: ;reads a sector from the drive - ;input: AX = LBA of the sector - ; BL = 1 to force read - ; otherwise caching is used - ;output: nfs_status = 0 on success - ; 1 on disk I/O err - ; nfs_buffer contains valid data only if - ; nfs_status is 0 - ; - nop ; - nop ; - nop ; - nop ; - push ax ;save all registers - push bx ; - push cx ; - push dx ; - push es ; - xor bx, bx ;clear BX -nfs_rs_retry: ; - ; - push ds ;set the load segment to the data segment - pop es ;>> - ; - push bx ;save BX - push ax ;save AX - mov cl, [ds:nfs_spt] ;load sectors per track into CL - xor ch, ch ;clear CH - xor dx, dx ;clear DX - div cx ;divide DX:AX by CX, storing the quotient in AX and the remainder in DX - mov cl, dl ;store the remainder in CL - inc cl ;add 1 to CL - mov bl, [ds:nfs_hds] ;load heads into BL - xor bh, bh ;clear BH - xor dx, dx ;clear DX - div bx ;divide DX:AX by BX (BL), storing the quotient in AX and the remainder in DX - shl dx, 8 ;store the remainder in DH - shr al, 3 ;AL >>= 3 - and al, 0xC0 ;AL &= 0xC0 - or cl, al ;CL |= AL - mov al, [ds:nfs_spt] ;load Sectors Per Track into AL - mul byte [ds:nfs_hds] ;multiply AL by Heads and store the result in AX - mov bx, ax ;move SPT*HDS into BX - pop ax ;restore AX (original LBA) - push ax ;save AX - push dx ;save DX - xor dx, dx ;clear DX - div bx ;divide DX:AX (LBA) by BX (SPT*HDS), storing the quotient in AX and the remainder in DX - mov ch, al ;move AL into CH (cylinder for the BIOS) - pop dx ;restore DX - ; - mov dl, [ds:nfs_drive_no] ;set the drive number to load from - mov al, 1 ;set the amount of sectors to read: 1 - mov ah, 2 ;BIOS routine no.: disk read - mov bx, nfs_buffer ;set the target location: a buffer - int 0x13 ;execute the BIOS routine - pop ax ;restore AX - pop bx ;restore BX - jc nfs_rs_io_err ;I/O error handler - ;cmp ah, 0 ;check if the operation was successful - ;jne nfs_rs_io_err ;I/O error handler - mov byte [ds:nfs_status], 0 ;set the success flag - jmp nfs_read_sector_return ;jump straight to the return handler if the operation was successful -nfs_rs_io_err: - mov byte [ds:nfs_status], 1 ;set the disk I/O err flag - inc bh ;increment the error counter - cmp bh, 5 ;give it five tries - jae nfs_read_sector_return ; - push cx ; - mov cx, 10000 ;wait 10K iterations - nfs_rs_loop: loop nfs_rs_loop ; - pop cx ; - jmp nfs_rs_retry ; -nfs_read_sector_return: - pop es ;restore all registers - pop dx ; - pop cx ; - pop bx ; - pop ax ; - ret ;return from subroutine - -nfs_check_drive_fs: ;checks if a drive has valid nFS signature - ;input: none - ;output: nfs_status = 0 if drive has the correct signature - ; 1 on disk I/O err - ; 2 otherwise - ; - push ax ;save AX - ; - mov ax, 9 ;set the sector to be read: nFS master sector - call nfs_read_drive_sector ;read it - cmp byte [ds:nfs_status], 0 ;check if the read was successful - jne nfs_cdfs_return ;return from subroutine preserving the status code if not - cmp dword [ds:nfs_buffer], 0xDEADF500 ;check the signature - je nfs_cdfs_return ;return from subroutine if the signature is correct - mov byte [ds:nfs_status], 2 ;set the non-valid signature flag otherwise - jmp nfs_cdfs_return ;return from subroutine -nfs_cdfs_return: - pop ax ;restore EAX - ret ;return from subroutine - -nfs_load_master_sector: ;loads and parses the master sector info - ;input: nothing - ;output: nfs_status = 0 on success - ; 1 on disk I/O err - ; 2 on an incorrect signature - ; - push ax ;save all registers - push bx ; - xor bx, bx ;clear BX - call nfs_check_drive_fs ;check the signature - ;this has an added advantage of the sector already being buffered - cmp byte [ds:nfs_status], 0 ;check the success - jne nfs_lms_return ;return from subroutine preserving the status code if an error occured -nfs_lms_copy_loop: - add bx, 4 ;add the offset for the label - mov byte al, [ds:nfs_buffer+bx] ;intermediately load a byte - sub bx, 4 ;subtract it to return to the normal state - mov byte [ds:nfs_part_name+bx], al ;copy a byte - inc bx ;increment pointer - cmp bx, 19 ;terminate the copying at 18 bytes - je nfs_lms_return ;>> - jmp nfs_lms_copy_loop ;loop should be a loop -nfs_lms_return: - pop bx ;restore all registers - pop ax ; - ret ;return from subroutine - -nfs_load_master_filetable: ;loads the master file table - ;input: nothing - ;output: nfs_status = 0 on success - ; 1 on disk I/O err - ; - push ax ;save AX - mov ax, 10 ;set the sector to be read: master filetable - call nfs_read_drive_sector ;read the sector - pop ax ;restore AX - ret ;return from subroutine - -nfs_find: ;find a file on the disk - ;input: GS:AX = the target file name - ;output: nfs_status = 0 on success - ; 1 on disk I/O err - ; 2 if file wasn't found - ; DS:DX contains the found entry (only valid if nfs_status = 0) - push ax ;save AX - push cx ;save CX - push bx ;save BX - call nfs_load_master_filetable ;load the master file table - cmp byte [ds:nfs_status], 0 ;check if operation was successful - jne nfs_find_ret ;return preserving the status if not - xor bx, bx ;clear BX -nfs_find_search_loop: - mov dl, [ds:nfs_buffer+bx] ;load one byte from memory - cmp dl, 0 ;check if we've reached the end of the file list - je nfs_find_error_ret ;return from subroutine if so - mov dx, bx ;set the string to be compaed: candidate file name - add dx, nfs_buffer ;also add the buffer offset to the total one - pop cx ;restore screen pos - xchg bx, cx ;swap CX and BX - push ds ;move - pop fs ;FS <- DS - push ax ;save AX - call str_cmp ;compare the string at GS:AX (input) and FS:DX (candidate) - cmp al, 1 ;if they're equal - pop ax ;restore AX - je nfs_find_found_ret ;jump to the found routine - xchg bx, cx ;swap CX and BX - push cx ;save screen pos - add bx, 32 ;increment the pointer - jmp nfs_find_search_loop ;looping -nfs_find_ret: - pop bx ;restore BX - pop cx ;restore CX - pop ax ;restore AX - ret ;return from subroutine -nfs_find_error_ret: - mov byte [ds:nfs_status], 2 ;set the status code 2 - jmp nfs_find_ret ;return normally -nfs_find_found_ret: - push bx - mov byte [ds:nfs_status], 0 ;set the status code 0 - jmp nfs_find_ret ;return normally \ No newline at end of file diff --git a/src/muon/stdlib.asm b/src/muon/stdlib.asm deleted file mode 100644 index 51f7179..0000000 --- a/src/muon/stdlib.asm +++ /dev/null @@ -1,166 +0,0 @@ -;Neutron project -;Standard library for STG2 - -print_char: ;prints a char - ;input: CL = character to print - ; CH = color of the characther - ; BX = position - ; bx = (x * 80 + y) * 2 - ;output: character on the screen - ; BX = BX + 2 - ; - push ds ;save the DS - push 0xB800 ; - pop ds ;point to the VGA buffer - mov [ds:bx], cx ;move the data to the buffer - add bx, 2 ;increment the pointer by 2 - pop ds ;restore the DS - cmp bx, 4000 ;check if we're out of the screen bounds - je print_char_scroll ;scroll if so - ret ;return from subroutine -print_char_scroll: - call print_ln ;print a new line - ret ;return from subroutine - -print_str: ;prints a string - ;input: DS:DX = first character of the zero-terminated string - ; CH = color - ; BX = position - ; bx = (x * 80 + y) * 2 - ;output: string on the screen - ; BX = BX + 2 - ; - xchg bx, dx ;swap BX and DX - mov cl, [ds:bx] ;load the char - xchg bx, dx ;swap BX and DX - cmp cl, 0 ;compare the char with 0 - je print_ret ;return if equal - call print_char ;print the char - inc dx ;increment the pointer - jmp print_str ;it's a loop after all -print_ret: - ret ;return from subroutine - -print_32b_hex: - xor dx, dx - print_32b_hex_loop: - movzx si, al - and si, 0xf - mov cl, [ds:si+hex_num_const] - call print_char - shr eax, 4 - inc dx - cmp dx, 8 - jb print_32b_hex_loop - ret - -print_str_line: ;prints a string and then goes to a new line - ; - call print_str ;normal string printout - call print_ln ;go to the new line - ret - -print_ln: ;moves the text position one line down and scrolls if needed - ; - push dx ;save DX - xchg ax, bx ;swap AX and BX - xor dx, dx ;clear DX - mov cx, 160 ;set the dvider - div cx ;divide DX AX (AX) by CX (160) - inc ax ;go to the next line - cmp ax, 25 ;if we're out of the screen bounds - jl continue_print_ln ;continue execution - call shift_scrn_up ;shift the screen up - mov ax, 24 ;go to the last line - continue_print_ln: - mul cx ;multiply AX by CX (160) - xchg ax, bx ;swap AX and BX - pop dx ;restore DX - ret ;return from subroutine - -shift_scrn_up: - pusha ;save all registers - push cx ;save video attributes - mov ah, 6 ;select BIOS function: scroll up - mov cx, 0 ;top left corner: ln,col 0,0 - mov dh, 24 ;bottom right corner: ln 24 - mov dl, 79 ; col 79 - mov al, 1 ;add 1 line - pop bx ;restore video attributes - xor bl, bl ;clear BL - int 0x10 ;call BIOS routine - popa ;restore all registers - ret ;return from subroutine - -str_cmp: ;compares two strings - ;input: string1 = GS:AX - ; string2 = FS:DX - ;output: - ; AL = 0 if they aren't equal - ; AL = 1 if they are - push ax ;save AX - push bx ;save BX - push cx ;save CX - push dx ;save DX - mov bx, ax ;move AX to BX -str_cmp_loop: - mov bx, ax ;load AX into the indexing register - mov ch, [gs:bx] ;load str2 byte at the desired offset - mov bx, dx ;load DX into the indexing register - mov cl, [fs:bx] ;load str1 byte at the desired offset - cmp cl, ch ;compare str1 and str2 bytes at the desired offset - jne str_neq ;jump to the inequality return subroutine - mov bx, ax ;load AX into the indexing register - cmp byte [gs:bx], 0 ;compare str1 at the desired offset to zero - je str_zero_check ;check the second - inc ax ;increment the str1 offset - inc dx ;increment the str2 offset - jmp str_cmp_loop ;looping -str_neq: - pop dx ;restore DX - pop cx ;restore CX - pop bx ;restore BX - pop ax ;restore AX - xor al, al ;clear AL - ret ;return from subroutine -str_zero_check: - mov bx, dx ;load DX into the indexing register - cmp byte [fs:bx], 0 ;compare str2 at the desired offset to zero - je str_eq ;jump to the equality return subroutine - jmp str_neq ;jump to the inequality return subroutine -str_eq: - pop dx ;restore DX - pop cx ;restore CX - pop bx ;restore BX - pop ax ;restore AX - mov al, 1 ;set the AL to 1 - ret ;return from subroutine - -map_memory: ;makes the memory map - ;input: ES:DI = location to save the map to - ;output: the map at ES:DI - ; - pushad ;save the registers - xor ebx, ebx ;clear EBX - mov edx, 0x534D4150 ;magic -map_memory_cycle: ; - mov dword eax, 0xE820 ;magic - mov ecx, 24 ;magic - int 0x15 ;gently ask the BIOS - jc map_memory_done ;exit when done - cmp ebx, 0 ; - je map_memory_done ;the same thing - xor ch, ch ;clear CH - add di, cx ;increment the pointer - cmp cl, 24 ;Make all the entries - je map_memory_skip_add ;24-byte aligned - add di, 4 ; - map_memory_skip_add: ; - jmp map_memory_cycle ;do it again -map_memory_done: ; - add di, 20 ;zero the next entry out - mov dword [ds:di], 0 ;to indicate the end - popad ;restore the registers - ret ;return from subroutine - -hex_num_const: db '0123456789ABCDEF' \ No newline at end of file diff --git a/src/quark-c/quark.c b/src/quark.c similarity index 77% rename from src/quark-c/quark.c rename to src/quark.c index 4bc89d2..c0ad2d1 100644 --- a/src/quark-c/quark.c +++ b/src/quark.c @@ -1,6 +1,8 @@ //Neutron Project -//Quark-C - the C kernel -//(there previously was Quark, written in assembly language) +//Quark - the kernel + +#include +#include #include "./stdlib.h" @@ -45,6 +47,9 @@ extern void irq15_wrap(void); uint8_t quark_verbose; +//Pointer to the EFI system table +EFI_SYSTEM_TABLE* quark_efi_systable; + /* * This function is called whenever the user chooses the system color */ @@ -115,7 +120,15 @@ void quark_boot_status(char* str, uint32_t progress){ /* * The entry point for the kernel */ -void main(void){ +EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable){ + //Disable the watchdog timer + SystemTable->BootServices->SetWatchdogTimer(0, 0, 0, NULL); + //Save the system table pointer + quark_efi_systable = SystemTable; + //Print the boot string + SystemTable->ConOut->OutputString(SystemTable->ConOut, (CHAR16*)L"Neutron (UEFI version) is starting up"); + while(1); + //Disable interrupts __asm__ volatile("cli"); //Initialize x87 FPU @@ -134,32 +147,32 @@ void main(void){ struct idt_entry* idt = (struct idt_entry*)malloc(256 * sizeof(struct idt_entry)); //Set every exception IDT entry using the same pattern for(int i = 0; i < 32; i++){ - int wrapper_address = (int)&exc_wrapper; + uint64_t wrapper_address = (uint64_t)&exc_wrapper; if(i == 8 || (i >= 10 && i <= 14) || i == 17 || i == 30) //Set a special wrapper for exceptions that push error code onto stack - wrapper_address = (int)&exc_wrapper_code; - idt[i].offset_lower = wrapper_address & 0xFFFF; - idt[i].offset_higher = (wrapper_address >> 16) & 0xFFFF; + wrapper_address = (uint64_t)&exc_wrapper_code; + idt[i].offset_lower = (uint32_t)(uint64_t)wrapper_address & 0xFFFF; + idt[i].offset_higher = ((uint32_t)(uint64_t)wrapper_address >> 16) & 0xFFFF; idt[i].code_selector = 0x08; idt[i].zero = 0; idt[i].type_attr = 0b10001110; } //Set up gates for IRQs - idt[32] = IDT_ENTRY_ISR((uint32_t)&irq0_wrap); - idt[33] = IDT_ENTRY_ISR((uint32_t)&irq1_wrap); - idt[34] = IDT_ENTRY_ISR((uint32_t)&irq2_wrap); - idt[35] = IDT_ENTRY_ISR((uint32_t)&irq3_wrap); - idt[36] = IDT_ENTRY_ISR((uint32_t)&irq4_wrap); - idt[37] = IDT_ENTRY_ISR((uint32_t)&irq5_wrap); - idt[38] = IDT_ENTRY_ISR((uint32_t)&irq6_wrap); - idt[39] = IDT_ENTRY_ISR((uint32_t)&irq7_wrap); - idt[40] = IDT_ENTRY_ISR((uint32_t)&irq8_wrap); - idt[41] = IDT_ENTRY_ISR((uint32_t)&irq9_wrap); - idt[42] = IDT_ENTRY_ISR((uint32_t)&irq10_wrap); - idt[43] = IDT_ENTRY_ISR((uint32_t)&irq11_wrap); - idt[44] = IDT_ENTRY_ISR((uint32_t)&irq12_wrap); - idt[45] = IDT_ENTRY_ISR((uint32_t)&irq13_wrap); - idt[46] = IDT_ENTRY_ISR((uint32_t)&irq14_wrap); - idt[47] = IDT_ENTRY_ISR((uint32_t)&irq15_wrap); + idt[32] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq0_wrap); + idt[33] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq1_wrap); + idt[34] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq2_wrap); + idt[35] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq3_wrap); + idt[36] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq4_wrap); + idt[37] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq5_wrap); + idt[38] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq6_wrap); + idt[39] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq7_wrap); + idt[40] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq8_wrap); + idt[41] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq9_wrap); + idt[42] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq10_wrap); + idt[43] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq11_wrap); + idt[44] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq12_wrap); + idt[45] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq13_wrap); + idt[46] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq14_wrap); + idt[47] = IDT_ENTRY_ISR((uint32_t)(uint64_t)&irq15_wrap); //Load IDT idt_d.base = (void*)idt; idt_d.limit = 256 * sizeof(struct idt_entry); diff --git a/src/quark-c/stdlib.c b/src/stdlib.c similarity index 94% rename from src/quark-c/stdlib.c rename to src/stdlib.c index 32185b9..3bc9ce8 100644 --- a/src/quark-c/stdlib.c +++ b/src/stdlib.c @@ -55,25 +55,17 @@ void dram_init(void){ //Type=0 marks the end while((blk_type = *(uint32_t*)(block_base + 16)) != 0){ //Fetch block base - uint32_t base = *(uint32_t*)(block_base); - //Fetch block base upper bits - uint32_t base_upper = *(uint32_t*)(block_base + 4); + uint64_t base = *(uint64_t*)(block_base); //Fetch block length - uint32_t size = *(uint32_t*)(block_base + 8); - //Fetch block length upper bits - uint32_t size_upper = *(uint32_t*)(block_base + 12); + uint64_t size = *(uint64_t*)(block_base + 8); //Record the total amount of available RAM - total_ram_size += ((uint64_t)size_upper << 32) | ((uint64_t)size << 32); + total_ram_size += size; //Only record the block if it's marked as type 1 (usable RAM) - // and its base doesn't exceed 4 GB (upper bits are clear) - if(blk_type == 1 && size > 0 && base_upper == 0){ - //If size upper bytes are not zero, set the lower ones to the maximum value - if(size_upper > 0) - size = 0xFFFFFFFF; + if(blk_type == 1 && size > 0){ //Only record the block if it stretches over the fifth megabyte // and its size is larger than the currently found one if(size + base >= 5 * 1024 * 1024 && size > largest_blk_size){ - size_t shrink = (5 * 1024 * 1025) - base; + uint64_t shrink = (5 * 1024 * 1025) - base; size -= shrink; largest_blk_size = size; largset_blk_ptr = (void*)base + shrink; @@ -108,7 +100,7 @@ void* malloc(size_t size){ // have enough memory and need to crash if(first_free_block == NULL){ #ifdef STDLIB_CARSH_ON_ALLOC_ERR - crash_label_2: gfx_panic((uint32_t)&&crash_label_2, QUARK_PANIC_NOMEM_CODE); + crash_label_2: gfx_panic((uint64_t)&&crash_label_2, QUARK_PANIC_NOMEM_CODE); #else return NULL; #endif @@ -125,7 +117,7 @@ void* malloc(size_t size){ } //If we still didn't find free space, we defenitely don't have enough RAM #ifdef STDLIB_CARSH_ON_ALLOC_ERR - crash_label_3: gfx_panic((uint32_t)&&crash_label_3, QUARK_PANIC_NOMEM_CODE); + crash_label_3: gfx_panic((uint64_t)&&crash_label_3, QUARK_PANIC_NOMEM_CODE); #else return NULL; #endif @@ -179,7 +171,7 @@ void free(void* ptr){ /* * Allocate a block of memory and fill it with zeroes */ -void* calloc(uint32_t num, size_t size){ +void* calloc(uint64_t num, size_t size){ //Allocate the memory using malloc() void* malloc_res = malloc(num * size); if(malloc_res != NULL) //If the returned pointer isn't null, memset() with zeroes and return it @@ -191,7 +183,7 @@ void* calloc(uint32_t num, size_t size){ /* * Fill a chunk of memory with certain values */ -void* memset(void* dst, int ch, unsigned int size){ +void* memset(void* dst, int ch, size_t size){ //Convert ch to 8 bits unsigned char c = (unsigned char)ch; //Fill the chunk with them @@ -204,7 +196,7 @@ void* memset(void* dst, int ch, unsigned int size){ /* * Copy a block of memory */ -void* memcpy(void* destination, const void* source, uint32_t num){ +void* memcpy(void* destination, const void* source, size_t num){ //We can use the REP MOVx instruction to perform a blazing-fast memory-to-memory data transfer //D = 4 bytes at a time //W = 2 bytes at a time diff --git a/src/quark-c/stdlib.h b/src/stdlib.h similarity index 86% rename from src/quark-c/stdlib.h rename to src/stdlib.h index 7f964c8..394bd6c 100644 --- a/src/quark-c/stdlib.h +++ b/src/stdlib.h @@ -1,26 +1,26 @@ #ifndef STDLIB_H #define STDLIB_H -//Null pointer -#define NULL 0 +#ifndef NULL +#define NULL ((void*)0) +#endif //The address that dynamic memory allocation starts from #define STDLIB_DRAM_START 0x500000 //The quark version displayed on startup -#define QUARK_VERSION_STR "v0.1.11" +#define QUARK_VERSION_STR "v0.2.0" //Standard type definitions -typedef unsigned int size_t; typedef unsigned char uint8_t; typedef signed char int8_t; typedef unsigned short uint16_t; -typedef signed char int16_t; +typedef signed short int16_t; typedef unsigned int uint32_t; typedef signed int int32_t; -typedef unsigned long long uint64_t; -typedef signed long long int64_t; -typedef unsigned int size_t; +typedef long long unsigned int uint64_t; +typedef long long signed int int64_t; +typedef uint64_t size_t; /* * Structure defining a linked list node @@ -65,7 +65,7 @@ struct idt_entry { } __attribute__ ((packed)); //A macro that creates generic IDT entries -#define IDT_ENTRY(OFFS, CSEL, TYPE) ((struct idt_entry){.offset_lower = (OFFS) & 0xFFFF, .code_selector = CSEL, .zero = 0, .type_attr = TYPE, .offset_higher = (((OFFS) >> 16) & 0xFFFF)}) +#define IDT_ENTRY(OFFS, CSEL, TYPE) ((struct idt_entry){.offset_lower = ((uint32_t)OFFS) & 0xFFFF, .code_selector = ((uint32_t)CSEL), .zero = 0, .type_attr = TYPE, .offset_higher = ((((uint32_t)OFFS) >> 16) & 0xFFFF)}) //A macro that creates Quark ISR IDT entries #define IDT_ENTRY_ISR(OFFS) (IDT_ENTRY(OFFS, 8, 0b10001110)) @@ -100,12 +100,12 @@ uint32_t stdlib_usable_ram(void); void dram_init(void); void* malloc(size_t size); void free(void* ptr); -void* calloc(uint32_t num, size_t size); +void* calloc(uint64_t num, size_t size); //Memory operation functions -void* memset(void* dst, int ch, uint32_t size); -void* memcpy(void* destination, const void* source, uint32_t num); +void* memset(void* dst, int ch, size_t size); +void* memcpy(void* destination, const void* source, size_t num); //I/O port operation functions diff --git a/src/test.c b/src/test.c new file mode 100644 index 0000000..9925fea --- /dev/null +++ b/src/test.c @@ -0,0 +1,7 @@ +#include +#include + +EFI_STATUS EFIAPI efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SystemTable){ + SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello, UEFI!\n\r"); + while(1); +} \ No newline at end of file