diff options
author | Jaswinder Singh <jaswinder@infradead.org> | 2009-01-04 16:09:40 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-01-04 16:10:02 -0800 |
commit | 949b42544a20fb22800e244a004ff45bd359a21b (patch) | |
tree | dca766b86ae1018f79276e4fd3916c2012966e89 | |
parent | 14deae41566b5cdd992c01d0069518ced5227c83 (diff) |
firmware: convert acenic driver to request_firmware()
We store the firmware in its native big-endian form now, so the loop in
ace_copy() is modified to use be32_to_cpup() when writing it out.
We can forget the BSS,SBSS sections of the firmware, since we were
clearing all the device's RAM anyway. And the text,rodata,data sections
can all be loaded as a single chunk since they're contiguous (give or
take a few dozen bytes in between).
Signed-off-by: Jaswinder Singh <jaswinder@infradead.org>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Acked-by: Jes Sorensen <jes@sgi.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/acenic.c | 117 | ||||
-rw-r--r-- | drivers/net/acenic.h | 4 | ||||
-rw-r--r-- | firmware/Makefile | 7 | ||||
-rw-r--r-- | firmware/WHENCE | 11 | ||||
-rw-r--r-- | firmware/acenic/tg1.bin.ihex | 4573 | ||||
-rw-r--r-- | firmware/acenic/tg2.bin.ihex | 4844 |
6 files changed, 9510 insertions, 46 deletions
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c index 517fce48d94..5b396ff6c83 100644 --- a/drivers/net/acenic.c +++ b/drivers/net/acenic.c @@ -66,6 +66,7 @@ #include <linux/mm.h> #include <linux/highmem.h> #include <linux/sockios.h> +#include <linux/firmware.h> #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) #include <linux/if_vlan.h> @@ -186,8 +187,6 @@ MODULE_DEVICE_TABLE(pci, acenic_pci_tbl); #define MAX_RODATA_LEN 8*1024 #define MAX_DATA_LEN 2*1024 -#include "acenic_firmware.h" - #ifndef tigon2FwReleaseLocal #define tigon2FwReleaseLocal 0 #endif @@ -417,6 +416,10 @@ static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1}; MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>"); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver"); +#ifndef CONFIG_ACENIC_OMIT_TIGON_I +MODULE_FIRMWARE("acenic/tg1.bin"); +#endif +MODULE_FIRMWARE("acenic/tg2.bin"); module_param_array_named(link, link_state, int, NULL, 0); module_param_array(trace, int, NULL, 0); @@ -943,8 +946,8 @@ static int __devinit ace_init(struct net_device *dev) case 4: case 5: printk(KERN_INFO " Tigon I (Rev. %i), Firmware: %i.%i.%i, ", - tig_ver, tigonFwReleaseMajor, tigonFwReleaseMinor, - tigonFwReleaseFix); + tig_ver, ap->firmware_major, ap->firmware_minor, + ap->firmware_fix); writel(0, ®s->LocalCtrl); ap->version = 1; ap->tx_ring_entries = TIGON_I_TX_RING_ENTRIES; @@ -952,8 +955,8 @@ static int __devinit ace_init(struct net_device *dev) #endif case 6: printk(KERN_INFO " Tigon II (Rev. %i), Firmware: %i.%i.%i, ", - tig_ver, tigon2FwReleaseMajor, tigon2FwReleaseMinor, - tigon2FwReleaseFix); + tig_ver, ap->firmware_major, ap->firmware_minor, + ap->firmware_fix); writel(readl(®s->CpuBCtrl) | CPU_HALT, ®s->CpuBCtrl); readl(®s->CpuBCtrl); /* PCI write posting */ /* @@ -1205,7 +1208,9 @@ static int __devinit ace_init(struct net_device *dev) memset(ap->info, 0, sizeof(struct ace_info)); memset(ap->skb, 0, sizeof(struct ace_skb)); - ace_load_firmware(dev); + if (ace_load_firmware(dev)) + goto init_error; + ap->fw_running = 0; tmp_ptr = ap->info_dma; @@ -1441,10 +1446,7 @@ static int __devinit ace_init(struct net_device *dev) if (ap->version >= 2) writel(tmp, ®s->TuneFastLink); - if (ACE_IS_TIGON_I(ap)) - writel(tigonFwStartAddr, ®s->Pc); - if (ap->version == 2) - writel(tigon2FwStartAddr, ®s->Pc); + writel(ap->firmware_start, ®s->Pc); writel(0, ®s->Mb0Lo); @@ -2761,8 +2763,8 @@ static void ace_get_drvinfo(struct net_device *dev, strlcpy(info->driver, "acenic", sizeof(info->driver)); snprintf(info->version, sizeof(info->version), "%i.%i.%i", - tigonFwReleaseMajor, tigonFwReleaseMinor, - tigonFwReleaseFix); + ap->firmware_major, ap->firmware_minor, + ap->firmware_fix); if (ap->pdev) strlcpy(info->bus_info, pci_name(ap->pdev), @@ -2869,11 +2871,10 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev) } -static void __devinit ace_copy(struct ace_regs __iomem *regs, void *src, - u32 dest, int size) +static void __devinit ace_copy(struct ace_regs __iomem *regs, const __be32 *src, + u32 dest, int size) { void __iomem *tdest; - u32 *wsrc; short tsize, i; if (size <= 0) @@ -2885,20 +2886,15 @@ static void __devinit ace_copy(struct ace_regs __iomem *regs, void *src, tdest = (void __iomem *) ®s->Window + (dest & (ACE_WINDOW_SIZE - 1)); writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); - /* - * This requires byte swapping on big endian, however - * writel does that for us - */ - wsrc = src; for (i = 0; i < (tsize / 4); i++) { - writel(wsrc[i], tdest + i*4); + /* Firmware is big-endian */ + writel(be32_to_cpup(src), tdest); + src++; + tdest += 4; + dest += 4; + size -= 4; } - dest += tsize; - src += tsize; - size -= tsize; } - - return; } @@ -2937,8 +2933,13 @@ static void __devinit ace_clear(struct ace_regs __iomem *regs, u32 dest, int siz */ static int __devinit ace_load_firmware(struct net_device *dev) { + const struct firmware *fw; + const char *fw_name = "acenic/tg2.bin"; struct ace_private *ap = netdev_priv(dev); struct ace_regs __iomem *regs = ap->regs; + const __be32 *fw_data; + u32 load_addr; + int ret; if (!(readl(®s->CpuCtrl) & CPU_HALTED)) { printk(KERN_ERR "%s: trying to download firmware while the " @@ -2946,28 +2947,52 @@ static int __devinit ace_load_firmware(struct net_device *dev) return -EFAULT; } + if (ACE_IS_TIGON_I(ap)) + fw_name = "acenic/tg1.bin"; + + ret = request_firmware(&fw, fw_name, &ap->pdev->dev); + if (ret) { + printk(KERN_ERR "%s: Failed to load firmware \"%s\"\n", + ap->name, fw_name); + return ret; + } + + fw_data = (void *)fw->data; + + /* Firmware blob starts with version numbers, followed by + load and start address. Remainder is the blob to be loaded + contiguously from load address. We don't bother to represent + the BSS/SBSS sections any more, since we were clearing the + whole thing anyway. */ + ap->firmware_major = fw->data[0]; + ap->firmware_minor = fw->data[1]; + ap->firmware_fix = fw->data[2]; + + ap->firmware_start = be32_to_cpu(fw_data[1]); + if (ap->firmware_start < 0x4000 || ap->firmware_start >= 0x80000) { + printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n", + ap->name, ap->firmware_start, fw_name); + ret = -EINVAL; + goto out; + } + + load_addr = be32_to_cpu(fw_data[2]); + if (load_addr < 0x4000 || load_addr >= 0x80000) { + printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n", + ap->name, load_addr, fw_name); + ret = -EINVAL; + goto out; + } + /* - * Do not try to clear more than 512KB or we end up seeing - * funny things on NICs with only 512KB SRAM + * Do not try to clear more than 512KiB or we end up seeing + * funny things on NICs with only 512KiB SRAM */ ace_clear(regs, 0x2000, 0x80000-0x2000); - if (ACE_IS_TIGON_I(ap)) { - ace_copy(regs, tigonFwText, tigonFwTextAddr, tigonFwTextLen); - ace_copy(regs, tigonFwData, tigonFwDataAddr, tigonFwDataLen); - ace_copy(regs, tigonFwRodata, tigonFwRodataAddr, - tigonFwRodataLen); - ace_clear(regs, tigonFwBssAddr, tigonFwBssLen); - ace_clear(regs, tigonFwSbssAddr, tigonFwSbssLen); - }else if (ap->version == 2) { - ace_clear(regs, tigon2FwBssAddr, tigon2FwBssLen); - ace_clear(regs, tigon2FwSbssAddr, tigon2FwSbssLen); - ace_copy(regs, tigon2FwText, tigon2FwTextAddr,tigon2FwTextLen); - ace_copy(regs, tigon2FwRodata, tigon2FwRodataAddr, - tigon2FwRodataLen); - ace_copy(regs, tigon2FwData, tigon2FwDataAddr,tigon2FwDataLen); - } - - return 0; + ace_copy(regs, &fw_data[3], load_addr, fw->size-12); + out: + release_firmware(fw); + return ret; } diff --git a/drivers/net/acenic.h b/drivers/net/acenic.h index 4487f32759a..c987c9b5a13 100644 --- a/drivers/net/acenic.h +++ b/drivers/net/acenic.h @@ -694,6 +694,10 @@ struct ace_private u32 last_tx, last_std_rx, last_mini_rx; #endif int pci_using_dac; + u8 firmware_major; + u8 firmware_minor; + u8 firmware_fix; + u32 firmware_start; }; diff --git a/firmware/Makefile b/firmware/Makefile index 4993a4b3d8a..e333a429b68 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -20,6 +20,13 @@ fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE)) # accurate. In the latter case it doesn't matter -- it'll use $(fw-shipped-all). # But be aware that the config file might not be included at all. +ifdef CONFIG_ACENIC_OMIT_TIGON_I +acenic-objs := acenic/tg2.bin +fw-shipped- += acenic/tg1.bin +else +acenic-objs := acenic/tg1.bin acenic/tg2.bin +endif +fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs) fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin diff --git a/firmware/WHENCE b/firmware/WHENCE index 8f06639ba3e..8823a4329a5 100644 --- a/firmware/WHENCE +++ b/firmware/WHENCE @@ -360,3 +360,14 @@ License: GPLv2 or OpenIB.org BSD license, no source visible -------------------------------------------------------------------------- +Driver: acenic -- Alteon AceNIC Gigabit Ethernet card + +File: acenic/tg1.bin +File: acenic/tg2.bin + +Licence: Unknown + +Found in hex form in kernel source, but source allegedly available at +http://alteon.shareable.org/ + +-------------------------------------------------------------------------- diff --git a/firmware/acenic/tg1.bin.ihex b/firmware/acenic/tg1.bin.ihex new file mode 100644 index 00000000000..bef2659d364 --- /dev/null +++ b/firmware/acenic/tg1.bin.ihex @@ -0,0 +1,4573 @@ +:100000000C040B0000004000000040001000000342 +:10001000000000000000000D0000000D3C1D00016C +:100020008FBD5C5403A0F0213C100000261040005E +:100030000C00100C000000000000000D27BDFFD8D0 +:100040003C1CC0003C1B0013377BD8000000D021B3 +:100050003C17001336F7541802E02021340583E8DA +:10006000AFBF00240C002488AFB000200C0023E8B0 +:10007000000000003C040001248451A42405000178 +:1000800002E03021000038213C10000126107E5093 +:10009000AFB000100C002403AFBB00143C02000FF3 +:1000A0003442FFFF020210240362102B10400009AB +:1000B000240500033C040001248451B002003021D7 +:1000C000036038213C020010AFA200100C00240392 +:1000D000AFA00014000020213405C0003C01000145 +:1000E00000370821A02083B03C010001003708211F +:1000F000A02083B23C01000100370821A02083B377 +:100100003C01000100370821AC2083B4A2E004D8F0 +:10011000000418C02484000100771021AC40727CD8 +:1001200000771021AC40728002E31021A445727C5C +:100130002C8200201440FFF7000418C0000020218A +:100140003405C000000418C0248400010077102189 +:10015000AC40737C00771021AC40738002E3102127 +:10016000A445737C2C8200805440FFF7000418C023 +:10017000AF800054AF80011C8F82004434420040A5 +:10018000AF8200448F82004434420020AF8200449A +:100190008F420218304200021040000900000000A7 +:1001A0008F4202203C030002346300040043102508 +:1001B000AEE204C48F42021C0800107434420004F2 +:1001C0008F4202203C0300023463000600431025E6 +:1001D000AEE204C48F42021C34420006AEE204CCFC +:1001E0008F420218304200101040000A0000000048 +:1001F0008F42021C34420004AEE204C88F42022047 +:100200003C03000A34630004004310250800108AF0 +:10021000AEE204C08F4202203C03000A34630006B1 +:1002200000431025AEE204C08F42021C3442000697 +:10023000AEE204C88F4202183042020010400003B0 +:100240002402000108001091A2E27248A2E0724864 +:1002500024020001AF8200A0AF8200B08F8300545F +:100260008F82005408001099246300648F82005428 +:10027000006210232C4200651440FFFC00000000C7 +:10028000AF8000448F4202088F43020CAEE20010A0 +:10029000AEE300148EE400108EE5001426E2003078 +:1002A000AEE2002824020490AEE20018AF84009071 +:1002B000AF8500948EE20028AF8200B496E2001A67 +:1002C000AF82009C8F8200B08EE304CC00431025E7 +:1002D000AF8200B08F8200B0304200041440FFFDB6 +:1002E000000000008EE204508EE30454AEE304FCF0 +:1002F0008EE204FC2442E0002C4220011440000D58 +:1003000026E400308EE204508EE304543C040001E5 +:10031000248451BC3C050001AFA00010AFA0001424 +:100320008EE704FC34A5F0000C00240300603021AB +:1003300026E400300C0024882405040027440080B3 +:100340000C0024882405008026E4777C0C00248897 +:10035000240504008F42025C26E40094AEE20060B3 +:100360008F4202602745020024060008AEE20068C2 +:10037000240200060C00249AAEE200643C023B9A80 +:100380003442CA000000202124030002AEE30074BE +:10039000AEE30070AEE2006C240203E8AEE20104BA +:1003A00024020001AEE30100AEE2010C3C030001B7 +:1003B0000064182190635C2002E410212484000171 +:1003C000A043009C2C82000F1440FFF800000000A6 +:1003D0008F82004002E418212484000100021702E9 +:1003E00024420030A062009C02E41021A040009C46 +:1003F00096E2046A30420003144000090000000045 +:1004000096E2047A30420003504001313C03080078 +:1004100096E2046A304200031040002A3C020700C2 +:1004200096E2047A30420003104000263C020700A6 +:1004300096E3047A96E2046A146200223C02070002 +:100440008EE204C024030001A2E34E2034420E00D9 +:10045000AEE204C08F420218304201001040000595 +:10046000000000003C0200012442E1680800111D68 +:10047000000211003C0200012442D35C0002110082 +:10048000000211823C030800004310253C010001DA +:10049000AC2212383C0200012442F6800002110016 +:1004A000000211823C030800004310253C010001BA +:1004B000AC2212788EE2000034424000080012386C +:1004C000AEE2000034423000AFA200188EE206080F +:1004D0008F43022824420001304900FF512300E2EB +:1004E000AFA000108EE20608000210C000571021D5 +:1004F0008FA300188FA4001CAC43060CAC4406105C +:100500008F8701202762380024E800200102102B89 +:1005100050400001276830008F820128110200043A +:10052000000000008F820124150200070000102146 +:100530008EE201A40000302124420001AEE201A4B9 +:10054000080011A08EE201A48EE40608000420C079 +:10055000008018218EE404308EE5043400A32821A5 +:1005600000A3302B0082202100862021ACE4000073 +:10057000ACE500048EE3060824020008A4E2000EA5 +:100580002402000DACE20018ACE9001C000318C006 +:100590002463060C02E31021ACE200088EE204C4DE +:1005A000ACE20010AF88012092E24E2014400037E8 +:1005B000240600018EE24E30000210C02442503862 +:1005C00002E220218C830000240200071462001F35 +:1005D000000000008EE34E308EE24E341062001BAD +:1005E000240300408C82000424420001AC820004F9 +:1005F0008EE24E348EE54E30244200011043000757 +:10060000000000008EE24E342442000110A20005DA +:10061000000000000800118A0000000014A000057E +:10062000000000008F82012824420020AF820128B0 +:100630008F8201288C8200042C420011504000134C +:10064000AC800000080011A0000000008EE24E30D7 +:100650002403004024420001504300030000102105 +:100660008EE24E3024420001AEE24E308EE24E3039 +:10067000000210C02442503802E220212402000768 +:10068000AC82000024020001AC82000454C0000CC3 +:10069000AEE906083C040001248451C8AFA0001054 +:1006A000AFA000148EE606088F4702283C0500091B +:1006B0000C00240334A5F000080012230000000001 +:1006C0008F830120276238002466002000C2102B8F +:1006D00050400001276630008F82012810C20004BC +:1006E000000000008F82012414C2000700000000F7 +:1006F0008EE201A40000302124420001AEE201A4F8 +:10070000080012078EE201A48EE20608AC62001C0B +:100710008EE404A08EE504A42462001CAC620008F0 +:1007200024020008A462000E24020011AC6200182A +:10073000AC640000AC6500048EE204C4AC6200103E +:10074000AF86012092E24E201440003724060001BB +:100750008EE24E30000210C02442503802E22021C6 +:100760008C830000240200121462001F00000000AD +:100770008EE34E308EE24E341062001B24030040A4 +:100780008C82000424420001AC8200048EE24E34CC +:100790008EE54E30244200011043000700000000A7 +:1007A0008EE24E342442000110A200050000000039 +:1007B000080011F10000000014A000050000000076 +:1007C0008F82012824420020AF8201288F820128D5 +:1007D0008C8200042C42001150400013AC800000B9 +:1007E00008001207000000008EE24E302403004093 +:1007F0002442000150430003000010218EE24E30DD +:1008000024420001AEE24E308EE24E30000210C0B3 +:100810002442503802E2202124020012AC8200005F +:1008200024020001AC82000414C0001B0000000080 +:100830003C040001248451D0AFA00010AFA00014EC +:100840008EE606088F4702283C0500090C002403A9 +:1008500034A5F0018EE201B024420001AEE201B005 +:10086000080012238EE201B03C040001248451DC14 +:10087000AFA000148EE606088F4702283C05000949 +:100880000C00240334A5F0058EE201AC24420001E3 +:10089000AEE201AC8EE201AC8EE201603C040001EC +:1008A000248451E83405F00124420001AEE20160E5 +:1008B0008EE201600000302100003821AFA000105E +:1008C0000C002403AFA00014080012380000000040 +:1008D0003C0200012442F5A800021100000211822E +:1008E000004310253C010001AC22127896E2045A24 +:1008F00030420003104000253C050FFF8EE204C883 +:1009000034A5FFFF34420A00AEE204C88EE304C8F7 +:100910003C040001248451F424020001A2E204EC0E +:10092000A2E204ED3C020002006218253C02000134 +:100930002442A3900045102400021082AEE304C8B4 +:100940003C030800004310253C010001AC221220AA +:100950003C0200012442ADD4004510240002108264 +:10096000004310253C010001AC22128096E6045A97 +:100970000000382124050011AFA000100C00240352 +:10098000AFA0001408001268000000003C02000143 +:100990002442A9D400021100000211823C03080085 +:1009A000004310253C010001AC22128096E2046A4B +:1009B00030420010144000090000000096E2047A62 +:1009C00030420010104001120000000096E2046A5C +:1009D00030420010104000053C02070096E2047A05 +:1009E00030420010144001023C0207003442300043 +:1009F000AFA200188EE206088F43022824420001AD +:100A0000304900FF512300E2AFA000108EE206083B +:100A1000000210C0005710218FA300188FA4001CE3 +:100A2000AC43060CAC4406108F87012027623800C7 +:100A300024E800200102102B5040000127683000FC +:100A40008F82012811020004000000008F8201241F +:100A500015020007000010218EE201A400003021E1 +:100A600024420001AEE201A4080012EA8EE201A4D1 +:100A70008EE40608000420C0008018218EE40430B3 +:100A80008EE5043400A3282100A3302B008220210E +:100A900000862021ACE40000ACE500048EE30608EB +:100AA00024020008A4E2000E2402000DACE20018AB +:100AB000ACE9001C000318C02463060C02E31021FB +:100AC000ACE200088EE204C4ACE20010AF88012062 +:100AD00092E24E2014400037240600018EE24E3090 +:100AE000000210C02442503802E220218C83000012 +:100AF000240200071462001F000000008EE34E3045 +:100B00008EE24E341062001B240300408C820004ED +:100B100024420001AC8200048EE24E348EE54E3059 +:100B20002442000110430007000000008EE24E3412 +:100B30002442000110A2000500000000080012D4A9 +:100B40000000000014A00005000000008F820128B2 +:100B500024420020AF8201288F8201288C82000469 +:100B60002C42001150400013AC800000080012EA33 +:100B7000000000008EE24E302403004024420001B9 +:100B800050430003000010218EE24E302442000149 +:100B9000AEE24E308EE24E30000210C02442503899 +:100BA00002E2202124020007AC820000240200019E +:100BB000AC82000454C0000CAEE906083C040001FD +:100BC000248451C8AFA00010AFA000148EE6060820 +:100BD0008F4702283C0500090C00240334A5F000CF +:100BE0000800136D000000008F8301202762380089 +:100BF0002466002000C2102B504000012766300000 +:100C00008F82012810C20004000000008F8201249E +:100C100014C20007000000008EE201A40000302191 +:100C200024420001AEE201A4080013518EE201A4A7 +:100C30008EE20608AC62001C8EE404A08EE504A4DB +:100C40002462001CAC62000824020008A462000EAA +:100C500024020011AC620018AC640000AC65000412 +:100C60008EE204C4AC620010AF86012092E24E20F6 +:100C700014400037240600018EE24E30000210C0FE +:100C80002442503802E220218C830000240200120A +:100C90001462001F000000008EE34E308EE24E34DE +:100CA0001062001B240300408C82000424420001D7 +:100CB000AC8200048EE24E348EE54E3024420001B8 +:100CC00010430007000000008EE24E342442000171 +:100CD00010A20005000000000800133B0000000007 +:100CE00014A00005000000008F820128244200208B +:100CF000AF8201288F8201288C8200042C420011CF +:100D000050400013AC8000000800135100000000A8 +:100D10008EE24E3024030040244200015043000381 +:100D2000000010218EE24E3024420001AEE24E302F +:100D30008EE24E30000210C02442503802E22021E0 +:100D400024020012AC82000024020001AC820004E4 +:100D500014C0001B000000003C040001248451D09A +:100D6000AFA00010AFA000148EE606088F4702283F +:100D70003C0500090C00240334A5F0018EE201B00B +:100D800024420001AEE201B00800136D8EE201B012 +:100D90003C040001248451DCAFA000148EE6060858 +:100DA0008F4702283C0500090C00240334A5F005F8 +:100DB0008EE201AC24420001AEE201AC8EE201AC55 +:100DC0008EE201603C040001248451E83405F00205 +:100DD00024420001AEE201608EE201600000302199 +:100DE00000003821AFA000100C002403AFA00014B5 +:100DF00096E6047A96E7046A3C04000124845200D3 +:100E000024050012AFA000100C002403AFA00014B2 +:100E10000C004500000000000C002318000000003A +:100E20003C06000134C63800AEE00608AF40022898 +:100E3000AF40022C96E304588EE400003C0512D823 +:100E400034A5C35827623800AEE2725827623800D2 +:100E5000AEE2726027623800AEE27264036610216F +:100E6000AEE272702402FFFFAEE004D4AEE004E014 +:100E7000AEE004E4AEE004F0A2E004F4AEE00E0C58 +:100E8000AEE00E18AEE00E10AEE00E14AEE00E1C9A +:100E9000AEE0724CAEE05244AEE05240AEE0523CA6 +:100EA000AEE07250AEE07254AEE0725CAEE07268DA +:100EB000AEE004D02463FFFF00852025AEE304F8F4 +:100EC000AEE40000AF800060AF8200643C0201002D +:100ED000AFA200188EE206088F43022824420001C8 +:100EE000304900FF512300E2AFA000108EE2060857 +:100EF000000210C0005710218FA300188FA4001CFF +:100F0000AC43060CAC4406108F87012027623800E2 +:100F100024E800200102102B504000012768300017 +:100F20008F82012811020004000000008F8201243A +:100F300015020007000010218EE201A400003021FC +:100F400024420001AEE201A4080014228EE201A4B2 +:100F50008EE40608000420C0008018218EE40430CE +:100F60008EE5043400A3282100A3302B0082202129 +:100F700000862021ACE40000ACE500048EE3060806 +:100F800024020008A4E2000E2402000DACE20018C6 +:100F9000ACE9001C000318C02463060C02E3102116 +:100FA000ACE200088EE204C4ACE20010AF8801207D +:100FB00092E24E2014400037240600018EE24E30AB +:100FC000000210C02442503802E220218C8300002D +:100FD000240200071462001F000000008EE34E3060 +:100FE0008EE24E341062001B240300408C82000409 +:100FF00024420001AC8200048EE24E348EE54E3075 +:101000002442000110430007000000008EE24E342D +:101010002442000110A20005000000000800140C8A +:101020000000000014A00005000000008F820128CD +:1010300024420020AF8201288F8201288C82000484 +:101040002C42001150400013AC8000000800142214 +:10105000000000008EE24E302403004024420001D4 +:1010600050430003000010218EE24E302442000164 +:10107000AEE24E308EE24E30000210C024425038B4 +:1010800002E2202124020007AC82000024020001B9 +:10109000AC82000454C0000CAEE906083C04000118 +:1010A000248451C8AFA00010AFA000148EE606083B +:1010B0008F4702283C0500090C00240334A5F000EA +:1010C000080014A5000000008F830120276238006B +:1010D0002466002000C2102B50400001276630001B +:1010E0008F82012810C20004000000008F820124BA +:1010F00014C20007000000008EE201A400003021AD +:1011000024420001AEE201A4080014898EE201A489 +:101110008EE20608AC62001C8EE404A08EE504A4F6 +:101120002462001CAC62000824020008A462000EC5 +:1011300024020011AC620018AC640000AC6500042D +:101140008EE204C4AC620010AF86012092E24E2011 +:1011500014400037240600018EE24E30000210C019 +:101160002442503802E220218C8300002402001225 +:101170001462001F000000008EE34E308EE24E34F9 +:101180001062001B240300408C82000424420001F2 +:10119000AC8200048EE24E348EE54E3024420001D3 +:1011A00010430007000000008EE24E34244200018C +:1011B00010A20005000000000800147300000000E9 +:1011C00014A00005000000008F82012824420020A6 +:1011D000AF8201288F8201288C8200042C420011EA +:1011E00050400013AC80000008001489000000008B +:1011F0008EE24E302403004024420001504300039D +:10120000000010218EE24E3024420001AEE24E304A +:101210008EE24E30000210C02442503802E22021FB +:1012200024020012AC82000024020001AC820004FF +:1012300014C0001B000000003C040001248451D0B5 +:10124000AFA00010AFA000148EE606088F4702285A +:101250003C0500090C00240334A5F0018EE201B026 +:1012600024420001AEE201B0080014A58EE201B0F4 +:101270003C040001248451DCAFA000148EE6060873 +:101280008F4702283C0500090C00240334A5F00513 +:101290008EE201AC24420001AEE201AC8EE201AC70 +:1012A0008EE2015424420001AEE201540C0014DC31 +:1012B0008EE201548F8200A0304200041440FFFDF2 +:1012C000000000008F8200403042000114400008FE +:1012D000000000008F43010424020001106200049A +:1012E000000000008F420264104000060000000071 +:1012F0008EE2017C24420001AEE2017C080014C5AC +:101300008EE2017C8F82004434420004AF820044AC +:101310008EE2017824420001AEE201788EE201788B +:101320008F8200D88F8300D400431023AEE2726C0A +:101330008EE2726C1C4000033C030001004310214C +:10134000AEE2726C0C004064000000000C004440EF +:10135000AF8002288FBF00248FB0002003E0000878 +:1013600027BD002803E000080000000003E000089B +:101370000000000000000000000000002402002C1B +:10138000AF820050AEE072748F420238AEE27278E3 +:101390008F82005424420067AF820058AEE07B8801 +:1013A000AEE07B8CAEE07B843C010001003708217D +:1013B000AC2083BC3C0100010037082103E0000899 +:1013C000A02083B927BDFFD8AFBF0024AFB0002055 +:1013D0008F8200543C0300018C635CD82442006778 +:1013E0001060000DAF8200583C0200010057102130 +:1013F000904283B8104000053C0302003C0100010C +:101400000037082108001503A02083B88EE20000F1 +:1014100000431025AEE200008F4202183042010066 +:10142000104000C6000000008F8200B0304200046F +:10143000104000C2000000003C03000100771821AA +:101440008C6383D08F820104146200B4000000001A +:101450003C030001007718218C6383D48F8200B491 +:10146000146200AE000000008F8200B03C030080D8 +:10147000004310241040000D000000008F82011C6A +:1014800034420002AF82011C8F8200B02403FFFBB4 +:1014900000431024AF8200B08F82011C2403FFFDA3 +:1014A00000431024080015CCAF82011C3C0300014E +:1014B000007718218C6383D08F820104146200822C +:1014C000000000003C030001007718218C6383D4E6 +:1014D0008F8200B41462007C000000003C07000111 +:1014E00000F738218CE783D08F8200B03C040001E4 +:1014F00024845270AFA00014AFA200108F8600B0F9 +:101500003C0500050C00240334A509008F82011C52 +:1015100034420002AF82011C8F8301048F8200B02D +:1015200034420001AF8200B0AF8301048F830120F9 +:10153000276238002466002000C2102B50400001B2 +:10154000276630008F82012810C2000400000000CE +:101550008F82012414C20006000000008EE201A464 +:1015600024420001AEE201A4080015A08EE201A40D +:101570008F4402088F45020C26E20030AC6200085E +:1015800024020400A462000E2402000FAC620018C2 +:10159000AC60001CAC640000AC6500048EE204C4C6 +:1015A000AC620010AF86012092E24E20144000375A +:1015B000000000008EE24E30000210C0244250387D +:1015C00002E220218C830000240200071462001F25 +:1015D000000000008EE34E308EE24E341062001B9D +:1015E000240300408C82000424420001AC820004E9 +:1015F0008EE24E348EE54E30244200011043000747 +:10160000000000008EE24E342442000110A20005CA +:10161000000000000800158A0000000014A000056A +:10162000000000008F82012824420020AF820128A0 +:101630008F8201288C8200042C420011504000133C +:10164000AC800000080015A0000000008EE24E30C3 +:1016500024030040244200015043000300001021F5 +:101660008EE24E3024420001AEE24E308EE24E3029 +:10167000000210C02442503802E220212402000758 +:10168000AC82000024020001AC8200048F82011CA5 +:101690002403FFFD00431024AF82011C8EE201E40D +:1016A0003C07000100F738218CE783D02442000179 +:1016B000AEE201E48EE201E43C0400012484527CA9 +:1016C000080015BDAFA000108F8201043C0100018D +:1016D00000370821AC2283D08F8200B43C07000180 +:1016E00000F738218CE783D03C0400012484528425 +:1016F0003C01000100370821AC2283D4AFA00010C8 +:10170000AFA000148F8600B03C0500050C00240338 +:1017100034A50900080015CC000000008F820104E8 +:101720003C01000100370821AC2283D08F8200B435 +:101730003C01000100370821AC2283D48EE2727490 +:1017400092E304F42442006714600006AEE272746F +:101750008EE272748F4302340043102B1440007BDE +:10176000000000008EE304E48EE204F8146200043A +:101770000000000092E204F450400074A2E004F47F +:101780008F830120276238002466002000C2102BBE +:1017900050400001276630008F82012810C20004EB +:1017A000000000008F82012414C200070000000026 +:1017B0008EE201A40000802124420001AEE201A4D7 +:1017C000080016378EE201A48EE204E4AC62001C2D +:1017D0008EE404B08EE504B42462001CAC62000800 +:1017E00024020008A462000E24020011AC6200185A +:1017F000AC640000AC6500048EE204C4AC6200106E +:10180000AF86012092E24E201440003724100001E0 +:101810008EE24E30000210C02442503802E22021F5 +:101820008C830000240200121462001F00000000DC +:101830008EE34E308EE24E341062001B24030040D3 +:101840008C82000424420001AC8200048EE24E34FB +:101850008EE54E30244200011043000700000000D6 +:101860008EE24E342442000110A200050000000068 +:10187000080016210000000014A000050000000070 +:101880008F82012824420020AF8201288F82012804 +:101890008C8200042C42001150400013AC800000E8 +:1018A00008001637000000008EE24E30240300408E +:1018B0002442000150430003000010218EE24E300C +:1018C00024420001AEE24E308EE24E30000210C0E3 +:1018D0002442503802E2202124020012AC8200008F +:1018E00024020001AC8200045600000B2410000109 +:1018F0008EE204E43C0400012484528CAFA0001466 +:10190000AFA200108EE606088F4702283C050009AA +:101910000C00240334A5F006160000032402000185 +:1019200008001650A2E204F48EE201702442000185 +:10193000AEE201708EE201708EE204E4A2E004F4F3 +:10194000AEE004F0AEE07274AEE204F88EE20E1C7B +:101950001040006D000000008F83012027623800D6 +:101960002466002000C2102B504000012766300082 +:101970008F82012810C20004000000008F82012421 +:1019800014C20007000000008EE201A400008021C4 +:1019900024420001AEE201A4080016AD8EE201A4CB +:1019A0008EE2724CAC62001C8EE404A88EE504AC9E +:1019B0002462001CAC62000824020008A462000E2D +:1019C00024020011AC620018AC640000AC65000495 +:1019D0008EE204C4AC620010AF86012092E24E2079 +:1019E00014400037241000018EE24E30000210C077 +:1019F0002442503802E220218C830000240200128D +:101A00001462001F000000008EE34E308EE24E3460 +:101A10001062001B240300408C8200042442000159 +:101A2000AC8200048EE24E348EE54E30244200013A +:101A300010430007000000008EE24E3424420001F3 +:101A400010A200050000000008001697000000002A +:101A500014A00005000000008F820128244200200D +:101A6000AF8201288F8201288C8200042C42001151 +:101A700050400013AC800000080016AD00000000CC +:101A80008EE24E3024030040244200015043000304 +:101A9000000010218EE24E3024420001AEE24E30B2 +:101AA0008EE24E30000210C02442503802E2202163 +:101AB00024020012AC82000024020001AC82000467 +:101AC0005600000B241000018EE2724C3C04000111 +:101AD00024845298AFA00014AFA200108EE6724C7E +:101AE0008F4702803C0500090C00240334A5F00850 +:101AF00056000001AEE00E1C8EE20174244200018B +:101B0000AEE201748EE201748EE24E2410400019A0 +:101B100000000000AEE04E248F8200403042000101 +:101B200014400008000000008F430104240200015B +:101B300010620004000000008F42026410400006A2 +:101B4000000000008EE2017C24420001AEE2017C34 +:101B5000080016DA8EE2017C8F82004434420004D1 +:101B6000AF8200448EE2017824420001AEE20178A7 +:101B70008EE201788EE272782442FF99AEE27278AA +:101B80008EE272781C4002AD000000008F420238E5 +:101B9000104002AA000000003C0200010057102182 +:101BA000904283E0144002A5000000008F420080B4 +:101BB000AEE2004C8F4200C0AEE200488F4200848B +:101BC000AEE200388F420084AEE202448F420088C9 +:101BD000AEE202488F42008CAEE2024C8F4200908F +:101BE000AEE202508F420094AEE202548F4200985F +:101BF000AEE202588F42009CAEE2025C8F4200A02F +:101C0000AEE202608F4200A4AEE202648F4200A8FE +:101C1000AEE202688F4200ACAEE2026C8F4200B0CE +:101C2000AEE202708F4200B4AEE202748F4200B89E +:101C3000AEE202788F4200BC24040001AEE2027CD6 +:101C4000AEE0003C00041080005710218EE3003C01 +:101C50008C42024424840001006218212C82000F6F +:101C6000AEE3003C1440FFF8000410808F4200CC2B +:101C7000AEE200508F4200D0AEE200548F830120CC +:101C8000276238002466002000C2102B504000015B +:101C9000276630008F82012810C200040000000077 +:101CA0008F82012414C20007000000008EE201A40C +:101CB0000000802124420001AEE201A40800177553 +:101CC0008EE201A48F4402088F45020C26E2003008 +:101CD000AC62000824020400A462000E2402000F7B +:101CE000AC620018AC60001CAC640000AC65000481 +:101CF0008EE204C4AC620010AF86012092E24E2056 +:101D000014400037241000018EE24E30000210C053 +:101D10002442503802E220218C8300002402000774 +:101D20001462001F000000008EE34E308EE24E343D +:101D30001062001B240300408C8200042442000136 +:101D4000AC8200048EE24E348EE54E302442000117 +:101D500010430007000000008EE24E3424420001D0 +:101D600010A20005000000000800175F000000003E +:101D700014A00005000000008F82012824420020EA +:101D8000AF8201288F8201288C8200042C4200112E +:101D900050400013AC8000000800177500000000E0 +:101DA0008EE24E30240300402442000150430003E1 +:101DB000000010218EE24E3024420001AEE24E308F +:101DC0008EE24E30000210C02442503802E2202140 +:101DD00024020007AC82000024020001AC8200044F +:101DE000120002123C020400AFA200183C020001E3 +:101DF00000571021904283B01040010B00000000FA +:101E00008EE206088F43022824420001304A00FF78 +:101E1000514300FDAFA000108EE20608000210C082 +:101E2000005710218FA300188FA4001CAC43060C90 +:101E3000AC4406108F8300548F8200542469003212 +:101E4000012210232C4200331040006A0000582168 +:101E500024180008240F000D240D0007240C004056 +:101E6000240E00018F8701202762380024E800201B +:101E70000102102B50400001276830008F8201289A +:101E800011020004000000008F82012415020007E7 +:101E9000000010218EE201A40000802124420001F4 +:101EA000AEE201A4080017F38EE201A48EE4060856 +:101EB000000420C0008018218EE404308EE5043434 +:101EC00000A3282100A3302B00822021008620219E +:101ED000ACE40000ACE500048EE20608A4F8000EB5 +:101EE000ACEF0018ACEA001C000210C02442060C43 +:101EF00002E21021ACE200088EE204C4ACE2001061 +:101F0000AF88012092E24E201440003324100001DB +:101F10008EE24E30000210C02442503802E22021EE +:101F20008C820000144D001F000000008EE34E3034 +:101F30008EE24E341062001B000000008C82000410 +:101F400024420001AC8200048EE24E348EE34E3017 +:101F500024420001104C0007000000008EE24E34C5 +:101F6000244200011062000500000000080017E094 +:101F70000000000014600005000000008F820128AE +:101F800024420020AF8201288F8201288C82000425 +:101F90002C42001150400010AC800000080017F3E4 +:101FA000000000008EE24E3024420001504C00033D +:101FB000000010218EE24E3024420001AEE24E308D +:101FC0008EE24E30000210C02442503802E220213E +:101FD000AC8D0000AC8E000456000006240B0001FE +:101FE0008F820054012210232C4200331440FF9DA5 +:101FF00000000000316300FF24020001146200773A +:102000003C050009AEEA06088F8300548F82005415 +:1020100024690032012210232C4200331040006159 +:1020200000005821240D0008240C0011240800127F +:1020300024070040240A00018F8301202762380012 +:102040002466002000C2102B50400001276630009B +:102050008F82012810C20004000000008F8201243A +:1020600014C20007000000008EE201A400008021DD +:1020700024420001AEE201A40800185F8EE201A430 +:102080008EE20608AC62001C8EE404A08EE504A477 +:102090002462001CAC620008A46D000EAC6C001839 +:1020A000AC640000AC6500048EE204C4AC620010B5 +:1020B000AF86012092E24E2014400033241000012C +:1020C0008EE24E30000210C02442503802E220213D +:1020D0008C8200001448001F000000008EE34E3088 +:1020E0008EE24E341062001B000000008C8200045F +:1020F00024420001AC8200048EE24E348EE34E3066 +:102100002442000110470007000000008EE24E3418 +:102110002442000110620005000000000800184C75 +:102120000000000014600005000000008F820128FC +:1021300024420020AF8201288F8201288C82000473 +:102140002C42001150400010AC8000000800185FC5 +:10215000000000008EE24E30244200015047000390 +:10216000000010218EE24E3024420001AEE24E30DB +:102170008EE24E30000210C02442503802E220218C +:10218000AC880000AC8A000456000006240B000155 +:102190008F820054012210232C4200331440FFA6EA +:1021A00000000000316300FF2402000114620003FC +:1021B0003C0500090800197C241000013C040001C2 +:1021C000248452A4AFA00010AFA000148F86012079 +:1021D0008F8701240800187B34A5F0113C0400010E +:1021E000248452B0AFA00010AFA000148F8601204D +:1021F0008F87012434A5F0100C00240300008021F7 +:102200000800197C000000003C040001248452BC3A +:10221000AFA000148EE606088F4702283C0500098F +:102220000800197534A5F00F8EE206088F430228C6 +:1022300024420001304900FF512300E2AFA000100A +:102240008EE20608000210C0005710218FA300186C +:102250008FA4001CAC43060CAC4406108F870120F1 +:102260002762380024E800200102102B50400001B2 +:10227000276830008F82012811020004000000004E +:102280008F82012415020007000010218EE201A4B4 +:102290000000802124420001AEE201A4080018F7EA +:1022A0008EE201A48EE40608000420C000801821FC +:1022B0008EE404308EE5043400A3282100A3302BE3 +:1022C0000082202100862021ACE40000ACE500045F +:1022D0008EE3060824020008A4E2000E2402000D8A +:1022E000ACE20018ACE9001C000318C02463060C23 +:1022F00002E31021ACE200088EE204C4ACE200105C +:10230000AF88012092E24E201440003724100001D3 +:102310008EE24E30000210C02442503802E22021EA +:102320008C830000240200071462001F00000000DC +:102330008EE34E308EE24E341062001B24030040C8 +:102340008C82000424420001AC8200048EE24E34F0 +:102350008EE54E30244200011043000700000000CB +:102360008EE24E342442000110A20005000000005D +:10237000080018E10000000014A0000500000000A3 +:102380008F82012824420020AF8201288F820128F9 +:102390008C8200042C42001150400013AC800000DD +:1023A000080018F7000000008EE24E3024030040C1 +:1023B0002442000150430003000010218EE24E3001 +:1023C00024420001AEE24E308EE24E30000210C0D8 +:1023D0002442503802E2202124020007AC8200008F +:1023E00024020001AC8200045600000CAEE906088D +:1023F0003C040001248452C8AFA00010AFA0001418 +:102400008EE606088F4702283C0500090C002403CD +:1024100034A5F0000800197C000000008F83012023 +:10242000276238002466002000C2102B50400001B3 +:10243000276630008F82012810C2000400000000CF +:102440008F82012414C20007000000008EE201A464 +:102450000000802124420001AEE201A40800195EC0 +:102460008EE201A48EE20608AC62001C8EE404A099 +:102470008EE504A42462001CAC620008240200085B +:10248000A462000E24020011AC620018AC640000CB +:10249000AC6500048EE204C4AC620010AF8601207B +:1024A00092E24E2014400037241000018EE24E309C +:1024B000000210C02442503802E220218C83000028 +:1024C000240200121462001F000000008EE34E3050 +:1024D0008EE24E341062001B240300408C82000404 +:1024E00024420001AC8200048EE24E348EE54E3070 +:1024F0002442000110430007000000008EE24E3429 +:102500002442000110A20005000000000800194844 +:102510000000000014A00005000000008F820128C8 +:1025200024420020AF8201288F8201288C8200047F +:102530002C42001150400013AC8000000800195ECE +:10254000000000008EE24E302403004024420001CF +:1025500050430003000010218EE24E30244200015F +:10256000AEE24E308EE24E30000210C024425038AF +:1025700002E2202124020012AC82000024020001A9 +:10258000AC8200045600001D241000013C04000130 +:10259000248452D0AFA00010AFA000148EE606082D +:1025A0008F4702283C0500090C00240334A5F001E4 +:1025B0008EE201B024420001AEE201B00800197CB5 +:1025C0008EE201B03C040001248452DCAFA0001470 +:1025D0008EE606088F4702283C05000934A5F00561 +:1025E0000C002403000000008EE201AC00008021FA +:1025F00024420001AEE201AC8EE201AC1200000CFC +:10260000240200013C01000100370821A02083B012 +:102610008F4202388EE3015824630001AEE3015873 +:102620008EE301580800198CAEE272782402000192 +:102630003C01000100370821A02283B03C020001C8 +:102640008C425CD810400187000000008EE27B8441 +:1026500024430001284200C9144001A4AEE37B8456 +:102660008EE204D43042000214400119AEE07B84B3 +:102670008EE204D43C0306003463100034420002AE +:10268000AEE204D4AFA300188EE206088F430228FE +:102690002442 |