%!PS-Adobe-2.0 %%Creator: dvips by Radical Eye Software %%Pages: 6 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument TeXDict begin 300 @start /fa df[9 3 3 -6 14]45 dc[<3078F060>5 4 4 0 12]46 dc[<007C000186000303000603000C03801C03801C03803803803803803803807007 00700700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C0001F00 00>17 24 4 0 20]48 dc[<000800180030007001F00E7000E000E000E000E001C001C001C001 C0038003800380038007000700070007000F00FFF0>13 24 4 0 20]49 dc[<007C0001860002 03000403800483800883801083801083801083801107001207000C0E00001C0000300000600001 80000200000C00001001002001003C060067FE00C1FC0080F000>17 24 3 0 20]50 dc[<003E 0000C3000101800201800481C00441C0088380048380070300000600000C0001F000001800000C 00000C00000E00000E00600E00E01C00E01C0080380040300020E0001F8000>18 24 3 0 20] 51 dc[<000300000380000700000700000700000E00000E00000E00001C00001C000018000030 0000300000600000C00000C600018E00030E00021C00041C00081C00101C007FB800807F800038 00003800007000007000007000007000006000>17 31 1 7 20]52 dc[<001F00006080018080 0303800603800E00001C000018000038000039F000721800740C00780E00700E00F00E00E00E00 E00E00E00E00E01C00E01C0060380060700030C0001F8000>17 24 4 0 20]54 dc[<003E0000 C1000100800200C00600C00600C00E018007030007860003CC0001F00001F800067C000C3E0018 0E00300700600700600700C00600C00600600C006018003070000FC000>18 24 3 0 20]56 dc[ <007C000186000703000E03000C03801C0380380380380380380380380780380700380F001817 000C270007CE00000E00000C00001C00001800E03000E0600080C000C380003E0000>17 24 4 0 20]57 dc[<0000200000600000600000E00001E00001E000027000027000047000087000087000 107000107000207000207000407000807000FFF00100380100380200380400380400380C00381C 0038FF01FF>24 26 2 0 29]65 dc[<03FFF800700E00700600700700E00700E00700E00700E0 0701C00E01C01C01C03801C07003FFE003807003803803801C07001C07001C07001C07001C0E00 380E00380E00700E00E01C03C0FFFF00>24 26 3 0 27]66 dc[<000F8200706200C01603801E 07000C0E000C1C000C18000C380008300008700000700000E00000E00000E00000E00000E00020 E00020E00020E000406000406000803001001006000C180003E000>23 26 6 0 27]67 dc[<03 FFF80000700E00007007000070030000E0018000E0018000E0018000E001C001C001C001C001C0 01C001C001C001C003800380038003800380038003800300070007000700070007000E0007000C 000E001C000E0038000E0070000E00E0001C038000FFFE0000>26 26 3 0 29]68 dc[<03FFFF 00700700700300700100E00100E00100E00100E00101C08001C08001C08001C18003FF00038100 0381000381000702000700040700040700080E00080E00180E00100E00301C00E0FFFFE0>24 26 3 0 26]69 dc[<01FF8000380000380000380000700000700000700000700000E00000E00000E0 0000E00001C00001C00001C00001C0000380000380000380000380000700000700000700000700 000E0000FFE000>17 26 2 0 15]73 dc[<03F8001FC00078003C000078003C000078005C0000 B800B80000B800B800009C013800009C013800011C027000011C027000011C047000011C087000 021C08E000021C10E000021C10E000021C20E000041C41C000041C41C000041C81C000041C81C0 00080F038000080F038000080E038000180C038000380C070000FF083FF000>34 26 3 0 34] 77 dc[<03F007F8007801C00078008000780080009C0100009C0100009C0100008E0100010E02 000106020001070200010702000203840002038400020384000201C4000401C8000401C8000400 E8000400E8000800F00008007000080070001800700038002000FF002000>29 26 3 0 29]78 dc[<001F8000706001C03003001806001C0E000C1C000C18000E38000E30000E70000E70000EE0 001CE0001CE0001CE00038E00038E00030E00070E000E0E000C06001807003003806001C1C0007 E000>23 26 6 0 29]79 dc[<03FFF800701C00700600700700E00700E00700E00700E00701C0 0E01C00E01C01C01C03803807003FF800380000380000700000700000700000700000E00000E00 000E00000E00001C0000FFC000>24 26 3 0 26]80 dc[<003F10006090018070010070030020 06002006002006002006000007000007C00003F80001FE00007F00000F80000380000180000180 200180200180600300600300600600700C00C8180087E000>20 26 3 0 22]83 dc[<3FFFFC38 1C0C201C04401C0440380480380480380480380400700000700000700000700000E00000E00000 E00000E00001C00001C00001C00001C000038000038000038000038000078000FFF800>22 26 7 0 27]84 dc[<7FE0FF0E00380E00100E00101C00201C00201C00201C0020380040380040380040 380040700080700080700080700080E00100E00100E00100E00200E00200E00400600800601000 3860000F8000>24 26 8 0 29]85 dc[34 26 8 0 38]87 dc[<01FF07F8003C01C000380100003C0200001C0600001C0C00001E0800000E1000000E200000 074000000780000007800000038000000780000007C0000009C0000011C0000020E0000040E000 0080E000018070000100700002007800040038001C007800FF01FF00>29 26 2 0 29]88 dc[< 03CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F261341E18>15 16 4 0 20] 97 dc[<7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E038E0 38E038E038C070C060C0E060C063801E00>13 26 4 0 18]98 dc[<01F006080C181838301070 006000E000E000E000E000E008E010602030C01F00>13 16 4 0 18]99 dc[<001F8000038000 0380000380000700000700000700000700000E00000E0003CE000E2E00181C00381C00301C0070 1C00E03800E03800E03800E03800C07200C07200C0720060F2006134001E1800>17 26 4 0 20] 100 dc[<01E006181C08380870087010FFE0E000E000E000E000E0086010602030C01F00>13 16 4 0 18]101 dc[<000700001980001B80003B0000300000300000700000700000700000700007 FF0000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00003800003800003 8000038000038000070000070000070000660000E40000CC0000700000>17 33 -1 7 12]102 dc[<00F300038B800607000E07000C07001C0700380E00380E00380E00380E00301C00301C0030 1C00183C0018780007B800003800003800007000607000E0E000C1C0007F0000>17 23 2 7 18] 103 dc[<1F80000380000380000380000700000700000700000700000E00000E00000E7C000F86 001E07001E07001C07001C0700380E00380E00380E00381C00701C80701C80703880703900E019 00600E00>17 26 2 0 20]104 dc[<030706000000000000384C4E8E9C9C1C3838707272E2E464 38>8 25 4 0 12]105 dc[<1F8003800380038007000700070007000E000E000E0E0E131C271C 431C801F003C003F8039C038E070E270E270E270E4E0646038>16 26 2 0 18]107 dc[<3F0707 070E0E0E0E1C1C1C1C3838383870707070E4E4E4E46830>8 26 3 0 10]108 dc[<307C1E0059 8663009E0783809E0703809C0703809C070380380E0700380E0700380E0700380E0E00701C0E40 701C0E40701C1C40701C1C80E0380C8060180700>26 16 4 0 31]109 dc[<307C005986009E07 009E07009C07009C0700380E00380E00380E00381C00701C80701C80703880703900E01900600E 00>17 16 4 0 22]110 dc[<01F006180C0C180E300E700E600EE00EE00EE00CE01CE018E03060 6030C01F00>15 16 4 0 20]111 dc[<030F000590C009E0C009C06009C06009C0600380E00380 E00380E00380E00701C00701800703800703000E8E000E78000E00000E00001C00001C00001C00 001C0000FF0000>19 23 0 7 20]112 dc[<30F059189E389C189C009C00380038003800380070 00700070007000E0006000>13 16 4 0 16]114 dc[<03E004300830187018601C001F801FC00F E000E00060E060E06080C041803E00>12 16 3 0 16]115 dc[<06000E000E000E000E001C001C 00FFC01C0038003800380038007000700070007000E100E100E100E20064003800>10 23 4 0 13]116 dc[<38064C074E0E8E0E9C0E9C0E1C1C381C381C381C7039703970393079389A0F0C> 16 16 4 0 21]117 dc[<38184C1C4E1C8E0C9C0C9C0C1C083808380838087010701070203040 18C00F00>14 16 4 0 18]118 dc[<078F0008D18010F38020E18020E00020E00001C00001C000 01C00001C000038200038200C38200E78400C5880078F000>17 16 2 0 18]120 dc[<38064C07 4E0E8E0E9C0E9C0E1C1C381C381C381C703870387038307838F00F700070006060E0E1C0C18047 003C00>16 23 4 7 19]121 dc dfe /fb df[<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFF FF7FFE7FFE3FFC1FF80FF003C0>16 16 2 -2 21]15 dc dfe /fc df[<7FFFFFE07FFFFFE078 1F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000 001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F8000001F8000001F800007FFFE0007FFFE00>28 28 2 0 33]84 dc[<0FF800 1C1E003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0 F807C0780BC03E13F80FE1F8>21 18 1 0 23]97 dc[<03FC000E0E001C1F003C1F00781F0078 0E00F80000F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F800> 17 18 2 0 21]99 dc[<000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001 F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801 F07801F07801F03C01F01C03F00F0FFE03F9FE>23 29 2 0 27]100 dc[<01FC000F07001C0380 3C01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C0 0F038001FC00>19 18 1 0 22]101 dc[<007F0001E38003C7C00787C00F87C00F83800F80000F 80000F80000F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F80000F80007FF8007FF800>18 29 0 0 15]102 dc[<03F8 F00E0F381E0F381C07303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800 001800001FFF001FFFC00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF 00>21 27 1 9 24]103 dc[24 29 1 0 27]104 dc[<1E003F003F003F 003F001E00000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F00 1F001F001F001F001F00FFE0FFE0>11 30 1 0 14]105 dc[22 29 1 0 25]107 dc[11 29 1 0 14]108 dc[37 18 1 0 40]109 dc[24 18 1 0 27]110 dc[<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800 F8F800F87800F07800F03C01E01E03C00F078001FC00>21 18 1 0 24]111 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01F F807FC007CC01CC01CE01CE018F830CFC0>14 18 2 0 19]115 dc[<0300030003000300070007 000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F080798 03F0>14 26 1 0 19]116 dc[24 18 1 0 27]117 dc[< FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F60001F60001FE00 00FC0000FC00007800007800003000>22 18 1 0 25]118 dc[31 18 1 0 34]119 dc[22 26 1 8 25] 121 dc[<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003F00007E00007C1800F81 801F81801F03803E03007E07007C0F00FFFF00>17 18 1 0 21]122 dc dfe /fd df[<018030 0380700380700380700700E00700E00700E00700E00E01C00E01C00E01C00E01C01C03881C0388 1C03881E07883E19903BE0E0380000380000700000700000700000700000E00000E00000C00000 >21 27 1 9 25]22 dc dfe /fe df[<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F0 00700778073E0E1FFC0FF803F0>16 18 3 0 22]99 dc[<003F00007F00003F00000700000700 00070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700E00700E00700 E00700700F00700F003C1F001FFFE00FE7F007C7E0>20 25 1 0 22]100 dc[<03E00FF81FFC3C 1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F0>16 18 3 0 22]101 dc [<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C0 0001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF003FFE00>17 25 1 0 22]102 dc[<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C0 01C001C001C001C001C001C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[17 25 2 0 22]108 dc[21 18 0 0 22]109 dc[<7E3C00FEFE007FFF000F87 800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7 F87FC7F0>21 18 0 0 22]110 dc[<03E0000FF8001FFC003C1E00780F00700700E00380E00380 E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E 00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FF E0007FC000>20 27 0 9 22]112 dc[19 18 1 0 22] 114 dc[<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7 E0>15 18 3 0 22]115 dc[<0300000700000700000700000700007FFF00FFFF00FFFF00070000 07000007000007000007000007000007000007010007038007038007038007870003FE0001FC00 00F800>17 23 1 0 22]116 dc[<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E0007 1C00071C00071C00071C0003B80003B80003B80001F00001F00000E000>19 18 1 0 22]118 dc [19 18 1 0 22]119 dc[<7F1FC07F3FC07F1FC00F1C00 073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0FF3FE0 7F1FC0>19 18 1 0 22]120 dc dfe /ff df[<0402000C06000C06000C0600180C00180C0018 0C00180C003018003018803018803038807859006F8E00600000600000C00000C00000C0000080 0000>17 20 2 6 21]22 dc dfe /fg df[<00FCF807839C0E079C1C07081C07001C07001C0700 1C07001C0700FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700 1C07001C0700FF1FE0>22 23 0 0 21]11 dc[<00FC000782000E07001C07001C02001C00001C 00001C00001C0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C 07001C07001C0700FF1FE0>19 23 0 0 20]12 dc[<60F0F070101020204040>4 10 3 6 10] 44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<07C018303018701C 600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18]48 dc[<03000700FF0007000700070007000700070007000700070007000700070007000700 0700070007007FF0>12 21 2 0 18]49 dc[<0F8030E040708030C038E0384038003800700070 006000C00180030006000C08080810183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018 701C701C001C00180038006007E000300018000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C 70187018603020C01F80>15 21 1 0 18]57 dc[<001000003800003800003800005C00005C00 005C00008E00008E00008E0001070001070003078002038002038007FFC00401C00401C00800E0 0800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[21 23 1 0 25]66 dc[<00FC100383300E00B01C00703800 30300030700010600010E00010E00000E00000E00000E00000E00000E000106000107000103000 203800201C00400E008003830000FC00>20 23 2 0 25]67 dc[23 23 1 0 27]68 dc[21 23 1 0 24]69 dc[19 23 1 0 22]76 dc[29 23 1 0 32]77 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[23 23 1 0 26]85 dc[33 23 1 0 36]87 dc[6 33 3 8 10]91 dc[6 33 0 8 10] 93 dc[<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E>16 14 1 0 18] 97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000E000E000600070083008183007C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E0030 0E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8E000E000E000600070083010183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C001C001C001C00FF801C001C001C001C001C001C00 1C001C001C001C001C001C00FF80>12 23 0 0 11]102 dc[<0F9E18E330607070707070703060 18C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE0>16 21 1 7 18]103 dc[< FC00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D8E001E07001C0700 1C07001C07001C07001C07001C07001C07001C07001C07001C0700FF9FE0>19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF>8 23 0 0 10]105 dc[18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[<07C018303018600C600CE00EE00EE00EE00EE0 0E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C0 9F00>11 14 1 0 14]115 dc[<080008000800180018003800FF80380038003800380038003800 380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[< FE1F3C0E3C0C1C081C080E100E100720072003C003C003C001800180>16 14 1 0 19]118 dc[< FCFE7C3838383838101C3C201C3C201C4C200E4E400E4E400E8640078780078780070380030300 030300>22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc dfe /fh df[<0C003C00CC000C 000C000C000C000C000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F006180 40C08060C0600060006000C00180030006000C00102020207FC0FFC0>11 16 1 0 15]50 dc[< 1F00218060C060C000C0008001800F00008000400060C060C060804060801F00>11 16 1 0 15] 51 dc dfe /fi df[<0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C00 0C000C000C00FFC0>10 19 3 0 17]49 dc[<1F0060C06060F070F030603000700070006000C0 01C00180020004000810101020207FE0FFE0>12 19 2 0 17]50 dc[<0FC03070703870387038 0038003000E00FC0007000380018001C601CF01CF018E03860701FC0>14 19 1 0 17]51 dc dfe /fj df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FFF80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F FFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01 F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E0 1801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28] 50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003 E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00 FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<07FC001FFF00 380F807007C0F807E0FC07E0FC07E0FC07E07807E0000FC0001F80001F00003C00007800007000 00E00000E00000C00000C00000C00000C00000C00000C000000000000000000000000000000000 01C00003E00007F00007F00007F00003E00001C000>19 35 3 0 26]63 dc[37 34 2 0 43]68 dc[32 34 2 0 37]69 dc[<0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C00007C0 0FC00003C01F800003C03F000001C03F000001C07F000000C07E000000C07E000000C0FE000000 00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000FFFFC7E000F FFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC0001FC007E0001FC003F0 001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C0>38 34 3 0 44]71 dc[19 34 1 0 21]73 dc[48 34 2 0 53]77 dc[39 34 2 0 44]78 dc[<01FC04 07FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF00 7FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001F E0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<7FFFFFFF807FFF FFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C0 03F800C0C003F800C0C003F800C00003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F8000003FFFF F80003FFFFF800>34 34 2 0 39]84 dc[55 34 1 0 58]87 dc[<07FC001FFF80 3F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0 FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FE0007FF800F87C01E01E0 3E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E0000 3E00181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C0000000000 00000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FF C00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC00 7E7C007C7C007C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC00 007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC 00C7F000>17 22 2 0 22]115 dc[<018000018000018000018000038000038000078000078000 0F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F81800F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22]116 dc[26 22 2 0 31]117 dc[27 22 1 0 30]118 dc[27 32 1 10 30]121 dc dfe /fk df[<00FF 000387000707000607000E07000E07000E07000E07000E07000E0700FFFF000E07000E07000E07 000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07007F9FE0>19 26 0 0 21]13 dc[<007E1F8001C170400703C060060380E00E0380400E0380000E0380000E03 80000E0380000E038000FFFFFFE00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E 0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E07F8FE3FC>30 26 0 0 32]14 dc[<007E1FE001C170E00703C0E0060380E00E0380E00E0380E00E0380E00E0380E00E 0380E00E0380E0FFFFFFE00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E0 0E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E07F8FE3FC>30 26 0 0 32] 15 dc[<01C0000003200000061000000E1000000E1000000E1000000E1000000E2000000E4000 000E40000007807F8007001E0007000800078010000B80100013C0200031C0200060E04000E0F0 8000E0788000E0390000E01E0080E00E0080700F01003873C3000F807C00>25 26 2 0 30]38 dc[<00800100020004000C00080018003000300030006000600060006000E000E000E000E000E0 00E000E000E000E000E0006000600060006000300030003000180008000C000400020001000080 >9 38 3 10 15]40 dc[<8000400020001000180008000C000600060006000300030003000300 038003800380038003800380038003800380038003000300030003000600060006000C00080018 001000200040008000>9 38 2 10 15]41 dc[<60F0F07010101020204080>4 11 3 7 11]44 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<0004000C0018001800 1800300030003000600060006000C000C000C00180018001800300030003000600060006000C00 0C000C00180018001800300030003000600060006000C000C000>14 37 2 9 19]47 dc[<0780 18603030303060186018E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01C6018601870 38303018600780>14 24 2 0 19]48 dc[<03000700FF00070007000700070007000700070007 00070007000700070007000700070007000700070007000700FFF0>12 24 3 0 19]49 dc[<0F 80106020304038803CC01CE01C401C003C003800380070006000C0018001000200040408041004 30083FF87FF8FFF8>14 24 2 0 19]50 dc[<0F8010E020706078703820380078007000700060 00C00F8000E000700038003C003CE03CE03CC03C4038407030E00F80>14 24 2 0 19]51 dc[< 00300030007000F000F001700370027004700C7008701070307020704070C070FFFF0070007000 7000700070007007FF>16 24 1 0 19]52 dc[<30183FF03FE03FC02000200020002000200027 C03860203000380018001C001C401CE01CE01C80184038403030E00F80>14 24 2 0 19]53 dc[ <01E006100C1818383038300070006000E000E7C0E860F030F018E018E01CE01CE01C601C601C 701830183030186007C0>14 24 2 0 19]54 dc[<40007FFE7FFC7FFC40088010801080200040 0040008001800180010003000300030003000700070007000700070007000200>15 25 2 0 19] 55 dc[<078018603030201860186018601870103C303E600F8007C019F030F86038401CC00CC0 0CC00CC00C6008201018600FC0>14 24 2 0 19]56 dc[<07801860303070306018E018E018E0 1CE01CE01C601C603C303C185C0F9C001C00180018003870307060604021801F00>14 24 2 0 19]57 dc[<60F0F060000000000000000060F0F060>4 16 3 0 11]58 dc[<000C0000000C0000 000C0000001E0000001E0000003F000000270000002700000043800000438000004380000081C0 000081C0000081C0000100E0000100E00001FFE000020070000200700006007800040038000400 380008001C0008001C001C001E00FF00FFC0>26 26 1 0 29]65 dc[22 26 2 0 27]66 dc[ <003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F00000F00000F000 00F00000F00000F000007000027000027800023800041C00041C00080E000803003001C0C0003F 00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[22 26 2 0 26]69 dc[20 26 2 0 25]70 dc[<003F020001C0C60003002E000E001E001C000E001C00060038000600780002007000 020070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E0070000E0078 000E0038000E001C000E001C000E000E000E000300160001C06600003F8200>26 26 2 0 30] 71 dc[24 26 2 0 29]72 dc[11 26 1 0 14]73 dc[< 1FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 E040E0E0E0E0E041C061801E00>14 26 3 0 20]74 dc[25 26 2 0 30]75 dc[19 26 2 0 24]76 dc[30 26 2 0 35]77 dc[24 26 2 0 29] 78 dc[<007F000001C1C000070070000E0038001C001C003C001E0038000E0078000F00700007 00F0000780F0000780F0000780F0000780F0000780F0000780F0000780F000078078000F007800 0F0038000E003C001E001C001C000E0038000700700001C1C000007F0000>25 26 2 0 30]79 dc[21 26 2 0 26]80 dc[<007F000001C1C000070070000E0038001C001C003C001E003800 0E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0000780F0000780F0 0007807000070078000F0038000E003C1C1E001C221C000E4138000741F00001E1C000007F8080 0000C0800000C0800000E18000007F0000007F0000003E0000001C00>25 33 2 7 30]81 dc[< FFFC00000E0780000E01C0000E00E0000E00F0000E00F0000E00F0000E00F0000E00F0000E00E0 000E01C0000E0780000FFC00000E0600000E0300000E0180000E01C0000E01C0000E01C0000E01 E0000E01E0000E01E0000E01E0800E00F0800E007100FFE03E00>25 26 2 0 28]82 dc[<0FC2 1836200E6006C006C002C002C002E00070007E003FE01FF807FC003E000E000700038003800380 03C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C0 1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00 00001C000003FFE000>25 26 1 0 28]84 dc[24 26 2 0 29]85 dc[26 26 1 0 29]86 dc[36 26 1 0 39]87 dc[<7FC0FF000F003C0007003000078020000380600001C0400001 E0800000E1800000710000007A0000003C0000001C0000001E0000001E00000017000000278000 004380000041C0000081E0000100E0000100700002007800040038000C001C001E003E00FF80FF C0>26 26 1 0 29]88 dc[ 27 26 1 0 29]89 dc[7 37 3 9 11]91 dc[7 37 0 9 11]93 dc[<3F8070C070E020700070007007 F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E000E000E000E0007000300438080C1807E0>14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E00000E0003CE000C 3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E00381E001C 2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E000E000E00060 00300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E000E000E000E 00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE60 0FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21]104 dc[<1800 3C003C001800000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C 001C001C001C001C00FF80>9 26 0 0 10]105 dc[18 26 1 0 20]107 dc[9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38 300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19]111 dc[< FCF8001F0E001E07001C03801C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801C0300 1E07001F0C001CF0001C00001C00001C00001C00001C00001C0000FF8000>18 23 1 7 21]112 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F80> 12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C001C001C001C001C00 1C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[ 18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[25 16 1 0 28]119 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc[18 1 0 -9 19]123 dc dfe /fl df[<0001FC000703000C 03001C07001C0300180000380000380000380000380000700007FFFC00701C00701C00701C00E0 3800E03800E03800E03800E07001C07001C07001C07001C0E201C0E201C0E20380E40380640380 38038000030000070000060000C60000E40000CC0000700000>24 37 -1 8 23]12 dc[<3078F0 60>5 4 4 0 13]46 dc[<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F0 0070007000700070007000F000E000F000E000F000E000F000E000F001C001E001C001E001C001 E001C001C0038003C003800380038007800380070007000E0007001C0007003800070070000E01 C000FFFF0000>28 28 3 0 31]68 dc[<01FFFC00003C070000380380003801C0003801C00038 01C0007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0380001FFE00001 C0000001C0000001C0000003800000038000000380000003800000070000000700000007000000 070000000F000000FFE00000>26 28 3 0 28]80 dc[<7FF0FF800F001C000E0018000E001000 0E0010000E0010001C0020001C0020001C0020001C002000380040003800400038004000380040 0070008000700080007000800070008000E0010000E0010000E0010000E0020000E0020000E004 0000E00400006008000030300000104000000F800000>25 29 9 1 31]85 dc[<03CC063C0C3C 181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<01F007080C08181C3838300070007000E000E000E000E000E000E008E010602030C01F00> 14 18 5 0 19]99 dc[<001F80000380000380000700000700000700000700000E00000E00000E 00000E0003DC00063C000C3C00181C00383800303800703800703800E07000E07000E07000E070 00E0E200C0E200C0E20061E4006264003C3800>17 29 5 0 21]100 dc[<01E007100C10180838 10701070607F80E000E000E000E000E000E0086010602030C01F00>13 18 5 0 19]101 dc[<01 800380010000000000000000000000000000001C002600470047008E008E000E001C001C001C00 38003800710071007100720072003C00>9 28 4 0 13]105 dc[<0FC00001C00001C000038000 0380000380000380000700000700000700000700000E0F000E11000E23800E43801C83001C8000 1D00001E00003F800039C00038E00038E00070E20070E20070E20070E400E06400603800>17 29 3 0 19]107 dc[<1F800380038007000700070007000E000E000E000E001C001C001C001C0038 003800380038007000700070007000E400E400E400E40068003800>9 29 4 0 11]108 dc[<3C 1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C0 1C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C0>29 18 4 0 34] 109 dc[<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C 00381C40381C40383840383880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C180C38 0C300E700E700EE01CE01CE01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc[<07 870004D98008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C003818007038007 03000707000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000> 19 26 1 8 21]112 dc[<3C3C26C2468747078E068E000E000E001C001C001C001C0038003800 3800380070003000>16 18 4 0 18]114 dc[<01F006080C080C1C18181C001F001FC00FF007F0 007800386030E030C030806060C01F00>14 18 3 0 17]115 dc[<00C001C001C001C003800380 03800380FFE00700070007000E000E000E000E001C001C001C001C00384038403840388019000E 00>11 26 3 0 14]116 dc[<1E0300270700470700470700870E00870E000E0E000E0E001C1C00 1C1C001C1C001C1C003838803838801838801839001C5900078E00>17 18 4 0 22]117 dc[<1E 06270E470E4706870287020E020E021C041C041C041C0818083808181018200C400780>15 18 4 0 19]118 dc[<1E01832703874703874703838707018707010E07010E07011C0E021C0E021C0E 021C0E04180C04181C04181C081C1C100C263007C3C0>24 18 4 0 28]119 dc dfe /fm df[< 007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C0 000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01 C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC00> 26 29 0 0 24]11 dc[<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00 000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C07F87F8>21 29 0 0 23]12 dc[<007FC001C1C00303C0 0703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8 >21 29 0 0 23]13 dc[<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E0 18000E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80 >33 29 0 0 35]14 dc[<003F07FC0001C0DC1C000381F03C000701F03C000E01E01C000E00E0 1C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00FFFFFFFC000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80 >33 29 0 0 35]15 dc[<6060F0F0F8F8686808080808080810101010202040408080>13 12 1 -17 21]34 dc[<0F0000C0188000C030600380703807006027FB00E0100600E0100C00E0100C00 E0101800E0101800E0103000E0106000602060007020C00030418000188180000F0303C0000606 2000060C10000C1C08001818080018380400303804006038040060380400C0380400C038040180 38040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[<00E000000190 000003080000030800000708000007080000070800000708000007100000071000000720000007 40000003C03FE003800F00038006000380040005C0040009C0080010E0100030E0100060702000 60702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C0401830E18007C03E 00>27 31 2 1 32]38 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<00400080 0100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E0 00E000E000E000E000E000600060006000700030003000180018000C000C000600020001000080 0040>10 42 3 11 16]40 dc[<800040002000100018000C000C00060006000300030003800180 0180018001C001C001C001C001C001C001C001C001C001C001C001C00180018001800380030003 00060006000C000C0018001000200040008000>10 42 2 11 16]41 dc[<018001800180018041 82F18F399C0FF003C003C00FF0399CF18F41820180018001800180>16 18 2 -13 21]42 dc[< 60F0F0701010101020204080>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[<60F0 F060>4 4 4 0 12]46 dc[<00010003000600060006000C000C000C0018001800180030003000 300060006000C000C000C0018001800180030003000300060006000C000C000C00180018001800 300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C700E 60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E300C30 0C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C70007000700070007000700070007 000700070007000700070007000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C003800 70006000C00180030006010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E0183020 1C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F700FF80F F80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C00003C 00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C 00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0>18 28 1 0 21] 52 dc[<300C3FF83FF03FC020002000200020002000200023E024302818301C200E000E000F00 0F000F600FF00FF00FF00F800E401E401C2038187007C0>16 29 2 1 21]53 dc[<00F0030C06 040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E0076007 60077006300E300C18180C3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF007FFF004002 0080040080040080080000100000100000200000600000400000C00000C00001C0000180000180 00038000038000038000038000078000078000078000078000078000078000030000>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E 601E600FC007C003C003C003C00360026004300C1C1007E0>16 29 2 1 21]56 dc[<03C00C30 1818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C70006000600 0E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F060000000000000000000 0060F0F060>4 18 4 0 12]58 dc[<60F0F0600000000000000000000060F0F070101010102020 4080>4 26 4 8 12]59 dc[<000600000006000000060000000F0000000F0000000F0000001780 0000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080 F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C 001F001E001F00FF80FFF0>28 29 1 0 31]65 dc[24 28 2 0 29]66 dc[< 001F808000E0618001801980070007800E0003801C0003801C0001803800018078000080780000 8070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00000007000 00807800008078000080380000801C0001001C0001000E000200070004000180080000E0300000 1FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F808000E0618001801980070007800E0003801C000380 1C00018038000180780000807800008070000080F0000000F0000000F0000000F0000000F00000 00F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C0007800E00 078007000B800180118000E06080001F8000>28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[28 28 2 0 32]75 dc[21 28 2 0 26]76 dc[33 28 2 0 38]77 dc[26 28 2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380 780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001 E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C000380 380000E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[28 29 2 1 31]82 dc[<07E0801C1980300580700380600180E00180E00080E00080E00080F00000 F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C0 8001C0C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01 C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000001F800003FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[28 29 1 1 31]86 dc[40 29 1 1 43]87 dc[<7FF0FFC00FC03E000780180003C0180003E01000 01E0200001F0600000F0400000788000007D8000003D0000001E0000001F0000000F0000000F80 00000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C0003003C000200 1E0006001F001F003F80FFC0FFF0>28 28 1 0 31]88 dc[7 41 4 10 12]91 dc[<08 081010202040404040808080808080B0B0F8F878783030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00 701C00601C00E01C40E01C40E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E000E000E000E000E0 0060007004300418080C3007C0>14 18 2 0 18]99 dc[<003F00000700000700000700000700 00070000070000070000070000070000070003E7000C1700180F00300700700700600700E00700 E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C 1803E0>15 18 1 0 18]101 dc[<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C3800 0C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C0 6001803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23] 104 dc[<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C 001C001C001C001C001C001C001C001C001C001C00FF80>9 29 1 0 12]105 dc[<00C001E001 E000C000000000000000000000000000000FE000E000E000E000E000E000E000E000E000E000E0 00E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E00>11 37 -3 8 13] 106 dc[19 29 1 0 22]107 dc[9 29 1 0 12]108 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0000E1C001806003003007003 80600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0 00>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F0070070070 0700E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C70000 0700000700000700000700000700000700000700003FE0>19 26 2 8 22]113 dc[13 18 1 0 16] 114 dc[<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F C0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00FFE01C001C001C001C001C 001C001C001C001C001C101C101C101C101C100C100E2003C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[ 19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[<7F8FF00F03800F030007020003840001C80001D80000F0 0000700000780000F800009C00010E00020E000607000403801E07C0FF0FF8>21 18 0 0 22] 120 dc[19 26 1 8 22]121 dc[<7FFC70386038407040F040E041C003C0038007000F040E04 1C043C0C380870087038FFF8>14 18 1 0 18]122 dc[41 1 0 -11 42]124 dc dfe /fn df[17 6 1 -11 23]45 dc[<000E 00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF00 3FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000 007F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E0000003C00E0 007000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF 80FFFFFF80FFFFFF80>27 39 3 0 34]50 dc[<007F800003FFF00007FFFC000F81FE001F00FF 003F80FF003F807F803F807F803F807F801F807F800F007F800000FF000000FF000000FE000001 FC000001F8000007F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000 003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F80 7C007F003F01FE001FFFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E00 00003E0000007E000000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E 0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C00 7E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE0000 00FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF8>29 39 2 0 34] 52 dc[<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00 000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F80FC000E00 3E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE 001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFF80003FFF000 00FF8000>27 39 3 0 34]53 dc[<000003800000000007C00000000007C0000000000FE00000 00000FE0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003F F80000000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF0000 0001C0FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E00 3FE000000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF800 00780007FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C000 00FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE>47 41 2 0 52]65 dc[<00 003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC0000 3F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003807F C0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF800000 0000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F 80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000 070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC00000 03FFFF000000003FF80000>41 41 4 0 50]67 dc[45 41 3 0 53]68 dc[22 41 2 0 26]73 dc[34 41 3 0 41] 76 dc[58 41 3 0 65]77 dc[47 41 3 0 54]78 dc[39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[<007F806003FFF0E007FFF9E00F807FE01F001F E03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC0 00007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000 007FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0 F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF000>29 41 4 0 38]83 dc[< FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC0000070003FC0000070003FC00 00070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC00000700 03FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC00 00070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC00000700 03FC0000070003FC0000070003FC0000070003FC0000070003FC0000070001FC00000E0001FE00 000E0000FE00001C00007E00001C00007F00003800003FC000F000000FF007E0000007FFFFC000 0001FFFF000000001FF80000>46 41 3 0 53]85 dc[68 41 1 0 71]87 dc[<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F000F80 3F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F 003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC 01FC03FC>30 27 2 0 33]97 dc[33 42 2 0 38]98 dc[<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F 000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F000000 7F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE000>26 27 2 0 31] 99 dc[<00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00001FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003 F8007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00 03F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007 C00FF80003F03BFF8000FFF3FF80003FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003 F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0 FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000 E00FC001C007E0038003F81F0000FFFE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00 FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FF FFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807F FF80>24 42 2 0 21]102 dc[33 42 3 0 38]104 dc[< 07000FC01FE03FE03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[31 42 2 0 36] 107 dc[15 42 3 0 20]108 dc[53 27 3 0 58]109 dc[33 27 3 0 38]110 dc[<003FE00001FFFC0003F07E000FC01F801F800FC03F800F E03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF00 07F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001 FFFC00003FE000>29 27 2 0 34]111 dc[24 27 2 0 28]114 dc[<03FE300FFFF01E 03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007FFF800 FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F00000F00000F00001F00003F00003F00007F0 001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FF C0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 27 1 0 36]118 dc[47 27 1 0 50]119 dc dfe /fo df[<70F8FCFC7404040404080810102040>6 15 4 10 14]44 dc[<70F8F8F870>5 5 4 0 14]46 dc[<008003800F80F3800380038003800380038003 800380038003800380038003800380038003800380038003800380038003800380038003800380 0380038007C0FFFE>15 33 4 0 24]49 dc[<03F0000C1C001007002007804003C04003C08003 E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780000700000E00001C000018 0000300000600000C0000180000100000200200400200800201800603000403FFFC07FFFC0FFFF C0>19 33 2 0 24]50 dc[<03F8000C1E001007002007804007C07807C07803C07807C03807C0 000780000780000700000F00000E0000380003F000001C00000F000007800007800003C00003C0 0003E02003E07003E0F803E0F803E0F003C04003C0400780200780100F000C1C0003F000>19 34 2 1 24]51 dc[<1000801E07001FFF001FFE001FF80013E0001000001000001000001000001000 0010000010F800130E001407001803801003800001C00001C00001E00001E00001E00001E07001 E0F001E0F001E0E001C08001C04003C04003802007001006000C1C0003F000>19 34 2 1 24] 53 dc[<4000006000007FFFE07FFFC07FFFC0400080C001008001008002008002000004000008 0000080000100000300000200000600000600000600000E00000C00000C00001C00001C00001C0 0001C00003C00003C00003C00003C00003C00003C00003C00003C000018000>19 35 3 1 24] 55 dc[<01F000060C000C0600180700380380700380700380F001C0F001C0F001C0F001E0F001 E0F001E0F001E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001C00001C00001 C0000380000380300300780700780600700C002018001030000FC000>19 34 2 1 24]57 dc[< 0001800000018000000180000003C0000003C0000003C0000005E0000005E000000DF0000008F0 000008F0000010F800001078000010780000203C0000203C0000203C0000401E0000401E000040 1E0000800F0000800F0000FFFF000100078001000780030007C0020003C0020003C0040003E004 0001E0040001E00C0000F00C0000F03E0001F8FF800FFF>32 35 2 0 37]65 dc[29 34 2 0 35]66 dc[<0007E0100038183000E0063001C0 0170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C0000107800001078 000010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800000078000000 780000107C0000103C0000103C0000101C0000201E0000200E000040070000400380008001C001 0000E0020000381C000007E000>28 36 3 1 35]67 dc[ 40 34 2 0 45]77 dc[32 34 2 0 37]78 dc[ 27 34 2 0 33]80 dc[<03F0200C0C601802 603001E07000E0600060E00060E00060E00020E00020E00020F00000F000007800007F00003FF0 001FFE000FFF0003FF80003FC00007E00001E00000F00000F00000708000708000708000708000 70C00060C00060E000C0F000C0C80180C6070081FC00>20 36 3 1 27]83 dc[32 35 2 1 37]85 dc[<0FE0001838003C0C003C0E 0018070000070000070000070000FF0007C7001E07003C0700780700700700F00708F00708F007 08F00F087817083C23900FC1E0>21 21 2 0 24]97 dc[<0E0000FE00001E00000E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F000E61C00E80600F0030 0E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E0038 0F00700C80600C41C0083F00>23 35 1 0 27]98 dc[<01FE000703000C07801C078038030078 0000700000F00000F00000F00000F00000F00000F00000F000007000007800403800401C00800C 010007060001F800>18 21 2 0 22]99 dc[<0000E0000FE00001E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800E07800 E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02 E0070CF001F0FE>23 35 2 0 27]100 dc[<01FC000707000C03801C01C03801C07801E07000E0 F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E0080070300 00FC00>19 21 1 0 22]101 dc[<003C00C6018F038F030F070007000700070007000700070007 000700FFF807000700070007000700070007000700070007000700070007000700070007000700 070007807FF8>16 35 0 0 15]102 dc[<00007001F198071E180E0E181C07001C07003C07803C 07803C07803C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000F FFC00FFFE03800F0600030400018C00018C00018C000186000306000303800E00E038003FE00> 21 33 1 11 24]103 dc[<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E 00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF> 24 35 1 0 27]104 dc[<1C001E003E001E001C00000000000000000000000000000000000E00 FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FF C0>10 34 1 0 14]105 dc[<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E00FFE0>11 35 1 0 14]108 dc[<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00 E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038 00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0FFE3 FF8FFE>39 21 1 0 42]109 dc[<0E1F80FE60C01E80E00F00700F00700E00700E00700E00700E 00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF> 24 21 1 0 27]110 dc[<01FC000707000C01801800C03800E0700070700070F00078F00078F0 0078F00078F00078F00078F000787000707800F03800E01C01C00E038007070001FC00>21 21 1 0 24]111 dc[<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E001E0E001E0E00 1E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F000E00000E00000E00 000E00000E00000E00000E00000E00000E0000FFE000>23 31 1 10 27]112 dc[<0E3CFE461E 8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF0>16 21 1 0 19]114 dc[<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C 800CC00CC008E018D0308FC0>14 21 2 0 19]115 dc[<02000200020002000600060006000E00 1E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E040E 040708030801F0>14 31 1 0 19]116 dc[<0E0070FE07F01E00F00E00700E00700E00700E0070 0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F0060170038278 00FC7F>24 21 1 0 27]117 dc[ 23 21 1 0 26]118 dc[23 31 1 10 26]121 dc dfe /fp df[53 49 4 0 61]77 dc[42 49 4 0 50]78 dc[37 49 4 0 45]80 dc[<00FE00000303C0000C00E000100070001000 38003C003C003E001C003E001E003E001E0008001E0000001E0000001E0000001E00000FFE0000 FC1E0003E01E000F801E001F001E003E001E003C001E007C001E00F8001E04F8001E04F8001E04 F8003E04F8003E0478003E047C005E043E008F080F0307F003FC03E0>30 31 3 0 33]97 dc[< 003F8000E0600380180700040F00041E001E1C003E3C003E7C003E7C0008780000F80000F80000 F80000F80000F80000F80000F80000F80000F800007800007C00007C00003C00011E00011E0002 0F000207000403801800E060003F80>24 31 3 0 29]99 dc[<003F800000E0E0000380380007 003C000E001E001E001E001C000F003C000F007C000F0078000F8078000780F8000780F8000780 FFFFFF80F8000000F8000000F8000000F8000000F8000000F8000000780000007C0000003C0000 003C0000801E0000800E0001000F0002000780020001C00C0000F03000001FC000>25 31 2 0 29]101 dc[<0007E0001C1000383800707C00E07C01E07C01C03803C00003C00003C00003C000 03C00003C00003C00003C00003C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C000 03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000 03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00007E0007FFF007FFF00 >22 50 1 0 20]102 dc[<000000F0007F030801C1C41C0380E81C070070080F0078001E003C00 1E003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C001E003C000F0078 00070070000780E00009C1C000087F000018000000180000001800000018000000180000001C00 00000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000F070000070E0000038E0 000038E0000038E0000038E00000387000007070000070380000E01C0001C00700070001C01C00 003FE000>30 47 2 15 33]103 dc[<07000F801F801F800F8007000000000000000000000000 00000000000000000000000780FF80FF800F800780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800FC0FFF8FFF8>13 48 2 0 18]105 dc[<07800000FF800000FF8000000F8000000780000007800000078000000780000007 800000078000000780000007800000078000000780000007800000078000000780000007800000 0780000007801FFC07801FFC078007E00780078007800600078004000780080007801000078060 0007808000078100000783800007878000078FC0000793C00007A1E00007C1F0000780F0000780 780007807C0007803C0007803E0007801F0007800F0007800F80078007C0078003C0078003E00F C007F8FFFC0FFFFFFC0FFF>32 50 2 0 35]107 dc[<0780FF80FF800F80078007800780078007 800780078007800780078007800780078007800780078007800780078007800780078007800780 07800780078007800780078007800780078007800780078007800780078007800780078007800F C0FFFCFFFC>14 50 2 0 18]108 dc[<0780FE001FC000FF83078060F000FF8C03C18078000F90 01E2003C0007A001E4003C0007A000F4001E0007C000F8001E0007C000F8001E00078000F0001E 00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000 F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00 078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0 001E00078000F0001E00078000F0001E000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0> 52 31 2 0 56]109 dc[<0780FE0000FF83078000FF8C03C0000F9001E00007A001E00007A000 F00007C000F00007C000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001F800 FFFC1FFF80FFFC1FFF80>33 31 2 0 37]110 dc[<001FC00000F0780001C01C00070007000F00 07801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F80000F8F8 0000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E0 1E0003C01E0003C00F00078007800F0001C01C0000F07800001FC000>29 31 2 0 33]111 dc[< 0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C000078000078000078000078000 078000078000078000078000078000078000078000078000078000078000078000078000078000 0780000780000FC000FFFE00FFFE00>22 31 2 0 25]114 dc[<01FC100E03301800F030007060 0030E00030E00010E00010E00010F00010F800007E00003FF0001FFF000FFFC003FFE0003FF000 01F80000F880003C80003C80001CC0001CC0001CE0001CE00018F00038F00030CC0060C301C080 FE00>22 31 2 0 26]115 dc[<00400000400000400000400000400000C00000C00000C00001C0 0001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C00003C00003C00003C0 0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C01003C01003C01003C0 1003C01003C01003C01003C01001C02001E02000E0400078C0001F00>20 44 1 0 25]116 dc[< FFF07FF80FFCFFF07FF80FFC0FC007C003F00F8003C001C0078003C00080078003C0008003C003 E0010003C003E0010003C007E0010001E004F0020001E004F0020001E00870020000F008780400 00F00878040000F0103804000078103C08000078103C08000078201C0800003C201E1000003C20 1E1000003C400E1000001E400F2000001E400F2000001E80072000000F8007C000000F8007C000 000F0003C000000700038000000700038000000600018000000200010000>46 31 1 0 48]119 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 295 328 a fp(Net)o(w)n(orking)21 b(P)n(erformance)h(for)f(Microk)o(ernel\ s)756 448 y fo(Chris)c(Maeda)705 506 y(Brian)f(N.)g(Bershad)595 623 y(Sc)o (ho)q(ol)h(of)f(Computer)f(Science)601 681 y(Carnegie)h(Mellon)g(Univ)m(ersit) n(y)661 739 y(Pittsburgh,)h(P)l(A)f(15213)729 837 y(Marc)n(h)g(17,)h(1992)0 992 y fn(Abstract)0 1087 y fm(P)o(erformance)22 b(measuremen)n(ts)i(of)e(net) o(w)o(ork)h(proto-)0 1136 y(cols)17 b(in)f(microk)m(ernel)i(systems)f(ha)n (v)o(e)g(b)q(een)h(discour-)0 1186 y(aging;)11 b(t)o(ypically)g(2)g(to)h(5)g (times)f(slo)n(w)o(er)i(than)f(compa-)0 1236 y(rable)18 b(macrok)m(ernel)g (systems.)30 b(This)17 b(disparit)o(y)g(has)0 1286 y(led)f(man)n(y)g(to)g(con\ clude)h(that)f(the)h(microk)n(ernel)g(ap-)0 1336 y(proac)o(h,)h(where)h(proto) q(cols)f(reside)h(at)f(user-lev)o(el,)g(is)0 1385 y(inherently)i(\015a)o(w)o (ed)h(and)g(that)g(proto)r(cols)g(m)m(ust)h(b)q(e)0 1435 y(placed)e(in)g(the) h(k)o(ernel)g(to)f(get)g(reasonable)h(p)q(erfor-)0 1485 y(mance.)c(W)m(e)d (sho)o(w)g(that)g(user-level)f(netw)o(ork)h(proto-)0 1535 y(cols)21 b(ha)n (v)o(e)g(p)q(erformed)g(p)q(o)q(orly)f(b)q(ecause)i(they)f(rely)0 1585 y(on)g (co)q(de)h(designed)g(to)f(run)h(in)f(a)g(k)o(ernel)h(en)o(viron-)0 1634 y (men)n(t.)17 b(As)10 b(a)f(result,)i(they)f(mak)n(e)g(assumptions)e(ab)q(out) 0 1684 y(the)18 b(costs)g(of)e(primitiv)l(e)i(proto)q(col)e(op)q(erations)i (suc)o(h)0 1734 y(as)23 b(scheduling,)h(preemption,)h(and)e(data)f(transfer)0 1784 y(whic)o(h)c(can)g(require)g(substantial)f(o)n(v)o(erhead)i(to)e(sat-)0 1834 y(isfy)d(at)g(user)h(lev)o(el.)20 b(Goo)q(d)14 b(user-level)g(proto)r (col)g(p)q(er-)0 1884 y(formance)f(can)h(b)r(e)g(ac)o(hiev)o(ed)h(b)o(y)f(res\ tructuring)h(pro-)0 1933 y(to)q(col)j(servers)i(to)e(tak)o(e)h(adv)m(an)o(tag\ e)f(of)g(microk)n(ernel)0 1983 y(facilities,)12 b(rather)j(than)f(ignore)g (them.)0 2132 y fn(1)69 b(In)n(tro)s(duction)0 2227 y fm(Microk)o(ernel)22 b (op)q(erating)f(systems,)i(such)e(as)g(Mac)o(h)0 2277 y(3.0)i([Accetta)h(et)g (al.)46 b(86],)25 b(pro)o(vide)e(supp)r(ort)h(for)0 2327 y(scheduling,)c(virt\ ual)f(memory)-6 b(,)21 b(and)f(cross-address)0 2376 y(space)f(IPC.)e(Higher)h (lev)n(el)g(services,)i(suc)o(h)e(as)g(Unix)0 2426 y(em)n(ulation)13 b(and)g (netw)o(ork)g(comm)l(unication,)g(are)h(im-)0 2476 y(plemen)n(ted)24 b(in)f (user-level)h(serv)o(ers.)48 b(In)24 b(con)o(trast,)0 2526 y(\\macrok)m(ernel\ ")16 b(systems,)f(such)g(as)g(Sprite)g([Ouster-)0 2576 y(hout)j(et)g(al.)28 b (88])16 b(and)i(Berkeley's)f(4.3BSD)g([Le\017er)0 2625 y(et)i(al.)32 b(89],) 18 b(pro)o(vide)h(complete)f(op)q(erating)h(system)0 2675 y(functionalit)n (y)13 b(within)g(the)i(k)o(ernel.)42 2727 y(Net)o(w)o(ork)f(proto)q(cols)h (can)f(run)h(in)f(k)o(ernel)h(space)g(or)924 992 y(user)i(space.)25 b(Macrok) o(ernel)16 b(systems)h(put)f(proto)q(cols)924 1041 y(in)9 b(the)i(k)o(ernel)g (for)f(p)q(erformance)g(reasons;)i(input)e(pro-)924 1091 y(cessing)j(can)g (b)q(e)g(done)g(at)g(in)n(terrupt)h(lev)o(el,)e(whic)o(h)g(re-)924 1141 y(duc\ es)17 b(latency)m(,)g(and)f(pac)o(k)o(ets)h(need)g(only)f(b)q(e)h(trans-)924 1191 y(ferred)g(from)d(the)i(k)o(ernel)g(to)g(the)g(receiver's)h(address)924 1241 y(space,)d(whic)o(h)g(reduces)h(data)f(cop)o(ying.)j(In)d(con)o(trast,) 924 1290 y(microk)m(ernel)j(systems)f(are)h(more)e(lik)n(ely)h(to)g(put)g(the) 924 1340 y(proto)q(cols)f(in)g(user)h(space)g(for)f(\015exibilit)m(y;)g(user-\ level)924 1390 y(co)q(de)i(is)f(easier)h(to)f(debug)h(and)f(modify)-5 b(.)26 b (Moreo)o(v)o(er,)924 1440 y(microk)m(ernels)15 b(generally)f(relegate)i(the)f (proto)q(cols)f(to)924 1490 y(a)19 b(sp)r(eci\014c)h(user)h(address)g(space)g (and)e(require)i(pro-)924 1540 y(to)q(col)g(clien)o(ts)h(to)f(indirect)h(thro\ ugh)g(that)g(address)924 1589 y(space.)965 1660 y(Critics)d(of)f(microk)m(ern\ el)i(op)q(erating)e(systems)h(ar-)924 1710 y(gue)11 b(that)g(importan)o(t)g (system)g(services,)i(such)e(as)g(net-)924 1760 y(w)n(ork)25 b(comm)l(unicati\ on,)h(ha)n(v)o(e)f(higher)f(latency)h(or)924 1810 y(lo)n(w)o(er)e(throughput) h(than)f(in)g(monolithic)e(k)n(ernels.)924 1859 y(F)l(or)g(example,)g(in)f (UX,)h(CMU's)g(single-task)f(Unix)924 1909 y(serv)o(er)14 b(for)f(Mac)o(h)g (3.0)g([Golub)e(et)j(al.)j(90],)12 b(the)i(round)924 1959 y(trip)h(latency)h (for)f(UDP)h(datagrams)e(is)h(ab)q(out)h(three)924 2009 y(times)21 b(greater) j(than)f(for)f(the)i(Mac)o(h)f(2.5)f(system,)924 2059 y(where)15 b(all)d(Unix) i(functionalit)m(y)g(is)g(in)f(the)i(k)o(ernel.)965 2130 y(In)k(this)f(pap)q (er)i(w)n(e)f(sho)o(w)g(that)g(the)g fl(structur)m(e)g fm(of)924 2179 y(a)14 b (proto)q(col)g(implemen)l(tation)g(and)g(not)g(the)h fl(lo)n(c)n(ation)924 2229 y fm(is)e(the)h(primary)d(determinan)o(t)i(of)g(p)q(erformance.)k(W)m (e)924 2279 y(supp)q(ort)i(our)f(p)q(osition)f(b)o(y)h(measuring)f(the)i(p)q (erfor-)924 2329 y(mance)i(of)h(a)h(simple)e(proto)q(col,)j(UDP)l(,)e(in)g (several)924 2379 y(di\013eren)o(t)h(v)o(ersions)h(of)e(the)i(Mac)o(h)f(op)q (erating)f(sys-)924 2428 y(tem.)36 b(Although)20 b(UDP)h(p)q(erformance)f(for) g(Mac)o(h's)924 2478 y(single)f(server)h(Unix)f(system)h(is)f(p)r(o)q(or,)h (the)h(p)q(erfor-)924 2528 y(mance)14 b(problems)h(lie)g(in)g(the)i(Unix)e (server,)h(not)f(the)924 2578 y(microk)m(ernel.)j(The)c(goal)e(of)g(the)i(Uni\ x)e(server)i(imple-)924 2628 y(men)n(tation)g(w)o(as)i(to)f(get)h(the)g(co)q (de)g(w)o(orking)f(quic)o(kly)924 2677 y(and)e(then,)h(where)h(necessary)n (,)e(to)h(get)g(quic)n(kly)f(w)o(ork-)924 2727 y(ing)g(co)q(de.)19 b(This)14 b (approac)o(h)f(optimizes)g(programmer)p eop %%Page: 2 2 bop 0 195 a fm(time,)14 b(since)i(it)f(is)h(p)q(ossible)g(to)f(build)g(a)g (Unix)g(server)0 245 y(b)o(y)h(taking)f(an)h(in-k)o(ernel)h(v)n(ersion)g(of)f (Unix)g(and)g(ap-)0 295 y(plying)d(\\wrapp)q(er")h(co)q(de)h(so)f(it)f(runs)i (at)f(user)h(lev)n(el.)42 348 y(T)l(o)c(justify)h(our)f(argumen)n(t,)h(w)o (e)g(sho)o(w)f(that)h(a)g(care-)0 398 y(fully)f(implemen)l(ted)i(user-level)g (proto)q(col)f(server)h(can)0 448 y(p)q(erform)20 b(as)h(w)n(ell)g(as)f(an)h (in-k)n(ernel)g(v)o(ersion.)39 b(Our)0 498 y(\\pro)q(of)s(")14 b(consists)h (of)f(a)h(reimplemen)l(tation)f(of)g(UDP)0 547 y(whic)o(h)g(does)h(not)e(assu\ me)h(that)f(it)h(is)f(running)h(in)f(the)0 597 y(\\Unix)j(k)o(ernel")i(but)f (is)g(instead)g(optimized)f(for)h(the)0 647 y(microk)m(ernel)e(en)o(vironmen) n(t)f(of)f(Mac)o(h)h(3.0.)0 804 y fn(2)69 b(Net)n(w)n(ork)122 b(P)n(erformanc\ e)103 879 y(Measuremen)n(ts)0 976 y fm(Based)15 b(on)f(the)h(p)q(erformance)f (of)g(net)o(w)o(ork)g(proto)q(cols)0 1026 y(in)h(Mac)o(h)g(3.0,)g(it)g(w)n (ould)g(b)q(e)h(easy)g(to)f(conclude)h(that)0 1076 y(putting)11 b(proto)q(col\ s)g(at)g(user-level)g(is)g(a)f(bad)h(idea.)17 b(T)m(a-)0 1126 y(ble)10 b(1)g (sho)o(ws)h(the)f(a)o(v)o(erage)g(round)h(trip)f(time)f(for)h(small)0 1176 y (UDP)17 b(pac)o(k)o(ets)h(\(1)f(data)g(b)o(yte)h(plus)f(headers\))i(using)0 1226 y(an)h(in-k)n(ernel)i(and)e(out-of-k)n(ernel)h(proto)q(col)f(imple-)0 1275 y(men)n(tation.)h(All)14 b(times)g(w)o(ere)i(collected)f(b)o(y)g(sending) 0 1325 y(1000)f(pack)n(ets)j(bac)o(k)e(and)g(forth)h(b)q(et)o(w)o(een)g(t)o (w)o(o)f(user-)0 1375 y(lev)o(el)21 b(pro)q(cesses)i(running)e(on)g(DECstatio\ n)f(2100's)0 1425 y(connected)f(b)o(y)d(a)h(10Mb/s)g(ethernet.)29 b(The)17 b (data)g(in)0 1475 y(the)h(tables)h(represen)q(t)f(the)g(mean)f(v)n(alues)h (of)f(m)m(ulti-)0 1524 y(ple)d(1000)f(pac)o(k)o(et)h(trials.)k(The)c(v)n(aria\ nce)g(in)f(all)g(cases)0 1574 y(w)o(as)f(b)q(etw)o(een)h(5)f(and)g(10)f(p)q (ercen)q(t)h(of)g(the)h(mean.)j(The)0 1624 y(DECstation)k(2100)g(uses)h(a)f (MIPS)h(R2000)e(pro)q(ces-)0 1674 y(sor)d(running)f(at)g(12Mhz.)22 b(Our)16 b (mac)n(hines)g(eac)o(h)f(had)0 1724 y(16MB)f(of)f(RAM.)42 1777 y(In)i(Mac)o (h)h(2.5,)f(UDP)g(is)h(in)f(the)i(k)n(ernel.)24 b(In)16 b(Mac)o(h)0 1827 y (3.0,)f(UDP)h(is)g(in)f(the)h(Unix)g(server)g(but)g(uses)h(nearly)0 1877 y (the)e(same)e(co)q(de)i(as)f(in)f(Mac)o(h)h(2.5.)k(The)c(Unix)g(server)0 1927 y(describ)r(ed)22 b(in)f(T)m(able)g(1)g(uses)i(Mac)o(h)e(IPC)h(to)f(send)0 1976 y(outgoing)11 b(pac)o(k)o(ets)i(to)f(an)f(in-k)o(ernel)h(ethernet)j(devi\ ce)0 2026 y(driv)o(er.)35 b(Incoming)18 b(pac)o(k)o(ets)i(are)g(read)g(b)o (y)g(the)g(de-)0 2076 y(vice)12 b(driv)n(er)h(and)e(then)h(dem)n(ultiplexed)g (to)f(user)i(tasks)0 2126 y(\(normally)k(just)j(the)g(Unix)f(serv)o(er\))i (b)o(y)e(the)h fl(p)n(acket)0 2176 y(\014lter)c fm([Mogul)g(et)i(al.)26 b(87]\ .)h(Once)18 b(they)g(are)f(dem)n(ul-)0 2225 y(tiplexed,)f(these)i(incoming)c (pac)o(k)o(ets)j(are)f(forw)o(arded)0 2275 y(via)j(Mac)o(h)h(IPC)h(to)f(a)f (Unix)h(server)h(thread)f(whic)o(h)0 2325 y(do)q(es)15 b(subsequent)f(proto)q (col)g(pro)q(cessing.)42 2379 y(The)20 b(adv)n(an)o(tage)g(of)g(the)h(IPC)g (in)n(terface)h(is)e(that)0 2428 y(it)31 b(allo)m(ws)h(net)o(w)o(ork-transpar\ ent)f(device)h(access;)0 2478 y(clien)o(ts)17 b(of)f(a)g(device)h(ma)n(y)f (b)q(e)h(located)h(on)e(no)q(des)h(to)0 2528 y(whic)o(h)f(the)g(device)h(is)f (not)g(ph)o(ysically)f(attac)o(hed)h(\(as)0 2578 y(migh)m(t)g(b)r(e)g(the)h (case)h(on)e(a)g(m)n(ulticomputer)f(lik)n(e)i(the)0 2628 y(T)m(ouc)o(hstone\)\ .)27 b(The)18 b(disadv)m(an)o(tage)e(of)h(the)g(IPC)g(in-)0 2677 y(terface)23 b(is)e(that)h(outgoing)f(data)g(m)m(ust)i(b)q(e)f(copied)0 2727 y(in)n(to)17 b (a)e(message)h(bu\013er)i(\(or)e(manipulated)e(through)1052 227 y fk(UDP)f (Implementation)1454 241 y 2 46 v 1479 227 a(Time)h(\(ms\))1027 242 y 655 2 v 1052 274 a(Mac)o(h)g(2.5)e(kernel)1454 288 y 2 46 v 1607 274 a(4.8)1052 320 y (Unix)i(serv)o(er)f(\(IPC,VM\))1454 334 y 2 46 v 1588 320 a(19.5)924 408 y fm (T)l(able)19 b(1:)28 b(UDP)19 b(Round)g(T)l(rip)g(Times)f(for)h(V)l(arious) 924 458 y(Systems.)e(This)c(is)g(what)g(y)o(ou)g(w)o(ould)f(observe)h(if)f (y)o(ou)924 508 y(ran)17 b(the)i(Mac)o(h)f(2.5)e(macrok)n(ernel)i(\(\014rst)h (line\),)f(and)924 558 y(Mac)o(h)i(3.0)g(v)n(ersion)h(MK65)f(with)g(the)h(Uni\ x)f(single)924 607 y(serv)o(er)h(v)o(ersion)f(UX29)g(\(second)h(line\).)36 b (The)20 b(Unix)924 657 y(serv)o(er)i(uses)g(Mach)f(IPC)g(and)g(VM)g(op)q(erat\ ions)g(to)924 707 y(comm)l(unicate)14 b(with)g(an)f(in-k)o(ernel)h(device)h (driv)n(er.)924 875 y(VM)21 b(op)q(erations\),)j(and)d(that)h(there)g(is)g (additional)924 925 y(IPC)g(latency)g(b)q(etw)n(een)h(the)g(proto)q(col)f(ser\ v)o(er)h(and)924 974 y(the)e(device.)40 b(The)21 b(Unix)f(server)i(sends)g (eac)o(h)f(out-)924 1024 y(b)q(ound)d(pack)n(et)i(to)e(the)i(ethernet)g(devic\ e)g(driv)n(er)g(as)924 1074 y(an)13 b(IPC)g(message)g(with)g(\\out-of-band")f (data)h(whic)o(h)924 1124 y(allo)m(ws)22 b(the)g(IPC)g(system)g(to)f(map)f (the)i(data)g(in)n(to)924 1174 y(the)15 b(receiver's)h(\(here,)h(the)f(k)n (ernel's\))g(address)h(space)924 1223 y(rather)12 b(than)f(cop)o(y)g(it.)16 b (In)11 b(Mach,)g(ho)n(w)o(ev)o(er,)h(it)f(can)g(b)r(e)924 1273 y(more)h(e\016\ cien)o(t)h(to)g(cop)o(y)l(,)g(rather)h(than)e(remap,)g(small)924 1323 y(amoun) m(ts)i(of)f(data)h(b)q(etw)n(een)h(address)g(spaces.)924 1443 y fj(2.1)55 b (Some)17 b(Easy)i(Impro)m(v)n(emen)l(ts)924 1521 y fm(W)l(e)14 b(can)g(reduce) i(the)f(latency)f(of)f(a)h(round)g(trip)g(mes-)924 1571 y(sage)e(b)o(y)f(elim\ inating)e(the)k(VM)f(and)g(IPC)g(op)q(erations)924 1621 y(on)d(the)h(outgoing) f(path.)16 b(VM)10 b(o)o(v)n(erhead)h(can)f(b)q(e)g(elim-)924 1671 y(inated)i (b)o(y)g(sending)h(the)g(data)f(\\in-band")f(in)h(an)g(IPC)924 1721 y(message) g(to)h(the)h(device)f(driv)o(er.)18 b(IPC)13 b(o)o(v)o(erhead)h(can)924 1770 y (b)q(e)g(eliminated)e(b)o(y)h(using)g(a)h(system)f(call)g(to)h(trap)g(di-)924 1820 y(rectly)21 b(in)n(to)f(the)h(k)o(ernel)g(device)g(driv)n(er)g(instead)g (of)924 1870 y(using)14 b(Mac)o(h)h(IPC.)1232 1855 y fi(1)1265 1870 y fm(The) g(\014rst)h(and)f(second)h(ro)n(ws)g(of)924 1920 y(T)l(able)d(2)f(sho)o(w)h (the)g(impro)m(v)o(emen)n(t)g(in)f(latency)h(whic)o(h)924 1970 y(comes)k(b)o (y)h(\014rst)h(eliminating)14 b(the)19 b(VM)f(op)q(erations,)924 2020 y(and) 10 b(then)h(the)g(VM)f(op)q(erations)h(in)f(conjunction)g(with)924 2069 y(the) k(IPC.)965 2120 y(A)f(more)e(aggressiv)o(e)i(approac)o(h)f(is)h(to)f fl(map)h fm(the)g(de-)924 2170 y(vice)18 b(directly)g(in)o(to)g(the)g(proto)q(col)g (server's)h(address)924 2220 y(space.)f(This)c(technique,)e(describ)s(ed)i (in)e([F)m(orin)g(et)i(al.)924 2269 y(91],)d(allo)n(ws)i(the)h(proto)q(col)f (server)g(to)g(also)g(act)g(as)g(the)924 2319 y(net)o(w)o(ork)18 b(device)h (driv)o(er,)h(con)o(trolling)d(the)i(net)o(w)o(ork)924 2369 y(in)n(terface)12 b(directly)m(,)f(and)g(a)o(v)o(oiding)e(the)j(cop)o(y)f(and)g(the)924 2418 y 345 2 v 970 2479 a fh(1)987 2491 y fg(A)18 b(user-to-k)o(erne)o(l)d(RPC)j(for) e(Mac)o(h)h(3.0)g(on)f(the)h(DEC-)924 2530 y(station)11 b(2100)h(tak)o(es)g (b)q(et)o(w)o(een)f(100)h(and)g(300)h ff(\026)p fg(secs,)f(dep)q(end-)924 2570 y(ing)g(on)h(cac)o(he)f(e\013ects)g([Bershad)g(et)h(al.)20 b(91],)13 b(wherea\ s)f(a)i(sys-)924 2609 y(tem)i(call)g(tak)o(es)h(only)f(ab)q(out)g(30)g ff(\ \026)p fg(secs.)33 b(Little)16 b(e\013ort)g(has)924 2648 y(b)q(een)9 b(sp)q (en)o(t)g(trying)g(to)g(reduce)g(the)h(latency)e(of)i(user-to-k)o(ern)o(el) 924 2688 y(RPC,)h(whereas)f(signi\014can)o(t)f(e\013ort)g(has)i(gone)f(to)o (w)o(ards)g(reduc-)924 2727 y(ing)g(user-to-user)f(RPC)j(latency)e([Dra)o(v)o (es)g(et)h(al.)k(91].)p eop %%Page: 3 3 bop 25 231 a fk(UDP)13 b(Implementation)677 245 y 2 46 v 703 231 a(Time)h (\(ms\))0 247 y 906 2 v 25 279 a(Unix)g(serv)o(er)f(\(IPC,)f(no)i(VM\))677 292 y 2 46 v 812 279 a(14.3)25 324 y(Unix)g(serv)o(er)f(\(syscall,)i(no)e(IPC,)f (no)h(VM\))677 338 y 2 46 v 812 324 a(13.6)25 370 y(Unix)h(serv)o(er)f(\(mapp) r(ed)g(driver\))677 384 y 2 46 v 812 370 a(13.1)0 458 y fm(T)m(able)k(2:)26 b (Second)18 b(Cut)g(UDP)g(Round)f(T)m(rip)g(Times)0 508 y(for)i(V)l(arious)g (Systems.)33 b(This)18 b(is)h(what)g(y)n(ou)g(w)o(ould)0 558 y(observe)13 b (if)f(y)n(ou)h(ran)f(Mach)g(3.0)g(with)g(an)h(exp)q(erimen-)0 607 y(tal)g(v)o (ersion)g(of)g(UX29)g(\(\014rst)i(ro)n(w\),)e(or)h(if)e(y)o(ou)h(extend)0 657 y(the)j(k)n(ernel)g(system)f(call)f(in)n(terface)i(to)f(include)g(a)g(di-)0 707 y(rect)g fe(device)r 14 2 v 13 w(write)e fm(system)g(call)h(\(second)h (ro)o(w\),)e(or)0 757 y(if)c(y)o(ou)g(enable)h(mapped)g(ethernet)i(supp)r(ort) d(in)h(a)f(stan-)0 807 y(dard)14 b(system)g(\(third)g(ro)o(w\).)0 982 y(IPC)j (to)g(the)h(in-k)n(ernel)f(device)h(driv)o(er.)28 b(The)17 b(round)0 1032 y (trip)e(UDP)f(latency)h(for)f(this)h(approac)o(h)g(is)f(sho)o(wn)h(in)0 1082 y (the)c(third)g(ro)o(w)g(of)f(T)l(able)h(2.)17 b(The)11 b(6)f(ms)g(impro)m(v)o (emen)n(t)0 1132 y(is)j(b)r(ecause)h(a)g(user-to-k)o(ernel)g(IPC)g(and)f(seve\ ral)g(VM)0 1181 y(op)q(erations)h(ha)o(v)o(e)g(b)q(een)h(a)n(v)o(oided.)0 1297 y fj(2.2)56 b(What)68 b(Do)h(The)f(Num)m(b)r(ers)128 1356 y(Mean?)0 1432 y fm (Although)16 b(the)h(times)f(in)g(T)m(able)g(2)h(are)g(b)q(etter)h(than)0 1482 y(the)j(Mac)o(h)g(3.0)e(times)g(in)h(T)m(able)g(1,)h(they)g(are)g(still)0 1532 y(w)o(orse)g(than)f(Mac)o(h)g(2.5.)36 b(It)20 b(is)g(tempting)f(to)h(con-)0 1582 y(clude)12 b(that)f(the)h(net)o(w)o(ork)f(p)q(erformance)g(in)g(Mac)o (h)g(3.0)0 1631 y(is)g(slo)o(w)o(er)h(b)q(ecause)h(the)f(proto)q(cols)f(are)h (out)g(of)e(k)o(ernel.)0 1681 y(Since)19 b(the)g(actual)g(proto)q(col)f(co)q (de)i(whic)n(h)f(executes)0 1731 y(in)f(the)h(t)o(w)n(o)f(systems)h(is)f(the) g(same,)g(the)h(slo)o(wdo)n(wn)0 1781 y(m)m(ust)e(b)q(e)g(caused)g(b)o(y)e (the)i(extra)g(in)n(terpro)r(cess)h(com-)0 1831 y(m)m(unication)d(costs)i(ass\ o)r(ciated)f(with)f(the)h(microk)n(er-)0 1880 y(nel)j(arc)o(hitecture.)35 b (Ho)o(w)o(ev)o(er,)20 b(a)f(few)g(observ)o(ations)0 1930 y(ab)q(out)13 b(the) g(cost)h(of)f(crossing)g(address)h(space)g(b)r(ound-)0 1980 y(aries)20 b(b)q (et)o(w)o(een)g(the)g(Unix)f(server)h(and)f(the)h(k)o(ernel,)0 2030 y(and)d (b)r(et)o(w)o(een)h(the)h(Unix)e(server)h(and)f(the)h(proto)r(col)0 2080 y (clien)o(ts)c(sho)o(w)g(that)g(this)g(conclusion)g(can't)g(b)q(e)g(righ)o(t.) 42 2130 y(On)21 b(a)f(DECstation)h(2100,)g(it)f(tak)o(es)h(ab)q(out)g(490)0 2179 y fd(\026)p fm(secs)h(to)f(access)h(the)f(Unix)f(server's)h(so)r(c)o(k)o (et)g(la)n(y)o(er)0 2229 y(from)c(a)i(user)h(program.)31 b(This)19 b(path)g (includes)g(one)0 2279 y(pass)e(through)f(the)h(system)f(call)g(em)n(ulation) f(library)0 2329 y(\(ab)q(out)d(280)f fd(\026)p fm(secs\),)j(whic)o(h)e(trans\ lates)h(system)f(calls)0 2379 y(in)n(to)i(IPC)h(messages,)e(and)h(one)g(IPC)h (round)f(trip)g(b)q(e-)0 2428 y(t)o(w)o(een)h(the)f(user)h(task)f(and)g(the)g (Unix)g(server)g(\(ab)q(out)0 2478 y(180)d fd(\026)p fm(secs\).)19 b(The)12 b (IPC)f(time)g(can)g(b)r(e)h(further)g(brok)o(en)0 2528 y(do)o(wn)h(in)o(to)g (140)g fd(\026)p fm(secs)j(for)d(the)h(actual)g(RPC)f(and)h(40)0 2578 y fd (\026)p fm(secs)21 b(for)e(the)h(stub)g(co)q(de.)35 b(In)19 b(con)o(trast,)i (it)e(tak)o(es)0 2628 y(ab)q(out)i(60)g fd(\026)p fm(secs)i(to)e(access)i(the) f(in-k)n(ernel)g(so)r(c)o(k)o(et)0 2677 y(la)n(y)o(er)14 b(using)g(a)g(system) f(call)g(in)h(Mac)o(h)g(2.5.)42 2727 y(Eac)o(h)e(UDP)g(round)g(trip)g(include\ s)h(four)e(so)r(c)o(k)o(et)h(ac-)924 195 y(cesses)21 b(\(a)d(read)h(and)f(wri\ te)h(on)f(each)g(host\).)33 b(If)18 b(w)o(e)924 245 y(assume)12 b(the)h(w)o (orst)g(case)h(where)g(there)g(is)e(no)h(o)n(v)o(erlap)924 295 y(of)e(reads)i (and)f(writes)h(on)f(the)h(t)o(w)o(o)f(hosts,)g(ha)o(ving)f(the)924 345 y(so) q(c)o(k)o(ets)17 b(in)f(the)h(Unix)e(server)i(should)f(add)g(no)g(more)924 394 y(than)j(2)f(ms)g(\(4)h(*)g(\(490)f(-)h(60\))f fd(\026)p fm(secs\))j(to)e(the) h(total)924 444 y(round)14 b(trip)f(time.)965 495 y(It)21 b(tak)o(es)h(ab)q (out)f(200)f fd(\026)p fm(secs)j(to)d(write)i(a)f(pac)o(k)n(et)924 545 y(to)j (the)i(ethernet)h(device)f(driv)n(er)g(using)f(a)f(k)o(ernel)924 594 y(syscal\ l.)35 b(Receiving)19 b(a)g(message)g(from)f(the)j(pac)o(k)n(et)924 644 y(\014\ lter)h(with)h(Mac)o(h)f(IPC)h(tak)n(es)h(ab)q(out)e(300)g fd(\026)p fm(secs.) 924 694 y(\(UX29)e(with)g(the)h(mapped)g(ethernet)h(driv)o(er)f(do)q(es)924 744 y(not)16 b(currently)g(supp)r(ort)g(the)h(pac)o(k)o(et)g(\014lter.\))26 b (Th)o(us,)924 794 y(crossing)e(the)h(address-space)h(b)q(oundary)e(b)q(et)o (w)o(een)924 843 y(the)19 b(device)g(driv)o(er)g(in)g(the)g(k)o(ernel)g(and)g (the)g(proto-)924 893 y(col)13 b(stac)o(k)h(in)f(the)h(Unix)f(server)h(should) f(add)h(ab)q(out)f(1)924 943 y(ms)f(\(2)h(*)h(500)e fd(\026)p fm(secs\))j(to) f(the)g(total)f(round)g(trip)h(time.)965 994 y(Assuming)j(the)i(proto)q(col)f (stack)g(runs)h(as)f(fast)g(in)924 1044 y(the)c(Unix)g(server)h(as)f(it)g(do) q(es)g(in)g(the)h(k)o(ernel,)f(a)g(UDP)924 1093 y(round)19 b(trip)h(in)f(Mac) o(h)g(3.0)g(should)g(then)h(b)q(e)g(ab)q(out)924 1143 y(3)15 b(ms)g(slo)o(w)o (er)i(than)f(in)f(Mac)o(h)i(2.5)e(\(2)h(ms)f(to)h(talk)f(to)924 1193 y(the)d (clien)o(t)g(and)g(1)g(ms)f(to)g(talk)h(to)g(the)g(device)h(driv)o(er\).)924 1243 y(The)h(indirection)g(through)g(the)g(Unix)g(server)g(should)924 1293 y (th)o(us)19 b(ha)o(v)o(e)h(a)f(relativ)n(ely)g(small)f(e\013ect)j(on)e(net)o (w)o(ork)924 1342 y(p)q(erformance.)924 1463 y fj(2.3)55 b(Where)18 b(Do)r (es)g(The)g(Time)f(Go?)924 1541 y fm(Little)12 b(attention)g(has)h(b)q(een)h (paid)f(to)f(the)i(implemen-)924 1591 y(tation)21 b(of)g(the)h(proto)q(cols)g (themselv)n(es)g(within)f(the)924 1640 y(Unix)13 b(server,)g(so)h(ev)o(en)g (small)d(measures)j(can)g(still)e(go)924 1690 y(a)j(long)g(w)o(a)n(y)m(.)23 b (F)m(or)15 b(example,)f(w)o(e)i(w)o(ere)h(able)e(to)h(gain)924 1740 y(an)g (easy)h(30%)e(p)r(erformance)h(impro)m(v)n(emen)o(t)g(in)g(net-)924 1790 y (w)n(ork)i(round)g(trip)f(times)g(simply)e(b)o(y)j(c)o(hanging)e(the)924 1840 y(w)n(a)o(y)d(in)g(whic)n(h)g(the)h(lo)n(w)o(est)g(lev)o(el)f(of)f(the)i(Unix) e(server)924 1890 y(in)n(teracts)18 b(with)e(the)h(device)g(driv)o(er.)26 b (In)17 b(the)g(rest)h(of)924 1939 y(this)10 b(section)h(w)o(e)f(describ)s(e)g (t)o(w)o(o)g(other)h(problems)e(with)924 1989 y(the)14 b(Unix)g(serv)o(er)h (implemen)l(tation.)924 2101 y fc(The)g(wrong)g(kind)g(of)g(sync)o(hronizatio\ n)924 2179 y fm(The)20 b(Mac)o(h)f(2.5)g(and)g(BSD)g(k)o(ernels)i(use)f(pro)q (cessor)924 2229 y(priorities)14 b(\()p fe(splx)p fm(\))g(to)h(synchronize)g (in)o(ternally)l(.)20 b(The)924 2279 y fe(spl)14 b fm(mac)n(hinery)i(w)o(as)f (designed)h(for)f(a)g(unipro)q(cessor)924 2329 y(arc)o(hitecture)20 b(and)f (for)f(a)g(k)o(ernel)i(split)e(in)n(to)h(a)f(non-)924 2379 y(preemptiv)n(e)10 b(top)f(half)g(and)g(an)h(in)n(terrupt-driven)g(b)q(ot-)924 2428 y(tom)18 b (half.)35 b(Ho)n(w)o(ev)o(er,)22 b(the)e(Unix)g(serv)o(er)h(is)e(m)n(ulti-) 924 2478 y(threaded)e(and)f(relies)h(on)f(\014ne-grain)g(locks)g(for)g(con-) 924 2528 y(currency)h(con)o(trol.)22 b(Instead)16 b(of)e(con)o(v)o(erting)h (the)h(ap-)924 2578 y(pro)o(ximately)d(1000)i fe(spl)g fm(calls)g(in)g(the)h (server)h(to)e(use)924 2628 y(loc)o(k-based)d(synchronization,)e(w)o(e)h(sim) n(ulate)g(the)h fe(spl)924 2677 y fm(calls)h(at)g(user-level)g(with)g(locks)g (and)g(soft)o(w)o(are)h(in)n(ter-)924 2727 y(rupts.)k(Each)13 b(UDP)h(round)g (trip)f(has)h(ab)q(out)f(50)g fe(spl)p fm(s)p eop %%Page: 4 4 bop 0 195 a fm(on)16 b(the)h(critical)e(path,)h(with)g(each)g(requiring)f (ab)q(out)0 245 y(12)e fd(\026)p fm(secs)j(on)e(a)f(DECstation)h(2100.)j(W)l (e)e(observ)o(ed)g(a)0 295 y(sp)r(eedup)d(of)f(ab)q(out)h(150)f fd(\026)p fm (secs)i(p)q(er)f(round)g(trip)g(when)0 345 y(w)o(e)g(switc)o(hed)g(to)g(a)f (c)o(heap)r(er)h(locking)e(primitiv)m(e)i([Ber-)0 394 y(shad)i(91].)0 518 y fc (T)l(o)q(o)i(man)n(y)g(lev)o(els)e(of)i(sc)n(heduling)0 600 y fm(The)e(Unix)f (server)h(uses)h(Mac)o(h's)f(C-Threads)g(library)0 650 y(to)f(m)m(ultiplex)g (sev)o(eral)g(user-level)g(threads)h(on)f(top)g(of)0 700 y(a)d(few)h(k)o(erne\ l)g(threads)h([Coop)q(er)g(&)f(Dra)n(v)o(es)h(88].)j(Syn-)0 750 y(c)o(hroniza\ tion)i(b)q(et)o(w)o(een)h(user-level)f(threads)h(is)f(gen-)0 799 y(erally)12 b (c)o(heap,)h(since)g(it)f(is)g(little)f(more)h(than)g(a)g(corou-)0 849 y(tine) 22 b(switc)o(h.)41 b(Ho)n(w)o(ev)o(er,)24 b(the)e(Unix)f(server's)h(net-)0 899 y(w)o(ork)10 b(input)h(threads)h(are)f fl(wir)m(e)n(d)g fm(to)f(dedicated)i (k)o(ernel)0 949 y(threads.)19 b(This)12 b(means)g(that)h(scheduling)f(op)q (erations)0 999 y(b)q(etw)n(een)h(the)g(net)o(w)o(ork)f(in)n(terrupt)h(thread) g(and)f(other)0 1049 y(threads)k(in)f(the)h(Unix)f(server)h(\(such)f(as)g(tho\ se)h(w)o(ait-)0 1098 y(ing)g(on)h(incoming)d(pac)o(k)o(ets)j(or)g(lo)q(c)o (ks\))g(in)n(v)o(olv)n(es)h(t)o(w)o(o)0 1148 y(k)o(ernel)h(threads.)34 b(Mac) o(h)18 b(k)o(ernel)h(threads)h(can)f(only)0 1198 y(synchronize)12 b(with)g (Mac)o(h)g(IPC,)g(so)g(in)o(terthread)h(syn-)0 1248 y(c)o(hronization)f(withi\ n)f(the)i(Unix)e(server)i(in)n(v)o(olv)n(es)g(ad-)0 1298 y(ditional)f(passes) j(through)f(the)h(k)o(ernel.)0 1451 y fn(3)69 b(A)33 b(New)e(User-Lev)n(el)h (UDP)103 1525 y(Serv)n(er)0 1622 y fm(T)m(o)12 b(b)r(etter)i(sho)o(w)f(that)h (the)g fl(implementation)p fm(,)e(rather)0 1672 y(than)33 b(the)g(address)h (space,)k(is)32 b(resp)r(onsible)h(for)0 1721 y(p)q(o)q(or)25 b(netw)o(ork)g (p)q(erformance,)j(w)o(e)d(built)g(a)g(stan-)0 1771 y(dalone)19 b(UDP)g(proto) q(col)g(server)g(whic)o(h)g(exp)r(orts)h(an)0 1821 y(RPC)15 b(in)n(terface)h (analogous)e(to)h(Unix's)g fe(sendto)e fm(and)0 1871 y fe(recvfrom)i fm(in)n (terface.)28 b(UDP)17 b(clien)o(ts)g(comm)l(unicate)0 1921 y(with)h(their)h (lo)q(cal)f(UDP)h(server)g(using)g(Mac)o(h)g(RPC)0 1971 y(without)g(memory)e (remapping)g(to)i(mo)n(v)n(e)h(data)f(b)q(e-)0 2020 y(t)o(w)o(een)c(address)g (spaces.)42 2073 y(The)21 b(UDP)h(server's)g(lo)n(w)o(est)g(la)n(y)o(er)g(is) f(the)h(same)0 2123 y(as)g(the)h(Unix)f(server;)27 b(incoming)20 b(pac)o(k)o (ets)j(are)g(re-)0 2173 y(ceiv)o(ed)13 b(from)e(the)i(pac)o(k)n(et)g(\014lter) g(and)f(outgoing)f(pack-)0 2223 y(ets)27 b(are)g(written)f(to)g(the)h(device) g(driv)o(er)g(with)f(a)0 2272 y fe(device)q 14 2 v 13 w(write)9 b fm(system)g (call.)16 b(The)10 b(serv)o(er)h(tak)n(es)f(care)0 2322 y(of)17 b(chec)o(ksum\ ming,)f(pac)o(k)o(et)i(formatting,)e(p)q(ort)j(dis-)0 2372 y(patc)o(hing,)13 b (etc.)42 2425 y(The)e(main)e(di\013erences)k(b)q(etw)o(een)f(our)f(UDP)g(serv\ er)0 2475 y(and)j(the)g(Unix)g(server)g(are:)42 2578 y fb(\017)20 b fm(The)d (incoming)e(pac)o(k)o(et)i(path)g(is)g(optimized)e(so)83 2628 y(that)k(pack)n (ets)i(are)f(only)e(copied)i(once)g(from)e(a)83 2677 y(bu\013er)f(on)e(the)h (net)o(w)o(ork)g(input)f(thread's)h(stac)o(k)83 2727 y(to)11 b(an)g(IPC)h(mes\ sage)f(bu\013er)i(that)e(is)g(sent)g(to)h(the)949 231 y fk(UDP)h(Implementati\ on)1560 245 y 2 46 v 1586 231 a(Time)g(\(ms\))924 247 y 865 2 v 949 279 a(New) f(UDP)h(Server)g(\(user-to-user\))1560 292 y 2 46 v 1714 279 a(4.2)949 324 y (New)f(UDP)h(Server)g(\(serv)o(er-to-serv)o(er\))1560 338 y 2 46 v 1714 324 a (4.0)949 370 y(Mac)o(h)g(2.5)g(k)o(ernel)1560 384 y 2 46 v 1714 370 a(4.8)949 416 y(Unix)g(server)g(\(IPC,VM\))1560 429 y 2 46 v 1695 416 a(19.5)924 504 y fm(T)l(able)25 b(3:)39 b(UDP)25 b(Round)g(T)l(rip)g(Times)e(for)i(V)m(ari-) 924 554 y(ous)18 b(Systems.)30 b(The)19 b(\014rst)g(line)e(is)h(for)g(UDP)g (access)924 603 y(through)e(a)g(sp)r(ecial)g(UDP)g(server)h(running)f(on)g (each)924 653 y(mac)m(hine.)j(The)c(second)g(line)f(is)g(for)f(server-to-serv\ er)924 703 y(comm)l(unication.)20 b(This)15 b(eliminates)e(the)j(Mac)o(h)f (IPC)924 753 y(b)q(et)o(w)o(een)i(the)f(end)h(users)g(and)f(the)g(proto)q(col) g(server.)924 803 y(The)21 b(third)f(and)h(fourth)g(lines)f(are)h(rep)r(eated) h(from)924 852 y(earlier)14 b(tables.)1007 1019 y(destination)k(task.)33 b (This)18 b(path)h(only)f(requires)1007 1069 y(one)c(primitiv)l(e)g(lo)q(c)o (king)f(op)q(eration.)965 1152 y fb(\017)21 b fm(None)g(of)g(the)g(server's)h (C-threads)g(are)g(wired)1007 1202 y(to)j(k)n(ernel)h(threads)h(so)e(in)n(ter\ thread)i(con)o(text)1007 1252 y(switc)o(hing)13 b(is)h(c)o(heap.)965 1335 y fb (\017)21 b fm(Proto)q(col)g(clien)o(ts)h(call)f(the)i(server)f(via)f(Mac)o (h)1007 1385 y(IPC)13 b(instead)h(of)f(Unix)g(syscalls,)h(th)o(us)g(a)o(v)n (oiding)1007 1435 y(the)21 b(syscall-to-IPC)f(translation)g(step)i(in)e(the) 1007 1485 y(system)13 b(call)g(em)n(ulator.)965 1577 y(The)20 b(round)g(trip) g(times)e(for)i(t)o(w)o(o)f(user-level)g(ap-)924 1626 y(plications)12 b(to)i (comm)l(unicate)g(o)o(v)n(er)h(the)f(net)o(w)o(ork)g(via)924 1676 y(the)f(new) g(UDP)f(server)i(are)f(sho)o(wn)f(on)g(the)i(\014rst)f(lines)924 1726 y(of)19 b(T)m(able)h(3.)37 b(The)20 b(table)h(also)e(rep)r(eats)i(the)g(times)924 1776 y(for)14 b(the)g(unoptimized)f(Unix)h(server)h(and)f(for)g(the)h(in-)924 1826 y(k)n(ernel)g(proto)q(col)e(implemen)l(tation)g(for)h(comparison.)924 1875 y (T)l(able)c(3)f(sho)o(ws)h(that)g(it)f(is)h(p)q(ossible)g(to)g(ac)o(hiev)o (e)g(round)924 1925 y(trip)i(latencies)h(comparable)e(to)h(a)h(macrok)m(ernel) g(with)924 1975 y(a)j(user-level)h(proto)q(col)g(implem)o(en)m(tation.)26 b (F)m(urther-)924 2025 y(more,)9 b(since)h(the)h(top-lev)n(el)f(\(user\))h(and) f(b)q(ottom-lev)m(el)924 2075 y(\(k)o(ernel\))15 b(in)n(terfaces)h(to)e(the)h (proto)r(col)f(stac)o(k)g(are)h(the)924 2125 y(same,)d(it)g(is)h(clear)h(that) f(the)h(sp)q(eedup)g(o)o(v)o(er)g(the)f(Unix)924 2174 y(serv)o(er's)k(UDP)f (is)h(due)f(to)g(the)h(di\013erence)h(in)e(imple-)924 2224 y(men)n(tation.)k (The)15 b(di\013erence)i(b)q(et)o(w)o(een)f(the)f(user-to-)924 2274 y(user)h (and)e(server-to-server)i(times)e(re\015ects)j(the)e(cost)924 2324 y(of)h(the) i(additional)d(RPC's)h(through)h(the)h(Mac)o(h)f(3.0)924 2374 y(microk)m(erne\ l.)924 2512 y fn(4)69 b(Absolute)28 b(P)n(erformance)h(Is)1027 2586 y(What)23 b(Coun)n(ts)924 2677 y fm(There)33 b(is)e(one)h(compelling)f(observ)n(ation)g (whic)o(h)924 2727 y(w)n(eak)o(ens)25 b(our)f(claim)e(that)h(proto)r(cols)g (can)i(b)q(e)f(ef-)p eop %%Page: 5 5 bop 0 195 a fm(fectiv)o(ely)19 b(implemen)l(ted)h(at)f(user)h(lev)o(el:)28 b fl(our)20 b(UDP)0 245 y(server)f(is)g(stil)q(l)g(slow.)33 b fm(Ev)o(en)19 b (a)g(4)f(ms)g(UDP)h(round)0 295 y(trip)12 b(time,)f(in-k)n(ernel)i(or)g(out-o\ f-k)n(ernel,)g(is)f(slo)n(w.)18 b(W)l(e)0 345 y(agree.)j(Mac)o(h)15 b(3.0)f (has)h(an)f(in-k)n(ernel)i(net)o(w)o(ork)f(RPC)0 394 y(that)j(is)h(ab)q(out)f (t)o(wice)h(as)f(fast)g([Barrera)h(91].)749 379 y fi(2)799 394 y fm(Re-)0 444 y(searchers)i(at)e(DEC)g(SR)o(C)g([Sc)o(hro)q(eder)i(&)e(Burrows)0 494 y(90]) c(ha)n(v)o(e)h(sho)o(wn)g(that)g(the)g(w)o(a)o(y)f(to)h(reduce)h(latency)0 544 y(to)12 b(the)g(bare)h(minim)-5 b(um)10 b(is)i(to)g(put)g(pieces)h(of)e(the)h (pro-)0 594 y(to)q(col)k(in)g(the)g(k)o(ernel's)h(in)n(terrupt)h(handler,)e (thereby)0 643 y(eliminating)11 b(an)i(additional)f(dispatch)i(and)f(RPC)42 694 y(There)18 b(are)f(three)i(resp)r(onses)f(to)f(the)h(\\sorry)m(,)f(not)0 744 y(fast)k(enough")g(argumen)n(t.)40 b(The)22 b(\014rst)g(is)f(that)g(w)o (e)0 794 y(could)k(mak)m(e)h(it)f(faster)h(if)e(w)o(e)i(tried)g(|)f(w)n(e)h (just)0 843 y(ha)o(v)n(en't.)19 b(Our)14 b(goal)e(w)o(as)i(to)g(sho)o(w)f(tha\ t)h(a)g(user-lev)o(el)0 893 y(implemen)l(tation)21 b(could)h(matc)n(h)g(an)g (in-k)n(ernel)g(im-)0 943 y(plemen)n(tation,)16 b(and)g(w)o(e'v)o(e)h(done)g (that.)26 b(W)l(e)17 b(could,)0 993 y(for)12 b(example,)f(impro)m(v)o(e)i(the) h(implem)o(en)m(tation)e(of)g(the)0 1043 y(pac)o(k)o(et)h(\014lter,)f(or)h (use)g(it)f(more)g(aggressiv)o(ely)g(b)o(y)g(ha)o(v-)0 1093 y(ing)21 b(eac)o (h)g(receiving)h(thread)g(register)h(its)e(o)o(wn)g(\014l-)0 1142 y(ter.)26 b (W)l(e)17 b(could)f(also)g(use)h(shared)g(memory)d(to)i(pass)0 1192 y(data)k (b)q(etw)n(een)i(the)f(UDP)f(server)h(and)f(its)g(clien)o(ts,)0 1242 y(as)26 b (is)g(done)g(no)o(w)g(in)g(some)f(cases)i(b)o(y)f(the)h(Unix)0 1292 y(server) 106 1277 y fi(3)125 1292 y fm(,)e(or)e(b)q(etw)n(een)h(the)g(k)o(ernel)f(and) g(the)h(Unix)0 1342 y(server)14 b([Reynolds)f(&)i(Heller)f(91].)42 1392 y(The) j(second)h(resp)r(onse)f(is)g(that,)g(for)f(lo)n(w)h(latency)0 1442 y(request\ -resp)t(onse)d(proto)q(cols,)f(the)h(imp)o(ortan)o(t)g(parts)0 1492 y(of)f (the)i(proto)q(col)f(\(that)g(is,)f(the)i(common)c(cases\))k(can)0 1542 y(b)q (e)e(implemen)l(ted)g(directly)f(within)g(the)h(sending)f(and)0 1591 y(receiv\ ing)j(address)i(spaces.)23 b(This)15 b(enables)h(the)f(pro-)0 1641 y(to)q(col) 10 b(server)h(to)f(b)r(e)g(b)o(ypassed)i(altogether.)17 b(With)10 b(the)0 1691 y(exception)k(of)e(using)h(a)f(general)h(pac)o(k)o(et)h(\014lter,)f(this)f (is)0 1741 y(the)j(approac)o(h)g(tak)o(en)g(in)f(DEC)h(SR)n(C's)g(RPC)f(imple\ -)0 1791 y(men)n(tation)f(for)h(the)g(Fire\015y)m(.)42 1841 y(The)9 b(third)h (resp)r(onse)g(is)g(that)f(not)h(all)e(proto)q(cols)i(are)0 1891 y(exp)r(ecte\ d)17 b(to)g(ha)n(v)o(e)g(lo)n(w)f(latency)m(.)26 b(A)16 b(proto)q(col)h(suc)o (h)0 1941 y(as)i(TCP)m(,)f(where)i(throughput)f(and)g(not)f(latency)h(is)0 1991 y(crucial,)h(can)f(run)g(e\016ciently)f(at)h(user)h(lev)o(el)f([F)l(orin) 0 2040 y(et)14 b(al.)k(91].)0 2182 y fn(5)69 b(Conclusions)0 2274 y fm(W)l (e)14 b(ha)o(v)o(e)g(sho)o(wn)f(that)h(at)f(least)h(one)g(user-level)f(pro-)0 2324 y(to)q(col)k(is)h(slo)n(w)g(when)g(running)g(on)f(top)h(of)f(a)g(micro-) 0 2374 y(k)o(ernel)22 b(and)g(that)f(it)h(can)f(b)r(e)h(made)e(fast)i(b)o(y)f (\\de-)0 2422 y 345 2 v 46 2484 a fh(2)64 2495 y fg(Unlik)o(e)10 b(UDP)m(,)h (Mac)o(h)g(RPC)g(has)g(k)o(ernel-orie)o(n)o(ted)c(seman-)0 2535 y(tics,)j(suc) o(h)f(as)h(the)g(abilit)o(y)f(to)h(pass)f(out-of-line)f(data)h(and)h(p)q(ort) 0 2574 y(righ)o(ts,)f(whic)o(h)g(also)g(motiv)n(ate)f(an)h(in-k)o(ernel)e(imp\ lemen)o(tati)o(on.)46 2637 y fh(3)64 2648 y fg(W)m(ork)h(is)g(underw)o(a)o (y)f(at)h(CMU)i(to)e(pass)g(net)o(w)o(ork)g(messages)0 2688 y(b)q(et)o(w)o (een)i(the)i(Unix)f(serv)o(er)f(and)h(proto)q(col)f(clien)o(ts)g(via)h(shared) 0 2727 y(memory)e(bu\013ers.)924 195 y fm(Unixifying")k(it.)23 b(W)l(e)16 b (exp)q(ect)h(that)f(other)g(proto)q(cols)924 245 y(will)j(b)r(e)i(amenable)f (to)h(this)g(general)h(approac)o(h)f(as)924 295 y(w)n(ell.)965 345 y(The)h (UDP)f(server)h(describ)r(ed)g(in)f(this)g(pap)q(er)h(is)924 395 y(not)11 b (part)g(of)g(the)h(standard)g(Mac)o(h)f(distribution)g(from)924 445 y(CMU.)j (It)g(w)o(as)h(done)g(within)e(the)i(context)g(of)f(an)g(ex-)924 495 y(p)q (erimen)n(tal)f(k)o(ernel)h(and)f(user)h(environmen)m(t)f(so)h(that)924 545 y (w)n(e)j(could)f(demonstrate)h(what)f(w)o(as)g(and)h(what)f(w)o(as)924 594 y (not)d(resp)s(onsible)g(for)h(microk)m(ernel)h(net)o(w)o(orking)e(p)q(er-)924 644 y(formance.)924 780 y fn(References)924 864 y fk([Accetta)f(et)h(al.)g (86])21 b(Accetta,)i(M.)e(J.,)i(Baron,)h(R.)d(V.,)1116 909 y(Bolosky)n(,)29 b (W.,)f(Golub,)j(D.)25 b(B.,)j(Rashid,)1116 955 y(R.)21 b(F.,)i(T)l(ev)o(anian\ ,)h(Jr.,)f(A.,)f(and)h(Y)l(oung,)1116 1001 y(M.)9 b(W.)k(Mac)o(h:)j(A)9 b(New) h(Kernel)h(F)l(oundation)1116 1046 y(for)k(UNIX)f(Dev)o(elopmen)q(t.)23 b(In) 15 b fa(Pr)n(o)n(c)m(e)n(e)n(dings)1116 1092 y(of)j(the)g(Summer)h(1986)e(USE\ NIX)g(Confer-)1116 1138 y(enc)m(e)p fk(,)12 b(pages)h(93{113,)h(July)g(1986.) 924 1202 y([Barrera)f(91])21 b(Barrera,)c(J.)e(S.)27 b(A)15 b(F)m(ast)h(Mach) g(Net)o(w)n(ork)1116 1247 y(IPC)24 b(Implementation.)52 b(In)25 b fa(Pr)n(o)n (c)m(e)n(e)n(dings)1116 1293 y(of)18 b(the)f(Se)n(c)m(ond)h(Usenix)e(Mach)i (Workshop)p fk(,)1116 1339 y(No)o(v)o(em)o(b)q(er)13 b(1991.)924 1403 y([Bers\ had)g(91])21 b(Bershad,)16 b(B.)d(N.)21 b(Mutual)15 b(Exclusion)i(for)1116 1448 y(Unipro)r(cessors.)k(T)l(echnical)16 b(Rep)q(ort)e(CMU-)1116 1494 y(CS-\ 91-116,)e(Sc)o(ho)r(ol)h(of)e(Computer)i(Science,)1116 1540 y(Carnegie)h(Mell\ on)h(University)m(,)d(April)i(1991.)924 1604 y([Bershad)f(et)g(al.)h(91])20 b (Bershad,)g(B.)d(N.,)h(Drav)o(es,)g(R.)g(P)m(.,)1116 1649 y(and)f(F)m(orin,)i (A.)28 b(Using)18 b(microb)s(enc)o(hmarks)1116 1695 y(to)11 b(ev)n(aluate)h (system)f(p)r(erformance.)j(In)c fa(Sub-)1116 1741 y(mitte)m(d)j(to)g(WWOS)i (92)p fk(,)c(Decemb)q(er)i(1991.)924 1805 y([Coop)r(er)g(&)f(Drav)o(es)h(88]) 21 b(Co)q(op)r(er,)g(E.)g(C.)e(and)i(Drav)o(es,)1116 1850 y(R.)31 b(P)m(.)71 b (C-threads.)h(T)l(ec)o(hnical)34 b(Re-)1116 1896 y(p)q(ort)24 b(CMU-CS-88-54,) j(Sc)o(ho)r(ol)e(of)f(Com-)1116 1942 y(puter)15 b(Science,)i(Carnegie)g(Mello\ n)g(Univer-)1116 1987 y(sit)o(y)m(,)c(F)m(ebruary)h(1988.)924 2051 y([Dra)o (v)o(es)f(et)g(al.)g(91])21 b(Dra)o(ves,)i(R.)e(P)m(.,)i(Bershad,)i(B.)c(N.,) 1116 2097 y(Rashid,)h(R.)c(F.,)i(and)g(Dean,)h(R.)d(W.)35 b(Us-)1116 2143 y (ing)17 b(Con)o(tinuation)g(to)f(Implemen)q(t)f(Thread)1116 2188 y(Management) 32 b(and)g(Comm)o(unication)i(in)1116 2234 y(Op)q(erating)21 b(Systems.)37 b (In)20 b fa(Pr)n(o)n(c)m(e)n(e)n(dings)e(of)1116 2280 y(the)12 b(13th)g(A)n (CM)j(Symp)m(osium)d(on)h(Op)n(er)n(ating)1116 2325 y(Systems)h(Principles)p fk(,)e(pages)k(122{136,)g(Oc-)1116 2371 y(tob)q(er)d(1991.)924 2435 y([F)l (orin)h(et)f(al.)g(91])21 b(F)m(orin,)c(A.,)f(Golub,)i(D.)d(B.,)h(and)h(Ber-) 1116 2481 y(shad,)h(B.)f(N.)29 b(An)18 b(I/O)f(System)g(for)g(Mach)1116 2526 y (3.0.)d(In)e fa(Pr)n(o)m(c)n(e)n(e)m(dings)f(of)h(the)f(Se)m(c)n(ond)g(Usenix) 1116 2572 y(Mach)i(Workshop)p fk(,)d(No)o(v)o(em)o(b)r(er)j(1991.)924 2636 y ([Golub)h(et)f(al.)g(90])21 b(Golub,)h(D.,)g(Dean,)g(R.,)f(F)m(orin,)h(A.,) 1116 2682 y(and)15 b(Rashid,)g(R.)21 b(Unix)15 b(as)f(an)h(Application)1116 2727 y(Program.)h(In)c fa(Pr)n(o)n(c)m(e)n(e)n(dings)f(of)h(the)g(Summer)p eop %%Page: 6 6 bop 192 195 a fa(1990)11 b(USENIX)g(Confer)m(enc)m(e)p fk(,)g(pages)i(87{95,) 192 241 y(June)g(1990.)0 303 y([Le\017er)g(et)f(al.)i(89])21 b(Le\017er,)13 b (S.,)h(McKusick,)g(M.,)g(Karels,)192 349 y(M.,)31 b(and)e(Quarterman,)j(J.)61 b fa(The)27 b(De-)192 394 y(sign)13 b(and)g(Implementation)d(of)k(the)f(4.3BS\ D)192 440 y(UNIX)28 b(Op)n(er)n(ating)g(System)p fk(.)67 b(Addison-)192 486 y (W)m(esley)n(,)13 b(Reading,)h(MA,)f(1989.)0 548 y([Mogul)h(et)f(al.)g(87])21 b(Mogul,)j(J.,)d(Rashid,)j(R.,)e(and)g(Ac-)192 594 y(cetta,)c(M.)31 b(The)17 b (P)o(ac)o(ket)g(Filter:)27 b(An)17 b(E\016-)192 639 y(cient)c(Mec)o(hanism)i (for)d(User-level)h(Net)o(w)o(ork)192 685 y(Co)q(de.)40 b(In)20 b fa(Pr)n(o)n (c)n(e)m(e)n(dings)f(of)h(the)g(Eleventh)192 731 y(A)o(CM)14 b(Symp)m(osium)f (on)g(Op)n(er)n(ating)f(Systems)192 776 y(Principles)p fk(,)e(pages)k(39{51,) f(1987.)0 839 y([Ousterhout)h(et)e(al.)i(88])21 b(Ousterhout,)i(J.)d(K.,)h (Cheren-)192 884 y(son,)c(A.)e(R.,)h(Douglis,)i(F.,)e(Nelson,)h(M.)e(N.,)192 930 y(and)j(W)m(elch,)f(B.)g(B.)28 b(The)17 b(Sprite)g(Net)o(w)o(ork)192 976 y (Op)q(erating)26 b(System.)51 b fa(IEEE)25 b(Computer)p fk(,)192 1021 y(21\(2\ \):23{36,)14 b(F)m(ebruary)g(1988.)0 1083 y([Reynolds)h(&)d(Heller)j(91])20 b (Reynolds,)d(F.)d(and)h(Heller,)h(J.)192 1129 y(Kernel)24 b(Supp)s(ort)f(for) h(Net)n(w)o(ork)g(Proto)q(col)192 1175 y(Servers.)57 b(In)27 b fa(Pr)n(o)n (c)m(e)n(e)n(dings)d(of)i(the)f(Se)m(c-)192 1220 y(ond)14 b(Usenix)e(Mach)j (Workshop)p fk(,)d(No)o(v)o(em)o(b)q(er)192 1266 y(1991.)0 1328 y([Sc)o(hro)r (eder)h(&)g(Burro)o(ws)g(90])21 b(Sc)o(hro)r(eder,)31 b(M.)c(D.)g(and)192 1374 y(Burrows,)f(M.)49 b(P)o(erformance)24 b(of)g(Fire\015y)192 1420 y(RPC.)d fa (A)o(CM)16 b(T)m(r)n(ansactions)c(on)i(Computer)192 1465 y(Systems)p fk(,)9 b (8\(1\):1{17,)j(F)m(ebruary)f(1990.)k(Also)192 1511 y(app)r(eared)29 b(in)g fa (Pr)o(o)m(c)n(e)n(e)m(dings)d(of)i(the)f(12th)192 1557 y(A)o(CM)14 b(Symp)m (osium)f(on)g(Op)n(er)n(ating)f(Systems)192 1602 y(Principles)p fk(,)e(Decemb) q(er)j(1989.)p eop %%Trailer end %%EOF