Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: hlfsd.dvi
%%Pages: 15 1
%%BoundingBox: 0 0 612 792
%%EndComments
%%BeginProcSet: /usr/local/lib/tex/ps/psfig.pro
/TeXscale { 65536 div } def

/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
currentlinejoin currentdash currentgray currentmiterlimit ] cvx def

/startTexFig {
	/SavedState save def
	userdict maxlength dict begin
	currentpoint transform

	DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
		setlinewidth setmatrix

	itransform moveto

	/ury exch TeXscale def
	/urx exch TeXscale def
	/lly exch TeXscale def
	/llx exch TeXscale def
	/y exch TeXscale def
	/x exch TeXscale def
	
	currentpoint /cy exch def /cx exch def

	/sx x urx llx sub div def 	% scaling for x
	/sy y ury lly sub div def	% scaling for y

	sx sy scale			% scale by (sx,sy)

	cx sx div llx sub
	cy sy div ury sub translate
	
	/DefFigCTM matrix currentmatrix def

	/initmatrix {
		DefFigCTM setmatrix
	} def
	/defaultmatrix {
		DefFigCTM exch copy
	} def

	/initgraphics {
		DocumentInitState setmiterlimit setgray setdash 
			setlinejoin setlinecap setlinewidth setmatrix
		DefFigCTM setmatrix
	} def

	/showpage {
		initgraphics
	} def
 	/erasepage {
 		initgraphics
 	} def
 	/copypage {} def

} def
/clipFig {
	currentpoint 6 2 roll
	newpath 4 copy
	4 2 roll moveto
	6 -1 roll exch lineto
	exch lineto
	exch lineto
	closepath clip
	newpath
	moveto
} def
/doclip { llx lly urx ury clipFig } def
/endTexFig {
	end SavedState restore
} def
%%EndProcSet
%%BeginProcSet: tex.pro
/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0
7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{
moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{
S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B
/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w
}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{clear SS restore}B end
%%EndProcSet
%%BeginProcSet: special.pro
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs
792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N
/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{
@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true
N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}
B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B
/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx
defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{
itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2
roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll
itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array
astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{
PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR
pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if
yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270
rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not
and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip
not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}
ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if}
if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{
DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save
N userdict maxlength dict begin /magscale false def normalscale currentpoint
TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx
sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx
psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N
/erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{psf$llx psf$lly
psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll
S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end
psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave
normalscale currentpoint TR @SpecialDefaults}N /@setspecial{CLIP{newpath 0 0
moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR
hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg
TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore
clear SpecialSave restore end}N /@defspecial{SDict begin}N /@fedspecial{end}B
/li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1
setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY
moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix
currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix
setmatrix}N end
%%EndProcSet
TeXDict begin 1000 300 300 @start /Fa 2 117 df<3E0006000C000C000C000C00180019
E01E30183038303030303030306060606460C460C4C0C8C0700E147E9313>104
D<02000600060006000C00FF800C000C001800180018001800300031003100320032001C000912
7F910D>116 D E /Fb 5 116 df<001FC0001FC0001FC00001C00001C00001C00001C00001C000
01C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E0
01C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>100
D<0007E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E0
0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
0000E0003FFF807FFFC03FFF80151E7F9D1A>102 D<FE0000FE0000FE00000E00000E00000E00
000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE171E7F9D1A
>104 D<FFE000FFE000FFE00000E00000E00000E00000E00000E00000E00000E00000E00000E0
0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
0000E00000E000FFFFE0FFFFE0FFFFE0131E7D9D1A>108 D<07FB801FFF807FFF80780780E003
80E00380E003807800007FC0003FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC07
80FFFF00EFFE00E3F80012157C941A>115 D E /Fc 13 118 df<000180000180000380000380
000780000780000B800013800013800023C00021C00041C000C1C00081C00101C001FFC00201C0
0201C00401C00801C00801C01801C0FE0FF815177E961A>65 D<03FFFE00E00E00E00400E00400
E00401C00401C00401C10001C10003820003820003FE000386000704000704080704080700100E
00100E00300E00200E00601C01C0FFFFC017177E9618>69 D<03F0003F8000F000780000B80078
0000B800B80000B80138000138017000013802700001380270000138047000023808E000021C08
E000021C10E000021C10E000041C21C000041C41C000041C41C000041C81C000081D038000081D
038000080E038000080E038000180C070000FE083FE00021177E9620>77
D<03F00FE000F0030000F0020000B8020000B80200011C0400011C0400011C0400010E0400020E
0800020E080002070800020708000403900004039000040390000401D0000801E0000800E00008
00E0000800E00018004000FE0040001B177E961A>I<03FFE000E03800E01C00E01C00E01C01C0
1C01C01C01C01C01C0380380700381C003FF000381800700C00700E00700E00700E00E01C00E01
C00E01C20E01C21C00C4FF807817177E961A>82 D<007C400182800301800601800601800C0100
0C01000C00000E00000FC00007F80003FC00007C00000E00000E00000600200600400C00400C00
600800601000D8600087C00012177D9614>I<7FC1FC1C00601C00401C00401C00403800803800
80380080380080700100700100700100700100E00200E00200E00200E00200E00400E00800E008
006030003040001F8000161779961A>85 D<007C00180018001800180030003000300030076008
E018E0306030C060C060C060C0C180C188C1884388659038E00E177C9612>100
D<030706000000000000384C4C4C8C18181830326262243808177D960B>105
D<078018C0304060606060C060C060C06080C080C08180C10046003C000B0E7B8D12>111
D<38F04518463846308C000C000C000C001800180018001800300030000D0E7D8D0F>114
D<07800C4018E018E038001E001F8007C000C060C0E0C0C180C3003E000B0E7D8D0F>I<1C0826
184618461886300C300C300C30186018621862186208E407380F0E7D8D13>117
D E /Fd 25 127 df<60F0F0600404798312>46 D<0018003800380070007000E000E001C001C0
01C003800380070007000E000E001C001C001C003800380070007000E000E000C0000D1A7E9612
>I<07C00FE01C703838701C701CE00EE00EE00EE00EE00EE00EE00EE01E701C701C38381C700F
E007C00F147F9312>I<FFFEFFFE7FFE0000000000007FFEFFFEFFFE0F097F8E12>61
D<3F807FC070E0207000700FF03FF07870E070E070E07070F03FFE1F3E0F0E7E8D12>97
D<F800F80038003800380038003BE03FF03C38381C380C380E380E380E380E380C381C3C383FF0
1BC00F147F9312>I<07F01FF8383870106000E000E000E000E0006000703838381FF007E00D0E
7E8D12>I<00F800F8003800380038003807B81FF8387870386038E038E038E038E03860387078
38781FFE0FBE0F147F9312>I<07801FE0387070706038E038FFF8FFF8E0006000703838381FF0
07C00D0E7E8D12>I<007E00FF01C70382038003807FFEFFFE0380038003800380038003800380
0380038003803FF83FF81014809312>I<F800F800380038003800380039E03FF03E383C383838
3838383838383838383838383838FE3EFE3E0F147F9312>104 D<06000F000F00060000000000
0000FF00FF000700070007000700070007000700070007000700FFF0FFF00C157D9412>I<F800
F80038003800380038003BFC3BFC38F039E03BC03F803F803FC03DE038E038703838FC7EFC7E0F
147F9312>107 D<FF00FF00070007000700070007000700070007000700070007000700070007
0007000700FFF8FFF80D147E9312>I<F71C00FFBE0079E70079E70071C70071C70071C70071C7
0071C70071C70071C70071C700F9E780F8E380110E808D12>I<F9E0FFF03E383C383838383838
3838383838383838383838FE3EFE3E0F0E7F8D12>I<0F803FE038E07070E038E038E038E038E0
38F078707038E03FE00F800D0E7E8D12>I<FBE0FFF03C38381C380C380E380E380E380E380C38
1C3C383FF03BC038003800380038003800FE00FE000F157F8D12>I<FCF8FDFC1F1C1E081E001C
001C001C001C001C001C001C00FFC0FFC00E0E7E8D12>114 D<1FF03FF06070C070E0007F003F
E00FF000786018E018F030FFE0DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E000E000E
000E000E000E000E000E380E380E3807F003C00D127F9112>I<F8F8F8F8383838383838383838
38383838383838383838781FFE0FBE0F0E7F8D12>I<FC7EFC7E38383C781C701C701C700EE00E
E00EE006C007C007C003800F0E7F8D12>I<3FFC7FFC7038707000E001C0038007000E001C1C38
1C701CFFFCFFFC0E0E7F8D12>122 D<18403CE0E78043000B047D9312>126
D E /Fe 64 125 df<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700FFFFE0
1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE0
1617809615>11 D<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF001C
07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE013
17809614>I<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700001C
070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380
1C0703801C0703801C0703801C070380FF1FCFF01C1780961D>14 D<60F0F07010102020404004
0A7D960A>39 D<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C04
020108227D980E>I<8040203018180C0C0E060606070707070707070707070606060E0C0C1818
3020408008227E980E>I<60F0F070101020204040040A7D830A>44 D<FF80FF80090280870C>I<
60F0F06004047D830A>I<0008001800300030003000600060006000C000C000C0018001800180
030003000600060006000C000C000C00180018001800300030003000600060006000C000C0000D
217E9812>I<03000700FF00070007000700070007000700070007000700070007000700070007
000700070007007FF00C157E9412>49 D<0F8030E040708030C038E03840380038007000700060
00C00180030006000C08080810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C
00180038006007E000300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<0030
0030007000F001F001700270047008701870107020704070C070FFFE0070007000700070007003
FE0F157F9412>I<01F00608080C181C301C70006000E000E3E0EC30F018F00CE00EE00EE00E60
0E600E300C3018183007C00F157F9412>54 D<40007FFE7FFC7FF8C00880108020004000800080
0100010003000200060006000E000E000E000E000E0004000F167E9512>I<07E018302018600C
600C700C78183E101F600FC00FF018F8607C601EC00EC006C006C004600C38300FE00F157F9412
>I<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C7018701860
3020C01F800F157F9412>I<60F0F06000000000000060F0F07010102020404004147D8D0A>59
D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107000307
8002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE17177F961A>65
D<FFFE001C03801C00E01C00601C00701C00701C00701C00701C00E01C01C01FFF801FFFC01C00
E01C00701C00301C00381C00381C00381C00381C00701C00E01C01C0FFFF0015177F9619>I<00
FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E00000E0
0000E000106000107000103000203800201C00400E008003830000FC0014177E9619>I<FFFF00
1C01C01C00E01C00301C00381C00181C001C1C000C1C000E1C000E1C000E1C000E1C000E1C000E
1C000E1C000C1C001C1C001C1C00381C00301C00601C01C0FFFF0017177F961B>I<FFFFE01C00
E01C00601C00201C00101C00101C00101C04001C04001C04001C0C001FFC001C0C001C04001C04
001C04001C00001C00001C00001C00001C00001C0000FFC00014177F9617>70
D<FF83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701FFFF01C00
701C00701C00701C00701C00701C00701C00701C00701C00701C0070FF83FE17177F961A>72
D<FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E00FFE00B177F960D>I<FFC0001C00001C00001C00001C00001C00001C00001C0000
1C00001C00001C00001C00001C00001C00001C00201C00201C00201C00601C00601C00401C00C0
1C03C0FFFFC013177F9616>76 D<FE0003F81E0003C0170005C0170005C0170005C0138009C013
8009C011C011C011C011C011C011C010E021C010E021C0107041C0107041C0107041C0103881C0
103881C0101D01C0101D01C0100E01C0100E01C0380E01C0FE040FF81D177F9620>I<FC00FE1E
00381F001017001013801011C01011C01010E010107010103810103810101C10100E10100F1010
07101003901001D01001D01000F0100070100030380030FE001017177F961A>I<00FC00030300
0E01C01C00E0380070300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C
7000387000383000303800701C00E00E01C003030000FC0016177E961B>I<FFFE001C03801C00
C01C00601C00701C00701C00701C00701C00601C00C01C03801FFE001C00001C00001C00001C00
001C00001C00001C00001C00001C00001C0000FF800014177F9618>I<FFFC001C03801C00C01C
00E01C00701C00701C00701C00701C00E01C00C01C03801FFE001C07801C01C01C00E01C00E01C
00E01C00E01C00E01C00E11C00E11C0072FF803C18177F961A>82 D<0FC4302C601C400CC004C0
04C004E00070007F003FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E96
14>I<7FFFF8603818403808403808803804803804803804003800003800003800003800003800
00380000380000380000380000380000380000380000380000380000380007FFC016177F9619>
I<FF80FE1C00381C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C00
101C00101C00101C00101C00101C00100E0020060020030040018180007E0017177F961A>I<FF
80FE3C00381C00101C00100E00200E002007004007004007004003808003808003C18001C10001
C10000E20000E20000F60000740000740000380000380000380000100017177F961A>I<FF83FC
1F01E00E008007008007810003820001C20001E40000E800007800007800003800007C00005E00
008E000187000107800203800601C00401E00C00E01C00F0FF03FE17177F961A>88
D<FCFCC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FCFC06217D980A
>91 D<FCFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFCFC062180
980A>93 D<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>
97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001F06001C0300
1C03801C01801C01C01C01C01C01C01C01C01C01801C03801C03001B0E0010F8001217809614>
I<07F01838303870106000E000E000E000E000600070083008183007C00D0E7F8D10>I<007E00
000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00
E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CFC012177F9614>I<0FC0186030
307038E018FFF8E000E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C
001C001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF800C17
80960B>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006
C006600C38380FE010157F8D12>I<FC00001C00001C00001C00001C00001C00001C00001C0000
1C00001C7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
1C0700FF9FE01317809614>I<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780
960A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C3F801C1C001C18
001C20001C40001CC0001FE0001CF0001C70001C78001C3C001C1E001C1E00FF3FC01217809613
>107 D<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C00FF80091780960A>I<FC7C1F001D8E63801E0781C01C0701C01C0701C01C
0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D0E808D
1E>I<FC7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
1C0700FF9FE0130E808D14>I<07C018303018600C600CE00EE00EE00EE00EE00E701C30181830
07C00F0E7F8D12>I<FCF8001F0E001C03001C03801C01801C01C01C01C01C01C01C01C01C0180
1C03801C07001F0E001CF8001C00001C00001C00001C00001C0000FF80001214808D14>I<07C2
001C2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE
00000E00000E00000E00000E00000E00007FC012147F8D13>I<FCF01D381E381C101C001C001C
001C001C001C001C001C001C00FF800D0E808D0E>I<1F4060C0C040C040E000FF007F801FC001
E080608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FF8038003800380038
0038003800380038403840384038401C800F000A147F930E>I<FC3F001C07001C07001C07001C
07001C07001C07001C07001C07001C07001C07001C0F000E170003E7E0130E808D14>I<FE1F3C
0E3C0C1C081C080E100E100720072003C003C003C001800180100E7F8D13>I<FCFE7C38383838
38101C3C201C3C201C4C200E4E400E4E400E8640078780078780070380030300030300160E7F8D
19>I<FE3F3C181C100E20074007C0038001C002E004F008701838383CFC7F100E7F8D13>I<FE1F
3C0E3C0C1C081C080E100E100720072003C003C003C00180018001000100E200E200A400780010
147F8D13>I<FFFFFFFFC02201808823>124 D E /Ff 10 58 df<1F00318060C04040C060C060
C060C060C060C060C060C060404060C031801F000B107F8F0F>48 D<0C003C00CC000C000C000C
000C000C000C000C000C000C000C000C000C00FF8009107E8F0F>I<1F00618040C08060C06000
60006000C00180030006000C00102020207FC0FFC00B107F8F0F>I<1F00218060C060C000C000
8001800F00008000400060C060C060804060801F000B107F8F0F>I<0300030007000F000B0013
00330023004300C300FFE003000300030003001FE00B107F8F0F>I<20803F002C002000200020
002F0030802040006000600060C06080C061801F000B107F8F0F>I<0780184030C060C06000C0
00CF00F080E040C060C060C060406060C030801F000B107F8F0F>I<40007FE07FC08080808001
000200040004000C0008000800180018001800180018000B117E900F>I<1F00318060C060C060
C071803F000F00338061C0C060C060C060404060801F000B107F8F0F>I<1F00318060C0C040C0
60C060C06040E021E01E600060004060C0608043003E000B107F8F0F>I
E /Fg 10 58 df<0F0030C0606060604020C030C030C030C030C030C030C030C030C030402060
60606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C000C000C00
0C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060F070F0306030007000700060
00C001C00180020004000810101020207FE0FFE00C137E9211>I<0FC030707038703870380038
003000E00FC0007000380018001C601CF01CF018E03860701FC00E137F9211>I<006000E000E0
0160026006600C600860106020606060C060FFFC0060006000600060006003FC0E137F9211>I<
60607FC07F8044004000400040004F0070C040E0006000700070E070E070E06040E021C01F000C
137E9211>I<07C00C201070207060006000C000CF00D0C0E060C020C030C030C0304030602020
6010C00F000C137E9211>I<40007FFC7FF8401080108020004000800100010003000200060006
000E000E000E000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800F
E031F06078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0
30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I
E /Fh 59 122 df<183C3C3C0404080810204080060C779C0D>39 D<1838783808081010204040
80050C7D830D>44 D<FFC0FFC0FFC00A037D890F>I<3078F06005047C830D>I<003C0000C60001
83000303000603000603800E03800C03801C03801C0300380700380700380700380700700E0070
0E00700E00700E00E01C00E01C00E01C00E03800E03800E03000C06000E0600060C0007180001E
0000111D7B9B15>48 D<00020006000C001C007C039C0038003800380038007000700070007000
E000E000E000E001C001C001C001C003800380038003800780FFF00F1C7C9B15>I<003C0000C3
000101800201800201C00441C00441C00841C00841C00841C01083801083801107000E0600000C
0000180000300000C0000100000600000800001001001002002002004006007E0C00C7F80083F8
0080E000121D7C9B15>I<0001800001C000038000038000038000030000070000070000060000
0E00000C00001C0000180000180000300000300000600000400000C600018E00010E00020E0006
1C000C1C00181C003F1C0040F800803F0000380000380000700000700000700000700000E00000
600012247E9B15>52 D<00C06000FFC001FF8001FE000100000100000200000200000200000200
00047800058C00060600040600080600000700000700000600000E00000E00700E00700C00E01C
0080180080380040300040600021C0001F0000131D7C9B15>I<09C04017E0801FE0803C610030
2700601A00400600400400800C0080080000180000100000300000600000600000600000C00000
C00001C0000180000380000380000300000700000700000700000E00000E00000C0000121D799B
15>55 D<001E000061000081800180800300C00300C006018006018006018007030007860003CC
0003F00001F000037800063C00081E00180E00300E00600600600600600600C00C00C00C00C018
0060100060200030C0000F0000121D7C9B15>I<003C0000C6000183000303000603000E03000C
03801C03801C03001C0300380700380700380700380F00380E00181E00181E000C6C00079C0000
1C00001800003800003000006000E0C000E0C0008180008600007C0000111D7B9B15>I<060F0F
06000000000000000000003078F06008127C910D>I<0000180000001800000038000000380000
007800000078000000B8000001B800000138000002380000023C0000041C0000041C0000081C00
00181C0000101C0000201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C
0002001C0004000E000C000E001C001E00FF00FFC01A1D7E9C1F>65 D<01FFFE00003C07800038
03C0003801C0003801C0003801C0007001C0007003C0007003C00070078000E0070000E00E0000
E03C0000FFF80001C01C0001C00E0001C00F0001C00F0003800F0003800F0003800F0003800F00
07001E0007001C0007003C00070078000E01E000FFFF80001A1C7D9B1D>I<0003F020001E0C60
003002E000E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C0000
00780000007800000078000000F0000000F0000000F0000000F0000000F0000400F0000400F000
0400F0000800700008007000100038002000180040000C0180000706000001F800001B1E7A9C1E
>I<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F0007000700070007000
7000F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001C001C0038003C0
03800380038007800380070007000E0007001C0007003800070070000E01C000FFFF00001C1C7D
9B1F>I<01FFFFE0003C00E0003800600038004000380040003800400070004000700040007020
400070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080000381
0100038001000380020003800200070004000700040007000C00070018000E007800FFFFF0001B
1C7D9B1C>I<01FFFFC0003C01C0003800C0003800800038008000380080007000800070008000
7020800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C08000
03810000038000000380000003800000070000000700000007000000070000000F000000FFF000
001A1C7D9B1B>I<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000
801E0000801C0000803C0000803C000000780000007800000078000000F0000000F0000000F001
FFC0F0001E00F0001C00F0001C00F0001C00F0001C00700038007000380038003800180078000C
0090000707100001F800001B1E7A9C20>I<01FFCFFE003C01E0003801C0003801C0003801C000
3801C00070038000700380007003800070038000E0070000E0070000E0070000FFFF0001C00E00
01C00E0001C00E0001C00E0003801C0003801C0003801C0003801C000700380007003800070038
00070038000F007800FFE7FF001F1C7D9B1F>I<01FFC0003C0000380000380000380000380000
700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800003
80000380000380000700000700000700000700000F0000FFE000121C7E9B10>I<007FF0000780
000700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800
00380000380000380000700000700000700000700060E000E0E000C0C00081C000838000470000
3C0000141D7B9B16>I<01FFC0FF003C003C003800300038004000380080003801000070020000
700400007010000070200000E0400000E0C00000E1C00000E5C00001C8E00001D0E00001E0E000
01C07000038070000380700003803800038038000700380007001C0007001C0007001C000F001E
00FFE0FF80201C7D9B20>I<01FFE0003C00003800003800003800003800007000007000007000
00700000E00000E00000E00000E00001C00001C00001C00001C000038008038008038008038010
0700100700300700600700E00E03C0FFFFC0151C7D9B1A>I<01FE0007F8003E000780002E000F
00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E00008E01
1C00008E011C00008E021C00008E021C0001070438000107043800010708380001071038000207
107000020720700002072070000207407000040740E000040780E000040700E0000C0700E0001C
0601E000FF861FFC00251C7D9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E00
40004700800047008000470080004380800083810000838100008181000081C1000101C2000101
C2000100E2000100E2000200E4000200740002007400020074000400380004003800040038000C
0018001C001000FF8010001F1C7D9B1F>I<0007F000001C1C0000700E0000E0070001C0038003
800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C0780003C0
F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070
007800E0003801C0001C0380000E0E000003F800001A1E7A9C20>I<01FFFC00003C0700003803
80003801C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E0
0E0000E0380001FFE00001C0000001C0000001C000000380000003800000038000000380000007
0000000700000007000000070000000F000000FFE000001A1C7D9B1C>I<01FFF800003C0E0000
38070000380380003803800038038000700780007007800070078000700F0000E00E0000E01C00
00E0700000FFC00001C0C00001C0600001C0700001C07000038070000380700003807000038070
000700F0000700F0400700F0400700F0800F007880FFE0790000001E001A1D7D9B1E>82
D<000F8400304C00403C00801801001803001803001806001006001006000007000007000003E0
0003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001806001806003
00600200F00400CC180083E000161E7D9C17>I<1FFFFFC01C0701C0300E00C0200E0080600E00
80400E0080401C0080801C0080801C0080001C0000003800000038000000380000003800000070
000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0000001
C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018000E0010000E
0010000E0010001C0020001C0020001C0020001C00200038004000380040003800400038004000
70008000700080007000800070008000E0010000E0010000E0010000E0020000E0020000E00400
00E00400006008000030300000104000000F800000191D779B1F>I<FF83FF0FF03C007001C038
007001803800F001003800F0020038017002003801700400380270040038027008001C04700800
1C047010001C087010001C087020001C107020001C107040001C207040001C207080001C407180
001C407100001C807200001D807200001D007400001E007400001E007800001C007800001C0070
0000180070000018006000001000600000241D779B29>87 D<01FF81FE001E00F0001C0060001E
0080000E0180000E0100000F02000007040000070800000790000003A0000003C0000001C00000
01C0000001E0000002E0000004E0000008F0000010700000207000006038000040380000803C00
01001C0002001C0006001E001E001E00FF80FFC01F1C7E9B1F>I<00FFFF8000F0070001C00E00
01801E0001001C0001003800020070000200E0000201C0000001C0000003800000070000000E00
00001C0000001C0000003800000070000000E0080001C0100001C0100003801000070020000E00
20001C0060003C00C0003801C00070078000FFFF8000191C7D9B19>90 D<03CC063C0C3C181C38
38303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97
D<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870387038
E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C38383000
70007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F800003800003
80000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C003838
00303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C38
00111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000E008601060
2030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C00003800003800003800
00380000380003FF8000700000700000700000700000700000E00000E00000E00000E00000E000
01C00001C00001C00001C00001C000038000038000038000030000030000070000C60000E60000
CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C3838
30383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C000
01C0000380000380000380000380000700000700000700000700000E78000E8C000F0E000E0E00
1C0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100E03200
601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600470047008E
008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<0FC00001C0
0001C0000380000380000380000380000700000700000700000700000E0F000E11000E23800E43
801C83001C80001D00001E00003F800039C00038E00038E00070E20070E20070E20070E400E064
00603800111D7D9C13>107 D<1F800380038007000700070007000E000E000E000E001C001C00
1C001C0038003800380038007000700070007000E400E400E400E40068003800091D7C9C0B>I<
3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701
C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>
I<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C
40381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C300E700E700E
E01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008E0C008E0C0
11C0E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C00
0E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C3C26C246
8747078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112>114
D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F000E12
7D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C00
1C001C001C00384038403840388019000E000B1A7D990E>I<1E0300270700470700470700870E
00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C5900078E
0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818083808181018
200C4007800F127C9113>I<1E01832703874703874703838707018707010E07010E07011C0E02
1C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>I<070E001991
0010E38020E38041C30041C00001C00001C000038000038000038000038000070200670200E704
00CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C
1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>I
E /Fi 5 104 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003
C010107E9115>15 D<0000030000000003000000000180000000018000000000C0000000006000
7FFFFFF000FFFFFFF8000000000E00000000070000000001E0000000007800000001E000000003
8000000006000000001C00FFFFFFF8007FFFFFF0000000006000000000C0000000018000000001
80000000030000000003000025187E952A>41 D<0000600000600000C00000C000018000018000
0180000300000300000600000600000C00000C0000180000180000180000300000300000600000
600000C00000C0000180000180000300000300000300000600000600000C00000C000018000018
0000300000300000300000600000600000C0000040000013287A9D00>54
D<003C00E001C00180038003800380038003800380038003800380038003800380038003000700
1C00F0001C00070003000380038003800380038003800380038003800380038003800380018001
C000E0003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
800380038003800380018001C000E0003C00E001C0018003800380038003800380038003800380
03800380038003800380030007001C00F0000E297D9E15>I E /Fj 57 123
df<3803807C07C0FE0FE0FF0FF0FF0FF07F07F03B03B00300300300300700700600600600600C
00C01C01C018018070070020020014117EA21D>34 D<387CFEFFFF7F3B03030706060C1C187020
08117C8610>44 D<FFFCFFFCFFFCFFFC0E047F8C13>I<387CFEFEFE7C3807077C8610>I<00FE00
07FFC00F83E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC007EFC007EFC007E
FC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C7C007C3E00F8
3E00F81F01F00F83E007FFC000FE0017207E9F1C>48 D<00180000780001F800FFF800FFF80001
F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F
FFE013207C9F1C>I<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F8
3803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C018
0380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FF
C00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE
0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01
FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE000
1FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E070
07E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17
207E9F1C>I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC000180000180000180000
18000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8
FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F0
7007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00
F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00
F00783E003FFC000FF0017207E9F1C>I<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87F
FFF0E00060E000C0C00180C00300C00300000600000C00001C0000180000380000780000780000
F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F00003F00003F00001
E00017227DA11C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E00783F00783F8078
3FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FEF0003E
F0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C>I<01FE0007FF
800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC007CFC007EFC007EFC007EFC007E7C00
FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00007C1E007C3F00F83F00F83F00F03F01
E01E03C01C0F800FFE0003F80017207E9F1C>I<07FC001FFF00380F807007C0F807E0FC07E0FC
07E0FC07E07807E0000FC0001F80001F00003C0000780000700000E00000E00000C00000C00000
C00000C00000C00000C00000000000000000000000000000000001C00003E00007F00007F00007
F00003E00001C00013237DA21A>63 D<000070000000007000000000F800000000F800000000F8
00000001FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E
7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000
600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00
030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65
D<FFFFFF8000FFFFFFE00007F001F80007F000FC0007F0007E0007F0007E0007F0007F0007F000
7F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FE0007F000FC0007F003F80007FF
FFF00007FFFFF00007F001FC0007F0007E0007F0003F0007F0003F8007F0001F8007F0001FC007
F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0003F8007F0003F8007F0007F00
07F001FE00FFFFFFF800FFFFFFC00022227EA128>I<0003FE0080001FFF818000FF01E38001F8
003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E
000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
FE00000000FE000000007E000000007E000001807F000001803F000001803F000003801F800003
000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227D
A128>I<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F0007F0001F8007F0000FC0
07F00007E007F00007E007F00007F007F00003F007F00003F007F00003F007F00003F807F00003
F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F000
03F007F00003F007F00003F007F00007E007F00007E007F0000FC007F0001F8007F0003F0007F0
007E0007F003FC00FFFFFFF000FFFFFF800025227EA12B>I<FFFFFFFCFFFFFFFC07F000FC07F0
003C07F0001C07F0000C07F0000E07F0000E07F0000607F0180607F0180607F0180607F0180007
F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180307F01803
07F0000307F0000607F0000607F0000607F0000E07F0000E07F0001E07F0003E07F001FCFFFFFF
FCFFFFFFFC20227EA125>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0001807F000
1C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007F0780007FF
F80007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F0000007F0000007
F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E227EA123>I<FF
FF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0
07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007FFFFFF
C007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F000
1FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
001FC0FFFF83FFFEFFFF83FFFE27227EA12C>72 D<FFFFE0FFFFE003F80003F80003F80003F800
03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
FFFFE0FFFFE013227FA115>I<FFFFE000FFFFE00007F0000007F0000007F0000007F0000007F0
000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F0001807F00038
07F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D227EA122>76
D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC000037E0067E
000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0060FC00307
E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F00C07E00601
F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E006007E6007
E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F0007E0FFF0
0F00FFFFFFF00600FFFF30227EA135>I<0007FC0000003FFF800000FC07E00003F001F80007E0
00FC000FC0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E
00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0
FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F
000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227DA12A>79
D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E07F0007E07F0007F07F0007F07F0
007F07F0007F07F0007F07F0007E07F0007E07F000FC07F001FC07F007F007FFFFE007FFFF0007
F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000
07F0000007F0000007F00000FFFF8000FFFF800020227EA126>I<FFFFFE0000FFFFFFC00007F0
07F00007F001F80007F000FC0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007
F0007F0007F0007F0007F0007E0007F000FC0007F001F80007F007F00007FFFFC00007FFFF8000
07F00FE00007F007F00007F003F80007F001FC0007F001FC0007F001FC0007F001FC0007F001FC
0007F001FC0007F001FC0007F001FC0007F001FC0607F000FE0607F000FF0CFFFF803FF8FFFF80
0FF027227EA12A>82 D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC00
0CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F0000
3F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F
>I<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003
F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F8000000
03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800
000003F8000003FFFFF80003FFFFF80022227EA127>I<FFFF803FFCFFFF803FFC07F000018007
F000018007F000018007F000018007F000018007F000018007F000018007F000018007F0000180
07F000018007F000018007F000018007F000018007F000018007F000018007F000018007F00001
8007F000018007F000018007F000018007F000018007F000018007F000018007F000018003F000
030003F800030001F800060000FC000E00007E001C00003F80F800000FFFE0000001FF00002622
7EA12B>I<FFFF0FFFF01FFEFFFF0FFFF01FFE0FF000FF0000E007F0007F0000C007F0007F0000
C003F8007F80018003F8003F80018003FC003F80038001FC003FC0030001FC003FC0030000FE00
7FE0060000FE006FE0060000FF006FE00600007F00C7F00C00007F00C7F00C00007F80C7F81C00
003F8183F81800003F8183F81800001FC383FC3000001FC301FC3000001FE301FC3000000FE600
FE6000000FE600FE6000000FF600FFE0000007FC007FC0000007FC007FC0000003FC007F800000
03F8003F80000003F8003F80000001F0001F00000001F0001F00000000F0001E00000000E0000E
00000000E0000E000037227FA13A>87 D<0400400E00E0180180380380300300600600600600E0
0E00C00C00C00C00DC0DC0FE0FE0FF0FF0FF0FF07F07F03E03E01C01C014117AA21D>92
D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01
F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97
D<FF000000FF0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00
00001F0000001F0000001F0000001F0FE0001F3FF8001FF07C001F801E001F001F001F000F801F
000F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000F80
1F001F801F801F001FC03E001EE07C001C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83
F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00
007E00003E00301F00600FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000
003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E00
01FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E
00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83
BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC
00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003
FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000
0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F8000
0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800
13237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03
C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC7000
3EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF0018217E951C>I<FF000000
FF0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
001F0000001F0000001F07E0001F1FF8001F307C001F403C001F803E001F803E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
003E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>I<1C003E007F007F007F003E001C
000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I<FF000000FF0000001F000000
1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
001F00FF801F00FF801F0038001F0060001F01C0001F0380001F0700001F0E00001F1C00001F7E
00001FFF00001FCF00001F0F80001F07C0001F03E0001F01E0001F01F0001F00F8001F007C001F
003C00FFE0FFC0FFE0FFC01A237EA21E>107 D<FF00FF001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F00FFE0FFE00B237EA210>I<FF07F007F000FF1FFC1FFC001F303E303E001F40
3E403E001F801F801F001F801F801F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530
>I<FF07E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F
003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E00FFE1FFC0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F87C007C7C00
7C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83
E007FFC000FE0017167E951C>I<FF0FE000FF3FF8001FF07C001F803E001F001F001F001F801F
001F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F001F80
1F001F801F803F001FC03E001FE0FC001F3FF8001F0FC0001F0000001F0000001F0000001F0000
001F0000001F0000001F0000001F000000FFE00000FFE000001A207E951F>I<FE1F00FE3FC01E
67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00001F00001F00001F00001F
00001F00001F00001F00001F0000FFF000FFF00013167E9517>114 D<0FF3003FFF00781F0060
0700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E0
0380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000018000018000038000
0380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F8000
0F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE00
00F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E001F003E001F003E001F
003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FFE01FE0FFE01FE00F800600
0F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F860
00007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E00001B16
7F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F807801800F807C01800F807C018007C07E03
0007C0DE030007E0DE070003E0DF060003E18F060001F18F0C0001F38F8C0001FB079C0000FB07
D80000FE03D800007E03F000007E03F000007C01F000003C01E000003800E000001800C0002516
7F9528>I<FFE07FC0FFE07FC00F801C0007C0380003E0700003F0600001F8C00000F98000007F
8000003F0000001F0000001F8000003FC0000037C0000063E00000C1F00001C0F8000380FC0007
007E000E003E00FF80FFE0FF80FFE01B167F951E>I<FFE01FE0FFE01FE00F8006000F8006000F
C00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F8600000F86000007CC000
007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E0000000C0000000C00
000018000078180000FC380000FC300000FC60000069C000007F8000001F0000001B207F951E>
I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC0000F80001F00003F0
3007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE014167E9519>I
E /Fk 44 127 df<E038F078F078F078F078F078F078F078E038E03860300D0B7C9816>34
D<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C3
0079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF
003FFE001FF80007E00001C00001C00000C00011207E9C16>36 D<00E001E0038007000E001C00
1C0038003800700070007000E000E000E000E000E000E000E000E000E000700070007000380038
001C001C000E000700038001E000E00B217A9C16>40 D<C000E000700038001C000E000E000700
070003800380038001C001C001C001C001C001C001C001C001C0038003800380070007000E000E
001C0038007000E000C0000A217B9C16>I<FFFF80FFFF80FFFF8011037E8D16>45
D<70F8F8F8700505788416>I<000180000380000380000700000700000E00000E00001C00001C
0000380000380000700000700000E00000E00001C00001C0000380000380000700000700000E00
000E00001C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03
E0000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E0
0380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E98
16>I<70F8F8F870000000000000000070F8F8F8700512789116>58 D<7FFF00FFFF80FFFF8000
0000000000000000000000000000FFFF80FFFF807FFF00110B7E9116>61
D<00F80003FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381
C0E381C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC001219
7E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00
071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE0
7F1FC013197F9816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C
001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFF
E0FFFFE07FFFE013197F9816>69 D<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C0700
1C07001C07001FFF001FFF001FFF001C07001C07001C07001C07001C07001C07001C07001C0700
1C07007F1FC0FFBFE07F1FC013197F9816>72 D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B
1B803B1B803B1B803BBB8039B38039B38039B38039B38039F38038E38038E38038038038038038
0380380380380380FE0FE0FE0FE0FE0FE013197F9816>77 D<7FE000FFF8007FFC001C1E001C0F
001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E
001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF00
781F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F00000700
000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7F07F0FF8F
F87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE0000F8001519809816>85
D<FE0FE0FF1FE0FE0FE01C07001C07000E0E000E0E00071C00071C00071C0003B80003B80001F0
0001F00000E00000E00000E00000E00000E00000E00000E00000E00003F80007FC0003F8001319
7F9816>89 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00
E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<7E0000FE00007E00000E
00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E
00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE
3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F
00007F00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E007
00E00700E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816
>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010
127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C000
01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF00
3FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C
000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000
E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00000E00000E
00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E03800E03800E
03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003C0018000000000
000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7F
FF101A7D9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E
0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF
CFF07F87F01419809816>107 D<FFC000FFC000FFC00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78E03870E03870E0
3870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7CF8FE3C781512809116>
I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03
800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F0070
0700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E00011
127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E0070
0E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E0000
7FC000FFE0007FC000141B809116>I<FF0FC0FF3FE0FF7FE007F04007C0000780000780000700
00070000070000070000070000070000070000070000FFFC00FFFC00FFFC0013127F9116>114
D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F12
7D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007000007
000007000007000007000007010007038007038007038007870003FE0001FC0000F80011177F96
16>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E0380
0E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F
000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E0
0013127F9116>I<FF1FE0FFBFE0FF1FE038038038038038038038038038E38019F30019F30019
B3001DB7001DB7001DB7001DB7000F1E000F1E000F1E0013127F9116>I<7F1FC07F3FC07F1FC0
0F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0
FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C
00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E00001C0
0079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFFC07FFFC0700780700F0070
1E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012
127F9116>I<1C303F78FFF8F7E061C00D057C9816>126 D E /Fl 86 125
df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E
01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC
001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000
0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17
>I<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00
E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E
00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00
0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I<C0C0
61803F000C000A047B9915>20 D<60F0F0F0F0F0F0F06060606060606060606060606000000000
0060F0F060041E7C9D0C>33 D<6060F0F0F8F86868080808080808101010102020404080800D0C
7F9C15>I<0080008007E01898308460824081C087C08FC08FC086E080F0807E803FC01FF00FF8
03FC00BE008E00876087F083F083E0838082408240842088189007E00080008010217E9E15>36
D<00E0000001900000030800000308000007080000070800000708000007080000071000000710
0000072000000740000003C03FE003800F00038006000380040005C0040009C0080010E0100030
E010006070200060702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C040
1830E18007C03E001B1F7E9D20>38 D<60F0F8680808081010204080050C7C9C0C>I<00400080
0100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E0
00E000E000E000E000E000600060006000700030003000180018000C000C000600020001000080
00400A2A7D9E10>I<800040002000100018000C000C0006000600030003000380018001800180
01C001C001C001C001C001C001C001C001C001C001C001C0018001800180038003000300060006
000C000C00180010002000400080000A2A7E9E10>I<60F0F0701010101020204080040C7C830C>
44 D<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<00010003000600060006000C000C00
0C0018001800180030003000300060006000C000C000C001800180018003000300030006000600
0C000C000C00180018001800300030003000600060006000C000C00010297E9E15>I<03C00C30
1818300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760
066006700E300C300C18180C3007E0101D7E9B15>I<030007003F00C700070007000700070007
00070007000700070007000700070007000700070007000700070007000700070007000F80FFF8
0D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C0038
0070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C
781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F700FF80FF80FF8
0FF00E401C201C183007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00
009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0
001C00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC0
20002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F80
0E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3
E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0101D
7E9B15>I<4000007FFF807FFF007FFF0040020080040080040080080000100000100000200000
600000400000C00000C00001C00001800001800003800003800003800003800007800007800007
8000078000078000078000030000111D7E9B15>I<03E00C301008200C20066006600660067006
780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007
E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F30
0F18170C2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F06000
00000000000000000060F0F06004127C910C>I<60F0F0600000000000000000000060F0F07010
10101020204080041A7C910C>I<7FFFFFC0FFFFFFE00000000000000000000000000000000000
000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
D<003F800000C0600003001800040004000800020010000100201F00802070808040E0404040C0
384041C038408180382083803820838038208380382083803820838038208180382041C0382040
C0384040E0784020709880201F0F00100000000800000004000000030001E000C01F80003FF000
1B1D7E9C20>64 D<000600000006000000060000000F0000000F0000000F000000178000001780
00001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180
F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E
001F00FF80FFF01C1D7F9C1F>I<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F
001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F
000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D>I<001F808000E0618001801980
070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F00000
00F0000000F0000000F0000000F0000000F0000000F00000007000008078000080780000803800
00801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C1E>I<FFFF
C0000F00F0000F003C000F000E000F0007000F0007000F0003800F0003C00F0001C00F0001C00F
0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C0
0F0003C00F0003800F0007800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<
FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F0600
0FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F000C
0F003CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F02
040F02000F02000F02000F06000FFE000F06000F02000F02000F02000F02000F00000F00000F00
000F00000F00000F00000F00000F8000FFF800161C7E9B1B>I<001F808000E061800180198007
0007800E0003801C0003801C00018038000180780000807800008070000080F0000000F0000000
F0000000F0000000F0000000F0000000F000FFF0F0000F80700007807800078078000780380007
801C0007801C0007800E00078007000B800180118000E06080001F80001C1E7E9C21>I<FFF3FF
C00F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
3C000F003C000F003C000FFFFC000F003C000F003C000F003C000F003C000F003C000F003C000F
003C000F003C000F003C000F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FF
F00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F000F000F00FFF00C1C7F9B0F>I<1FFF00F8007800780078007800780078
00780078007800780078007800780078007800780078007800787078F878F878F878F0F040E021
C01F00101D7F9B15>I<FFF03FE00F000F000F000C000F0008000F0010000F0020000F0040000F
0080000F0100000F0200000F0400000F0E00000F1F00000F2F00000F2780000F4780000F83C000
0F01E0000F01E0000F00F0000F00F8000F0078000F003C000F003C000F001E000F001F000F001F
80FFF07FF01C1C7E9B20>I<FFF8000F80000F00000F00000F00000F00000F00000F00000F0000
0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F00080F00080F0018
0F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000F8
000BC00178000BC00178000BC001780009E002780009E002780008F004780008F004780008F004
7800087808780008780878000878087800083C107800083C107800083C107800081E207800081E
207800081E207800080F407800080F40780008078078000807807800080780780008030078001C
03007800FF8307FF80211C7E9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E004
0008F0040008F8040008780400083C0400083C0400081E0400080F0400080F0400080784000807
C4000803C4000801E4000801E4000800F40008007C0008007C0008003C0008003C0008001C0008
000C001C000C00FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C000E000E001C
0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0
F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007
000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F00
3C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00
000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C
>I<FFFF00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F
001C000F003C000F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F0078000F007800
0F0078000F0078000F0078000F0078000F0078100F0078100F0038100F003C20FFF01C20000007
C01C1D7E9B1F>82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000
F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C0
8001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00
C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F
0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F000400
0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
000700080007800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<FFE00F
F01F0003C00F0001800F0001000F800300078002000780020003C0040003C0040003C0040001E0
080001E0080001F0080000F0100000F0100000F830000078200000782000003C4000003C400000
3C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600001C1D7F9B
1F>I<FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F002007
80278020078027802003C027804003C043C04003C043C04003E043C04001E081E08001E081E080
01E081E08000F100F10000F100F10000F100F100007900FA00007A007A00007A007A00003E007C
00003C003C00003C003C00003C003C00001800180000180018000018001800281D7F9B2B>I<7F
F0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F0400000788000007D8000
003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E0000041F0
0000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>
I<FFF007FC0F8001E00780008007C0018003C0010003E0020001F0020000F0040000F804000078
0800007C1800003C1000001E2000001F2000000F4000000FC00000078000000780000007800000
07800000078000000780000007800000078000000780000007800000078000007FF8001E1C809B
1F>I<7FFFF07C01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C00
00780000F00000F00001E00003E00003C0100780100780100F00101F00301E00203C00203C0060
7800E0F803E0FFFFE0141C7E9B19>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07297C9E0C>I<0808101020204040404080808080
8080B0B0F8F8787830300D0C7A9C15>I<FEFE0606060606060606060606060606060606060606
0606060606060606060606060606060606FEFE0729809E0C>I<1FC000307000783800781C0030
1C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F
870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00
001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00
E01C00C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870306000E0
00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700000700
00070000070000070000070000070000070000070000070003E7000C1700180F00300700700700
600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0
131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E0006000700230021804
0C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<0003
8003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000
003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E
0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C
00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000
00000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
60E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C
00001C00001C00001C00001C3FC01C0F001C0C001C08001C10001C20001C40001CE0001DE0001E
70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C001C00
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E01C
001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<
FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
1C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C001806003003007003806001
80E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212
7F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
00E01C01C01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C
0000FF8000131A7F9117>I<03C1000C3300180B00300F00700700700700E00700E00700E00700
E00700E00700E00700600700700700300F00180F000C370007C700000700000700000700000700
000700000700000700003FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C00
1C001C001C001C001C001C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F80
3FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C00
1C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003
C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C0100
1C01000E02000E020007040007040007040003880003880003D80001D00001D00000E00000E000
00E00000400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B
82000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001
803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000
700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E0
3C03801C01001C01000E02000E020007040007040007040003880003880003D80001D00001D000
00E00000E00000E000004000004000008000008000F08000F10000F300006600003C0000131A7F
9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FF
F80E127F9112>I<FFFFF01401808B15>I<FFFFFFFFFF802901808B2A>I
E /Fm 42 127 df<00C00000C00007F0001FFC003CCE0070C30060C300E0C780E0CF80E0CF80F0
CF80F8C700FEC0007FE0007FF8003FFC001FFE000FFF0003FF0000DF8020CF8070C780F8C380F8
C380F0C380C0C30060C70070C60038DE001FF80007E00000C00000C00011217D9E18>36
D<FFE0FFE0FFE0FFE00B047F8A10>45 D<000180000380000380000700000700000700000E0000
0E00001C00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001
C00001C0000380000380000380000700000700000E00000E00000E00001C00001C00001C000038
0000380000700000700000700000E00000E00000C0000011297D9E18>47
D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF
807FFF80111B7D9A18>49 D<00038000000380000007C0000007C0000007C000000FE000000FE0
00001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C0
7E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FF
C07FFEFFC07FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00FC007E0
0FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000FFFFE000FC00F800FC007
C00FC007E00FC003E00FC003F00FC003F00FC003F00FC003F00FC003F00FC007E00FC007E00FC0
1FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FFF8E003F80FE007C003E00F8001E01F00
00E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC
000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C00300
03F80E0000FFFC00001FE0001B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F0
0FC001F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC000
7E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC0
07E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC0
03000FC003800FC003800FC181800FC181800FC181800FC180000FC380000FFF80000FFF80000F
C380000FC180000FC180000FC180600FC180600FC000E00FC000C00FC000C00FC001C00FC001C0
0FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFFFF07E007E007E007E007E007E0
07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0FFFFFF
FF101C7F9B12>73 D<FFFF00FFFF000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC006
0FC00E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>76 D<FFC00003FFFFE00007FF0FE00007F00D
F0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E0061F0
0C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C301F00C07C301
F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801F00C00F801F0FFC070
1FFFFFC0701FFF281C7E9B2D>I<FFFFF800FFFFFE000FC03F800FC00F800FC007C00FC007E00F
C007E00FC007E00FC007E00FC007E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC00000
0FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
00FFFC0000FFFC00001B1C7E9B21>80 D<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC0
07C0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000F
C03E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F8000
0FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C300FFFC01FE
00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000
FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0
E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81E0701F80E060
1F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000
001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
00001F8000001F800007FFFE0007FFFE001C1C7E9B21>I<FFFC01FF80FFFC01FF800FC0001800
07E000300007E000300007F000700003F000600003F800E00001F800C00001FC00C00000FC0180
0000FC018000007E030000007E030000007F070000003F060000003F8E0000001F8C0000001FCC
0000000FD80000000FD800000007F000000007F000000007F000000003E000000003E000000001
C000000001C00000211C7F9B24>86 D<7FFFFC7FFFFC7E01F87803F87003F0E007E0E007E0C00F
C0C01FC0C01F80003F00007F00007E0000FC0000FC0001F80003F80603F00607E0060FE0060FC0
0E1F800E1F801C3F001C7F003C7E00FCFFFFFCFFFFFC171C7D9B1D>90 D<0FF8001C1E003E0F80
3E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC0
3E13F80FE1F815127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F
00001F00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E001C1F00
3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C0300
0E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F00001F00001F00001
F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801
F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C
01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F
038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F8000
0F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F8000
0F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07
303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFF
C00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF
0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000000000000000
FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F
9D0E>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0F
F81F0FF81F03801F07001F0C001F18001F70001FF8001FFC001FBC001F3E001F1F001F0F001F0F
801F07C01F03E0FFC7FCFFC7FC161D7F9C19>107 D<FF00FF001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0
FFE00B1D7F9C0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C0
1F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F01F80
F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7
FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F8
00F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<FF3F80FFE1E0
1F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C1F0078
1F80F01FC1E01F3F001F00001F00001F00001F00001F00001F0000FFE000FFE000171A7F911B>
I<FE3E00FE47001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00
001F00001F00001F0000FFF000FFF00011127F9114>114 D<1FD830786018E018E018F000FF80
7FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<03000300030003000700
07000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F0807
9803F00E1A7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F
00601F80E00F80C00FC0C007C18007C18003E30003E30001F60001F60001FE0000FC0000FC0000
780000780000300016127F9119>I<FFC7FCFFC7FC1F81800F838007C70003EE0001FC0001F800
00F800007C0000FE0001DF00039F00070F800607C00C03E0FF07FCFF07FC16127F9119>120
D<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003E30001F70001F60000FE
0000FC0000FC00007800007800003000003000007000706000F86000F8C000F980007300003E00
00161A7F9119>I<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003F00007E00007
C1800F81801F81801F03803E03007E07007C0F00FFFF0011127F9115>I<1E023FFC7FF880F00F
047C9C18>126 D E /Fn 32 123 df<0E1E1E1E1E02020404080810204080070F7D840F>44
D<0000030000000300000007000000070000000F0000000F0000001F0000002F0000002F000000
4F0000004F80000087800000878000010780000207800002078000040780000407800008078000
080780001007800030078000200780007FFF80004007C0008007C0008003C0010003C0030003C0
020003C0040003C0040003C00C0003C03C0007C0FF003FFC1E237DA224>65
D<00007F00800003808100000E00630000380027000070001F0000E0000E0001C0000E00038000
0E000700000E000F000004000E000004001E000004003C000004003C0000080078000000007800
0000007800000000F000000000F000000000F000000000F000000000F000000000E000000000E0
00002000E000002000E000004000E000004000F000008000700000800070000100003800020000
18000400001C0008000006003000000381C0000000FE000000212479A223>67
D<00FFFFF000000F003C00000F000E00000F000700001E000380001E000380001E0001C0001E00
01C0003C0001C0003C0001E0003C0001E0003C0001E000780001E000780001E000780001E00078
0001E000F00003C000F00003C000F00003C000F00003C001E000078001E000078001E000070001
E0000F0003C0000E0003C0001C0003C0003C0003C00038000780007000078000E000078001C000
07800700000F801C0000FFFFF0000023227DA125>I<00FFFFFF80000F000780000F000180000F
000180001E000180001E000180001E000100001E000100003C000100003C000100003C01010000
3C01000000780200000078020000007806000000780E000000FFFC000000F00C000000F00C0000
00F00C000001E008000001E008000001E008040001E000080003C000080003C000080003C00010
0003C000100007800020000780006000078000C000078001C0000F8007C000FFFFFF800021227D
A121>I<00FF800007FC000F80000F80000F80001780000F80001780001780002F000013C0002F
000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E000023C0021E000043
C0043C000043C0043C000043C0083C000041E0083C000081E01078000081E02078000081E02078
000081E04078000101E040F0000101E080F0000101E100F0000101E100F0000200F201E0000200
F201E0000200F401E0000200F801E0000400F803C0000400F003C0000400F003C0000C00E003C0
001E00C007C000FFC0C07FFC002E227DA12C>77 D<00FFFFC0000F0070000F003C000F001C001E
000E001E000E001E000F001E000F003C001E003C001E003C001E003C003C007800380078007000
7801E00078078000FFFC0000F00E0000F0070000F0038001E003C001E003C001E003C001E003C0
03C0078003C0078003C0078003C0078007800F0007800F0107800F01078007020F800702FFF803
8C000000F020237DA124>82 D<0001F020000E0C40001802C0003001C0006001C000E0018000C0
018001C0018001C0018003C0010003C0010003C0000003C0000003E0000001F8000001FF000000
FFE000007FF000001FF8000003FC0000007C0000003C0000001E0000001E0000001E0020001C00
20001C0020001C00200018006000380060003000700060007000C000C8018000C607000081FC00
001B247DA21B>I<1FFFFFF81E03C0381803C0183003C018200780182007801840078010400780
10400F0010800F0010800F0010000F0000001E0000001E0000001E0000001E0000003C0000003C
0000003C0000003C00000078000000780000007800000078000000F0000000F0000000F0000000
F0000001E0000001E0000001E0000001E0000003E00000FFFF00001D2277A123>I<3FFE03FF03
C0007803C0006003C00020078000400780004007800040078000400F0000800F0000800F000080
0F0000801E0001001E0001001E0001001E0001003C0002003C0002003C0002003C000200780004
0078000400780004007800040070000800F0000800F00010007000100070002000700040003000
400038018000180200000E0C000003F00000202377A124>I<007FFFFE007E001E0078003C0060
007800C000F000C001E0008003E0008003C00100078001000F0001001E0000003C0000007C0000
0078000000F0000001E0000003C00000078000000F8000000F0000001E0000003C004000780040
00F0008001F0008001E0008003C00100078001000F0003001E0006001E0006003C001E0078007C
00FFFFFC001F227DA11E>90 D<00F8C00185C00705C00E03800E03801C03803C03803807007807
00780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F07801415
7B9419>97 D<03C03F8003800380038007000700070007000E000E000E000E001C001CF81D0C1E
0E3C0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F001023
7BA216>I<007E0001C1000301800703800E07801C07803C0000380000780000780000780000F0
0000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416>I<00003C
0003F80000380000380000380000700000700000700000700000E00000E00000E00000E00001C0
00F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E00
F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803840E021C02
3C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830600F800F157A9416
>I<001F180030B800E0B801C07001C0700380700780700700E00F00E00F00E00F00E01E01C01E
01C01E01C01E01C01E03800E03800E0780060B8006170001E700000700000700000E00000E0000
0E00701C00F01800F0300060E0003F8000151F7E9416>103 D<00C001E001C001C00000000000
00000000000000000000001C002300430043008700870087000E000E001C001C001C0038003800
3840708070807080710032001C000B217BA00F>105 D<00F0000FE00000E00000E00000E00001
C00001C00001C00001C0000380000380000380000380000700000701E0070210070C700E10F00E
10F00E20600E40001D80001E00001FC0001C7000383800383800381C00381C2070384070384070
3840701880E01880600F0014237DA216>107 D<01E01FC001C001C001C0038003800380038007
000700070007000E000E000E000E001C001C001C001C0038003800380038007000700070007100
E200E200E200E200640038000B237CA20C>I<1C0F80F8002610C10C0047606606008780780700
8780780700870070070087007007000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C
001C01C01C001C01C01C001C01C038203803803840380380704038038070803803803080700700
31003003001E0023157B9428>I<1C0F002631C04740C08780E08780E08700E08700E00E01C00E
01C00E01C00E01C01C03801C03801C03801C0704380708380E08380E103806107006203003C016
157B941B>I<007E0001C3000381800701C00E01C01C01E03C01E03801E07801E07801E07801E0
F003C0F003C0F00380F00780700700700E00700C0030180018700007C00013157B9419>I<01C1
F002621804741C08780C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C0
3C01C07803807003807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00
001C00001C00001C0000FFC000171F7F9419>I<1C1F002620804741C08783C08703C087018087
00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070
000030000012157B9415>114 D<00FC000183000200800401800C03800C03000C00000F00000F
F00007FC0003FE00003E00000F00000700700700F00600F00600E004004008002030001FC00011
157D9414>I<00C001C001C001C001C003800380038003800700FFF8070007000E000E000E000E
001C001C001C001C003800380038003810702070207040708031001E000D1F7C9E10>I<1E0060
2300E04380E04381C08381C08701C08701C00703800E03800E03800E03801C07001C07001C0700
1C07081C0E10180E101C0E101C1E200C262007C3C015157B941A>I<1E03802307C04387C04383
C08381C08700C08700C00700800E00800E00800E00801C01001C01001C01001C02001C02001C04
001C08001C08000C300003C00012157B9416>I<03C1E0046210083470103CF02038F020386020
380000700000700000700000700000E00000E00000E00000E02061C040F1C040F1C080E2C10044
6200383C0014157D9416>120 D<1E00302300704380704380E08380E08700E08700E00701C00E
01C00E01C00E01C01C03801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE0000
0E00000E00001C00601C00F03800F03000E0600080C0004380003E0000141F7B9418>I<01E020
03F06007F8C0041F80080100080200000400000800001000002000004000008000010000020000
0400800801001003003F060061FC0040F80080700013157D9414>I E /Fo
23 119 df<00038000000380000003800000038000001FF00000FFFE0003FFFF0007E38FC00F03
83E01E0380F03C0380703C038038780380F8780381FCF80383FCF80387FCF80387FCFC0387FCFC
0387FCFE0383F8FF0381F0FFC380007FFB80007FFFC0003FFFF8003FFFFE001FFFFF000FFFFF80
07FFFFC003FFFFE001FFFFF0007FFFF0000FFFF80003FFF800038FF8000383FC3E0381FC7F0380
FCFF8380FCFF83807CFF83807CFF83807CFF03807CFE0380787C038078700380F8780380F03803
80E01C0381E00F0387C007E39F8003FFFF0000FFFC00001FE00000038000000380000003800000
0380001E3A7BB529>36 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F00000000000000
00000000000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B207A
9F17>58 D<FFFFFFFFF00000FFFFFFFFFF0000FFFFFFFFFFC00000FFC000FFF00000FFC0000FFC
0000FFC00007FE0000FFC00001FF0000FFC00000FF8000FFC000007FC000FFC000003FE000FFC0
00003FE000FFC000001FF000FFC000001FF000FFC000001FF800FFC000000FF800FFC000000FFC
00FFC000000FFC00FFC000000FFC00FFC000000FFC00FFC000000FFE00FFC000000FFE00FFC000
000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00
FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFC00FFC000000FFC00FFC00000
0FFC00FFC000000FFC00FFC000000FF800FFC000001FF800FFC000001FF800FFC000001FF000FF
C000003FE000FFC000003FE000FFC000007FC000FFC00000FF8000FFC00001FF0000FFC00003FE
0000FFC0000FFC0000FFC0007FF000FFFFFFFFFFE000FFFFFFFFFF0000FFFFFFFFF0000037317E
B03F>68 D<FFFFFFFFFFF000FFFFFFFFFFF000FFFFFFFFFFF00000FFC0003FF00000FFC00007F8
0000FFC00003F80000FFC00000F80000FFC00000F80000FFC00000780000FFC00000780000FFC0
0000380000FFC00000380000FFC00000380000FFC000001C0000FFC007001C0000FFC007001C00
00FFC007001C0000FFC00700000000FFC00700000000FFC00F00000000FFC01F00000000FFC03F
00000000FFFFFF00000000FFFFFF00000000FFFFFF00000000FFC03F00000000FFC01F00000000
FFC00F00000000FFC00700000000FFC00700000000FFC00700038000FFC00700038000FFC00700
038000FFC00000070000FFC00000070000FFC00000070000FFC00000070000FFC000000F0000FF
C000000F0000FFC000001E0000FFC000001E0000FFC000003E0000FFC000007E0000FFC00000FE
0000FFC00003FE0000FFC0001FFE00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0031317E
B036>I<FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF000FFC0003FF000FFC00007F800FFC00003
F800FFC00000F800FFC00000F800FFC000007800FFC000007800FFC000003800FFC000003800FF
C000003800FFC000001C00FFC000001C00FFC007001C00FFC007001C00FFC007000000FFC00700
0000FFC007000000FFC00F000000FFC01F000000FFC03F000000FFFFFF000000FFFFFF000000FF
FFFF000000FFC03F000000FFC01F000000FFC00F000000FFC007000000FFC007000000FFC00700
0000FFC007000000FFC007000000FFC000000000FFC000000000FFC000000000FFC000000000FF
C000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000
0000FFC0000000FFFFFFF00000FFFFFFF00000FFFFFFF000002E317EB034>I<FFFFFFC03FFFFF
F0FFFFFFC03FFFFFF0FFFFFFC03FFFFFF000FFC000003FF00000FFC000003FF00000FFC000003F
F00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC00000
3FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000
003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC0
00003FF00000FFC000003FF00000FFFFFFFFFFF00000FFFFFFFFFFF00000FFFFFFFFFFF00000FF
C000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000
FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF000
00FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF0
0000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003FF00000FFC000003F
F00000FFC000003FF000FFFFFFC03FFFFFF0FFFFFFC03FFFFFF0FFFFFFC03FFFFFF03C317EB041
>72 D<FFFFFFF00000FFFFFFF00000FFFFFFF0000000FFC000000000FFC000000000FFC0000000
00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000
00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000007000FFC0000070
00FFC000007000FFC00000F000FFC00000F000FFC00000E000FFC00000E000FFC00001E000FFC0
0001E000FFC00003E000FFC00003E000FFC00007E000FFC0000FE000FFC0001FE000FFC0007FC0
00FFC003FFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC02C317EB032>76
D<FFFF8000000001FFFF80FFFFC000000003FFFF80FFFFE000000007FFFF8000FFE000000007FF
800000EFF00000000EFF800000EFF00000000EFF800000EFF00000000EFF800000E7F80000001C
FF800000E7F80000001CFF800000E3FC00000038FF800000E3FC00000038FF800000E1FE000000
70FF800000E1FE00000070FF800000E0FF000000E0FF800000E0FF000000E0FF800000E07F8000
01C0FF800000E07F800001C0FF800000E03FC0000380FF800000E03FC0000380FF800000E03FC0
000380FF800000E01FE0000700FF800000E01FE0000700FF800000E00FF0000E00FF800000E00F
F0000E00FF800000E007F8001C00FF800000E007F8001C00FF800000E003FC003800FF800000E0
03FC003800FF800000E001FE007000FF800000E001FE007000FF800000E000FF00E000FF800000
E000FF00E000FF800000E000FF00E000FF800000E0007F81C000FF800000E0007F81C000FF8000
00E0003FC38000FF800000E0003FC38000FF800000E0001FE70000FF800000E0001FE70000FF80
0000E0000FFE0000FF800000E0000FFE0000FF800000E00007FC0000FF800000E00007FC0000FF
800000E00007FC0000FF800000E00003F80000FF800001F00003F80000FF8000FFFFE001F000FF
FFFF80FFFFE001F000FFFFFF80FFFFE000E000FFFFFF8049317EB04E>I<00000FFE0000000000
FFFFE000000007FFFFFC0000001FFC07FF0000003FE000FF800000FF80003FE00001FF00001FF0
0003FE00000FF80007FC000007FC0007FC000007FC000FF8000003FE001FF8000003FF001FF000
0001FF003FF0000001FF803FF0000001FF803FF0000001FF807FE0000000FFC07FE0000000FFC0
7FE0000000FFC0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE00000
00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FF
E0000000FFE07FE0000000FFC07FE0000000FFC07FF0000001FFC07FF0000001FFC03FF0000001
FF803FF0000001FF801FF8000003FF001FF8000003FF000FFC000007FE000FFC000007FE0007FE
00000FFC0003FF00001FF80001FF80003FF00000FFC0007FE000003FE000FF8000001FFC07FF00
000007FFFFFC00000000FFFFE0000000000FFE00000033317BB03E>79 D<001FF0018000FFFF03
8003FFFFC78007F00FFF800F8001FF801F00007F803F00001F803E00000F807E00000F807E0000
0780FE00000780FE00000780FE00000380FF00000380FF00000380FF80000000FFE00000007FFC
0000007FFFE000007FFFFE00003FFFFFC0001FFFFFF0001FFFFFF8000FFFFFFC0003FFFFFE0001
FFFFFF00007FFFFF80001FFFFF800000FFFFC0000007FFC0000000FFE00000003FE00000003FE0
0000001FE06000001FE0E000000FE0E000000FE0E000000FE0E000000FC0F000000FC0F000000F
C0F800001F80FC00001F80FF00003F00FFC0007E00FFFC01FC00F1FFFFF800E03FFFE000C007FF
000023317BB02E>83 D<FFFFFF0000FFFF80FFFFFF0000FFFF80FFFFFF0000FFFF8003FFC00000
0FF00001FFE0000007C00000FFE000000F800000FFF000000F8000007FF800001F0000003FF800
001E0000001FFC00003E0000001FFE00007C0000000FFE00007800000007FF0000F800000007FF
8001F000000003FF8001E000000001FFC003E000000001FFE007C000000000FFF0078000000000
7FF00F80000000007FF81F00000000003FFC1E00000000001FFC3E00000000001FFE7C00000000
000FFF78000000000007FFF8000000000007FFF0000000000003FFF0000000000001FFE0000000
000001FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC00000
00000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC000
0000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0
000000000000FFC0000000000000FFC0000000000000FFC00000000000FFFFFF8000000000FFFF
FF8000000000FFFFFF80000039317EB03E>89 D<007FF8000003FFFF000007FFFFC0000FE01FE0
001FF007F0001FF003F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001
FE00000001FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F80
01FE007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007F
C00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF825207E9F28>97
D<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E003FC000
7E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFF
FFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003FC00000003F
C00003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE000
0003FF000021207E9F26>101 D<001FF007E000FFFE3FF001FFFF7FF807F83FF1F80FE00FE1F8
0FE00FE0F01FC007F0601FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8
001FC007F0001FC007F0000FE00FE0000FE00FE00007F83FC00007FFFF000006FFFE00000E1FF0
00000E000000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000FFF
FFFE0007FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0FC
000003F0FC000003F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF00
07FFFFFE0000FFFFF000001FFF8000252F7E9F29>103 D<01C00007F0000FF8000FF8001FFC00
1FFC001FFC000FF8000FF80007F00001C000000000000000000000000000000000000000000000
00000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>105 D<01F800FFF800FFF800
FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
07F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012327DB117>108
D<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE380
3FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8
001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F
F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800
0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8
000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FF
FFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F45>I<03F007F80000FFF03F
FF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF000
07FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000
07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
0FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029207D9F2E>I<0007FE0000
003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F803FC0003FC03FC0003F
C07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
1FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0
003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007FE000024
207E9F29>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE0FF807
FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007F80000
07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
0007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114 D<00380000380000380000380000
380000780000780000780000F80000F80001F80003F80007F8001FF800FFFFFEFFFFFEFFFFFE07
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F80007F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E03FC0E01FE1C00
FFF8007FF0000FE0182E7EAD20>116 D<01F80003F000FFF801FFF000FFF801FFF000FFF801FF
F0000FF8001FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8001FF00007F8001FF00003F8003FF00003F8006FF00001FE03CFF80000FFFF8F
FF80007FFF0FFF80000FFC0FFF8029207D9F2E>I<FFFF801FFEFFFF801FFEFFFF801FFE07F800
03E007F80001C007FC0003C003FC00038003FE00078001FE00070001FF000F0000FF000E0000FF
801E00007F801C00007FC03C00003FC03800003FE03800001FE07000001FE07000000FF0E00000
0FF0E000000FF9E0000007F9C0000007FFC0000003FF80000003FF80000001FF00000001FF0000
0000FE00000000FE000000007C000000007C0000000038000027207E9F2C>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin 
%%EndSetup
%%Page: 1 1
bop 193 216 a Fo(HLFSD:)26 b(Deliv)n(ering)h(Email)g(to)h(Y)-7
b(our)28 b($HOME)280 336 y Fn(Er)n(ez)17 b(Zadok,)g(Computer)h(Scienc)n(e)h
(Dep)n(artment,)e(Columbia)h(University)482 394 y(A)o(lexander)h(Dupuy,)e
(System)h(Management)h(AR)l(TS)841 541 y Fm(ABSTRA)o(CT)241
628 y Fl(W)m(e)12 b(consider)h(the)g(problem)e(of)h(enabling)g(users)i(to)e
(access)i(their)f(mailb)q(o)o(x)d(\014les)i(from)f(an)o(y)h(host)179
678 y(on)k(our)h(lo)q(cal)f(net)o(w)o(ork,)h(and)f(not)h(only)f(on)g(one)h
(designated)g(\\home)f(mac)o(hine".)25 b(W)m(e)16 b(require)h(a)179
728 y(solution)11 b(whic)o(h)g(will)f(not)i(in)o(tro)q(duce)g(an)o(y)f(new)h
(single)g(p)q(oin)o(ts)f(of)g(failure,)g(force)h(us)g(to)g(mo)q(dify)d(mail)
179 778 y(transfer)16 b(agen)o(ts)f(and)g(user)i(agen)o(ts,)e(or)g(require)h
(c)o(hanges)g(to)f(the)h(op)q(erating)f(system)g(k)o(ernels.)22
b(In)179 828 y(other)15 b(w)o(ords,)g(minim)o(ize)e(the)i(amoun)o(t)e(of)h(w)
o(ork)h(needed)h(b)o(y)e(system-administrators)g(and)g(users.)179
877 y(Our)i(solution)e(is)h(to)h(deliv)o(er)f(mail)e(in)o(to)h(the)i(users')h
(home)d(directories,)i(whic)o(h)g(are)f(exp)q(orted)i(via)179
927 y(NFS[20)o(,)g(25])f(to)i(all)e(of)h(the)h(mac)o(hines)e(on)h(our)h(net)o
(w)o(ork.)29 b(W)m(e)17 b(wrote)h(a)f(small)e(user-lev)o(el)j(NFS)179
977 y(serv)o(er)d(implemen)o(ting)c(a)j(single)f(sym)o(b)q(olic)f(link)h
(that)h(references)j(the)e(home)e(directory)h(of)g(a)g(user,)179
1027 y(either)h(the)g(one)g(who)f(accessed)j(it,)c(or)i(b)o(y)f(name,)f(with)
h(a)g(fallbac)o(k)f(reference)k(in)d(case)h(of)f(failures.)179
1077 y(This)d(enables)h(electronic)g(mail)d(to)i(b)q(e)h(deliv)o(ered)g
(directly)g(in)o(to)e(the)i(user's)g(home)f(directory)m(,)g(whic)o(h)179
1126 y(is)f(already)h(accessible)h(from)d(an)o(y)h(mac)o(hine)g(on)h(the)g
(net)o(w)o(ork.)17 b(Although)10 b(w)o(e)i(ha)o(v)o(e)e(used)i(our)f(serv)o
(er)179 1176 y(primarily)f(for)i(mail)e(deliv)o(ery)j(redirection,)g(it)f
(can)h(b)q(e)g(used)h(to)e(redirect)i(sp)q(o)q(oled)f(faxes,)g(access)h(to)
179 1226 y Fk(/tmp)p Fl(,)e(etc.)75 1345 y Fj(1)56 b(In)n(tro)r(duction)175
1420 y Fl(Electronic)16 b(mail)e(has)i(b)q(ecome)g(one)g(of)f(the)i(ma)r(jor)
d(applications)h(for)h(man)o(y)e(computer)i(net)o(w)o(orks,)g(and)75
1470 y(use)k(of)f(this)g(service)h(is)f(exp)q(ected)j(to)d(increase)h(o)o(v)o
(er)f(time,)g(as)g(net)o(w)o(orks)h(proliferate)f(and)g(b)q(ecome)g(faster.)
75 1520 y(Pro)o(viding)10 b(a)h(con)o(v)o(enien)o(t)h(en)o(vironmen)o(t)f
(for)g(users)i(to)e(read,)h(comp)q(ose,)f(and)g(send)h(electronic)h(mail)c
(has)i(b)q(ecome)75 1570 y(a)j(requiremen)o(t)f(for)h(systems)g
(administrators)e(\(SAs\).)175 1644 y(Widely)j(used)j(metho)q(ds)d(for)i
(handling)e(mail)f(usually)h(require)j(users)f(to)g(b)q(e)g(logged)e(in)o(to)
h(a)g(designated)75 1694 y(\\home")e(mac)o(hine,)f(where)k(their)e(mailb)q(o)
o(x)e(\014les)i(reside.)23 b(Only)15 b(on)g(that)h(one)f(mac)o(hine)f(can)i
(they)f(read)h(newly)75 1744 y(arriv)o(ed)i(mail.)28 b(Since)19
b(users)g(ha)o(v)o(e)f(to)g(b)q(e)h(logged)e(in)o(to)g(that)h(system)g(to)g
(read)h(their)f(mail,)e(they)j(often)f(\014nd)75 1794 y(it)h(con)o(v)o(enien)
o(t)h(to)g(run)g(all)f(of)g(their)h(other)g(pro)q(cesses)j(on)c(that)h
(system)f(as)h(w)o(ell,)g(including)f(memory)e(and)75 1844
y(CPU-in)o(tensiv)o(e)j(jobs.)34 b(F)m(or)19 b(example,)g(in)g(our)g
(departmen)o(t,)h(w)o(e)g(ha)o(v)o(e)f(allo)q(cated)g(and)g(con\014gured)h
(sev)o(eral)75 1893 y(m)o(ulti-pro)q(cessor)11 b(serv)o(ers)i(to)e(handle)g
(suc)o(h)i(demanding)c(CPU)q(/memory)f(applications,)j(but)g(these)i(w)o(ere)
f(under-)75 1943 y(utilized,)k(in)g(large)g(part)g(due)h(to)f(the)g(incon)o
(v)o(enience)i(of)d(not)h(b)q(eing)g(able)g(to)g(read)h(mail)c(on)j(those)h
(mac)o(hines.)75 1993 y(\(No)h(home)e(directories)j(w)o(ere)g(lo)q(cated)f
(on)f(these)i(designated)g(CPU-serv)o(ers,)h(since)f(w)o(e)e(did)h(not)f(w)o
(an)o(t)h(NFS)75 2043 y(service)g(for)f(users')g(home)f(directories)i(to)f
(ha)o(v)o(e)f(to)h(comp)q(ete)g(with)f(in)o(tensiv)o(e)h(jobs.)27
b(A)o(t)17 b(the)g(same)f(time,)g(w)o(e)75 2093 y(discouraged)e(users)i(from)
c(running)h(demanding)g(applications)f(on)i(their)g(home)f(mac)o(hines.\))175
2167 y(Man)o(y)k(di\013eren)o(t)h(solutions)f(ha)o(v)o(e)h(b)q(een)h(prop)q
(osed)f(to)f(allo)o(w)f(users)j(to)f(read)g(their)g(mail)d(on)i(an)o(y)g
(host.)75 2217 y(Ho)o(w)o(ev)o(er,)d(all)e(of)i(these)h(solutions)f(fail)e
(in)h(one)h(or)g(more)f(of)g(sev)o(eral)i(w)o(a)o(ys:)137 2328
y Fi(\017)21 b Fl(they)14 b(in)o(tro)q(duce)h(new)f(single)g(p)q(oin)o(ts)f
(of)h(failure)137 2409 y Fi(\017)21 b Fl(they)14 b(require)h(using)f
(di\013eren)o(t)g(mail)e(transfer)i(agen)o(ts)h(\(MT)m(As\)[15)o(])e(or)h
(user)h(agen)o(ts)g(\(UAs\))137 2490 y Fi(\017)21 b Fl(they)16
b(do)f(not)g(solv)o(e)g(the)h(problem)e(for)h(all)f(cases,)i(i.e.)22
b(the)16 b(solution)e(is)h(only)g(partially)e(successful)k(for)e(a)179
2539 y(particular)e(en)o(vironmen)o(t.)175 2650 y(W)m(e)e(ha)o(v)o(e)h
(designed)g(a)f(simple)g(\014lesystem,)g(called)h(the)g Fh(Home-Link)h(File)f
(System)p Fl(,)g(to)g(pro)o(vide)f(the)i(abilit)o(y)75 2700
y(to)d(deliv)o(er)h(mail)d(to)i(users')h(home)e(directories,)j(without)e(mo)q
(di\014cation)f(to)h(mail-related)e(applications.)16 b(W)m(e)10
b(ha)o(v)o(e)p eop
%%Page: 2 2
bop 75 42 a Fl(endea)o(v)o(ored)15 b(to)e(mak)o(e)f(it)i(as)f(stable)h(as)g
(p)q(ossible.)k(Of)c(great)g(imp)q(ortance)f(to)g(us)h(w)o(as)g(to)f(mak)o(e)
g(sure)h(the)h(HLFS)75 91 y(daemon,)10 b Fk(hlfsd)o Fl(,)h(w)o(ould)g(not)g
(hang)g(under)h(an)o(y)f(circumstances,)h(and)f(w)o(ould)f(tak)o(e)i(the)g
(next-b)q(est)h(action)d(when)75 141 y(faced)16 b(with)g(problems.)24
b(Compared)15 b(to)g(alternativ)o(e)h(metho)q(ds,)g Fk(hlfsd)f
Fl(is)h(a)g(stable,)g(more)f(general)h(solution,)75 191 y(and)g(easier)h(to)f
(install/use.)25 b(In)16 b(fact,)g(in)g(some)f(w)o(a)o(ys,)i(w)o(e)f(ha)o(v)o
(e)g(ev)o(en)h(managed)e(to)h(impro)o(v)o(e)e(the)j(reliabilit)o(y)75
241 y(and)d(securit)o(y)h(of)e(mail)e(service.)175 315 y(Our)k(serv)o(er)i
(implemen)o(ts)c(a)i(small)e(\014lesystem)i(con)o(taining)f(a)h(sym)o(b)q
(olic)f(link)g(to)h(a)g(sub)q(directory)i(of)d(the)75 365 y(in)o(v)o(oking)c
(user's)j(home)e(directory)m(,)i(and)f(named)e(sym)o(b)q(olic)h(links)g(to)h
(users')h(mailb)q(o)o(x)c(\014les.)18 b(An)13 b(example,)d(using)75
415 y(pathnames)j(from)f(our)i(en)o(vironmen)o(t,)e(is)i(depicted)h(in)f
(Figure)g(1.)1128 400 y Fg(1)p 75 477 1800 5 v 75 1424 a @beginspecial
0 @llx 0 @lly 599 @urx 311 @ury 4320 @rwi @setspecial
%%BeginDocument: hlfs-flowchart.eps
/$F2psDict 200 dict def 
$F2psDict begin
$F2psDict /mtrx matrix put
/l {lineto} bind def
/m {moveto} bind def
/s {stroke} bind def
/n {newpath} bind def
/gs {gsave} bind def
/gr {grestore} bind def
/clp {closepath} bind def
/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul setrgbcolor} bind def
/col-1 {} def
/col0 {0 0 0 setrgbcolor} bind def
/col1 {0 0 1 setrgbcolor} bind def
/col2 {0 1 0 setrgbcolor} bind def
/col3 {0 1 1 setrgbcolor} bind def
/col4 {1 0 0 setrgbcolor} bind def
/col5 {1 0 1 setrgbcolor} bind def
/col6 {1 1 0 setrgbcolor} bind def
/col7 {1 1 1 setrgbcolor} bind def
	end
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def

$F2psBegin
0 setlinecap 0 setlinejoin
-4.0 329.0 translate 0.900 -0.900 scale
0.500 setlinewidth
n 319 19 m 312 19 312 32 7 arcto 4 {pop} repeat 312 39 350 39 7 arcto 4 {pop} repeat 357 39 357 26 7 arcto 4 {pop} repeat 357 19 319 19 7 arcto 4 {pop} repeat clp gs col-1 s gr
/Times-Roman findfont 12.00 scalefont setfont
317 34 m 
gs 1 -1 scale (START) col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
269 360 m 
gs 1 -1 scale (".") col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
254 335 m 
gs 1 -1 scale (Return) col-1 show gr
n 256 320 m 249 320 249 358 7 arcto 4 {pop} repeat 249 365 302 365 7 arcto 4 {pop} repeat 309 365 309 327 7 arcto 4 {pop} repeat 309 320 256 320 7 arcto 4 {pop} repeat clp gs col-1 s gr
n 274 100 m 199 100 l  199 170 l gs col-1 s gr
n 201.000 162.000 m 199.000 170.000 l 197.000 162.000 l gs 2 setlinejoin col-1 s gr
n 394 100 m 479 100 l  479 120 l gs col-1 s gr
n 481.000 112.000 m 479.000 120.000 l 477.000 112.000 l gs 2 setlinejoin col-1 s gr
n 139 210 m 124 210 l  124 320 l gs col-1 s gr
n 126.000 312.000 m 124.000 320.000 l 122.000 312.000 l gs 2 setlinejoin col-1 s gr
n 479 200 m 479 220 l gs col-1 s gr
n 481.000 212.000 m 479.000 220.000 l 477.000 212.000 l gs 2 setlinejoin col-1 s gr
n 539 260 m 569 260 l  569 320 l gs col-1 s gr
n 571.000 312.000 m 569.000 320.000 l 567.000 312.000 l gs 2 setlinejoin col-1 s gr
n 334 40 m 334 60 l gs col-1 s gr
n 336.000 52.000 m 334.000 60.000 l 332.000 52.000 l gs 2 setlinejoin col-1 s gr
n 334 60 m 274 100 l  334 140 l  394 100 l  334 60 l gs col-1 s gr
n 199 170 m 139 210 l  199 250 l  259 210 l  199 170 l gs col-1 s gr
n 479 120 m 419 160 l  479 200 l  539 160 l  479 120 l gs col-1 s gr
n 479 220 m 419 260 l  479 300 l  539 260 l  479 220 l gs col-1 s gr
n 326 319 m 319 319 319 357 7 arcto 4 {pop} repeat 319 364 467 364 7 arcto 4 {pop} repeat 474 364 474 326 7 arcto 4 {pop} repeat 474 319 326 319 7 arcto 4 {pop} repeat clp gs col-1 s gr
n 419 159 m 364 159 l  364 179 l gs col-1 s gr
n 366.000 171.000 m 364.000 179.000 l 362.000 171.000 l gs 2 setlinejoin col-1 s gr
n 306 179 m 299 179 299 212 7 arcto 4 {pop} repeat 299 219 427 219 7 arcto 4 {pop} repeat 434 219 434 186 7 arcto 4 {pop} repeat 434 179 306 179 7 arcto 4 {pop} repeat clp gs col-1 s gr
n 491 319 m 484 319 484 357 7 arcto 4 {pop} repeat 484 364 662 364 7 arcto 4 {pop} repeat 669 364 669 326 7 arcto 4 {pop} repeat 669 319 491 319 7 arcto 4 {pop} repeat clp gs col-1 s gr
n 11 319 m 4 319 4 357 7 arcto 4 {pop} repeat 4 364 237 364 7 arcto 4 {pop} repeat 244 364 244 326 7 arcto 4 {pop} repeat 244 319 11 319 7 arcto 4 {pop} repeat clp gs col-1 s gr
n 259 210 m 279 210 l  279 320 l gs col-1 s gr
n 281.000 312.000 m 279.000 320.000 l 277.000 312.000 l gs 2 setlinejoin col-1 s gr
n 419 259 m 389 259 l  389 319 l gs col-1 s gr
n 391.000 311.000 m 389.000 319.000 l 387.000 311.000 l gs 2 setlinejoin col-1 s gr
/Times-BoldItalic findfont 12.00 scalefont setfont
399 90 m 
gs 1 -1 scale (No) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
254 90 m 
gs 1 -1 scale (Yes) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
259 200 m 
gs 1 -1 scale (Yes) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
124 200 m 
gs 1 -1 scale (No) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
399 150 m 
gs 1 -1 scale (Yes) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
489 215 m 
gs 1 -1 scale (No) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
544 250 m 
gs 1 -1 scale (Yes) col-1 show gr
/Times-BoldItalic findfont 12.00 scalefont setfont
404 250 m 
gs 1 -1 scale (No) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
459 280 m 
gs 1 -1 scale (Writable?) col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
102 335 m 
gs 1 -1 scale (Return) col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
547 335 m 
gs 1 -1 scale (Return) col-1 show gr
/Times-Italic findfont 12.00 scalefont setfont
454 164 m 
gs 1 -1 scale (uid) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
474 164 m 
gs 1 -1 scale (== 0?) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
192 215 m 
gs 1 -1 scale (==) col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
369 335 m 
gs 1 -1 scale (Return) col-1 show gr
/Times-BoldItalic findfont 18.00 scalefont setfont
487 355 m 
gs 1 -1 scale (~USER) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
549 354 m 
gs 1 -1 scale (.mailspool/) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
542 354 m 
gs 1 -1 scale (/) col-1 show gr
/Courier findfont 11.00 scalefont setfont
461 264 m 
gs 1 -1 scale (.mailspool/) col-1 show gr
/Courier findfont 12.00 scalefont setfont
459 263 m 
gs 1 -1 scale (/) col-1 show gr
/Times-Italic findfont 12.00 scalefont setfont
424 264 m 
gs 1 -1 scale (~USER) col-1 show gr
/Courier findfont 12.00 scalefont setfont
207 215 m 
gs 1 -1 scale (home) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
239 215 m 
gs 1 -1 scale (?) col-1 show gr
/Times-Italic findfont 12.00 scalefont setfont
155 215 m 
gs 1 -1 scale (NAME) col-1 show gr
/Times-Roman findfont 18.00 scalefont setfont
341 194 m 
gs 1 -1 scale (Return) col-1 show gr
/Times-Italic findfont 12.00 scalefont setfont
284 102 m 
gs 1 -1 scale (gid) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
302 103 m 
gs 1 -1 scale (== HLFS_GID?) col-1 show gr
/Times-Roman findfont 12.00 scalefont setfont
474 249 m 
gs 1 -1 scale (Is) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
322 354 m 
gs 1 -1 scale (/var/alt_mail/) col-1 show gr
/Times-BoldItalic findfont 18.00 scalefont setfont
189 354 m 
gs 1 -1 scale (NAME) col-1 show gr
/Times-BoldItalic findfont 18.00 scalefont setfont
6 353 m 
gs 1 -1 scale (~NAME) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
69 353 m 
gs 1 -1 scale (/) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
73 353 m 
gs 1 -1 scale (.mailspool/) col-1 show gr
/Courier-Bold findfont 18.00 scalefont setfont
300 214 m 
gs 1 -1 scale (/.mailspool/) col-1 show gr
$F2psEnd
%%EndDocument
 @endspecial 371 1515 a Fl(Figure)g(1:)j Fk(Hlfsd)c Fl(resolving)h(the)g
Fh(NAME)g Fl(comp)q(onen)o(t)f(of)h Fk(/mail/)p Fh(NAME)p 75
1565 V 175 1707 a Fl(The)c Fk(hlfsd)f Fl(serv)o(er)j(\014nds)f(out)f(the)h
Fh(uid)782 1692 y Fg(2)810 1707 y Fl(of)f(the)h(pro)q(cess)h(that)e(is)g
(accessing)h(its)g(moun)o(t)d(p)q(oin)o(t,)i(and)g(resolv)o(es)75
1756 y(the)j(pathname)e(comp)q(onen)o(t)g Fk(home)g Fl(as)i(a)f(sym)o(b)q
(olic)e(link)h(to)h(a)g(sub)q(directory)h(within)f(the)h(home)e(directory)h
(giv)o(en)75 1806 y(b)o(y)18 b(the)h Fh(uid)p Fl('s)f(en)o(try)h(in)e(the)i
(passw)o(ord)g(\014le.)30 b(See)19 b(T)m(able)f(1.)30 b(If)18
b(the)h Fh(gid)f Fl(of)f(the)i(pro)q(cess)h(that)e(attempts)g(to)75
1856 y(access)c(a)f(mailb)q(o)o(x)d(\014le)i(is)h(a)f(sp)q(ecial)h(one)g
(\(called)f(HLFS)p 976 1856 13 2 v 16 w(GID\),)f(then)j(the)f(serv)o(er)h
(maps)d(the)j(name)d(of)h(the)h(next)p 1795 1863 80 2 v 75
1906 a(pathname)h(comp)q(onen)o(t)h(directly)h(to)g(the)g(user's)g(mailb)q(o)
o(x)d(\(T)m(able)i(2\).)23 b(This)15 b(is)h(necessary)h(so)f(that)g(access)h
(to)75 1956 y(a)d(mailb)q(o)o(x)e(\014le)i(b)o(y)h(users)h(other)f(than)g
(the)g(o)o(wner)g(can)f(succeed.)23 b(The)15 b(serv)o(er)h(has)f(safet)o(y)f
(features)i(in)e(case)i(of)75 2006 y(failures)d(suc)o(h)i(as)f(h)o(ung)g
(\014lesystems)g(or)g(home)e(directory)j(\014lesystems)f(that)g(are)g
(inaccessible)h(or)f(full.)175 2080 y(On)20 b(most)f(of)g(our)h(mac)o(hines,)
g(mail)e(gets)j(deliv)o(ered)f(to)g(the)h(directory)f Fk(/var/spool/mail)p
Fl(.)1720 2065 y Fg(3)1772 2080 y Fl(Man)o(y)75 2130 y(programs,)12
b(including)g(UAs,)i(dep)q(end)h(on)e(that)h(path.)k Fk(Hlfsd)12
b Fl(creates)k(a)d(directory)h Fk(/mail)p Fl(,)f(and)g(moun)o(ts)f(itself)75
2180 y(on)18 b(top)h(of)f(that)h(directory)m(.)32 b Fk(Hlfsd)18
b Fl(implem)o(en)o(ts)f(the)i(path)g(name)e(comp)q(onen)o(t)h(called)g
Fk(home)p Fl(,)h(p)q(oin)o(ting)e(to)75 2230 y(a)f(sub)q(directory)j(of)d
(the)h(user's)h(home)e(directory)m(.)27 b(W)m(e)16 b(ha)o(v)o(e)h(made)e
Fk(/var/spool/mail)f Fl(a)i(sym)o(b)q(olic)f(link)h(to)75 2280
y Fk(/mail/home)p Fl(,)d(so)i(that)g(accessing)h Fk(/var/spool/mail)c
Fl(actually)i(causes)i(access)h(to)e(a)g(sub)q(directory)h(within)e(a)75
2329 y(user's)h(home)e(directory)m(.)175 2404 y(The)20 b(rest)h(of)f(this)g
(pap)q(er)g(is)g(organized)g(as)g(follo)o(ws.)35 b(Section)21
b(2)e(discusses)j(in)e(detail)f(the)i(problems)75 2454 y(and)e(limitations)d
(of)j(other)h(home-mai)o(l-deli)o(v)o(ery)d(metho)q(ds.)34
b(Section)19 b(3)g(detail)g(the)h(design)f(of)g(the)h Fh(Home-)p
75 2488 720 2 v 121 2515 a Ff(1)139 2527 y Fe(In)10 b(Figure)g(1,)h
Fd(~)p Fc(NAME)h Fe(is)f(the)g(home)f(directory)e(of)j(the)g(user)f(whose)h
(user-name)d(is)j Fc(NAME)p Fe(;)i Fd(~)p Fc(USER)e Fe(is)h(the)e(home)g
(directory)75 2566 y(of)h(the)g(user)g(with)g(user-id)f Fc(uid)p
Fe(.)121 2594 y Ff(2)139 2606 y Fe(NFS)h(uses)g(e\013ectiv)o(e)e
Fc(uids)p Fe(.)121 2634 y Ff(3)139 2646 y Fe(Other)i(directories)f(used)h
(for)g(this)h(purp)q(ose)e(are)h Fd(/var/mail)f Fe(on)h(SVR4,)h
Fd(/usr/mail)d Fe(on)j(other)f(System)f(V-based)h(op)q(erating-)75
2685 y(systems,)f(and)g Fd(/usr/spool/)o(mai)o(l)f Fe(on)i(BSD-based)e
(systems.)965 2825 y Fl(2)p eop
%%Page: 3 3
bop 75 4 1800 5 v 229 58 a Fl(Conditions:)17 b Fh(uid)p Fl(=)p
Fk(ezk)p Fl(,)c Fh(gid)p Fi(6)p Fl(=HLFS)p 828 58 13 2 v 16
w(GID,)f(and)i Fk(/users/ezk/.mailsp)o(ool/)c Fl(is)k(writable.)p
157 77 1636 2 v 156 127 2 50 v 165 127 V 190 112 a Fm(Resolving)p
453 127 V 1088 127 V 1784 127 V 1793 127 V 156 177 V 165 177
V 190 162 a(comp)q(onen)o(t)p 453 177 V 58 w(P)o(athname)g(left)p
1088 177 V 337 w(V)l(alue)h(if)g(sym)o(b)q(olic)f(link)p 1784
177 V 1793 177 V 157 179 1636 2 v 157 189 V 156 238 2 50 v
165 238 V 190 223 a Fk(/)p 453 238 V 267 w(var/mail/)p Fh(NAME)p
1088 238 V 1784 238 V 1793 238 V 157 240 1636 2 v 156 290 2
50 v 165 290 V 190 275 a Fk(var)p Fl(/)p 453 290 V 202 w Fk(mail/)p
Fh(NAME)p 1088 290 V 1784 290 V 1793 290 V 157 291 1636 2 v
156 341 2 50 v 165 341 V 190 326 a Fk(mail)p Fl(@)p 453 341
V 169 w Fk(/mail/home/)p Fh(NAME)p 1088 341 V 265 w Fk(mail)p
Fl(@)g Fi(\))f Fk(/mail/home)p 1784 341 V 1793 341 V 157 343
1636 2 v 156 393 2 50 v 165 393 V 190 378 a(/)p 453 393 V 267
w(mail/home/)p Fh(NAME)p 1088 393 V 1784 393 V 1793 393 V 157
394 1636 2 v 156 444 2 50 v 165 444 V 190 429 a Fk(mail)p Fl(/)p
453 444 V 180 w Fk(home/)p Fh(NAME)p 1088 444 V 1784 444 V
1793 444 V 157 446 1636 2 v 156 496 2 50 v 165 496 V 190 481
a Fk(home)p Fl(@)p 453 496 V 169 w Fh(NAME)p 1088 496 V 507
w Fk(home)p Fl(@)h Fi(\))f Fk(/users/ezk/.mailsp)o(ool)p 1784
496 V 1793 496 V 157 497 1636 2 v 156 547 2 50 v 165 547 V
190 532 a(/)p 453 547 V 267 w(users/ezk/.mailsp)o(ool/)o Fh(NAME)p
1088 547 V 1784 547 V 1793 547 V 157 549 1636 2 v 156 599 2
50 v 165 599 V 190 584 a Fk(users)p Fl(/)p 453 599 V 158 w
Fk(ezk/.mailspool/)p Fh(NA)o(ME)p 1088 599 V 1784 599 V 1793
599 V 157 600 1636 2 v 156 650 2 50 v 165 650 V 190 635 a Fk(ezk)p
Fl(/)p 453 650 V 202 w Fk(.mailspool/)p Fh(NAME)p 1088 650
V 1784 650 V 1793 650 V 157 652 1636 2 v 156 702 2 50 v 165
702 V 190 687 a Fk(.mailspool)p Fl(/)p 453 702 V 48 w Fh(NAME)p
1088 702 V 1784 702 V 1793 702 V 157 703 1636 2 v 156 753 2
50 v 165 753 V 190 738 a(NAME)p 453 753 V 1088 753 V 1784 753
V 1793 753 V 157 755 1636 2 v 290 829 a Fl(T)m(able)g(1:)18
b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)h Fk(/users/ezk/.mailspo)o
(ol/)p Fh(NAME)p 75 879 1800 5 v 75 1000 a(Link)19 b(File)f(System)h
Fl(and)f(Section)g(4)g(describ)q(es)i(the)f(implemen)o(tation)c(of)i
Fk(hlfsd)o Fl(.)31 b(Section)19 b(5)f(ev)n(aluates)g(our)75
1050 y(implemen)o(tatio)o(n.)e(Related)d(systems,)h(conclusions,)g(future)g
(directions,)g(and)g(alternativ)o(e)g(uses)h(are)f(describ)q(ed)75
1100 y(in)f(Sections)i(6)f(and)f(7.)75 1208 y Fj(2)56 b(Bac)n(kground)175
1283 y Fl(This)16 b(section)h(pro)o(vides)f(an)g(in-depth)g(discussion)h(of)f
(wh)o(y)g(a)o(v)n(ailable)d(metho)q(ds)j(for)g(deliv)o(ering)g(mail)d(to)75
1333 y(home)g(directories)i(are)f(not)g(as)g(go)q(o)q(d)f(as)h(the)h(one)f
(used)h(b)o(y)e Fk(hlfsd)o Fl(.)75 1441 y Fj(2.1)56 b(Single-Host)17
b(Mail)h(Sp)r(o)r(ol)g(Directory)175 1516 y Fl(The)d(most)e(common)f(metho)q
(d)i(for)g(mail)e(deliv)o(ery)i(is)h(for)f(mail)e(to)i(b)q(e)h(app)q(ended)h
(to)f(a)f(mailb)q(o)o(x)e(\014le)i(in)g(a)75 1566 y(standard)d(sp)q(o)q(ol)f
(directory)h(on)f(the)h(designated)g(\\mail)c(home")i(mac)o(hine)g(of)h(the)h
(user.)17 b(The)11 b(greatest)h(adv)n(an)o(tage)75 1616 y(of)i(this)h(metho)q
(d)f(is)g(that)h(it)f(is)h(the)g(default)f(metho)q(d)g(most)g(v)o(endors)h
(pro)o(vide)g(with)f(their)h(systems,)g(th)o(us)g(v)o(ery)75
1665 y(little)h(\(if)g(an)o(y\))g(con\014guration)g(is)h(required)g(on)f(the)
i(SA's)e(part.)26 b(All)16 b(they)h(need)h(to)e(set)i(up)e(are)h(mail)d
(aliases)75 1715 y(directing)g(mail)c(to)j(the)h(host)g(on)f(whic)o(h)g(the)h
(user's)h(mailb)q(o)o(x)10 b(\014le)k(is)f(assigned.)18 b(\(Otherwise,)d
(mail)10 b(is)j(deliv)o(ered)75 1765 y(lo)q(cally)m(,)f(and)h(users)j(\014nd)
e(mailb)q(o)o(xes)d(on)j(man)o(y)e(mac)o(hines.\))175 1840
y(As)k(users)i(b)q(ecome)e(more)f(sophisticated,)i(and)f(aided)g(b)o(y)g
(windo)o(wing)f(systems,)i(they)f(\014nd)h(themselv)o(es)75
1890 y(logging)12 b(in)i(on)g(m)o(ultiple)e(hosts)j(at)f(once,)g(p)q
(erforming)f(sev)o(eral)i(tasks)g(concurren)o(tly)m(.)k(They)c(ask)f(to)g(b)q
(e)h(able)f(to)75 1939 y(read)g(their)h(mail)c(on)j(an)o(y)f(host)h(on)g(the)
g(net)o(w)o(ork,)g(not)g(just)g(the)g(one)g(designated)h(as)f(their)g(\\mail)
d(home.")75 2047 y Fj(2.2)56 b(Cen)n(tralized)18 b(Mail)g(Sp)r(o)r(ol)f
(Directory)175 2122 y Fl(A)f(p)q(opular)g(metho)q(d)f(for)h(pro)o(viding)f
(mail)f(readabilit)o(y)h(from)g(an)o(y)h(host)g(is)g(to)h(ha)o(v)o(e)f(all)f
(mail)e(deliv)o(ered)75 2172 y(to)18 b(a)g(mail)e(sp)q(o)q(ol)i(directory)h
(on)f(a)g(designated)h(\\mail-serv)o(er")e(whic)o(h)h(is)g(exp)q(orted)h(via)
f(NFS)g(to)h(all)e(of)g(the)75 2222 y(hosts)f(on)g(the)g(net)o(w)o(ork.)24
b(Con\014guring)15 b(suc)o(h)h(a)f(system)h(is)f(relativ)o(ely)g(easy)m(.)24
b(On)16 b(most)e(systems,)i(the)g(bulk)g(of)75 2272 y(the)i(w)o(ork)f(is)h(a)
f(one-time)f(addition)g(to)i(one)f(or)h(t)o(w)o(o)f(con\014guration)g
(\014les)h(in)f Fk(/etc)p Fl(.)28 b(The)17 b(\014le-serv)o(er's)i(sp)q(o)q
(ol)75 2322 y(directory)d(is)f(then)h(hard-moun)o(ted)e(across)i(ev)o(ery)g
(mac)o(hine)e(on)h(the)h(lo)q(cal)e(net)o(w)o(ork.)22 b(In)16
b(small)d(en)o(vironmen)o(ts)75 2371 y(with)f(only)g(a)g(handful)g(of)g
(hosts)h(this)f(can)h(b)q(e)g(an)f(acceptable)i(solution.)i(In)d(our)f
(departmen)o(t,)h(with)f(a)g(couple)h(of)75 2421 y(h)o(undred)j(activ)o(e)f
(hosts)h(and)f(thousands)g(of)g(mail)d(messages)j(pro)q(cessed)j(daily)m(,)13
b(this)i(w)o(as)g(deemed)g(completely)75 2471 y(unacceptable,)g(as)f(it)f(in)
o(tro)q(duced)i(sev)o(eral)f(t)o(yp)q(es)h(of)e(problems:)137
2587 y Fi(\017)21 b Fm(Scalabili)o(t)o(y)12 b(and)i(P)o(erformance)p
Fl(:)h(as)d(more)g(and)h(more)f(mac)o(hines)g(get)h(added)g(to)g(the)g(net)o
(w)o(ork,)g(more)179 2637 y(mail)7 b(tra\016c)j(has)g(to)g(go)f(o)o(v)o(er)h
(NFS)g(to)g(and)g(from)e(the)j(mail-serv)o(er.)k(Users)c(lik)o(e)f(to)f(run)i
(mail-w)o(a)o(tc)o(hers[2)n(,)f(7)o(])179 2687 y(and)g(read)i(their)f(mail)d
(often.)17 b(The)11 b(stress)i(on)d(the)i(shared)g(infrastructure)g
(increases)g(with)f(ev)o(ery)g(user)h(and)965 2825 y(3)p eop
%%Page: 4 4
bop 179 42 a Fl(host)14 b(added;)f(loads)g(on)h(the)g(mail)d(serv)o(er)k(w)o
(ould)e(most)f(certainly)i(b)q(e)g(high)f(since)i(all)d(mail)f(deliv)o(ery)j
(go)q(es)179 91 y(through)i(that)h(one)g(mac)o(hine.)672 76
y Fg(4)715 91 y Fl(This)g(leads)g(to)f(lo)o(w)o(er)g(reliabilit)o(y)f(and)h
(p)q(erformance.)26 b(T)m(o)16 b(reduce)i(the)179 141 y(n)o(um)o(b)q(er)11
b(of)g(concurren)o(t)j(connections)f(b)q(et)o(w)o(een)g(clien)o(ts)f(and)g
(the)h(serv)o(er)g(host,)f(some)f(SAs)i(ha)o(v)o(e)e(resorted)179
191 y(to)16 b(automoun)o(ting)e(the)j(mail-sp)q(o)q(ol)c(directory)m(.)26
b(But)17 b(this)g(solution)e(only)h(mak)o(es)f(things)h(w)o(orse:)24
b(since)179 241 y(users)15 b(often)e(run)h(mail)d(w)o(atc)o(hers,)j(and)f
(man)o(y)e(p)q(opular)i(applications)g(suc)o(h)h(as)f Fk(trn)p
Fl(,)g Fk(emacs)p Fl(,)f Fk(csh)g Fl(or)i Fk(ksh)179 291 y
Fl(c)o(hec)o(k)h(p)q(erio)q(dically)f(for)g(new)h(mail,)d(the)j(automoun)o
(ted)e(directory)i(w)o(ould)f(b)q(e)h(e\013ectiv)o(ely)h(p)q(ermanen)o(tly)
179 340 y(moun)o(ted.)g(If)c(it)g(gets)i(unmoun)o(ted)d(automatically)e(b)o
(y)k(the)g(automoun)o(ter)e(program[3)n(],)h(it)g(is)g(most)f(lik)o(ely)179
390 y(to)17 b(get)h(moun)o(ted)e(shortly)i(afterw)o(ards,)g(consuming)e(more)
h(I/O)g(resources)j(b)o(y)d(the)h(constan)o(t)g(cycle)h(of)179
440 y Fk(mount)13 b Fl(and)g Fk(umount)g Fl(calls.)137 523
y Fi(\017)21 b Fm(Reliabil)o(i)o(t)o(y)p Fl(:)16 b(the)f(mail-serv)o(er)f
(host)h(and)f(its)h(net)o(w)o(ork)f(connectivit)o(y)h(m)o(ust)f(b)q(e)h(v)o
(ery)g(reliable.)k(W)m(orse,)179 573 y(since)g(the)g(sp)q(o)q(ol)f(directory)
h(has)f(to)g(b)q(e)h(hard-moun)o(ted,)1117 558 y Fg(5)1153
573 y Fl(man)o(y)d(pro)q(cesses)21 b(whic)o(h)d(access)i(the)f(sp)q(o)q(ol)
179 623 y(directory)f(\(v)n(arious)e(shells,)i Fk(login)p Fl(,)f
Fk(emacs)p Fl(,)f(etc.\))30 b(w)o(ould)16 b(b)q(e)i(h)o(ung)f(as)g(long)g(as)
g(connectivit)o(y)g(to)g(the)179 672 y(mail-serv)o(er)9 b(is)h(sev)o(ered.)19
b(T)m(o)10 b(impro)o(v)o(e)f(reliabilit)o(y)m(,)f(SAs)j(ma)o(y)e(c)o(ho)q
(ose)i(to)f(bac)o(kup)h(the)g(mail-serv)o(er's)e(sp)q(o)q(ol)179
722 y(partition)16 b(sev)o(eral)h(times)g(a)f(da)o(y)m(.)27
b(This)17 b(ma)o(y)e(mak)o(e)g(things)i(w)o(orse)h(since)f(reading)g(or)g
(deliv)o(ering)g(mail)179 772 y(while)e(bac)o(kups)h(are)g(in)f(progress)i
(ma)o(y)d(cause)j(bac)o(kups)f(to)f(b)q(e)i(inconsisten)o(t;)f(more)f(bac)o
(kups)h(consume)179 822 y(more)d(bac)o(kup-media)f(resources,)k(and)d
(increase)j(the)e(load)f(on)h(the)g(mail-serv)o(er)f(host.)75
946 y Fj(2.3)56 b(Distributed)17 b(Mail)h(Sp)r(o)r(ol)g(Service)175
1022 y Fl(Despite)d(the)f(existence)i(of)e(a)g(few)g(systems)h(that)f(supp)q
(ort)h(deliv)o(ery)f(to)h(users')g(home)e(directories,)1763
1007 y Fg(6)1797 1022 y Fl(mail)75 1071 y(deliv)o(ery)18 b(to)f(home)g
(directories)i(hasn't)e(caugh)o(t)h(on.)29 b(W)m(e)17 b(b)q(eliev)o(e)i(the)f
(main)d(reason)k(is)e(that)h(there)h(are)f(to)q(o)75 1121 y(man)o(y)12
b(programs)h(that)h(\\kno)o(w")g(where)h(mailb)q(o)o(x)c(\014les)k(reside.)20
b(Besides)15 b(the)g(ob)o(vious)f(\(the)h(deliv)o(ery)f(program)75
1171 y Fk(/bin/mail)9 b Fl(and)i(mail)e(readers)k(lik)o(e)d
Fk(/usr/ucb/Mail)p Fl(,)f Fk(mush)p Fl(,)h Fk(mm)p Fl(,)h(etc.\),)h(other)g
(programs)e(that)h(kno)o(w)g(mailb)q(o)o(x)75 1221 y(lo)q(cation)g(are)g
Fk(login)p Fl(,)g Fk(from)p Fl(,)g(almost)e(ev)o(ery)j(shell,)g
Fk(xbiff)p Fl(,)e Fk(xmailbox)p Fl(,)g(and)h(ev)o(en)h(some)f(programs)f(not)
i(directly)75 1271 y(related)h(to)g(mail,)c(suc)o(h)14 b(as)f
Fk(emacs)e Fl(and)i Fk(trn)p Fl(.)k(Although)12 b(some)f(of)h(these)i
(programs)e(can)h(b)q(e)g(con\014gured)g(to)g(lo)q(ok)75 1320
y(in)18 b(di\013eren)o(t)h(directories)g(with)f(the)g(use)h(of)e(en)o
(vironmen)o(t)g(v)n(ariables)h(and)g(other)g(resources,)j(man)o(y)16
b(of)i(them)75 1370 y(cannot.)g(The)d(o)o(v)o(erall)d(p)q(orting)i(w)o(ork)f
(is)h(signi\014can)o(t.)175 1445 y(Other)g(metho)q(ds)f(that)g(ha)o(v)o(e)g
(y)o(et)g(to)g(catc)o(h)h(on)f(require)h(the)g(use)g(of)e(a)h(sp)q(ecial)h
(mail-reading)c(serv)o(er,)k(suc)o(h)75 1495 y(as)g(IMAP[16)o(])f(or)h(POP)q
([17)o(].)j(The)d(main)e(disadv)n(an)o(tage)h(of)g(these)i(systems)f(is)f
(that)h(UAs)g(need)h(to)e(b)q(e)h(mo)q(di\014ed)75 1545 y(to)i(use)h(these)g
(services)h(|)d(a)h(long)f(and)h(in)o(v)o(olv)o(ed)f(task.)24
b(That)16 b(is)g(wh)o(y)f(they)i(are)f(not)g(p)q(opular)g(at)g(this)g(time.)
75 1594 y(See)f(Section)f(6.1)f(for)h(more)e(details.)175 1669
y(Sev)o(eral)h(other)i(ideas)e(ha)o(v)o(e)h(b)q(een)g(prop)q(osed)h(and)e(ev)
o(en)h(used)h(in)e(v)n(arious)g(en)o(vironmen)o(ts.)k(None)d(of)f(them)75
1719 y(is)g(robust.)18 b(They)c(are)g(mostly)d(v)o(ery)j(sp)q(ecialized,)f
(in\015exible,)g(and)g(do)g(not)g(extend)h(to)f(the)h(general)f(case.)19
b(Some)75 1769 y(of)13 b(the)i(ideas)f(are)g(plain)f(bad,)g(p)q(oten)o
(tially)g(leading)g(to)h(lost)f(or)h(corrupt)h(mail:)137 1885
y Fi(\017)21 b Fm(automoun)o(ter)o(s)p Fl(:)14 b(using)f(an)f(automoun)o(ter)
f(suc)o(h)i(as)g Fk(amd)p Fl([13)n(])f(to)g(pro)o(vide)g(a)g(set)i(of)d(sym)o
(b)q(olic)g(links)h(from)179 1935 y(the)h(normal)e(sp)q(o)q(ol)i(directory)g
(to)g(user)h(home)d(directories)j(is)f(not)g(su\016cien)o(t.)18
b(UAs)13 b(rename,)f(unlink,)g(and)179 1985 y(recreate)20 b(the)f(mailb)q(o)o
(x)c(as)k(a)f(regular)g(\014le,)h(therefore)g(it)f(m)o(ust)f(b)q(e)i(a)f
(real)g(\014le,)h(not)f(a)g(sym)o(b)q(olic)e(link.)179 2034
y(F)m(urthermore,)d(it)g(m)o(ust)f(reside)j(in)e(a)g(real)g(directory)i(whic)
o(h)e(is)g(writable)g(b)o(y)h(the)g(UAs)g(and)f(MT)m(As.)18
b(This)179 2084 y(metho)q(d)c(ma)o(y)g(also)h(require)h(p)q(opulating)e
Fk(/var/spool/mail)e Fl(with)j(sym)o(b)q(olic)f(links)h(and)g(making)e(sure)
179 2134 y(they)j(are)g(up)q(dated.)24 b(Making)15 b Fk(amd)g
Fl(manage)f(that)i(directory)g(directly)g(fails,)f(since)i(man)o(y)c(v)n
(arious)i(lo)q(c)o(k)179 2184 y(\014les)g(need)g(to)g(b)q(e)g(managed)e(as)h
(w)o(ell)g(\(see)i(Section)f(4.6\).)k(Also,)14 b Fk(amd)g Fl(do)q(es)h(not)g
(pro)o(vide)f(all)g(of)g(the)h(NFS)179 2234 y(op)q(erations)f(whic)o(h)g(are)
g(required)h(to)f(write)g(mail)d(suc)o(h)k(as)f Fh(write)p
Fl(,)e Fh(cr)n(e)n(ate)p Fl(,)h Fh(r)n(emove)p Fl(,)g(and)g
Fh(unlink)p Fl(.)137 2317 y Fi(\017)21 b Fm($MAIL)p Fl(:)15
b(setting)g(this)h(v)n(ariable)e(to)h(an)h(automoun)o(ted)e(directory)i(p)q
(oin)o(ting)e(to)h(the)h(user's)g(mail)d(sp)q(o)q(ol)179 2367
y(host)g(only)f(solv)o(es)i(the)f(problem)f(for)h(those)g(programs)f(whic)o
(h)h(kno)o(w)f(and)h(use)h($MAIL.)f(Man)o(y)f(programs)179
2416 y(don't,)j(therefore)i(this)e(solution)g(is)g(partial)g(and)g(of)g
(limited)e(\015exibilit)o(y)m(.)21 b(Also,)15 b(it)g(requires)i(the)f(SAs)g
(or)179 2466 y(the)e(users)i(to)d(set)i(it)f(themselv)o(es)g(|)f(an)h(added)g
(lev)o(el)f(of)h(incon)o(v)o(enience)g(and)g(p)q(ossible)g(failures.)p
75 2501 720 2 v 121 2528 a Ff(4)139 2539 y Fe(Deliv)o(ery)8
b(via)i(NFS-moun)o(ted)e(\014lesystems)h(ma)o(y)g(require)g(usage)h(of)g
Fd(rpc.lockd)e Fe(and)i Fd(rpc.statd)d Fe(to)k(pro)o(vide)d(distributed)g
(\014le-)75 2579 y(lo)q(c)o(king,)j(b)q(oth)g(of)i(whic)o(h)f(are)g(widely)f
(regarded)g(as)h(unstable)f(and)g(unreliable.)16 b(F)m(urthermore,)10
b(this)i(will)h(degrade)d(p)q(erformance)o(,)75 2618 y(as)h(lo)q(cal)g(pro)q
(cesses)e(as)i(w)o(ell)h(as)f(remote)f Fd(nfsd)g Fe(pro)q(cesses)g(are)h(k)o
(ept)f(busy)m(.)121 2646 y Ff(5)139 2658 y Fe(No)h(SA)h(in)f(their)g(righ)o
(t)f(minds)g(w)o(ould)h(soft-moun)o(t)e(read/write)g(partitions)g(|)j(the)f
(c)o(hances)e(for)i(data)g(loss)g(are)g(to)q(o)f(great.)121
2686 y Ff(6)139 2697 y Fe(AIX)i(1.2's)e Fd(bellmail)f Fe(for)i(the)g(IBM)h
(PS/2)p Fc(s)p Fe([9)n(],)f Fd(/bin/mail)e Fe(on)i(SunOS)f(for)h(the)g(Sun)f
(386i)h(mac)o(hines,)e(and)h Fd(zmailer)p Fe([27)m(].)965 2825
y Fl(4)p eop
%%Page: 5 5
bop 137 42 a Fi(\017)21 b Fm(/bin/mail)o Fl(:)h(using)17 b(a)g(di\013eren)o
(t)h(mail)d(deliv)o(ery)i(agen)o(t)g(could)g(b)q(e)h(the)g(solution.)27
b(One)18 b(suc)o(h)g(example)179 91 y(is)h Fk(hdmail)p Fl([6)n(].)34
b(Ho)o(w)o(ev)o(er,)21 b Fk(hdmail)d Fl(still)h(requires)h(mo)q(difying)d
(all)h(UAs,)j(the)f(MT)m(A's)f(con\014guration,)179 141 y(installing)c(new)i
(daemons,)e(and)i(c)o(hanging)e(login)h(scripts.)27 b(This)16
b(mak)o(es)g(the)h(system)f(less)h(upgradable)179 191 y(or)f(compatible)f
(with)i(others,)h(and)e(adds)h(one)g(more)f(complicated)f(system)h(for)h(SAs)
g(to)f(deal)h(with.)26 b(It)179 241 y(is)14 b(not)g(a)g(complete)g(solution)g
(b)q(ecause)i(it)e(still)f(requires)j(eac)o(h)f(user)g(ha)o(v)o(e)g(their)f
($MAIL)h(v)n(ariable)e(setup)179 291 y(correctly)m(,)h(and)g(that)g(ev)o(ery)
g(program)e(use)j(this)f(v)n(ariable.)75 415 y Fj(2.3.1)55
b(Wh)n(y)19 b(Deliv)n(er)e(In)n(to)i(the)f(Home)f(Directory?)175
490 y Fl(There)g(are)f(sev)o(eral)g(ma)r(jor)e(reasons)j(wh)o(y)f(SAs)g(migh)
o(t)e(w)o(an)o(t)h(to)h(deliv)o(er)g(mail)d(directly)j(in)o(to)f(the)i
(users')75 540 y(home)c(directories:)137 656 y Fi(\017)21 b
Fm(Lo)q(cation)p Fl(:)16 b(man)o(y)c(mail)g(readers)j(need)g(to)f(mo)o(v)o(e)
e(mail)f(from)h(the)j(sp)q(o)q(ol)e(directory)i(to)f(the)g(user's)h(home)179
706 y(directory)m(.)j(It)13 b(sp)q(eeds)h(up)f(this)g(op)q(eration)g(if)e
(the)j(t)o(w)o(o)e(are)h(on)g(the)g(same)f(\014lesystem.)18
b(If)12 b(for)g(some)g(reason)179 756 y(the)19 b(user's)g(home)e(directory)i
(is)g(inaccessible,)h(it)e(isn't)g(that)g(useful)g(to)h(b)q(e)g(able)f(to)g
(read)h(mail,)d(since)179 806 y(there)f(is)e(no)g(place)h(to)f(mo)o(v)o(e)f
(it)i(to.)737 791 y Fg(7)773 806 y Fl(In)f(some)g(cases,)i(trying)e(to)g(mo)o
(v)o(e)f(mail)f(to)i(a)h(non-existen)o(t)g(or)f(h)o(ung)179
856 y(\014lesystem)g(ma)o(y)f(result)j(in)f(mail)d(loss.)137
939 y Fi(\017)21 b Fm(Distrib)o(uti)o(on)o Fl(:)27 b(ha)o(ving)19
b(all)f(mail)f(sp)q(o)q(ol)j(directories)h(spread)f(among)e(the)i(man)o(y)e
(more)h(\014lesystems)179 988 y(minim)o(izes)14 b(the)j(c)o(hances)h(that)f
(complete)f(en)o(vironmen)o(ts)g(will)f(grind)h(to)g(a)g(halt)g(when)h(a)f
(single)g(serv)o(er)179 1038 y(is)e(do)o(wn.)19 b(It)c(do)q(es)g(increase)g
(the)g(c)o(hance)h(that)e(there)i(will)d(b)q(e)i(someone)f(who)g(is)g(not)g
(able)g(to)h(read)g(their)179 1088 y(mail)d(when)j(a)g(mac)o(hine)e(is)i(do)o
(wn,)f(but)h(that)g(is)g(usually)f(preferred)j(to)d(ha)o(ving)g(no)h(one)g(b)
q(e)g(able)g(to)f(read)179 1138 y(their)j(mail)e(b)q(ecause)k(a)d(cen)o
(tralized)i(mail)d(serv)o(er)k(is)d(do)o(wn.)28 b(The)17 b(problem)f(of)h
(losing)f(some)g(mail)e(due)179 1188 y(to)i(the)h(\(presumably\))f(higher)g
(c)o(hances)i(that)e(a)g(user's)i(mac)o(hine)d(is)h(do)o(wn)g(is)g(minimi)o
(zed)e(in)i(HLFS)h(as)179 1237 y(describ)q(ed)e(in)f(Sections)h(4.3)d(and)i
(4.4.)137 1320 y Fi(\017)21 b Fm(Securit)o(y)p Fl(:)e(deliv)o(ering)d(mail)d
(to)j(users')g(home)f(directories)i(has)f(another)h(adv)n(an)o(tage)e(|)g
(enhanced)i(se-)179 1370 y(curit)o(y)e(and)g(priv)n(acy)m(.)21
b(Since)15 b(a)g(shared)h(system)f(mail)d(sp)q(o)q(ol)j(directory)h(has)f(to)
g(b)q(e)h(w)o(orld-readable)e(and)179 1420 y(searc)o(hable,)376
1405 y Fg(8)407 1420 y Fl(an)o(y)d(user)i(can)f(see)i(whether)f(other)f
(users)h(ha)o(v)o(e)f(mail,)d(when)k(they)f(last)g(receiv)o(ed)h(new)f(mail,)
179 1470 y(or)j(when)h(they)g(last)f(read)h(their)g(mail.)k(Programs)14
b(suc)o(h)i(as)g Fk(finger)e Fl(displa)o(y)g(this)i(information,)c(whic)o(h)
179 1520 y(some)f(consider)i(an)f(infringemen)o(t)f(of)h(priv)n(acy)m(.)k
(While)c(it)g(is)g(p)q(ossible)g(to)g(disable)g(this)h(feature)g(of)e
Fk(finger)179 1570 y Fl(so)16 b(that)f(remote)g(users)j(cannot)d(see)i(a)f
(mailb)q(o)o(x)c(\014le's)k(status,)g(this)g(do)q(esn't)g(prev)o(en)o(t)h(lo)
q(cal)e(users)i(from)179 1619 y(getting)d(the)g(information.)i(F)m
(urthermore,)e(there)h(are)g(more)e(programs)g(whic)o(h)h(mak)o(e)e(use)j(of)
f(this)g(infor-)179 1669 y(mation.)24 b(In)17 b(shared)h(en)o(vironmen)o(ts,)
e(disabling)f(suc)o(h)j(programs)d(has)i(to)g(b)q(e)g(done)g(on)g(a)f
(system-wide)179 1719 y(basis,)i(but)g(with)g(mail)d(deliv)o(ered)j(to)g
(users')h(home)e(directories,)i(users)h(less)e(concerned)i(with)d(priv)n(acy)
179 1769 y(who)f Fh(do)g Fl(w)o(an)o(t)f(to)h(let)g(others)h(kno)o(w)f(when)g
(they)h(last)f(receiv)o(ed)h(or)f(read)g(mail)e(can)i(easily)f(do)h(so)g
(using)179 1819 y(\014le)e(protection)i(bits.)k(Lastly)m(,)14
b(on)g(systems)h(that)g(do)f(not)h(exp)q(ort)g(their)g(NFS)g(\014lesystem)f
(with)h Fk(anon=0)p Fl(,)179 1868 y(sup)q(erusers)f(are)e(less)g(lik)o(ely)d
(to)j(sno)q(op)f(around)g(others')h(mail,)d(as)i(they)h(b)q(ecome)f(\\nob)q
(o)q(dies")g(across)h(NFS.)175 1985 y(In)j(summary)m(,)e(deliv)o(ering)i
(mail)d(to)k(home)e(directories)j(pro)o(vides)f(users)h(the)f(functionalit)o
(y)e(sough)o(t,)h(and)75 2034 y(also)e(a)o(v)o(oids)g(most)g(of)g(the)i
(problems)e(discussed)i(in)f(Section)g(2.2.)75 2142 y Fj(3)56
b(Design)175 2218 y Fl(W)m(e)16 b(named)f(our)h(\014le)h(system)f(the)h
Fh(Home-Link)h(File)e(System)p Fl(,)h(b)q(ecause)h(that's)f(all)e(it)h(do)q
(es)h(|)f(pro)o(vide)75 2267 y(sym)o(b)q(olic)11 b(links)g(to)i(\014les)f
(and)h(directories)g(in)f(a)g(user's)i(home)d(directory)m(.)18
b(The)13 b(soft)f(link)f(has)i(a)f(\014xed)h(name,)e(but)75
2317 y(unlik)o(e)16 b(regular)h(soft)g(links,)f(what)h(it)f(p)q(oin)o(ts)h
(to)f(is)h(\\dynamic")e(dep)q(ending)i(on)f(who)h(accesses)i(the)f(sym)o(b)q
(olic)75 2367 y(link.)25 b(The)18 b(ideas)e(that)h(this)g(\014lesystem)f
(represen)o(ts)k(are)d(not)f(limited)f(just)i(to)f(handling)g(electronic)h
(mail)d(|)75 2417 y(that)g(is)g(only)f(one)h(application)e(of)i(this)g
(\014lesystem.)j(See)e(Sections)g(7.1)e(and)g(7.2)g(for)h(other)g(ideas.)175
2491 y(Our)g(k)o(ey)g(goals)f(in)g(designing)h(HLFS)g(w)o(ere:)p
75 2526 720 2 v 121 2553 a Ff(7)139 2565 y Fe(This)e(assumes)f(that)h(they)g
(can)g(login)f(to)i(a)f(di\013eren)o(t)f(host.)18 b(Some)11
b(systems,)g(suc)o(h)h(as)h(HP-UX,)h(do)e(not)g(allo)o(w)g(login)g(if)g(they)
75 2604 y(cannot)e Fd(chdir)g Fe(to)h(the)g(user's)f(home)g(directory)m(.)121
2632 y Ff(8)139 2644 y Fe(System)g(V)i(has)g(the)f(mail)g(sp)q(o)q(ol)f
(directory)g(only)h(group)f(writable)h(but)g(that)g(mak)o(es)f(it)i(more)f
(di\016cult)g(to)g(install)g(other)f(UAs)75 2683 y(or)h(MT)m(As.)965
2825 y Fl(5)p eop
%%Page: 6 6
bop 126 42 a Fl(1.)20 b(T)m(o)13 b(pro)o(vide)h(ev)o(ery)g(user)h(with)f(the)
g(abilit)o(y)e(to)i(read)h(mail)c(from)h(an)o(y)h(host.)126
125 y(2.)20 b(T)m(o)14 b(ensure)j(that)f(all)e(MT)m(As)h(and)g(UAs)h(in)f
(use,)h(as)f(w)o(ell)g(as)g(an)o(y)g(other)h(utilities)f(whic)o(h)g(dep)q
(end)h(on)f(the)179 174 y(standard)f(mail)d(sp)q(o)q(ol)i(directory)m(,)g
(face)h(no)g(problems)e(from)g(the)i(c)o(hange)g(in)f(the)h(underlying)g
(\014lesystem.)126 257 y(3.)20 b(T)m(o)13 b(minim)o(ize)e(the)k(p)q
(ossibilit)o(y)e(of)g(mail)e(b)q(eing)j(lost)g(or)f(b)q(ouncing)h(bac)o(k)g
(to)g(the)g(sender.)126 340 y(4.)20 b(T)m(o)13 b(pro)o(vide)h(more)e(priv)n
(acy)i(for)f(users')i(mail)d(\014les.)175 457 y(Since)g(most)f(sites)i(pro)o
(vide)f(access)i(to)e(users')i(home)c(directories)k(from)c(an)o(y)i(host,)g
(it)g(made)f(sense)j(to)e(store)75 506 y(incoming)f(mail)g(there)k(as)f(w)o
(ell.)j(That)c(w)o(a)o(y)m(,)f(as)i(long)f(as)g(users)i(could)f(log)e(in)o
(to)h(a)h(host)f(and)h(access)h(their)f(home)75 556 y(directories)f(via)e
(NFS,)h(their)g(mail)d(w)o(ould)i(b)q(e)h(accessible)h(as)f(w)o(ell.)17
b(This)11 b(solv)o(ed)h(the)g(\014rst)h(problem.)j(Also,)11
b(since)75 606 y(users)16 b(m)o(ust)e(login)f(in)i(order)g(to)g(read)g(their)
g(mail,)d(causing)i(their)i(home)d(directories)j(to)f(b)q(e)g(automoun)o
(ted,)e(no)75 656 y(extra)h(moun)o(ts)f(are)h(required)h(in)f(order)g(to)g(b)
q(egin)g(reading)f(mail.)175 731 y(The)f(second)g(problem)f(w)o(as)g(solv)o
(ed)h(b)o(y)f(making)e(sure)k(that)f(the)g(\014nal)f(access)j(of)d(the)h
(mail)d(sp)q(o)q(ol)i(directory)75 780 y(remains)17 b(a)g(\\real")h
(directory)g(\(not)g(a)g(read-only)f(pseudo-\014lesystem)i(pro)o(vided)f(b)o
(y)f(an)h(automoun)o(ter\).)29 b(All)75 830 y(UAs)20 b(access)h(the)f(sp)q(o)
q(ol)f(directory)h(for)f(reading)g(and)h(writing)e(the)i(user's)h(mail)16
b(\014le)k(and)f(create)i(lo)q(c)o(k)e(\014les)75 880 y(there.)178
865 y Fg(9)217 880 y Fl(That)14 b(means)f(that)h Fk(/var/spool/mail)d
Fl(needs)16 b(to)e(b)q(e)g(readable,)g(writable,)g(and)g(searc)o(hable)h(for)
e(UAs)75 930 y(and)i(MT)m(As)g(so)g(that)g(lo)q(c)o(k)f(\014les)h(can)g(b)q
(e)h(written)f(and)g(remo)o(v)o(ed.)20 b(See)c(also)e(Section)i(4.6.)k(F)m
(or)14 b(the)i(purp)q(ose)g(of)75 980 y(writing)g(the)i(mail)c(and)j(lo)q(c)o
(k)g(\014les,)g(a)g(sub)q(directory)h(inside)f(the)h(user's)g(home)e
(directory)i(is)e(su\016cien)o(t,)i(since)75 1029 y(it)d(is)f(already)h(o)o
(wned)g(b)o(y)g(that)g(user.)22 b(Ensuring)15 b(that)g(users)i(cannot)e
(access)i(other)e(users')h(\014les)g(can)f(easily)f(b)q(e)75
1079 y(ac)o(hiev)o(ed)g(b)o(y)g(protecting)g(this)g(sub)q(directory)m(.)175
1154 y(In)h(order)i(not)f(to)g(c)o(hange)g(the)g(b)q(eha)o(vior)g(of)f
(programs)g(lik)o(e)g Fk(comsat)p Fl([21)m(,)h(23)o(],)g Fk(from)f
Fl(or)g Fk(finger)p Fl(,)g(whic)o(h)75 1204 y(are)j(designed)g(to)g(read)g
(an)o(y)f(user's)h(mail,)e(w)o(e)i(implem)o(en)o(ted)e(a)h(sp)q(ecial)h(c)o
(hec)o(k)h(for)e(a)g(designated)h(group.)29 b(If)75 1254 y(the)17
b(e\013ectiv)o(e)g Fh(gid)f Fl(of)g(the)g(pro)q(cess)i(is)e(the)h(designated)
g(group,)f(w)o(e)g(assume)g(that)g(suc)o(h)h(a)e(sp)q(ecial)i(program)d(is)75
1303 y(executing,)20 b(and)e Fk(hlfsd)f Fl(arranges)i(to)f(do)g(the)h(lo)q
(okup)f(not)g(only)g(of)f(the)i(real)g(sp)q(o)q(ol)f(directory)m(,)h(but)g
(of)e(the)75 1353 y(mailb)q(o)o(x)f(itself.)34 b(See)20 b(T)m(able)e(2.)33
b(Note)20 b(that)f(this)g(metho)q(d)g(only)f(supp)q(orts)i(read)g(access)h
(without)d(lo)q(c)o(king;)p 75 1415 1800 5 v 607 1469 a(Conditions:)f
Fh(gid)p Fl(=HLFS)p 1027 1469 13 2 v 15 w(GID)d(for)f(an)o(y)h
Fh(uid)p Fl(.)p 206 1487 1538 2 v 205 1537 2 50 v 214 1537
V 239 1522 a Fm(Resolving)p 502 1537 V 919 1537 V 1735 1537
V 1744 1537 V 205 1587 V 214 1587 V 239 1572 a(comp)q(onen)o(t)p
502 1587 V 58 w(P)o(athname)g(left)p 919 1587 V 120 w(V)l(alue)g(if)h(sym)o
(b)q(olic)f(link)p 1735 1587 V 1744 1587 V 206 1589 1538 2
v 206 1599 V 205 1648 2 50 v 214 1648 V 239 1633 a Fk(/)p 502
1648 V 267 w(var/mail/)p Fh(NAME)p 919 1648 V 1735 1648 V 1744
1648 V 206 1650 1538 2 v 205 1700 2 50 v 214 1700 V 239 1685
a Fk(var)p Fl(/)p 502 1700 V 202 w Fk(mail/)p Fh(NAME)p 919
1700 V 1735 1700 V 1744 1700 V 206 1701 1538 2 v 205 1751 2
50 v 214 1751 V 239 1736 a Fk(mail)p Fl(@)p 502 1751 V 169
w Fk(/mail/home/)p Fh(NAME)p 919 1751 V 48 w Fk(mail)p Fl(@)f
Fi(\))g Fk(/mail/home)p 1735 1751 V 1744 1751 V 206 1753 1538
2 v 205 1803 2 50 v 214 1803 V 239 1788 a(/)p 502 1803 V 267
w(mail/home/)p Fh(NAME)p 919 1803 V 1735 1803 V 1744 1803 V
206 1804 1538 2 v 205 1854 2 50 v 214 1854 V 239 1839 a Fk(mail)p
Fl(/)p 502 1854 V 180 w Fk(home/)p Fh(NAME)p 919 1854 V 1735
1854 V 1744 1854 V 206 1856 1538 2 v 205 1906 2 50 v 214 1906
V 239 1891 a Fk(home)p Fl(@)p 502 1906 V 169 w Fh(NAME)p 919
1906 V 290 w Fk(home)p Fl(@)g Fi(\))g Fk(.)p 1735 1906 V 1744
1906 V 206 1907 1538 2 v 205 1957 2 50 v 214 1957 V 239 1942
a(.)p Fl(/)p 502 1957 V 246 w Fh(NAME)p 919 1957 V 1735 1957
V 1744 1957 V 206 1959 1538 2 v 206 1969 V 205 2019 2 50 v
214 2019 V 239 2004 a(NAME)p Fl(@)p 502 2019 V 919 2019 V 547
w Fh(NAME)p Fl(@)h Fi(\))f Fk(~)p Fh(NAME)p Fk(/.mailspool/)p
Fh(NAME)p 1735 2019 V 1744 2019 V 206 2020 1538 2 v 205 2070
2 50 v 214 2070 V 239 2055 a Fk(~)p Fh(NAME)p Fl(/)p 502 2070
V 119 w Fk(.mailspool/)p Fh(NAME)p 919 2070 V 1735 2070 V 1744
2070 V 206 2072 1538 2 v 205 2122 2 50 v 214 2122 V 239 2107
a Fk(.mailspool)p Fl(/)p 502 2122 V 48 w Fh(NAME)p 919 2122
V 1735 2122 V 1744 2122 V 206 2123 1538 2 v 205 2173 2 50 v
214 2173 V 239 2158 a(NAME)p 502 2173 V 919 2173 V 1735 2173
V 1744 2173 V 206 2175 1538 2 v 243 2249 a Fl(T)m(able)g(2:)18
b(Sp)q(ecially)13 b(resolving)h Fk(/var/mail/)p Fh(NAME)e Fl(to)h
Fm(~)p Fh(NAME)p Fk(/.mailspool/)p Fh(NAME)p 75 2299 1800 5
v 75 2440 a Fl(ho)o(w)o(ev)o(er,)k(this)g(is)f(su\016cien)o(t)h(for)f(all)g
(programs)f(that)i(need)g(to)g(access)h(other)f(users')h(mailb)q(o)o(xes.)24
b(All)15 b(that)i(is)75 2490 y(required)e(is)f(to)f(set)i(these)g(programs)e
(to)h(b)q(e)g Fh(setgid)g Fl(to)g(the)g(designated)h(group.)p
75 2525 720 2 v 121 2552 a Ff(9)139 2563 y Fe(Note)e(that,)g(in)g(order)g(to)
g(allo)o(w)g(mail)g(deliv)o(ery)e(to)i(NFS)q(-moun)o(ted)d(mail)j(sp)q(o)q
(ol)g(directories,)e(most)h(v)o(endors)g(ha)o(v)o(e)h(mo)q(di\014ed)75
2603 y(the)d Fd(/bin/mail)e Fe(program)g(to)j(set)f(its)g Fc(uid)h
Fe(to)g(that)f(of)g(the)g(recipien)o(t)e(when)j(deliv)o(ering)d(mail.)13
b(If)e(a)g(lo)q(cal)e(deliv)o(ery)g(agen)o(t)g(\(LD)o(A\))i(on)75
2642 y(a)g(system)f(do)q(es)g(not)g(pro)o(vide)f(this)i(b)q(eha)o(vior,)d
(the)j(MT)m(A)i(m)o(ust)d(arrange)f(to)i(in)o(v)o(ok)o(e)e(it)i(with)g(the)f
Fc(uid)i Fe(of)f(the)f(recipien)o(t)f(|)j(this)e(can)75 2682
y(b)q(e)h(done)f(b)o(y)h(a)h(wrapp)q(er)e(C)i(program.)965
2825 y Fl(6)p eop
%%Page: 7 7
bop 175 42 a Fl(The)14 b(third)h(problem)d(is)j(solv)o(ed)f(b)o(y)g(ensuring)
g(that)h(all)e(op)q(erations)h(whic)o(h)g(migh)o(t)f(hang)g
Fk(hlfsd)h Fl(are)g(p)q(er-)75 91 y(formed)e(in)h(the)h(bac)o(kground,)f
(while)g(still)g(pro)o(viding)f(service)j(in)e(the)h(paren)o(t)g(or)g(c)o
(hild)f(pro)q(cess.)20 b(F)m(urthermore,)75 141 y(if)12 b Fk(hlfsd)f
Fl(is)i(not)g(running)f(an)o(ymore,)f(or)i(if)f(the)h(user's)h(home)d
(\014lesystem)i(is)f(full,)f(mail)f(gets)k(deliv)o(ered)f(to)f(an)h(al-)75
191 y(ternate)f(directory)g(\(See)g(also)f(Section)g(4.3\).)16
b(A)11 b Fk(cron)f Fl(job)h(\(running)g(sev)o(eral)g(times)g(a)f(da)o(y)h(in)
f(our)i(departmen)o(t\),)75 241 y(lo)q(oks)h(at)h(the)h(alternate)g
(directory)m(,)f(and)g(attempts)f(to)h(resend)i(messages)e(in)g(it)f(to)h
(their)h(righ)o(tful)e(o)o(wners.)19 b(All)75 291 y(that)12
b(is)h(incurred)g(is)g(a)f(dela)o(y)g(in)g(mail)d(deliv)o(ery)m(,)j(whic)o
(h,)g(in)g(most)f(cases,)j(is)e(no)g(longer)h(than)f(the)h(length)f(of)g
(time)75 340 y(b)q(et)o(w)o(een)j(consecutiv)o(e)h(in)o(v)o(o)q(cations)d(of)
g(the)h(lost-mail)d(remailing)h(script.)175 415 y(Ha)o(ving)h(a)h(sp)q(ecial)
g(mail-sp)q(o)q(ol)e(sub)q(directory)j(o)o(wned)g(and)f(con)o(trolled)g(b)o
(y)g(the)h(user)g(also)f(addresses)i(the)75 465 y(last)c(problem,)f(that)i
(of)f(priv)n(acy)m(.)k(Users)e(can)f(c)o(hange)g(the)g(protection)g(bits)g
(on)f(their)h(mailb)q(o)o(x)d(directory)j(inside)75 515 y(their)g(home)f
(directory)i(so)f(that)g(it)f(is)h(readable)g(and)g(searc)o(hable)h(only)e(b)
o(y)h(the)g(o)o(wner.)18 b(An)o(y)13 b(other)h(program)d(or)75
565 y(user,)16 b(unless)f(running)g(as)g(the)g(sup)q(eruser)j(on)c(the)i
(same)e(host,)1091 549 y Fg(10)1141 565 y Fl(w)o(ould)g(not)h(b)q(e)g(able)g
(to)f(\014nd)h(out)g(whether)h(a)75 614 y(user)f(has)f(new)g(mail,)d(ho)o(w)j
(m)o(uc)o(h)e(of)i(it)f(there)i(is,)f(or)f(when)i(it)e(w)o(as)h(last)g(read.)
75 722 y Fj(4)56 b(Impleme)o(n)n(tation)16 b(of)j Fb(hlfsd)175
797 y Fl(W)m(e)f(used)i(a)f(protot)o(yp)q(e)h(NFS)f(serv)o(er,)j(and)d
(implem)o(en)o(ted)e(only)i(the)g(op)q(erations)h(that)f(w)o(ere)h(needed.)75
847 y(W)m(e)14 b(generated)i(NFS)e(stubs)i(using)e Fk(rpcgen)p
Fl(.)k(The)d(serv)o(er)h(w)o(as)e(dev)o(elop)q(ed)h(\014rst)g(under)h(SunOS)f
(v)o(ersion)f(4.1.2.)75 897 y(This)g(serv)o(er)i(w)o(as)e(incorp)q(orated)h
(in)o(to)e(the)i Fk(amd)e Fl(source)j(tree,)f(and)f(w)o(e)g(used)h(some)e(of)
h Fk(amd)p Fl('s)f(sources)j(as)e(utilit)o(y)75 947 y(functions,)k(since)g
(they)g(are)g(w)o(ell-written)f(to)h(handle)f(a)g(v)n(ariet)o(y)g(of)g(arc)o
(hitectures)j(and)d(op)q(erating)g(systems.)75 997 y(\(See)e(Section)f(4.7)f
(for)h(source)h(co)q(de)g(a)o(v)n(ailabil)o(it)o(y)l(.\))75
1105 y Fj(4.1)56 b(The)18 b(\\Home-Link")d(File)j(Service)175
1180 y Fl(This)10 b(subsection)i(includes)g(tec)o(hnical)f(details)f(of)h
(the)g(NFS)g(op)q(erations)g(and)g(ma)o(y)e(b)q(e)i(skipp)q(ed.)18
b(Ho)o(w)o(ev)o(er,)75 1230 y(it)13 b(pro)o(vides)g(an)g(example)e(of)i(the)g
(design)h(and)f(implem)o(en)o(tation)d(of)i(a)h(small)e(sp)q(ecial-purp)q
(ose)j(NFS)g(serv)o(er)g(and)75 1279 y(ma)o(y)e(b)q(e)i(of)g(use)g(to)g
(others.)175 1354 y(HLFS)j(is)g(a)g(read-only)g(\014lesystem,)g(and)g(as)h
(suc)o(h,)g(all)e(op)q(erations)i(that)f(require)h(write)g(access)h(return)75
1404 y(the)d(error)h(co)q(de)f(NFSERR)p 522 1404 13 2 v 14
w(R)o(OFS)g(\(\\Read-Only)f(Filesystem"\):)20 b Fh(setattr,)c(write,)f(cr)n
(e)n(ate,)h(r)n(emove,)g(r)n(ename,)75 1454 y(link,)g(unlink,)g(symlink,)g
(mkdir,)f Fl(and)g Fh(rmdir)p Fl(.)21 b(T)m(rivially)13 b(implemen)o(ted)g(w)
o(ere)j(the)g Fh(nul)r(l)p Fl(,)f Fh(r)n(o)n(ot)p Fl(,)g(and)g
Fh(write)n(c)n(ache)75 1504 y Fl(op)q(erations.)i(W)m(e)11
b(decided)h(to)e(ha)o(v)o(e)h Fh(statfs)f Fl(return)i(some)e(v)n(alue)h
(\(all)e(zeros)k(in)d(most)g(cases\).)18 b(The)11 b Fh(r)n(e)n(ad)g
Fl(op)q(eration)75 1553 y(simply)h(returns)j(NFSERR)p 524 1553
V 15 w(A)o(CCES)f(\(\\P)o(ermission)f(Denied"\).)175 1628 y(The)e(remaining)e
(op)q(erations)i(are)h(the)f(heart)h(of)e(this)h(\014lesystem:)17
b Fh(r)n(e)n(addir)p Fl(,)10 b Fh(getattr)p Fl(,)g Fh(lo)n(okup)p
Fl(,)i(and)f Fh(r)n(e)n(ad)r(link)p Fl(.)175 1703 y(Our)j(serv)o(er)h(m)o
(ust)d(distinguish)h(b)q(et)o(w)o(een)i(the)f(directory)g(and)g(the)g(link,)e
(so)i(w)o(e)f(assigned)h(them)f(di\013eren)o(t)75 1753 y(in)o(tegers)f(to)f
(serv)o(e)i(as)f(\014lehandles.)17 b(Note)12 b(that)f(these)i(need)g(not)e(b)
q(e)h(as)f(complicated)g(as)g(the)h(\014lehandles)g(usually)75
1802 y(generated)j(b)o(y)f(NFS.)k(They)c(need)h(only)e(to)h(b)q(e)h(unique,)e
(and)h(their)g(v)n(alue)f(is)h(meaningful)d(only)i(to)h(the)h(serv)o(er.)75
1910 y Fj(4.1.1)55 b(The)19 b(readdir)f(Op)r(eration)175 1985
y Fl(Op)q(ening)h(this)g(directory)h(returns)h(the)f(\\.")33
b(and)19 b(\\..")33 b(directories,)21 b(and)e(one)g(sym)o(b)q(olic)e(link,)i
Fk(home)p Fl(.)75 2035 y(A)o(ttempting)e(to)g(readdir)h(on)g(the)g(sym)o(b)q
(olic)e(link)h(results)i(in)f(an)f(NFSERR)p 1326 2035 V 15
w(NOTDIR.)g(An)o(ything)g(else)i(is)e(a)75 2085 y(stale)d(\014lehandle.)75
2193 y Fj(4.1.2)55 b(The)19 b(getattr)e(Op)r(eration)175 2268
y Fh(Getattr)h Fl(returns)i(r-xr-xr-x)e(for)h(the)g(\\.")32
b(and)18 b(\\..")32 b(directories.)h(The)19 b(link)f(itself,)h(named)e
Fk(home)h Fl(b)o(y)75 2318 y(default,)d(is)h(protected)h(as)f(rwxrwxrwx.)23
b(It)16 b(do)q(es)g(not)g(matter)f(for)g(the)h(link)f(that)h(it)f(is)g(w)o
(orld-writable.)23 b(The)75 2368 y(mo)q(di\014cation)10 b(and)j(creation)f
(times)g(for)g(the)h(link)e(and)i(directories)g(are)g(the)g(startup)g(time)e
(of)h(the)h(serv)o(er.)19 b(If)12 b(the)75 2418 y(e\013ectiv)o(e)k
Fh(gid)f Fl(of)f(the)h(pro)q(cess)h(is)f(HLFS)p 721 2418 V
15 w(GID,)e(then)j(some)d(\014xed)i(v)n(alid)e(attributes)j(are)f(returned.)
22 b(An)o(y)14 b(other)75 2467 y(\014lehandle)i(giv)o(en)f(to)g
Fk(hlfsd)g Fl(is)g(considered)i(stale)f(and)f(the)i(NFSERR)p
1227 2467 V 14 w(ST)m(ALE)f(\(\\Stale)f(Filehandle"\))g(result)75
2517 y(co)q(de)g(is)e(returned.)p 75 2544 720 2 v 106 2571
a Ff(10)139 2582 y Fe(Or)e(as)h(the)f(sup)q(eruser)e(elsewhere,)h(if)h(the)g
(\014lesystem)e(is)i(NFS-exp)q(orted)e(with)j Fd(anon=0)p Fe(.)965
2825 y Fl(7)p eop
%%Page: 8 8
bop 75 42 a Fj(4.1.3)55 b(The)19 b(lo)r(okup)e(Op)r(eration)175
117 y Fl(Ob)o(viously)m(,)c(w)o(e)i(only)f(allo)o(w)f(lo)q(oking)g(up)h(in)h
(the)g(\\.")20 b(and)14 b(\\..")20 b(directories,)15 b(b)q(oth)g(of)f(whic)o
(h)g(return)i(the)75 166 y(same)e(v)n(alues.)22 b(T)m(rying)15
b(to)g(lo)q(okup)f(\\in")h(the)g(link)g(results)h(in)f(an)g(NFSERR)p
1312 166 13 2 v 15 w(NOTDIR)f(\(\\Not)i(a)f(Directory"\))75
216 y(error)k(co)q(de.)32 b(An)o(y)18 b(link)g(not)g(kno)o(wn)g(to)g(the)h
(serv)o(er)g(returns)h(an)e(NFSERR)p 1338 216 V 15 w(NOENT)h(\(\\No)f(Suc)o
(h)h(En)o(try"\))75 266 y(error,)f(unless)f(the)g Fh(gid)g
Fl(of)e(the)j(requesting)f(pro)q(cess)h(is)f(HLFS)p 1088 266
V 15 w(GID)f(and)g(the)h(name)e(corresp)q(onds)k(to)d(a)h(v)n(alid)75
316 y(user.)i(In)12 b(this)g(case)h(the)g Fh(username)f Fl(for)g(that)g(user)
h(is)f(used)h(in)f(the)g(returned)i(\014lehandle,)e(allo)o(wing)e(the)i
(readlink)75 366 y(op)q(eration)i(to)f(return)j(the)e(correct)i(link.)h(An)o
(ything)c(else)i(is)e(a)h(stale)g(\014lehandle.)75 474 y Fj(4.1.4)55
b(The)19 b(readlink)e(Op)r(eration)175 549 y Fl(This)d(is)h(the)g(most)f(imp)
q(ortan)o(t)e(op)q(eration,)j(the)g(cen)o(tral)g(p)q(oin)o(t)f(of)g(this)h(w)
o(ork.)20 b(W)m(e)15 b(get)g(the)g Fh(uid)g Fl(n)o(um)o(b)q(er)75
599 y(from)c(the)j(creden)o(tials)g(sen)o(t)g(with)e(the)i(RPC)f(op)q
(eration.)k(W)m(e)c(mak)o(e)e(sure)j(that)f(Unix)g(Authen)o(tication)g(or)g
(DES)75 648 y(is)h(used)h(or)e(else)i(w)o(e)f(return)h(the)g(NFSERR)p
774 648 V 14 w(PERM)f(\(\\Not)g(Owner"\))h(co)q(de.)175 723
y(If)j(the)h Fh(gid)g Fl(of)f(the)h(accessing)h(pro)q(cess)g(is)f(not)g(HLFS)
p 1064 723 V 15 w(GID,)e(the)i(v)n(alue)f(w)o(e)h(return)h(for)f(the)g(sym)o
(b)q(olic)75 773 y(link)13 b(named)g Fk(home)379 758 y Fg(11)427
773 y Fl(is)h(a)g(string)g(represen)o(ting)i(the)f(home)e(directory)i(of)e
(the)i(user)g(whose)g Fh(uid)f Fl(w)o(e)h(just)f(found,)75
823 y(concatenated)g(with)e(a)h(\014xed)g(comp)q(onen)o(t)e(name)h(represen)o
(ting)i(a)e(sub)q(directory)i(within)e(it.)17 b(W)m(e)c(used)g(a)f(binary)75
873 y(searc)o(h)h(on)e(the)h(lo)q(okup)e(table)h(to)h(quic)o(kly)e(get)i(the)
g(righ)o(t)f(pathname.)16 b(Di\013eren)o(t)c(home)e(directories)i(for)f(m)o
(ultiple)75 922 y(passw)o(ord)i(database)f(en)o(tries)h(with)f(the)h(same)e
Fh(uid)i Fl(n)o(um)o(b)q(ers)f(ma)o(y)e(return)j(an)o(y)f(of)g(the)h(home)e
(directories.)18 b(Only)75 972 y Fh(uid)c Fl(0)g(is)f(guaran)o(teed)i(to)f
(return)h(\\)p Fk(/)p Fl(".)i(See)e(also)e(Section)h(5.3.)175
1047 y(If)h(the)h(sym)o(b)q(olic)e(link)g(is)i(named)e Fk(home)h
Fl(and)g(the)h Fh(gid)g Fl(is)f(HLFS)p 1206 1047 V 15 w(GID,)g(w)o(e)h
(return)g(a)g(link)e(to)i(\\.",)e(whic)o(h)75 1097 y(causes)19
b Fk(hlfsd)d Fl(to)h(b)q(e)h(used)g(to)f(resolv)o(e)h(the)g(next)g(pathname)e
(comp)q(onen)o(t.)27 b(This)17 b(is)h(designed)g(to)f(main)o(tain)75
1147 y(functionalit)o(y)c(of)i(programs)f(suc)o(h)i(as)f Fk(from)p
Fl(.)20 b(If)15 b(the)h(sym)o(b)q(olic)d(link)h(is)h(not)g(named)f
Fk(home)g Fl(and)h(the)h Fh(gid)f Fl(of)f(the)75 1196 y(accessing)j(pro)q
(cess)g(is)e(HLFS)p 553 1196 V 16 w(GID,)f(w)o(e)i(return)g(a)f(v)n(alue)g(p)
q(oin)o(ting)g(to)g(the)h(user's)h(mailb)q(o)o(x)12 b(\014le)k(in)f(their)h
(mail)75 1246 y(sp)q(o)q(ol)c(directory)m(.)18 b(T)m(o)12 b(do)g(this,)g(w)o
(e)h(extract)g(the)h Fh(username)e Fl(from)f(the)i(\014lehandle,)f(whic)o(h)h
(w)o(as)f(returned)i(b)o(y)e(the)75 1296 y(lo)q(okup)h(op)q(eration.)18
b(See)d(T)m(able)e(2.)175 1371 y(T)m(rying)c(to)i(readlink)f(on)h(one)g(of)f
(the)i(t)o(w)o(o)e(directories)i(results)g(in)e(an)h(NFSERR)p
1426 1371 V 15 w(ISDIR)f(\(\\Is)h(a)f(directory"\))75 1421
y(error.)19 b(An)o(ything)13 b(else)i(is)f(a)f(stale)h(\014lehandle.)75
1528 y Fj(4.2)56 b(Execution)17 b(Flo)n(w)175 1604 y Fl(A)o(t)12
b(initialization)d(time,)i Fk(hlfsd)g Fl(creates)j(a)e(UDP)g(service,)i(and)e
(forks)g(a)g(c)o(hild.)17 b(The)c(c)o(hild)e(builds)h(the)h
Fh(uid)75 1653 y Fl(lo)q(okup)h(table,)g(sets)i(up)e(signal)g(handlers,)h
(and)f(in)o(terv)n(al)g(timers.)19 b(The)c(signal)e(handlers)i(are)g(mean)o
(t)f(to)g(reload)75 1703 y(the)i(lo)q(okup)f(table)g(at)g(expiration)g(time)f
(of)h(the)h(in)o(terv)n(al)f(timer,)f(or)i(when)g(a)f(SIGHUP)g(is)h(sen)o(t)g
(to)f(the)h(serv)o(er)75 1753 y(\(presumably)11 b(b)o(y)h(a)f(sup)q
(eruser\).)20 b(A)12 b(sp)q(ecial)g(clean)o(up)h(handler)f(is)f(setup)i(for)f
(SIGTERM,)f(to)g(ensure)j(the)e(serv)o(er)75 1803 y(terminates)i(cleanly)m(.)
j(Then)d(the)h Fk(svc)p 682 1803 14 2 v 15 w(run\(\))e Fl(routine)h(is)f(in)o
(v)o(ok)o(ed.)175 1878 y(Mean)o(while)i(the)i(paren)o(t)g(w)o(aits)f(for)f
(the)i(c)o(hild)f(to)g(initialize.)23 b(When)16 b(it)g(do)q(es,)h(the)g
(paren)o(t)f(moun)o(ts)f(the)75 1927 y(serv)o(er)g(on)f(the)g(moun)o(t)e(p)q
(oin)o(t.)18 b(Of)c(utmost)e(imp)q(ortance)h(is)h(to)g(mak)o(e)e(sure)j(the)f
(attribute)g(cac)o(he)h(is)f(turned)g(o\013.)75 1977 y(If)h(the)g(attribute)h
(cac)o(he)f(is)g(not)g(turned)h(o\013,)f(successiv)o(e)i(accesses)g(to)e
Fk(/mail/home)e Fl(w)o(ould)h(return)i(previously)75 2027 y(computed)f
(pathnames)g(p)q(oin)o(ting)f(to)i(another)g(user's)g(mail,)d(resulting)j(in)
f(mail)e(loss)i(or)h(misdeliv)o(ery)m(.)21 b(If)15 b(it)g(is)75
2077 y(not)d(p)q(ossible)g(to)g(turn)h(o\013)e(the)i(attribute)g(cac)o(he,)f
Fk(hlfsd)f Fl(will)g(exit.)17 b(Ho)o(w)o(ev)o(er,)c(the)f(SA)g(has)h(the)f
(option)g(to)f(force)75 2127 y Fk(hlfsd)j Fl(to)h(con)o(tin)o(ue)g(running)g
(and)g(set)h(the)f(attribute)h(cac)o(he)g(to)f(as)g(short)g(an)g(in)o(terv)n
(al)f(as)h(p)q(ossible)h(\(See)g(also)75 2176 y(Section)e(5.3\).)j(A)o(t)d
(this)g(p)q(oin)o(t)g(the)g(paren)o(t)h(terminates,)e(lea)o(ving)f(the)j(c)o
(hild)e(to)h(run.)175 2251 y(When)j(an)f(in)o(terv)n(al)g(timer)g(go)q(es)h
(o\013)g(\(SIGALRM\))f(or)h(a)f(SIGHUP)h(is)g(sen)o(t)g(to)g(the)h(serv)o
(er,)g(the)f(serv)o(er)75 2301 y(forks)d(a)g(c)o(hild)g(that)g(con)o(tin)o
(ues)h(serving,)f(while)g(the)h(paren)o(t)g(reloads)f(the)h(lo)q(okup)f
(table.)19 b(When)14 b(the)h(paren)o(t)g(is)75 2351 y(\014nished)f(loading,)d
(it)i(sends)i(a)e(SIGKILL)g(to)g(the)h(c)o(hild)e(pro)q(cess,)j(and)e
(resumes)h(serving.)k(When)c(a)f(SIGTERM)75 2401 y(is)h(receiv)o(ed,)h(the)g
(serv)o(er)g(forks)f(a)g(c)o(hild)g(that)g(con)o(tin)o(ues)g(serving,)g
(while)g(it)g(tries)g(to)g(unmoun)o(t)f(the)i(\014lesystem.)75
2450 y(If)f(and)f(when)i(that)f(succeeds,)i(b)q(oth)e(paren)o(t)g(and)g(c)o
(hild)f(exit.)175 2525 y(As)i(mail)d(service)k(is)e(v)o(ery)h(imp)q(ortan)o
(t,)d(w)o(e)j(w)o(an)o(ted)g(to)f(mak)o(e)g Fk(hlfsd)f Fl(as)i(robust)g(as)g
(p)q(ossible.)20 b(W)m(e)14 b(could)75 2575 y(ha)o(v)o(e)k(designed)g(it)f
(as)h(another)g Fk(amd)g Fl(\\\014lesystem)f(t)o(yp)q(e",)h(but)g(decided)h
(that)f(a)f(separate)i(daemon)e(pro)o(vides)75 2625 y(b)q(etter)i(reliabilit)
o(y)c(and)j(faster)g(service.)29 b(In)18 b(general,)g(w)o(e)f(try)h(to)f(do)g
(as)h(m)o(uc)o(h)e(as)h(p)q(ossible:)25 b(w)o(e)18 b(mak)o(e)e(sure)p
75 2659 720 2 v 106 2686 a Ff(11)139 2698 y Fe(The)11 b(name)f(of)h(the)g
(sym)o(b)q(olic)e(link)i(is)g(con\014gurable.)965 2825 y Fl(8)p
eop
%%Page: 9 9
bop 75 42 a Fl(\014lesystems)10 b(are)h(accessible)h(and)e(con)o(tain)f(some)
h(disk)g(space)h(to)f(ha)o(v)o(e)g(mail)e(deliv)o(ered)j(there.)18
b(Where)11 b(directories)75 91 y(are)j(exp)q(ected)h(w)o(e)f(mak)o(e)d(sure)k
(there)f(are)g(no)f(\014les)h(b)o(y)f(these)h(names;)f(where)h(sym)o(b)q
(olic)d(links)i(are)h(exp)q(ected,)h(w)o(e)75 141 y(mak)o(e)f(sure)i(there)h
(are)e(no)g(real)h(\014les)f(or)h(directories)g(with)f(the)h(same)e(name.)21
b(Whenev)o(er)c(p)q(ossible,)e(w)o(e)g(create)75 191 y(directories,)f(with)f
(prop)q(er)i(o)o(wnership)f(and)f(p)q(ermissions.)k(W)m(e)c(ev)o(en)h(c)o
(hec)o(k)h(that)e(the)h(moun)o(t)e(p)q(oin)o(t)h(for)g Fk(hlfsd)75
241 y Fl(is)h(w)o(orld)f(readable)h(and)g(executable,)h(since)f(if)f(it)h
(isn't,)f Fk(getwd\(".."\))e Fl(migh)o(t)h(fail.)75 349 y Fj(4.3)56
b(Alternate)17 b(Mail)h(Sp)r(o)r(ol)g(Directories)175 424 y
Fk(Hlfsd)e Fl(tries)i(to)g(ensure)h(that)f(the)g(user's)g(home)f(directory)h
(is)f(accessible.)31 b(P)o(erio)q(dically)16 b(it)i(also)f(tests)75
474 y(that)i(it)f(can)h(b)q(e)g(written)g(in)o(to)f(\(Section)h(4.5\).)31
b(If)18 b(for)h(an)o(y)f(reason)h(a)f(failure)g(o)q(ccurs,)j
Fk(hlfsd)c Fl(rep)q(oin)o(ts)i(the)75 523 y(sym)o(b)q(olic)11
b(link)h(for)g(that)h(user)h(to)f(an)f(alternate)h(lo)q(cal)f(directory)m(,)h
(whic)o(h)g(is)g(presumably)e(highly)h(a)o(v)n(ailable.)j(W)m(e)75
573 y(use)g Fk(/var/spool/alt)p 457 573 14 2 v 13 w(mail)e
Fl(in)g(our)h(en)o(vironmen)o(t.)j(See)e(T)m(able)e(3.)1167
558 y Fg(12)p 75 636 1800 5 v 238 690 a Fl(Conditions:)k(An)o(y)d
Fh(uid)p Fl(,)g Fh(gid)p Fi(6)p Fl(=HLFS)p 829 690 13 2 v 15
w(GID,)f(and)g Fk(~)p Fh(USER)p Fk(/.mailspool/)f Fl(is)i(not)p
1479 697 60 2 v 14 w(writable.)p 343 710 1265 2 v 342 759 2
50 v 351 759 V 376 744 a Fm(Resolving)p 629 759 V 1083 759
V 1598 759 V 1607 759 V 342 809 V 351 809 V 376 794 a(comp)q(onen)o(t)p
629 809 V 47 w(P)o(athname)g(left)p 1083 809 V 157 w(V)l(alue)h(if)g(sym)o(b)
q(olic)f(link)p 1598 809 V 1607 809 V 343 811 1265 2 v 343
821 V 342 871 2 50 v 351 871 V 376 856 a Fk(/)p 629 871 V 256
w(var/mail/)p Fh(NAME)p 1083 871 V 1598 871 V 1607 871 V 343
872 1265 2 v 342 922 2 50 v 351 922 V 376 907 a Fk(var)p Fl(/)p
629 922 V 191 w Fk(mail/)p Fh(NAME)p 1083 922 V 1598 922 V
1607 922 V 343 924 1265 2 v 342 974 2 50 v 351 974 V 376 959
a Fk(mail)p Fl(@)p 629 974 V 158 w Fk(/mail/home/)p Fh(NAME)p
1083 974 V 85 w Fk(mail)p Fl(@)g Fi(\))f Fk(/mail/home)p 1598
974 V 1607 974 V 343 975 1265 2 v 342 1025 2 50 v 351 1025
V 376 1010 a(/)p 629 1025 V 256 w(mail/home/)p Fh(NAME)p 1083
1025 V 1598 1025 V 1607 1025 V 343 1027 1265 2 v 342 1077 2
50 v 351 1077 V 376 1062 a Fk(mail)p Fl(/)p 629 1077 V 169
w Fk(home/)p Fh(NAME)p 1083 1077 V 1598 1077 V 1607 1077 V
343 1078 1265 2 v 342 1128 2 50 v 351 1128 V 376 1113 a Fk(home)p
Fl(@)p 629 1128 V 158 w Fh(NAME)p 1083 1128 V 327 w Fk(home)p
Fl(@)h Fi(\))f Fk(/var/alt)p 1476 1113 14 2 v 14 w(mail)p 1598
1128 2 50 v 1607 1128 V 343 1130 1265 2 v 342 1180 2 50 v 351
1180 V 376 1165 a(/)p 629 1180 V 256 w(var/alt)p 811 1165 14
2 v 15 w(mail/)p Fh(NAME)p 1083 1180 2 50 v 1598 1180 V 1607
1180 V 343 1181 1265 2 v 342 1231 2 50 v 351 1231 V 376 1216
a Fk(var)p Fl(/)p 629 1231 V 191 w Fk(alt)p 723 1216 14 2 v
15 w(mail/)p Fh(NAME)p 1083 1231 2 50 v 1598 1231 V 1607 1231
V 343 1233 1265 2 v 342 1282 2 50 v 351 1282 V 376 1268 a Fk(alt)p
445 1268 14 2 v 15 w(mail)p Fl(/)p 629 1282 2 50 v 88 w Fh(NAME)p
1083 1282 V 1598 1282 V 1607 1282 V 343 1284 1265 2 v 342 1334
2 50 v 351 1334 V 376 1319 a(NAME)p 629 1334 V 1083 1334 V
1598 1334 V 1607 1334 V 343 1336 1265 2 v 380 1410 a Fl(T)m(able)g(3:)18
b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)i Fk(/var/alt)p
1323 1410 14 2 v 14 w(mail/)p Fh(NAME)p 75 1460 1800 5 v 175
1600 a Fl(When)f Fk(hlfsd)f Fl(starts)i(up,)f(and)g(b)q(efore)h(it)f(moun)o
(ts)f(itself)h(on)f(top)i(of)e(the)i(moun)o(t)d(p)q(oin)o(t,)i(hiding)f(an)o
(ything)75 1650 y(that)k(is)f(underneath,)i Fk(hlfsd)e Fl(creates)i(a)f
(\014xed)g(sym)o(b)q(olic)e(link)g(to)i(the)g(alternate)g(sp)q(o)q(ol)g
(directory)g(\(if)f(it)g(do)q(es)75 1700 y(not)e(exist)g(already\).)k(This)c
(is)g(done)g(so)g(that)f Fk(/var/spool/mail)e Fl(w)o(ould)i(not)h(b)q(e)g(a)g
(\\dangling")d(sym)o(b)q(olic)h(link,)75 1750 y(and)j(p)q(oin)o(ts)g(to)f(a)h
(real)g(directory)h(at)f(all)e(times,)h(ev)o(en)i(after)f Fk(hlfsd)f
Fl(terminates.)18 b(When)c Fk(hlfsd)f Fl(runs,)h(it)g(hides)75
1799 y(this)h(sym)o(b)q(olic)e(link,)h(and)h(pro)o(vides)g(our)g(\\dynamic")e
(sym)o(b)q(olic)g(link.)20 b(This)15 b(tric)o(k)g(at)g(least)g(pro)o(vides)g
(us)g(with)75 1849 y(an)f(alternate)g(place)g(to)g(deliv)o(er)g(mail)d(when)j
(things)g(go)f(wrong,)h(rather)g(than)g(b)q(ounce)h(or)f(drop)g(the)g(mail.)
175 1924 y(A)g(cron)h(job)e(on)h(our)h(systems)f(c)o(hec)o(ks)i(the)f
(alternate)f(mail)e(sp)q(o)q(ol)i(directory)h(sev)o(eral)g(times)e(a)h(da)o
(y)m(.)k(An)o(y)75 1974 y(messages)12 b(found)g(there)i(are)f(resen)o(t)g(to)
g(their)f(righ)o(tful)f(o)o(wners.)19 b(The)12 b(remailing)e(script)j(can)g
(b)q(e)g(run)f(as)h(often)f(as)75 2024 y(needed.)19 b(Eac)o(h)14
b(in)o(v)o(o)q(cation)e(of)h(the)g(script)h(deals)g(only)e(with)h(newly)g
(lost)g(mail)e(since)j(the)g(previous)g(in)o(v)o(o)q(cation;)75
2073 y(the)f(script)g(lo)q(c)o(ks)g(and)f(renames)h(the)g(lost)f(mailb)q(o)o
(x)e(\014le)i(to)h(a)f(unique)h(name,)e(b)q(efore)i(parsing)f(and)h
(remailing)d(it.)175 2148 y(Similar)j(to)k Fk(amd)p Fl(,)f
Fk(hlfsd)f Fl(can)i(log)e(debugging)h(and)h(v)n(arious)e(status)j
(information)13 b(to)k(a)f(designated)h(log)75 2198 y(\014le)e(or)h(using)f
(the)h Fk(syslog)p Fl([22)n(])f(facilit)o(y)m(.)21 b(The)16
b(SA)f(ma)o(y)f(c)o(ho)q(ose)i(to)g(w)o(atc)o(h)f(these)i(log)e(\014les)g
(and)h(facilities)e(and)75 2248 y(b)q(e)h(noti\014ed)e(when)i(serious)f
(problems)f(o)q(ccur)i(suc)o(h)g(as)f(a)g(full)e(\014lesystem.)75
2356 y Fj(4.4)56 b(Av)n(oiding)18 b(Hangs)175 2431 y Fl(As)10
b(describ)q(ed)i(in)e(Section)h(4.2,)e Fk(hlfsd)g Fl(forks)i(a)e(c)o(hild)h
(at)g(an)o(y)g(p)q(oin)o(t)g(where)h(w)o(e)g(susp)q(ect)h(that)e(an)g(op)q
(eration)75 2481 y(migh)o(t)h(hang.)17 b(If,)12 b(for)h(example,)e(the)j
(home)e(mac)o(hine)f(of)i(the)g(user)h(is)f(do)o(wn,)g(and)f(the)i
(\014lesystem)f(on)f(a)h(clien)o(t)g(is)75 2530 y(hard-moun)o(ted,)h
Fk(hlfsd)f Fl(will)h(hang)g(un)o(til)g(the)i(remote)e(serv)o(er)i(is)f(bac)o
(k)g(up.)21 b(P)o(erforming)13 b(these)j(op)q(erations)f(in)75
2580 y(the)f(bac)o(kground)g(pro)o(vides)g(added)h(reliabilit)o(y)m(,)c(an)i
(idea)h(tak)o(en)g(from)e Fk(amd)p Fl(.)p 75 2615 720 2 v 106
2642 a Ff(12)139 2653 y Fe(In)f(the)f(conditions)f(for)i(T)m(able)g(3,)g
Fd(~)p Fc(USER)h Fe(is)g(the)f(home)f(directory)f(of)i(the)g(user)f(with)i
(user-id)e Fc(uid)p Fe(.)965 2825 y Fl(9)p eop
%%Page: 10 10
bop 75 42 a Fj(4.5)56 b(Disk)18 b(Space)g(Problems)175 117
y Fk(Hlfsd)13 b Fl(c)o(hec)o(ks)j(if)e(the)h(user's)h(home)e(directory)h(is)g
(full)e(or)i(they)g(exceeded)i(their)e(quota.)20 b(It)15 b(attempts)f(to)75
166 y(create)i(and)e(then)h(remo)o(v)o(e)e(a)h(simple)f(nonzero-length)i
(\014le)f(in)g(the)h(user's)g(sp)q(o)q(ol)f(directory)m(,)h(with)f(the)h
(e\013ectiv)o(e)75 216 y Fh(uid)j Fl(set)g(to)f(that)h(of)f(the)h(user.)30
b(If)17 b(that)g(fails,)g(it)g(instead)h(returns)h(bac)o(k)e(the)h(name)e(of)
h(the)h(alternate)g(sp)q(o)q(ol)75 266 y(directory)d(as)f(the)g(v)n(alue)f
(of)h(the)g Fk(home)f Fl(sym)o(b)q(olic)f(link.)17 b(Otherwise)f(mail)11
b(migh)o(t)h(b)q(e)i(dropp)q(ed)h(or)f(b)q(ounce.)175 341 y(An)o(y)j(success)
k(or)d(failure)f(state)h(is)g(recorded)i(in)d Fk(hlfsd)o Fl(.)30
b(It)18 b(is)g(left)g(there)h(for)e(a)h(sp)q(eci\014ed)h(n)o(um)o(b)q(er)f
(of)75 391 y(seconds,)k(after)f(whic)o(h)e(the)i(en)o(try)g(\\times)d(out")i
(and)g(a)f(new)i(actual)e(bac)o(kgrounded)i(lo)q(okup)e(is)g(required.)75
440 y(Otherwise,)14 b(the)g(cac)o(hed)g(result)g(is)f(used)g(and)g(no)g(exp)q
(ensiv)o(e)h Fk(fork)e Fl(is)h(required.)19 b(This)13 b(simple)e(cac)o(hing)i
(feature)75 490 y(of)g Fk(hlfsd)g Fl(has)h(greatly)g(impro)o(v)o(ed)e(its)i
(p)q(erformance)g(and)f(reliabilit)o(y)m(.)j(See)f(also)e(Section)h(5.3.)75
598 y Fj(4.6)56 b(Lo)r(c)n(k)17 b(Files)175 673 y Fl(An)12
b(alternativ)o(e)h(design)g(for)f Fk(hlfsd)f Fl(is)i(to)f(ha)o(v)o(e)h(it)f
(moun)o(t)f(on)h(top)h(of)f(the)h(mail)d(sp)q(o)q(ol)i(directory)i(directly)m
(,)75 723 y(instead)d(of)f(ha)o(ving)f(the)j(mail)c(sp)q(o)q(ol)i(directory)h
(b)q(e)g(a)g(sym)o(b)q(olic)e(link)g(to)i(another)g(link)e(\()p
Fk(home)p Fl(\))h(within)g(the)h(HLFS,)75 773 y(whic)o(h)k(p)q(oin)o(ts)g(to)
g(a)f(real)h(sub)q(directory)i(of)d(the)i(user's)g(home.)k(With)15
b(some)f(mo)q(di\014cations)f(to)i(the)g(serv)o(er,)i(w)o(e)75
823 y(could)d(ha)o(v)o(e)g(made)f(all)h(of)f(the)i(user's)h(mailb)q(o)o(x)11
b(\014les)k(p)q(oin)o(t)f(to)g(the)h(righ)o(t)f(place,)g(but)g(it)g
(su\013ered)j(from)12 b(serious)75 873 y(dra)o(wbac)o(ks:)137
977 y Fi(\017)21 b Fl(The)15 b(sp)q(o)q(ol)f(directory)i(w)o(ould)d(no)i
(longer)f(b)q(e)h(a)g(regular)f(directory)m(.)21 b(It)14 b(w)o(ould)g(ha)o(v)
o(e)h(to)f(b)q(e)h(managed)e(b)o(y)179 1027 y Fk(hlfsd)o Fl(.)18
b(This)c(w)o(ould)f(require)h(the)h(implemen)o(tatio)o(n)c(of)i(more)g(NFS)h
(op)q(erations.)137 1105 y Fi(\017)21 b Fl(The)e(user's)h(sp)q(o)q(ol)f
(\014le)g(w)o(ould)g(not)g(b)q(e)g(a)g(regular)g(\014le,)h(but)f(a)g(sym)o(b)
q(olic)e(link)h(to)h(suc)o(h.)35 b(Some)18 b(mail)179 1155
y(programs)e(remo)o(v)o(e)g(that)h(\014le,)g(not)g(c)o(hec)o(king)g(if)f
(it's)h(a)f(sym)o(b)q(olic)g(link.)26 b(Therefore)18 b(the)g(sym)o(b)q(olic)d
(link)179 1205 y(w)o(ould)10 b(b)q(e)i(remo)o(v)o(ed.)k(W)m(e)10
b(w)o(ould)h(ha)o(v)o(e)g(had)f(to)h(c)o(hange)h(the)f(serv)o(er)i(so)e(that)
g(remo)o(ving)e(the)j(sym)o(b)q(olic)d(link)179 1255 y(w)o(ould)14
b(\014rst)i(follo)o(w)d(it)i(and)g(remo)o(v)o(e)f(the)i(\014le)f(it)g(w)o(as)
g(p)q(oin)o(ting)f(to.)22 b(The)16 b(same)e(go)q(es)i(for)f(all)f(op)q
(erations)179 1304 y(whic)o(h)g(require)g(access)i(to)e(the)g(user's)h(mail)c
(sp)q(o)q(ol)j(\014le.)137 1383 y Fi(\017)21 b Fl(The)11 b(w)o(orst)f
(problem)f(w)o(as)h(that)h(di\013eren)o(t)g(UAs)g(and)f(MT)m(As)g(use)h
(di\013eren)o(t)h(metho)q(ds)d(for)h(lo)q(c)o(king)g(the)h(mail)179
1432 y(\014le.)17 b(Some)12 b(of)g(them)h(create)h(temp)q(orary)e(\014les)h
(named)f Fk($)p Fi(f)p Fk(USER)p Fi(g)p Fk(.lock)p Fl(,)e(others)k(use)g(the)
f Fk(mktemp)f Fl(library)179 1482 y(call)17 b(to)h(generate)i(unique)e
(names.)31 b(Our)19 b(metho)q(d)e(a)o(v)o(oids)h(the)g(need)i(to)e(\014gure)h
(out)f(all)f(the)i(di\013eren)o(t)179 1532 y(metho)q(ds)13
b(used)i(in)e(lo)q(c)o(king)g(mail)e(\014les,)j(and)g(usage)g(of)g(temp)q
(orary)f(\014les.)175 1636 y(An)g(alternate)h(w)o(a)o(y)e(to)h(a)o(v)o(oid)f
(the)i(need)g(for)f(lo)q(c)o(k)g(\014les)h(is)f(to)g(deliv)o(er)g(mail)e(one)
i(message)g(p)q(er)h(\014le)f(using)g(a)75 1686 y(di\013eren)o(t)i(system)g
(suc)o(h)g(as)f(with)h(INN[19)o(])f(and)g(NNTP[10];)f(ho)o(w)o(ev)o(er,)i
(this)f(w)o(ould)g(require)h(mo)q(di\014cations)e(to)75 1736
y(all)g(UAs)h(and)g(MT)m(As.)75 1844 y Fj(4.7)56 b(Source)18
b(Co)r(de)g(Size,)g(Av)m(ailabilit)n(y)-5 b(,)16 b(and)k(P)n(ortabilit)n(y)
175 1919 y Fk(Hlfsd)c Fl(is)h(less)h(than)f(2500)f(lines)h(of)f(C)h(co)q(de,)
i(including)d(commen)o(ts)f(and)i(white-spaces.)29 b(Ho)o(w)o(ev)o(er,)18
b(it)75 1969 y(mak)o(es)13 b(use)h(of)g(almost)e(4000)h(lines)g(of)h(co)q(de)
g(from)f(the)h Fk(amd)f Fl(distribution)h(itself.)175 2044
y Fk(Hlfsd)g Fl(is)h(a)o(v)n(ailable)e(in)i(source)i(form)c(as)j(part)f(of)g
(a)g(sp)q(ecial)h(distribution)e(of)h Fk(amd)p Fl(.)22 b(It)15
b(can)h(b)q(e)g(retriev)o(ed)75 2094 y(via)d(anon)o(ymous)f
Fk(ftp)h Fl(from)f Fk(ftp.cs.columbia.edu)e Fl(in)k(the)g(directory)h
Fk(/pub/amd)p Fl(.)175 2168 y Fk(Hlfsd)h Fl(is)i(built)f(as)g(part)h(of)f
(the)h(sp)q(ecial)g(distribution)f(of)g Fk(amd)g Fl(a)o(v)n(ailable)f(from)g
(our)h(ftp)h(serv)o(er.)30 b(It)18 b(is)75 2218 y(almost)12
b(as)j(p)q(ortable)f(as)g Fk(amd)g Fl(is.)k(It)c(is)h(only)e(the)i(lac)o(k)e
(of)h(access)i(to)e(certain)h(mac)o(hines)e(that)h(stopp)q(ed)h(us)g(from)75
2268 y(p)q(orting)d Fk(hlfsd)f Fl(to)i(the)g(n)o(umerous)f(platforms)e
Fk(amd)i Fl(runs)h(on.)k(A)o(t)c(the)g(writing)f(of)f(this)i(pap)q(er,)g
Fk(hlfsd)e Fl(has)i(b)q(een)75 2318 y(successfully)h(p)q(orted)g(and)e
(running)h(on)f(SunOS)i(4.1.3,)c(HP-UX)k(9.0.1,)d(and)h(Solaris)g(2.2.)17
b(Those)c(represen)o(t)i(the)75 2367 y(3)h(main)e(system)i(t)o(yp)q(es)h
Fk(amd)e Fl(runs)i(on)f(and)f(span)i(most)e(Unix)g(\015a)o(v)o(ors:)22
b(a)16 b(BSD-st)o(yle)g(system,)g(an)g(SVR-BSD)75 2417 y(h)o(ybrid,)d(and)h
(a)f(system)h(v)o(ery)g(close)h(to)e(SVR4,)g(resp)q(ectiv)o(ely)m(.)75
2525 y Fj(5)56 b(Ev)m(aluation)175 2600 y Fl(This)11 b(system)h(is)g(implem)o
(en)o(ted)e(and)i(has)g(b)q(een)h(in)e(use)i(on)e(a)h(n)o(um)o(b)q(er)f(of)g
(mac)o(hines)g(for)h(more)e(than)i(a)g(y)o(ear)75 2650 y(no)o(w.)20
b(F)m(or)14 b(the)h(\014rst)g(nine)g(mon)o(ths)e Fk(hlfsd)h
Fl(w)o(as)g(in)g(exp)q(erimen)o(tal)g(use.)21 b(W)m(e)14 b(ha)o(v)o(e)h
(since)g(deplo)o(y)o(ed)g(it)f(on)g(most)75 2700 y(pro)q(duction)g(mac)o
(hines)f(in)h(our)f(departmen)o(t,)h(spanning)f(o)o(v)o(er)h(a)g(100)f(hosts)
h(and)g(3)g(di\013eren)o(t)g(arc)o(hitectures.)954 2825 y(10)p
eop
%%Page: 11 11
bop 175 42 a Fl(The)11 b(goal)f(of)h(this)g(w)o(ork)g(is)f(to)h(expand)h(the)
f(accessibilit)o(y)g(of)g(electronic)h(mail,)d(impro)o(v)o(e)g(o)o(v)o(erall)
h(reliabilit)o(y)75 91 y(and)i(stabilit)o(y)f(of)g(this)h(vital)f(service,)j
(while)d(at)h(the)h(same)e(time)g(main)o(tain)e(the)k(sanit)o(y)f(of)f(our)h
(SAs)h(\(y)o(ours)f(truly)75 141 y(included\).)18 b(F)m(or)c(this)g(to)g
(really)f(w)o(ork,)g(it)g(m)o(ust)g(ha)o(v)o(e:)126 257 y(1.)20
b(V)m(ery)14 b(high)f(a)o(v)n(ailabilit)o(y)l(.)126 340 y(2.)20
b(Little)13 b(o)o(v)o(erhead.)126 423 y(3.)20 b(Little)14 b(hassle)g(for)g
(users)i(and)e(administrators)e(as)i(the)h(system)f(is)g(b)q(eing)g(used)h
(or)f(installed)g(for)f(the)i(\014rst)179 473 y(time.)75 598
y Fj(5.1)56 b(P)n(erformance)175 673 y Fl(W)m(e)15 b(ha)o(v)o(e)g(carried)h
(out)g(some)e(measuremen)o(ts)h(to)h(quan)o(tify)e(the)i(ab)q(o)o(v)o(e)f
(requiremen)o(ts)h(and)g(more.)22 b(The)75 723 y(tests)15 b(w)o(ere)g(p)q
(erformed)f(on)f(a)h(Sun)g(SP)m(AR)o(Cstation-2)f(running)g(SunOS)i(4.1.3.)
175 797 y(Accessing)20 b(a)f(lo)q(cal)g(sp)q(o)q(ol)g(\014le)g(via)f
Fk(stat)h Fl(normally)d(tak)o(es)k(180)e(msec)h(without)g Fk(hlfsd)o
Fl(.)34 b(If)19 b Fk(hlfsd)f Fl(is)75 847 y(running)g(and)g(has)g(the)h
(user's)h(en)o(try)e(already)g(cac)o(hed,)i(it)e(tak)o(es)h(60)f(msec)g(more)
f(to)h(access)i(the)f(\014le.)31 b(This)75 897 y(o)o(v)o(erhead)19
b(is)f(attributed)h(to)f(the)h(fact)g(that)f(the)h(k)o(ernel)g(has)g(to)f
(access)i(a)e(user-lev)o(el)h(NFS)g(serv)o(er,)h(making)75
947 y(sev)o(eral)14 b(con)o(text)h(switc)o(hes.)175 1022 y(If)h(the)h(en)o
(try)h(is)e(not)h(cac)o(hed,)h Fk(hlfsd)e Fl(forks)g(a)h(c)o(hild)f(to)h(p)q
(erform)f(op)q(erations)h(whic)o(h)f(ma)o(y)f(cause)j(it)e(to)75
1071 y(hang.)21 b(The)16 b(o)o(v)o(erhead)f(of)f(that)i Fk(fork)e
Fl(and)h(other)g(c)o(hec)o(ks)i(is)e(an)f(additional)g(70)g(msec)h(\(or)g
(130)f(msec)h(o)o(v)o(er)g(the)75 1121 y(regular)d(lo)q(okup)f(not)g(using)h
Fk(hlfsd)o Fl(\).)17 b(Ho)o(w)o(ev)o(er,)12 b(this)g(o)o(v)o(erhead)g(is)g
(incurred)h(only)d(once)j(in)e(5)h(min)o(utes,)e(b)q(ecause)75
1171 y(the)k(result)h(of)e(eac)o(h)i(c)o(hec)o(k)g(is)e(cac)o(hed)i(for)f
(that)g(long)f(b)o(y)g(default.)175 1246 y(The)f(ab)q(o)o(v)o(e)g(times)f
(are)i(somewhat)e(signi\014can)o(t,)g(but)i(not)e(b)o(y)h(m)o(uc)o(h,)f
(considering)h(the)h(use)g(of)f(a)f(user-lev)o(el)75 1296 y(\014le-serv)o
(er.)19 b(\(By)12 b(comparison,)e(in)h(our)h(en)o(vironmen)o(t)f(it)g(tak)o
(es)h(ab)q(out)g(0.5)e(seconds)k(to)d(access)j(a)d(new)h(\014lesystem)75
1345 y(using)h Fk(amd)p Fl(.\))18 b(Giv)o(en)13 b(the)h(b)q(ene\014ts)i(of)d
Fk(hlfsd)o Fl(,)g(w)o(e)h(feel)g(that)g(a)f(minima)o(l)e(access)k(slo)o(wdo)o
(wn)e(is)h(a)f(small)f(price)i(to)75 1395 y(pa)o(y)m(.)j(In)d(practice,)g(o)o
(v)o(er)g(12)g(mon)o(ths)e(of)i(usage)g(w)o(e)g(ha)o(v)o(e)g(noticed)g(no)g
(visible)f(degradation)g(of)h(service.)1734 1380 y Fg(13)175
1470 y Fl(The)h(in)o(ternal)g(data)h(structures)h(\(tables)f(and)f(cac)o
(hes\))i(require)g(50)e(b)o(ytes)h(p)q(er)g(user)g(on)g(the)g(system.)22
b(In)75 1520 y(our)16 b(en)o(vironmen)o(t,)e(with)i(750)f(users,)i(that)f
(translates)g(to)g(ab)q(out)f(37KB)h(|)f(rather)i(insigni\014can)o(t)e(giv)o
(en)g(that)75 1570 y(w)o(orkstations)f(these)h(da)o(ys)f(come)f(installed)g
(with)h(at)f(least)i(16-32MB)e(of)g(RAM.)75 1677 y Fj(5.1.1)55
b(Remailing)16 b(Lost)i(Mail)175 1753 y Fl(The)h Fk(hlfsd)f
Fl(distribution)h(con)o(tains)g(a)f Fk(perl)p Fl([26)o(])g(script)i(called)f
Fk(lostaltmail)p Fl(.)31 b(Remailing)16 b(a)i(single)75 1802
y(message)c(with)g(a)g(b)q(o)q(dy)g(size)h(of)f(1KB,)g(tak)o(es)h(an)f(a)o(v)
o(erage)g(of)g(1.2)f(seconds)j(\(total)d(time\).)18 b(In)c(our)h(departmen)o
(t,)75 1852 y(resending)g(an)e(a)o(v)o(erage)h(mailb)q(o)o(x)d(\014le)j(tak)o
(es)h(ab)q(out)e(20)h(seconds.)175 1927 y(Initially)f(w)o(e)j(ran)g(the)h
(script)f(once)h(a)e(da)o(y)m(,)g(but)h(found)g(ha)o(ving)f(to)g(w)o(ait)g
(up)h(to)g(24)f(hours)i(for)e(lost)h(mail)75 1977 y(redeliv)o(ery)f(to)q(o)g
(long.)k(W)m(e)14 b(then)i(exp)q(erimen)o(ted)f(with)f(running)g
Fk(lostaltmail)f Fl(once)i(an)f(hour.)21 b(Ho)o(w)o(ev)o(er,)15
b(w)o(e)75 2027 y(found)c(that)g(frequency)h(to)q(o)f(fast.)17
b(The)12 b(most)e(lik)o(ely)f(situation)i(in)g(whic)o(h)g Fk(hlfsd)f
Fl(will)f(rep)q(oin)o(t)j(its)f(sym)o(b)q(olic)e(link)75 2076
y(to)14 b(the)g(alternate)g(sp)q(o)q(ol)g(directory)g(is)g(when)g(the)g
(user's)h(\014lesystem)f(is)f(full.)k(A)d(full)e(\014lesystem)i(is)g(a)f(p)q
(ersisten)o(t)75 2126 y(situation)18 b(that)h(in)f(most)f(cases)j(tak)o(es)f
(some)f(time)f(to)h(get)h(\014xed,)h(as)e(it)h(requires)g(h)o(uman)e(in)o
(terv)o(en)o(tion.)32 b(If)75 2176 y(the)19 b(situation)f(that)h(causes)h
Fk(hlfsd)e Fl(to)g(use)i(the)f(alternate)g(sp)q(o)q(ol)g(directory)g(is)g
(lik)o(ely)e(to)i(p)q(ersist,)h(running)75 2226 y(the)15 b
Fk(lostaltmail)e Fl(script)i(will)f(consume)g(unnecessary)j(resources,)g
(only)d(to)h(redeliv)o(er)g(the)h(mail)c(bac)o(k)j(to)f(the)75
2276 y(alternate)f(sp)q(o)q(ol)f(directory)m(.)18 b(W)m(e)12
b(\014nally)g(settled)h(on)g(running)f Fk(lostaltmail)e Fl(b)q(et)o(w)o(een)k
(6)e(and)h(12)f(times)f(a)h(da)o(y)m(.)75 2325 y(Dep)q(ending)i(on)g(the)g
(amoun)o(t)e(of)i(lost)f(mail)e(exp)q(ected,)16 b(the)e(script)h(could)f(b)q
(e)g(run)h(more)d(or)i(less)h(often.)75 2433 y Fj(5.1.2)55
b(Reliabilit)n(y)175 2509 y Fl(W)m(e)11 b(ha)o(v)o(e)h(sim)o(ulated)f(w)o
(orst-case)i(scenarios)g(b)o(y)f(\014lling)e(up)i(a)g(user)h(\014lesystem)f
(and)g(letting)g Fk(hlfsd)f Fl(decide)75 2558 y(to)k(redirect)i(mail)12
b(to)j(the)h(alternate)g(sp)q(o)q(ol)e(directory)m(.)22 b(A)o(t)16
b(this)f(p)q(oin)o(t)f(w)o(e)i(\014lled)f(up)g(that)g(\014lesystem)g(as)g(w)o
(ell.)p 75 2593 720 2 v 106 2620 a Ff(13)139 2632 y Fe(The)g(SAs)h(group)e
(felt)h(so)g(con)o(vinced)e(that)i Fd(hlfsd)f Fe(w)o(as)i(w)o(orking)e(w)o
(ell,)j(that)d(w)o(e)i(w)o(ere)g(the)f(\014rst)g(to)g(use)g(it)g(on)g
Fc(our)i Fe(home)75 2671 y(mac)o(hines.)954 2825 y Fl(11)p
eop
%%Page: 12 12
bop 75 42 a Fk(Hlfsd)16 b Fl(k)o(ept)i(on)e(p)q(oin)o(ting)g(to)h(the)h
(alternate)g(sp)q(o)q(ol)f(directory)g(during)g(the)h(cac)o(hed)g(en)o(try)g
(in)o(terv)n(al,)e(but)i(w)o(e)75 91 y(observ)o(ed)d(no)g(mail)c(lost.)19
b(Instead,)c(the)g(sending)g(side)f(detected)j(that)d(the)h(\014lesystem)f(w)
o(as)h(full,)d(and)j(k)o(ept)f(the)75 141 y(message)g(in)f(the)i(remote)e
(\(priv)n(ate\))h(sp)q(o)q(ol)g(directory)m(.)k(This)c(is)f(the)i(default)e
(b)q(eha)o(vior)h Fk(sendmail)p Fl([1)n(])f(pro)o(vides.)175
216 y Fk(Hlfsd)d Fl(do)q(es)i(not)g(in)o(tro)q(duce)g(an)o(y)f(new)h
(problems;)f(that)h(is,)f(if)g(a)h(\014lesystem)f(is)g(completely)g(full,)f
(whatev)o(er)75 266 y(b)q(eha)o(vior)j(y)o(our)g(curren)o(t)h(LD)o(A)f(pro)o
(vides)g(is)g(main)o(tained.)j(Since)e Fk(hlfsd)e Fl(uses)i(b)q(oth)f(the)h
(user's)g(\014lesystem)f(and)75 315 y(an)18 b(alternate)h(sp)q(o)q(ol)f
(directory)m(,)h(it)f(actually)g(increases)i(the)f(a)o(v)n(ailabili)o(t)o(y)c
(of)j(mail)e(services,)21 b(b)o(y)d(\\virtually")75 365 y(increasing)c(the)h
(disk)e(space)i(a)o(v)n(ailable)d(for)h(mail)f(sp)q(o)q(oling.)175
440 y(Once)g(space)g(has)f(b)q(een)h(freed)g(in)f(the)g(user's)h
(\014lesystem,)f(and)g(the)h(cac)o(hed)g(en)o(try)f(expired,)h
Fk(hlfsd)e Fl(p)q(oin)o(ted)75 490 y(its)h(sym)o(b)q(olic)f(link)h(bac)o(k)g
(to)g(the)h(user's)h(home)d(directory)m(.)18 b(The)12 b(next)g(time)e(the)i
(remailing)d(script)j(ran,)f(all)g(\\lost")75 540 y(mail)g(got)j(resen)o(t)h
(to)f(its)g(o)o(wners.)175 614 y(Since)f(the)g(installation)d(of)i
Fk(hlfsd)f Fl(in)h(our)h(pro)q(duction)f(en)o(vironmen)o(t,)f(w)o(e)i(ha)o(v)
o(e)f(seen)i(a)e(few)h(cases)g(of)f(lost)75 664 y(mail)i(b)q(eing)i(resen)o
(t,)i(mostly)c(due)j(to)f(full)f(\014lesystems.)25 b(W)m(e)16
b(kno)o(w)g(of)g(no)g(case)h(where)g(mail)d(w)o(as)i(completely)75
714 y(lost.)75 822 y Fj(5.2)56 b(Installation)175 897 y Fl(Since)13
b Fk(hlfsd)e Fl(w)o(as)i(written)g(b)o(y)f(SAs)h(for)f(other)h(SAs,)g(w)o(e)g
(ha)o(v)o(e)f(pro)o(vided)h(it)f(with)g(sev)o(eral)h(command-li)o(ne)75
947 y(options)f(to)h(use)g(at)g(startup)g(time,)e(enabling)h
Fk(hlfsd)g Fl(to)g(b)q(e)h(tailored)g(for)f(a)g(particular)h(en)o(vironmen)o
(t.)j(Needless)75 997 y(to)g(sa)o(y)m(,)g(a)g(man)e(page)i(is)h(pro)o(vided,)
f(as)g(w)o(ell)g(as)g(complete)g(source)h(co)q(de.)26 b(F)m(urthermore,)16
b(w)o(e)h(included)f(a)g(few)75 1046 y(scripts)f(written)f(in)f
Fk(sh)g Fl(and)h Fk(perl)e Fl(whic)o(h)i(w)o(e)g(use)g(in)f(our)h(en)o
(vironmen)o(t)e(to)i(re/start)h Fk(hlfsd)o Fl(,)e(test)h(for)g(p)q(ossible)75
1096 y(con\014guration)f(anomalies,)f(and)h(resend)j(\\lost")d(mail.)175
1171 y(The)e(most)f(signi\014can)o(t)h(w)o(ork)f(that)i(SAs)f(need)h(to)f(do)
g(is)g(iden)o(tify)f(programs)g(that)h(need)h(to)f(access)i(mailb)q(o)o(x)75
1221 y(\014les)18 b(of)f(other)i(users,)h(and)d(\\)p Fh(setgid)p
Fl(")h(them)f(to)g(HLFS)p 967 1221 13 2 v 15 w(GID.)g(In)h(our)g(en)o
(vironmen)o(t)e(w)o(e)i(had)g(to)g(do)f(that)h(for)75 1271
y Fk(comsat)p Fl(,)f Fk(from)p Fl(,)g Fk(finger)g Fl(and)g(a)h(few)g(others.)
30 b(Our)19 b(en)o(vironmen)o(t)d(uses)j(the)g Fk(rdist)p Fl([5)n(])e
(automatic)f(soft)o(w)o(are)75 1320 y(distribution)i(program,)g(and)g(th)o
(us)h(these)h(c)o(hanges)f(w)o(ere)h(required)f(only)f(in)g(one)h(place)f(|)g
(the)i(top)e(of)g(our)75 1370 y Fk(rdist)13 b Fl(tree.)75 1478
y Fj(5.3)56 b(Problems)175 1553 y Fl(There)15 b(are)f(a)g(few)g(problems,)e
(some)h(of)g(whic)o(h)h(cannot)g(b)q(e)h(easily)e(resolv)o(ed:)137
1670 y Fi(\017)21 b Fl(Some)15 b(programs)g(need)i(to)f(b)q(e)h
Fh(setgid)g Fl(to)f(the)h(sp)q(ecial)f(HLFS)p 1181 1670 V 15
w(GID)g(group.)25 b(There)17 b(is)g(no)f(easy)g(w)o(a)o(y)g(to)179
1719 y(lo)q(cate)f(them)g(other)h(than)g(kno)o(wing)e(ahead)i(of)f(time)f
(what)h(they)h(do.)23 b(Note)16 b(that)f(if)g(the)h(programs)f(are)179
1769 y(not)c Fh(setgid)p Fl(,)g(the)h(only)f(consequence)i(is)e(that)h(these)
g(programs)f(are)g(unable)g(to)g(\014nd)h(mailb)q(o)o(xes.)j(Ho)o(w)o(ev)o
(er,)179 1819 y(with)e(other)i(metho)q(ds,)e(if)g($MAIL)h(is)f(not)h(used,)g
(mail)e(is)h(not)h(deliv)o(ered.)137 1902 y Fi(\017)21 b Fl(It)12
b(is)f(p)q(ossible)h(that)g(the)h(status)f(of)g(a)f(home)g(directory)h
(access)i(will)c(c)o(hange)j(during)e(the)i(time)d(that)i Fk(hlfsd)179
1952 y Fl(cac)o(hes)17 b(this)g(information.)23 b(Pic)o(king)15
b(a)h(smaller)f(cac)o(he)i(expiration)f(time)f(can)i(alleviate)e(this)i
(problem,)179 2002 y(but)d(it)g(increases)h(the)g(resources)h(tak)o(en)e(b)o
(y)g Fk(hlfsd)f Fl(and)h(slo)o(ws)f(do)o(wn)h(access)i(to)e(mail.)h(It)f(is)g
(left)g(for)f(the)179 2051 y(individual)f(SAs)i(to)g(c)o(hange)g(this)g
(default)f(v)n(alue.)137 2134 y Fi(\017)21 b Fl(An)o(y)14 b(logins)e(with)i
(the)h(same)e Fh(uid)h Fl(and)f(a)h(di\013eren)o(t)h(home)e(directory)h(ma)o
(y)e(ha)o(v)o(e)i(mail)d(deliv)o(ered)k(or)e(read)179 2184
y(from)c(an)o(y)i(of)f(their)h(home)f(directory)i(pathnames.)k
Fk(Hlfsd)10 b Fl(stores)j(pathnames)d(in)g(an)h(in)o(ternal)g(hash)g(table)
179 2234 y(k)o(ey)o(ed)i(b)o(y)g(the)g Fh(uid)p Fl(;)g(therefore,)h(it)f(is)g
(unde\014ned)h(whic)o(h)f(pathname)f(is)g(returned)j(in)d(the)i(case)g(of)e
(m)o(ultiple)179 2284 y(users)k(with)e(the)h(same)f Fh(uid)h
Fl(and)g(di\013eren)o(t)g(home)f(directories.)21 b(W)m(e)14
b(pro)o(vide)h(a)f(script)i(whic)o(h)e(c)o(hec)o(ks)i(for)179
2334 y(this)e(situation)f(and)h(w)o(arns)g(the)g(SAs.)137 2417
y Fi(\017)21 b Fl(On)16 b(systems)g(that)g(cannot)g(turn)g(o\013)g(the)g(NFS)
g(attribute)g(cac)o(he,)h(the)g(k)o(ernel)f(migh)o(t)d(return)k(the)g(same)
179 2467 y(sym)o(b)q(olic)8 b(link)h(name)f(for)i(t)o(w)o(o)f(di\013eren)o(t)
i(users)g(who)f(access)h(the)g(sp)q(o)q(ol)e(directory)i(consecutiv)o(ely)m
(,)f(p)q(ossibly)179 2516 y(resulting)17 b(in)f(mail)e(getting)i(deliv)o
(ered)h(to)g(the)g(wrong)g(mailb)q(o)o(x!)23 b(On)17 b(these)h(systems,)f
Fk(hlfsd)f Fl(will)f(not)179 2566 y(run)h(unless)g(started)g(with)f(a)h(sp)q
(ecial)f(option.)22 b(In)16 b(that)f(case)i(it)e(will)f(set)i(the)g
(attribute)g(cac)o(he)g(v)n(alue)f(to)179 2616 y(the)f(shortest)i(p)q
(ossible)e(in)o(terv)n(al,)e(but)i(it)g(ma)o(y)e(not)i(b)q(e)g(su\016cien)o
(t.)954 2825 y(12)p eop
%%Page: 13 13
bop 75 42 a Fj(6)56 b(Related)17 b(W)-5 b(ork)175 117 y Fl(The)18
b(idea)f(of)h(dynamic)e(or)h(v)n(ariable)g(pathname)g(comp)q(onen)o(ts)g(is)h
(not)g(new.)30 b(HP-UX)18 b(do)q(es)g(this)g(with)75 166 y(con)o(text-dep)q
(enden)o(t)g(\014les[8],)d(and)g(Mac)o(h)h(with)f(the)h(\\)p
Fk(@SYS)p Fl(")f(v)n(ariables[4)n(].)23 b(Both)16 b(of)f(these)i(implemen)o
(tations)75 216 y(supp)q(ort)11 b(replacemen)o(t)f(of)f(pathname)g(comp)q
(onen)o(ts)h(b)o(y)g(k)o(ernel)g(v)n(ariables.)16 b(Ap)q(ollo's)9
b(DOMAIN/OS)i(supp)q(orted)75 266 y(a)20 b(more)g(sophisticated)h(system)f
(where)i(arbitrary)e(user)i(en)o(vironmen)o(t)d(v)n(ariables)h(could)g(b)q(e)
h(referenced)i(in)75 316 y(pathnames[11)n(,)12 b(12].)k(On)d(the)g(issue)g
(of)e(ha)o(ving)g(a)h(user's)i(home)d(\014les)h(and)g(mailb)q(o)o(x)e(\014le)
i(reside)h(in)f(one)g(lo)q(cation,)75 366 y(Plan)h(9's)h Fh(attach)g
Fl(op)q(erator)h(can)f(b)q(e)g(used)h(to)f(unify)f(sev)o(eral)h(\014le)g
(serv)o(ers)i(in)o(to)d(one)h(user)h(name)e(space[14].)175
440 y(What)f(is)h(new)g(ab)q(out)g(our)g(idea)g(is)g(that)g(w)o(e)g(do)f(not)
h(require)h(an)o(y)f(c)o(hange)g(to)g(an)o(y)f(part)h(of)g(the)g
(\014lesystem)75 490 y(implemen)o(tatio)o(n)c(in)i(the)i(k)o(ernel.)18
b(All)10 b(that)i(is)g(required)h(are)f(RPC)f(and)h(NFS,)f(making)f(the)i
(system)f(m)o(uc)o(h)g(more)75 540 y(widely)i(applicable.)175
615 y(Though)i(at)h(\014rst)h(it)e(ma)o(y)f(app)q(ear)i(that)g
Fk(amd)f Fl(can)i(do)e(what)h(hlfsd)f(do)q(es,)i(it)f(can't.)24
b Fk(Amd)15 b Fl(cannot)h(return)75 665 y(di\013eren)o(t)d(pathnames)f(as)g
(a)g(v)n(alue)g(of)g(a)g(sym)o(b)q(olic)f(link)g(dep)q(ending)i(on)f(who)g
(accessed)j(it.)i(See)c(also)f(Section)h(2.3)75 714 y(for)h(more)e(details)i
(on)g(v)n(arious)f(w)o(a)o(ys)g(in)h(whic)o(h)g Fk(amd)f Fl(cannot)h(help)g
(the)g(w)o(a)o(y)g Fk(hlfsd)e Fl(can.)75 822 y Fj(6.1)56 b(Mail-reading)17
b(Serv)n(ers)175 897 y Fl(The)11 b(future)g(of)g(mail)d(reading)i(and)h
(sending)g(ma)o(y)e(b)q(e)i(similar)e(to)h(that)h(used)h(b)o(y)f(the)g(NNTP)g
(proto)q(col)g(used)75 947 y(for)g(managing)d(NetNews[10)q(,)j(19)o(].)17
b(That)11 b(is,)g(a)g(sp)q(ecial-purp)q(ose)h(serv)o(er)h(whic)o(h)e(pro)o
(vides)h(net)o(w)o(ork)f(connections)75 997 y(for)j(reading)f(and)h(writing)f
(mail)e(remotely)m(.)175 1072 y(Sev)o(eral)19 b(suc)o(h)g(programs)f(exist,)i
(most)e(notably)g(IMAP[16])g(and)h(POP[17].)32 b(Ho)o(w)o(ev)o(er,)20
b(use)g(of)f(these)75 1122 y(serv)o(ers)14 b(is)e(limited)e(at)i(this)g(time)
e(b)q(ecause)k(most)d(MT)m(As)h(and)g(UAs)h(ha)o(v)o(e)f(not)g(b)q(een)h(con)
o(v)o(erted)g(to)f(use)h(them,)e(or)75 1171 y(they)i(require)h(sp)q(ecial)f
(en)o(vironmen)o(ts)f(\(the)i Fh(A)o(ndr)n(ew)f(Message)i(Delivery)e(System)p
Fl([18)o(])g(requires)h(AFS\).)e(P)o(orting)75 1221 y(those)18
b(applications)f(for)h(most)e(p)q(opular)i(en)o(vironmen)o(ts)f(is)g(not)h
(going)f(to)g(b)q(e)i(an)e(easy)h(task.)30 b(Nev)o(ertheless,)75
1271 y(the)15 b(b)q(ene\014ts)h(of)d(suc)o(h)i(services)h(o)o(v)o(er)e(that)g
(of)g Fk(hlfsd)f Fl(w)o(ould)g(include)h(faster)h(and)f(more)f(reliable)h
(service,)h(plus)75 1321 y(greatly)e(expanded)h(functionalit)o(y)e(\(p)q
(ossibly)h(pro)o(viding)f(threads)i(information)c(for)j(threaded)i(mail)10
b(readers\).)75 1429 y Fj(7)56 b(Conclusion)175 1504 y Fl(W)m(e)16
b(ha)o(v)o(e)h(describ)q(ed)i(the)f(b)q(ene\014ts)h(of)d(deliv)o(ering)h
(mail)d(to)j(users')h(home)e(directories,)j(the)e(traditional)75
1554 y(w)o(a)o(ys)10 b(to)f(do)h(that)g(and)g(wh)o(y)f(w)o(e)i(think)e(they)h
(are)h(inadequate,)f(and)g(the)g(design,)h(implemen)o(tatio)o(n,)d(p)q
(erformance,)75 1604 y(and)14 b(con)o(v)o(enience)h(of)e(our)h(alternativ)o
(e.)175 1678 y(The)i(main)f(con)o(tribution)g(of)h(our)g(w)o(ork)g(is)h(the)g
(idea)f(mail)d(can)k(b)q(e)g(reliably)e(deliv)o(ered)i(to)f(user's)h(home)75
1728 y(directories)12 b(for)e(easy)h(access)i(with)d(v)o(ery)h(little)f(o)o
(v)o(erhead,)h(user)g(hassle,)h(or)e(the)i(need)f(for)f(extensiv)o(e)i(in)o
(terv)o(en)o(tion)75 1778 y(on)i(the)g(part)g(of)f(SAs.)175
1853 y(A)h(w)o(orking)f(protot)o(yp)q(e)i(v)o(ersion)f(of)g
Fk(hlfsd)f Fl(w)o(as)h(written)h(in)f(one)g(w)o(eek)o(end.)20
b(Ho)o(w)o(ev)o(er,)15 b(the)f(ideas)h(repre-)75 1902 y(sen)o(ted)e(in)e(the)
i(w)o(ork)e(span)h(sev)o(eral)h(y)o(ears)f(of)f(exp)q(erience)j(in)d(net)o(w)
o(ork)h(programming)c(\(esp)q(ecially)13 b(RPC)o(\),)f(NFS,)75
1952 y Fk(amd)p Fl(,)h(and)g(mail)f(systems.)75 2060 y Fj(7.1)56
b(F)-5 b(uture)18 b(W)-5 b(ork)175 2135 y Fl(It)15 b(w)o(ould)e(b)q(e)j(p)q
(ossible)f(to)g(in)o(tegrate)g(some)f(of)g Fk(hlfsd)o Fl('s)g(functionalit)o
(y)g(in)o(to)g Fk(amd)p Fl(,)g(b)o(y)g(pro)o(viding)g(sp)q(ecial)75
2185 y(k)o(eyw)o(ords)g(lik)o(e)f Fk($)p Fi(f)p Fk(home)p Fi(g)p
Fl(,)f Fk($)p Fi(f)p Fk(user)p Fi(g)g Fl(and)i Fk($)p Fi(f)p
Fk(group)p Fi(g)e Fl(for)i(use)h(in)e Fk(amd)p Fl('s)g(maps.)175
2260 y(W)m(e)e(plan)g(on)g(making)e(sure)k Fk(hlfsd)d Fl(is)h(as)h(p)q
(ortable)g(as)f Fk(amd)g Fl(is,)g(and)h(impro)o(ving)d(its)i(p)q(erformance)h
(as)f(m)o(uc)o(h)75 2310 y(as)j(p)q(ossible.)k(An)c(RPC)g(in)o(terface)g(for)
g(querying)g Fk(hlfsd)o Fl('s)f(status)i(is)f(needed)h(as)f(w)o(ell.)75
2418 y Fj(7.2)56 b(Alternativ)n(e)17 b(Uses)175 2493 y Fk(Hlfsd)o
Fl('s)g(primary)e(use)j(is)f(that)h(of)e(a)h(mail-sp)q(o)q(ol)e(redirector.)
29 b(Ho)o(w)o(ev)o(er,)18 b(it)f(can)h(b)q(e)g(used)g(to)f(p)q(erform)75
2543 y(other)e(tasks.)j(All)13 b(it)h(tak)o(es)g(are)g(the)h(righ)o(t)e
(command-li)o(ne)f(options:)137 2650 y Fi(\017)21 b Fk(Hlfsd)10
b Fl(can)h(manage)e(the)j Fk(/var/tmp)d Fl(directory)m(.)17
b(Th)o(us)12 b(ev)o(ery)f(user)h(who)f(uses)h Fk(/var/tmp)e
Fl(w)o(ould)g(actually)179 2700 y(b)q(e)j(using)e(a)h(sub)q(directory)i
(within)d(their)i(o)o(wn)e(home)g(directory)m(,)i(rather)g(than)f(taking)f
(from)f(system-wide)954 2825 y(13)p eop
%%Page: 14 14
bop 179 42 a Fl(resources.)137 124 y Fi(\017)21 b Fl(Other)13
b(t)o(yp)q(es)g(of)e(user-sp)q(eci\014c)k(\014les)d(whic)o(h)g(get)h(sp)q(o)q
(oled)f(to)g(a)g(particular)g(host,)g(suc)o(h)h(as)f Fh(Se)n(cr)n(et)h(Mail)p
Fl([24)n(])179 173 y(or)h(electronic)h(faxes)f(can)g(also)f(b)q(e)h
(redirected)i(for)e(sp)q(o)q(oling)f(in)o(to)g(home)g(directories.)75
296 y Fj(8)56 b(Ac)n(kno)n(wledgmen)n(ts)175 371 y Fl(Sp)q(ecial)10
b(thanks)h(go)e(to)i(Daniel)e(Duc)o(hamp)g(for)h(his)g(in)o(v)n(aluable)f
(commen)o(ts)f(on)i(the)h(pap)q(er,)h(to)e(James)g(T)m(anis)75
421 y(who)g(wrote)h(the)f(remailing)e(script)j(and)f(pro)o(vided)g(useful)g
(feedbac)o(k,)h(and)f(to)g(all)f(mem)o(b)q(ers)g(of)g(the)i(tec)o(hnical)g
(sta\013)75 471 y(who)e(help)q(ed)h(in)f(stress-testing)i Fk(hlfsd)o
Fl(.)17 b(W)m(e)9 b(also)f(thank)h(man)o(y)f(mem)o(b)q(ers)g(of)g(the)i
Fk(amd-workers@acl.lan)o(l.gov)75 520 y Fl(mailing)h(list)i(for)h(pro)o
(viding)e(v)n(aluable)h(discussion)h(on)g(the)g(sub)r(ject.)175
595 y(This)f(w)o(ork)h(w)o(as)f(supp)q(orted)i(in)e(part)h(b)o(y)f(a)h
(National)e(Science)j(F)m(oundation)d(CISE)i(Institutional)f(Infras-)75
645 y(tructure)j(gran)o(t,)d(n)o(um)o(b)q(er)g(CD)o(A-90-24735.)175
720 y(As)i Fk(hlfsd)f Fl(uses)i(parts)f(of)f(the)i Fk(amd)e
Fl(distribution,)g(it)h(is)f(distributed)i(under)g(the)f(same)f(restrictions)
i(and)75 769 y(licenses)f(that)f Fk(amd)f Fl(is.)75 877 y Fj(9)56
b(References)75 952 y Fl([1])20 b(E.)14 b(Allman.)k(SENDMAIL)d({)f(An)h(In)o
(ternet)o(w)o(ork)h(Mail)d(Router.)21 b(In)14 b Fh(UNIX)i(System)f(Manager's)
h(Manual.)140 1002 y Fl(Univ)o(ersit)o(y)d(of)h(California,)d(Berk)o(eley)m
(,)j(1986.)75 1084 y([2])20 b(F.)g(C.)g(Baran.)39 b(MW:)20
b(Mail-W)m(atc)o(h.)37 b(An)21 b(unpublished)g(man)o(ual)d(page,)k(Academic)e
(Systems)h(Group,)140 1134 y(Colum)o(bia)11 b(Univ)o(ersit)o(y)i(Cen)o(ter)i
(for)f(Computing)e(Activities,)h(1987.)75 1216 y([3])20 b(B.)12
b(Callaghan)f(and)h(T.)g(Ly)o(on.)j(The)e(Automoun)o(ter.)i(In)e
Fh(Pr)n(o)n(c.)g(1989)h(Winter)g(USENIX)g(Conf.)p Fl(,)e(pp.)g(43{51,)140
1266 y(Jan)o(uary)h(1989.)75 1348 y([4])20 b(M.)13 b(N.)g(Condict.)18
b(Con\014guring)13 b(and)g(Building)g(Mac)o(h)h(3.0.)i(OSF)e(Researc)o(h)h
(Institute,)f(Grenoble,)g(F)m(rance.)140 1398 y(Unpublished)g(notes)g(a)o(v)n
(ailable)e(via)h(ftp)h(from)e Fk(mach.cs.cmu.edu:d)o(oc/no)o(tes/k)o(ernel)p
1595 1398 14 2 v 12 w(build.doc)p Fl(.)75 1480 y([5])20 b(M.)13
b(A.)g(Co)q(op)q(er.)18 b(Ov)o(erhauling)13 b(Rdist)g(for)h(the)g('90s.)j
Fh(L)n(ar)n(ge)d(Instal)r(lation)h(System)g(A)n(dministr)n(ators)e(Work-)140
1530 y(shop)i(Pr)n(o)n(c)n(e)n(e)n(dings)p Fl(,)e(pp.)h(1-8,)f(USENIX,)h
(Long)f(Beac)o(h,)h(CA,)g(Octob)q(er)h(19-June)f(23,)f(1992.)75
1612 y([6])20 b(A.)13 b(J.)h(Findla)o(y)m(.)i(The)e(Home-Directory)f(Mail)g
(System.)18 b(In)13 b Fh(EUUG)i(News)p Fl(,)e(Autumn)g(1988.)75
1694 y([7])20 b(J.)13 b(F)m(ulton.)k(MIT)d(X)g(Consortium.)j(X11R5)12
b(Reference)k(Man)o(ual)d(P)o(ages,)h(Section)g(1:)k(\\xbi\013\(1\)",)12
b(1988.)75 1776 y([8])20 b(Hewlett-P)o(ac)o(k)n(ard)14 b(Compan)o(y)m(.)j
(HP-UX)e(Release)g(9.0)e(Reference)j(Man)o(ual,)d(Section)i(4:)k
(\\cdf\(4\)",)13 b(August)140 1826 y(1992.)75 1908 y([9])20
b(IBM)11 b(Corp.)j(AIX)e(Comma)o(nds)d(Reference,)k(V)m(olume)d(1,)h(\\b)q
(ellmail\(1\)")o(,)e(pp.)i(1-84|1-87,)e(Decem)o(b)q(er)i(1989.)75
1990 y([10])19 b(B.)14 b(Kan)o(tor)g(and)g(P)m(.)f(Lapsley)m(.)k(Net)o(w)o
(ork)e(News)f(T)m(ransfer)h(Proto)q(col.)j(RF)o(C)13 b(977,)f(F)m(ebruary)j
(1986;)d(27)h(p.)75 2073 y([11])19 b(P)m(.)14 b(J.)h(Leac)o(h,)g(P)m(.)f(H.)g
(Levine,)h(B.)f(P)m(.)g(Douros,)h(J.)f(A.)h(Hamilton,)c(D.L.)j(Nelson,)g(and)
h(B.)g(L.)f(Stumpf.)19 b Fh(The)140 2122 y(A)o(r)n(chite)n(ctur)n(e)14
b(of)j(an)f(Inte)n(gr)n(ate)n(d)g(L)n(o)n(c)n(al)g(Network.)22
b Fl(In)15 b Fh(IEEE)i(Journal)f(on)h(Sele)n(cte)n(d)f(A)o(r)n(e)n(as)g(in)g
(Communi-)140 2172 y(c)n(ations,)d Fm(SA)o(C-1)p Fl(\(5\),)g(pp.)h(842-856,)e
(No)o(v)o(em)o(b)q(er)h(1983.)75 2254 y([12])19 b(P)m(.)12
b(H.)f(Levine.)16 b Fh(The)d(Ap)n(ol)r(lo)g(DOMAIN)g(Distribute)n(d)g(File)f
(System.)k Fl(In)c Fh(NA)m(TO)g(ASI)i(Series:)j(The)n(ory)c(and)140
2304 y(Pr)n(actic)n(e)k(of)i(Distribute)n(d)f(Op)n(er)n(ating)g(Systems,)g
Fl(Y.)g(P)o(ak)o(er,)g(J-P)m(.)g(Banatre,)h(M.)e(Bozyi\024)-21
b(git,)18 b(pp.)f(241-260,)140 2354 y(editors,)d(Springer-V)m(erlag,)f(1987.)
75 2436 y([13])19 b(J.)14 b(S.)g(P)o(endry)h(and)f(N.)g(William)o(s.)j
Fh(A)o(md)e(-)g(The)g(4.4)g(BSD)h(A)o(utomounter)p Fl(.)k(Imp)q(erial)12
b(College)i(of)g(Science)140 2486 y(T)m(ec)o(hnology)f(and)g(Medicine,)h
(London.)f(Marc)o(h)h(1991.)75 2568 y([14])19 b(R.)14 b(Pik)o(e,)g(D.)f
(Presotto,)i(K.)f(Thompson,)f(and)h(H.)g(T)m(ric)o(k)o(ey)m(.)19
b Fh(Plan)d(9)f(fr)n(om)g(Bel)r(l)g(L)n(abs)p Fl(.)k(In)c Fh(Pr)n(o)n(c)n(e)n
(e)n(dings)g(of)140 2618 y(the)g(Summer)f(1990)i(UKUUG)f(Conf.)p
Fl(,)e(London,)g(July)m(,)f(1990,)h(pp.)g(1-9.)75 2700 y([15])19
b(J.)14 b(B.)g(P)o(ostel.)k(Simple)12 b(Mail)h(T)m(ransfer)h(Proto)q(col.)k
(RF)o(C)13 b(821,)g(August)h(1982;)f(68)g(p.)954 2825 y(14)p
eop
%%Page: 15 15
bop 75 42 a Fl([16])19 b(J.)14 b(Rice.)k(In)o(teractiv)o(e)d(Mail)d(Access)k
(Proto)q(col.)i(RF)o(C)c(1203,)e(F)m(ebruary)i(1991;)f(49)g(p.)75
125 y([17])19 b(M.)14 b(Rose.)k(P)o(ost)c(O\016ce)h(Proto)q(col.)j(RF)o(C)13
b(1225,)f(Ma)o(y)i(1991;)e(16)h(p.)75 208 y([18])19 b(J.)f(Roseneb)q(erg,)h
(C.)f(F.)f(Ev)o(erhart,)i(and)f(N.)g(S.)f(Borenstein.)32 b
Fh(A)o(n)19 b(Overview)f(of)g(the)h(A)o(ndr)n(ew)f(Message)140
257 y(System)p Fl(.)i(In)15 b Fh(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)f(the)h(A)o
(CM)f(SIGCOMM)h('87)g(Workshop)p Fl(,)g(Sto)o(w)o(e,)e(V)m(ermon)o(t,)f
(August)j(11-13,)140 307 y(1987,)c(pp.)h(99-108.)75 390 y([19])19
b(R.)d(Salz.)24 b Fh(InterNetNews:)e(Usenet)17 b(tr)n(ansp)n(ort)g(for)f
(Internet)h(sites)p Fl(.)24 b(In)17 b Fh(Pr)n(o)n(c.)f(1992)i(Summer)f
(USENIX)140 440 y(Conf.)p Fl(,)c(pages)h(93{98,)e(June)j(1992.)75
523 y([20])k(R.)14 b(Sandb)q(erg)h(et)g(al.)k(Design)c(and)f(Implemen)o
(tation)e(of)i(the)h(Sun)f(Net)o(w)o(ork)h(Filesystem.)20 b(In)14
b Fh(Pr)n(o)n(c.)h(1985)140 573 y(Summer)g(Usenix)g(Conf.)p
Fl(,)e(pages)h(119-130,)e(June)i(1985.)75 656 y([21])19 b(Sun)13
b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o(ual,)e(V)m(olume)e(I,)i
(Section)h(1:)k(\\bi\013\(1\)",)12 b(Septem)o(b)q(er)h(9,)140
706 y(1987.)75 789 y([22])19 b(Sun)11 b(Microsystems,)f(Inc.)j(SunOS)e
(Reference)i(Man)o(ual,)d(V)m(olume)e(I)q(I,)i(Section)h(3:)16
b(\\syslog\(3\)",)10 b(Septem)o(b)q(er)140 839 y(9,)j(1987.)75
922 y([23])19 b(Sun)g(Microsystems,)f(Inc.)33 b(SunOS)19 b(Reference)h(Man)o
(ual,)e(V)m(olume)f(I,)h(Section)h(1:)27 b(\\comsat\(8c\)",)18
b(and)140 971 y(\\in.comsat\(8c\)",)11 b(Septem)o(b)q(er)k(9,)e(1987.)75
1054 y([24])19 b(Sun)14 b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o
(ual,)d(V)m(olume)f(I,)i(Section)h(1:)j(\\xsend\(1\)",)d(\\xget\(1\)",)140
1104 y(and)f(\\enroll\(1\)",)g(Septem)o(b)q(er)h(9,)f(1987.)75
1187 y([25])19 b(Sun)f(Microsystems,)g(Inc.)31 b(NFS:)18 b(Net)o(w)o(ork)g
(File)g(System)f(Proto)q(col)h(sp)q(eci\014cation.)31 b(RF)o(C)17
b(1094,)h(1989)140 1237 y(Marc)o(h;)13 b(27)h(p.)75 1320 y([26])19
b(L.)c(W)m(all)f(and)h(R.)f(L.)h(Sc)o(h)o(w)o(artz.)23 b Fh(Pr)n(o)n(gr)n
(amming)16 b(Perl)p Fl(.)22 b(O'Reilly)14 b(&)h(Asso)q(ciates,)i(Inc.,)e
(Sebastop)q(ol,)h(CA)140 1370 y(\(1991\).)75 1453 y([27])j(R.)d(S.)g(Zac)o
(hariassen.)26 b Fh(ZMOG:)18 b(The)f(ZMailer)g(Op)n(er)n(ations)f(Guide)p
Fl(.)26 b(Av)n(ailable)15 b(via)g(ftp)i(as)f(part)h(of)e(the)140
1503 y(ZMailer)e(distribution)h(from)e Fk(ftp.uu.net:/netwo)o(rkin)o(g/mai)o
(l/zma)o(iler)p Fl(.)75 1627 y Fj(10)56 b(Author)19 b(Information)175
1702 y Fm(Erez)f(Zadok)e Fl(is)g(an)f(MS)h(candidate)g(and)g(full-time)d
(Sta\013)k(Asso)q(ciate)f(in)g(the)g(Computer)g(Science)h(De-)75
1752 y(partmen)o(t)11 b(at)h(Colum)o(bia)d(Univ)o(ersit)o(y)m(.)16
b(His)c(primary)e(in)o(terests)k(include)e(op)q(erating)f(systems,)h(\014le)g
(systems,)g(and)75 1802 y(w)o(a)o(ys)j(to)g(ease)h(system)f(administration)e
(tasks.)23 b(In)15 b(Ma)o(y)g(1991,)f(he)i(receiv)o(ed)g(his)f(B.S.)g(in)g
(Computer)g(Science)75 1852 y(from)g(Colum)o(bia's)f(Sc)o(ho)q(ol)i(of)g
(Engineering)h(and)f(Applied)h(Science.)28 b(Erez)18 b(came)e(to)g(the)i
(United)f(States)g(six)75 1902 y(y)o(ears)d(ago)e(and)i(has)f(liv)o(ed)g(in)g
(New)g(Y)m(ork)g(\\Sin")g(Cit)o(y)f(ev)o(er)j(since.)j(In)c(his)f(rare)h
(free)g(time)e(Erez)j(is)e(an)g(amateur)75 1951 y(photographer,)h(science)h
(\014ction)f(dev)o(otee,)h(and)e(ro)q(c)o(k-n-roll)g(fan.)175
2026 y(Mailing)h(address:)25 b(500)16 b(W)m(est)h(120)747 2011
y Fa(th)797 2026 y Fl(Street,)h(Colum)o(bia)c(Univ)o(ersit)o(y)m(,)i(New)h(Y)
m(ork,)g(NY)f(10027.)25 b(Email)75 2076 y(address:)19 b Fk
(ezk@cs.columbia.edu)o Fl(.)175 2151 y Fm(Alexander)10 b(Dupuy)g
Fl(has)h(b)q(een)h(a)e(Senior)h(Researc)o(h)i(Sta\013)e(Asso)q(ciate)h(for)e
(the)i(Distributed)f(Computing)75 2200 y(and)i(Comm)o(uni)o(cations)d(Lab)j
(in)f(the)i(Computer)e(Science)i(Departmen)o(t)f(at)f(Colum)o(bia)e(Univ)o
(ersit)o(y)j(for)g(the)g(last)75 2250 y(7)h(y)o(ears.)21 b(He)16
b(has)f(recen)o(tly)g(tak)o(en)g(a)f(p)q(osition)h(at)f(System)g(Managemen)o
(t)g(AR)m(TS,)f(a)i(small)d(startup)k(compan)o(y)75 2300 y(dev)o(eloping)e
(net)o(w)o(ork)h(and)g(systems)g(managemen)o(t)d(tec)o(hnology)m(.)20
b(A)15 b(nativ)o(e)g(b)q(orn)g(and)g(bred)g(New)h(Y)m(ork)o(er,)e(he)75
2350 y(insists)g(that)g(w)o(orking)f(in)h(the)g(suburbs)h(is)f(not)g(the)g
(\014rst)h(step)g(to)o(w)o(ards)f(living)e(there.)175 2425
y(Mailing)h(address:)23 b(System)15 b(Managemen)o(t)f(AR)m(TS,)g(199)h(Main)g
(Street,)h(Suite)g(900,)f(White)g(Plains,)g(NY)75 2474 y(10601.)i(Email)11
b(address:)20 b Fk(dupuy@smarts.co)o(m)p Fl(.)954 2825 y(15)p
eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF