
 Reading the dictionary files: *************************************************


Welcome to the Link Parser -- Version 2.1

          Copyright (C) 1991-1995 Daniel Sleator and Davy Temperley

Processing sentences in batch mode

Echoing of input sentence turned on.
  this is the nation 's most dramatic shift in a century in the way public schools are financed 
  Michigan will begin using sales and other taxes , not property taxes , to pay for its 3286 schools . 
  the plan is being examined by several states ; 28 are now mired in lawsuits about the inequities of financing from property taxes . 
  backed by Governor John M Engler , a conservative Republican who faces reelection this fall , the plan improves schools 
  the plan was intended to help improve schools without increasing the burden on property owners . 
  less than 10 percent of school financing would come from property taxes , accomplishing Mr Engler 's initial goal 
  the plan also equalizes expenditures in rich and poor school districts , a goal liberals have sought in many states for more than 20 years 
  it is a huge vote , Mr Engler said by telephone today 
  the property tax had been a terrible problem in the state because of the relentless increases for schools 
  school officials across the state as well as critics wonder whether sales tax receipts are too volatile to support public education in the future 
  but the state 's venture into uncharted terrain has drawn keen interest from other states . 
  in the last month , the Wisconsin Legislature approved two competing proposals that would limit a school district 's reliance on property taxes 
  after weeks of intense negotiations , the United States announced steps today to help peace talks resume between Israel and the Palestinians 
  it also cleared the way for the passage today of a United Nations Security Council resolution condemning the massacre last month in Hebron 
  at a short news conference , Secretary of State Warren Christopher announced that Syria , Lebanon and Jordan agreed to come back 
  they agreed to come back to the peace talks in Washington next month . 
  Mr Christopher also told reporters that in the coming days there will be a meeting of senior-level representatives of Israel and the Palestine Liberation Organization . 
  this would be a prelude to resuming formal talks to settle details of their accord on introducing self-rule in Jericho and the Gaza Strip . 
  Israeli and P L O officials will announce that they will meet quite soon to take up security measures on the West Bank 
  they will also take up the possible resumption of these negotiations at an early time , Mr Christopher said . 
  the announcement missed the Administration 's ultimate goal , an unequivocal commitment from the P L O chairman , Yasir Arafat 
  they wanted Arafat to talk with Israel to complete the details of the peace agreement , signed at the White House last September 
  Mr Christopher said the fact that the three Arab nations involved in peace talks in Washington decided to move ahead would help 
  the fact that the nations decided to move ahead of the Palestinians would provide a strong impetus 
  this provides an impetus to the P L O to get back to the bargaining table and conclude arrangements on the accord with Israel 
  after the massacre , the Clinton administration offered to host an open-ended round of talks in Washington 
  they will host talks until the Israelis and Palestinians decided how they would put their accord into practice 
  in separate telephone conversations , both Mr Arafat and Prime Minister Yitzhak Rabin of Israel told Mr Christopher that they would accept the offer 
  two of the nation 's wealthiest entrepreneurs in communications and computers , Craig O McCaw and William H Gates , plan to disclose the formation of a company 
- the company will develop a global satellite communications network far more ambitious than anything contemplated before 
  even for businessmen with their records , the task is daunting 
  their new company , the Teledesic Corporation of Kirkland , Washington , is proposing to build a nine-billion-dollar system with 840 small satellites . 
  the network would transport information ranging from ordinary telephone calls to high-resolution computerized medical images and two-way video conferences 
  it would transport it to and from virtually any spot on the planet 
  as it is envisioned , the system would be able to deliver almost as many services as the new fiber optic networks being built by many telephone companies 
  but it would be able to reach underdeveloped and rural areas that are typically cut off from advanced communications 
  the real promise of this system is to bring access for rural and remote areas of the world to the health and education services 
  this system gives access to services that you can get in major urban centers , Ruseell Daggatt , the president of Teledesic , said . 
  Mr Daggatt , a telecommunications lawyer , will be leading a project that has been under hushed development for three years . 
  some industry analysts today cautioned that it would be premature to dismiss the concept simply because of its extraordinary scale . 
  indeed , the Motorola Corporation has defied many skeptics in its effort to build a three-billion-dollar satellite telephone system 
  they built a system called Iridium that would use 66 spacecraft 
  the United States started to build support today at the United Nations for tougher measures against North Korea , including economic sanctions . 
  it also moved toward strengthening its military position on the Korean peninsula by ordering the dispatch of Patriot interceptors . 
  the administration 's actions are the latest moves in the growing confrontation between the United States and North Korea 
  the confrontation is over the Koreans ' refusal to allow full inspection of its nuclear program 
  but to reassure South Korea , which has been nervous about accepting the Patriot missiles , President Clinton has sent a letter to President Kim Young Sam 
  the letter says Washington would consider a North Korean attack on South Korea to be an attack on the United States , American officials said . 
  the message was that we have been working on this together and that we must resist North Korea 's efforts 
  we must resist the efforts to try to drive us apart , a senior Administration official said . 
  the United States action at the United Nations came after the board of the International Atomic Energy Agency passed a measure 
  they passed a measure demanding that North Korea permit inspectors to complete their work and referring the matter to the Security Council 
  Madeleine K Albright , the chief United States delegate to the United Nations , met today with delegates of the other four permanent members of the Security Council 
  they met to discuss a draft resolution urging North Korea to comply with the energy agency 's demands 
  the draft refers indirectly to the possibility of sanctions and mentions further action by the Security Council 
- it mentions further action if the North Koreans do not relent , a senior Western diplomat said 
  while Britain and France are supportive and France , which is heading the Council this month , is urging a tough line , China 's response is a big question mark 
  as a permanent member , China has a veto in the Council and its cooperation will be needed 
  its cooperation will be needed if a firm warning is to be issued and sanctions are to be imposed . 
  Citibank , Chase Manhattan , Chemical and a host of other banks increased their prime rates yesterday to 7 percent from 6 percent 
  they raised their rates after the Federal Reserve 's decision on Tuesday to raise short-term interest rates to fend off inflation 
  the prime-rate increase will mean higher interest for millions of consumers and businesses 
  the rates on many mortgages , credit cards and small-business loans are linked to the prime 
  it is the first increase in the prime since February , when it was 11 percent . 
  most banks have set their rates at 6 percent since July . 
  bankers said the increase in the prime was a natural consequence of the increase in the interest rate on Federal funds 
  there was an increase in the rate for overnight loans between banks , to 3 percent from 2 percent . 
- the Federal funds rate is set in an open market , but it is heavily influenced by the trading activity of the Federal Reserve 
  this is what the Fed wanted , said Arjun K Mathrani , the treasurer of the Chase Manhattan Bank 
- if the Federal funds rate went up , it wouldn't have the inflation-fighting effect the Fed expects 
  he noted that interest rates had remained low for almost two years 
  he also noted that banks had reduced the rates they set for certain types of borrowing 
  the consumer has benefited dramatically over the last 18 months as rates declined and banks reduced their rates 
  banks reduced their rates , especially on credit cards , Mr Mathrani said 
  with a bill that bans smoking stalled in Congress , the Labor Department seems prepared to do what the Congress has not done by law 
  the bill bans smoking in virtually all buildings in the country except private homes 
  the Occupational Safety and Health Administration has proposed a rule to ban smoking in the workplace , Labor Secretary Robert B Reich announced today 
  of the more than 70 million Americans who work indoors , OSHA estimates that 21 million are exposed to poor indoor air 
  it estimates that 21 million are exposed and that millions of others are exposed to secondhand smoke 
  OSHA has taken this action to prevent thousands of heart disease deaths and hundreds of lung cancer deaths 
  it also prevents the respiratory diseases and other ailments linked to these hazards , Mr Reich said 
  according to the Environmental Protection Agency and the Centers for Disease Control and Prevention , secondhand smoke causes 3000 deaths each year from lung cancer 
  it also causes 150000 cases of bronchitis and pneumonia in youngsters , and asthma attacks in many others 
  secondhand smoke has also been implicated in deaths from heart disease and other forms of cancer 
  the ban in the workplace would affect fewer people than the proposed legislative ban in all buildings entered by more than 10 people per week 
  but it would nonetheless apply to more than six million indoor workplaces , from offices to factories to restaurants 
  it would cost businesses 6 billion dollars per year to comply with the ban , the Labor Department said 
  but it would also yield 15 billion dollars in annual benefits 
  the benefits would be in increased worker productivity , reduced absenteeism and reduced health care costs , the department said 
  the ban would be enforced by OSHA inspectors visiting workplaces to investigate reported violations of other OSHA regulations 
  China 's frenetic economic boom and natural forces are shrinking the country 's farmland at an alarming rate , scientists and Government officials say . 
  as a result , Chinese and Western scientists are raising new questions about the country 's ability to feed itself in the future 
  in China 's central and eastern provinces , the country 's breadbasket for three milleniums , farmers are abandoning the land to chase prosperity in big cities and towns 
  there , tens of thousands of new factories have opened under the economic reforms of Deng Xiaoping , China 's paramount leader 
  in southern and coastal areas , provincial governments and local entrepreneurs , all racing to get rich , are paving over agricultural land 
  they are doing this for freeways and factories , plus shopping centers , golf courses and villas for the new millionaires . 
  here in the arid northwest area , deserts are encroaching and erosion is ripping away topsoil on millions of acres that once were fertile 
  in this dusty frontier town in Cansu Province , where peasants pushed back the sand dunes , there is a campaign 
  in this dusty frontier town , tens of thousands of peasants pushed back the sand dunes and tumbleweed to build a county seat in 1970 
  the campaign to reclaim fertile land represents the largest part of daily life and government expenditure 
  the winds beat against man-made defenses of tree lines and hedges built like so many ramparts to protect or hold precious topsoil 
  Pamela Schmale , a 39-year-old bookkeeper , says she felt that her only hope of surviving advanced breast cancer was to have a bone marrow transplant 
  but her insurance company said it would not pay for the expensive and risky procedure , which is still undergoing clinical tests 
  in desperation , Mrs Schmale and her husband , Arthur , mortgaged their house in Boring , Oregon , to raise the 100000 dollars they would need for the transplant . 
  and her doctors recommended lawyers who might fight their insurance company for them 
  the Schmales hired Sheldon Weinhaus , a lawyer in St Louis who persuaded Mrs Schmale 's insurance company 
  they hired Weinhaus , a lawyer who persuaded them to pay the full cost of the transplant , which Mrs Schmale had in January 
  although Mrs Schmale said her doctors told her it was too soon to know whether she would be helped , she was confident that she had done the right thing 
  I think it saved my life , she said 
  in the last several years , patients have been increasingly turning to lawyers 
  they have turned to lawyers to pressure insurance companies to pay for claims that were initially denied 
  some claims are even for treatments specifically excluded under their insurance plans . 
  this practice can help critically ill patients get access to treatments they desperately want 
  but it raises issues of fairness , because the rewards go to those with the means to hire a lawyer 
  Mr Weinhause said that lawyers charged about 1000 dollars for an insurance case and that they were not hired in such a case on a contingency basis . 
  bowing to student protesters who have disrupted more than a dozen French cities during the last three weeks , he abandoned it 
- Prime Minister Edouard Balladur today abandoned a Government decree 
  the decree allowed young people to be paid less than the minimum wage 
  after a arranged meeting between Mr Balladur and student leaders this morning , a spokesman for the conservative coalition Government said the decree had been suspended 
  it was suspended for one week to give time for a new policy to be developed and to put an end to the so-called youth wage . 
  the move was anticipated by Mr Balladur himself in a brief television address Sunday night 
  he referred to young people 's anxiety about their future and noted that we must start to restore a dialogue with them and examine various possible solutions 
  but the retreat is no less embarrassing for the Minister , reinforcing the view that he backs down in the face of protests . 
  on two other recent occasions , he dropped policies after angry demonstrations . 
  student leaders were delighted by their victory , but they vowed to stay on the alert until the decree is revoked . 
  last Friday , 200000 youths marched through Paris and a dozen other cities to denounce the decree . 
  some protests continued today , and a new demonstration is scheduled here Thursday . 
  some students warned that the Government was hoping the Easter study break would disperse the movement . 
  one student leader , Philippe Campinchi , noted that suspending the decree is good ; withdrawing it is better . 
  but Helene Joubert , another leader , sounded triumphant . 
  the youth wage will be history within one week , she said . 
  the first reasonably complete skull of the earliest recognized human ancestors after the split from the great apes has been found 
  it has been found near the bank of a dry riverbed in Ethiopia 's arid badlands 
- the skull , with its apelike heavy brow , jutting jaw and small brain case , is apparently that of a large male who lived three million years ago 
  the remarkable find , which fills a serious gap in understanding early human evolution , gives a face to the species 
  the species was first identified and made famous by the discovery in 1974 of the headless Lucy skeleton 
  without a skull , scientists had not been sure what these creatures looked like or what Lucy 's position was in the human lineage . 
  the discovery could thus settle some of the hotly debated issues over whether the varied fossils from this time belonged to a species 
  it settled the issue over whether the fossils , 3.9 million years ago , belonged to one or two species 
  they may have belonged to a single species , known as Australopithecus Afarensis and considered the common root of the human family tree 
  they may also have represented two or more species of different sizes and behavior . 
  as the White House and Congress debate the best way to reshape the nation 's health care system , an overriding concern remains 
  what effect will the final plan have on the quality of care Americans receive 
  many Americans , those with money or health insurance , now get the best medical care in the world 
  under the proposals now before Congress many more would get access to basic and preventive care . 
  but at the same time , hospitals and health maintenance organizations are coming under pressure to reduce costs 
  and even some Clinton Administration officials worry that quality could decline without safeguards 
  both the Administration 's health plan and competing proposals seek to answer that concern 
  they seek to answer that concern by devising ways to monitor and improve quality while holding down costs 
  but the White House and other health experts agree that the science of measuring quality is in its infancy 
  the science is in its infancy , making it unlikely that it could be applied on a national scale soon . 
  that could cloud a scenario of the Clinton plan in which patients would make choices 
  patients , armed with information about the performance of competing doctors , hospitals and HMOS , would make choices 
  they would choose those most likely to provide high-quality care at the most reasonable prices , forcing the others to improve or get out of the business . 
  there is a tremendous need to develop measures of quality , said Dr David M Eddy 
  but anyone who believes that we have all the measures we need right now is kidding themselves 
  there is a tremendous need , said Dr David M Eddy , a professor of health policy and management at Duke University 
  he is a professor who helped develop the Administration 's proposals on quality 
  that assessment was echoed by Dr Jesse Green , the director of health policy research at the N Y U School of Medicine . 
  I think we are raising the expectations of people far beyond the ability to deliver information , he said . 
  with long-term interest rates now above 7 percent , President Clinton 's top economic advisers expressed concern over the weekend 
  they expressed concern that further rate increases could damage the economy and slow growth to an unacceptable level 
  the Administration argues that the economy is going through a transition from very strong growth in last year 's fourth quarter to less growth now 
  but no one can tell where the leveling-off point will be 
  the concern is that if interest rates rise , economic growth could decline too much , slowing the creation of new jobs 
  based on what we know , our view of how strongly the economy will grow this year is not changed by an interest rate in the neighborhood of 7 percent 
  our view is not changed , said Laura Dandrea Tyson , the chairwoman of the Council of Economic Advisers 
  but if the level goes much above 7 percent , then that would exercise a contractionary effect on the economy 
  Long-term interest rates rose nearly three quarters of a point during the last month , reaching 7.26 percent on Friday 
  it reached 7.26 percent in a bond-trading session shortened in observance of Good Friday 
  not since 1981 have rates increased so much in a single month , and the comments by Ms Tyson and other Administration officials were aimed 
  the comments were clearly aimed at calming the markets 
  the Administration 's new concerns could put it in open conflict for the first time with the Federal Reserve Board 
  they may conflict with the Federal Reserve Board , whose chief priority has been to control inflation even at the cost of economic growth 
  the Administration 's priority has been creation of jobs through economic expansion , even at the possible cost of an inflation rate 
  they do it at the cost of a rate that is slightly higher than what the Fed might accept 
  David J Askin entered the small conference room of his Lexington Avenue office last Monday to face his investors 
  he faced his investors : blue-chip corporations , pension funds and wealthy families 
  they had entrusted him with 600 million dollars in what was billed as a low-risk approach to investing in bonds backed by home mortgages 
  but as interest rates rose in recent months , his two investment funds lost more than 100 million dollars 
  several dozen investors were there in person , and 20 more were on the speakerphone 
  what they heard did not please them 
  Mr Askin said he needed 40 million to 50 million dollars immediately because several brokerage firms were seeking more money to cover his funds ' losses 
  if the cash could not be raised , their entire investment was in jeopardy 
  in the days that followed , bond prices continued to plunge , and the size of the bailout needed mushroomed to 120 million dollars 
  then they heard on Wednesday that the brokerage firms were liquidating the funds ' holdings in a string of fire sales 
  when the markets closed for the holiday weekend on Thursday , it appeared that most of the funds had been lost 
  Senator George J Mitchell of Maine emerged today as a leading candidate to succeed Justice Harry A Blackmun , who is retiring as the senior member of the Supreme Court 
  the White House began almost immediately to weigh the potential consequences of nominating him 
  in a White House ceremony this morning , President Clinton paid emotional tribute to Justice Blackmun , who said he would remain 
  he would remain on the Court until late September unless a successor was confirmed before then . 
  White House officials indicated that the President was in no hurry to settle on a replacement for the eighty-five-year-old Justice . 
  Mr Clinton spoke generally about his second opportunity to fill a vacancy on the Court . 
  in a voice choked with admiration , he hailed Justice Blackmun , who wrote the landmark Roe Versus Wade decision that legalized abortion 
  he hailed Justice Blackmun as a jurist of majesty and reason , with scholarship and grace . 
  in stepping down after 24 years on the nation 's highest court , Justice Blackmun would step into our history , Mr Clinton said 
  Mr Clinton stood quietly by the President 's side in the Roosevelt Room of the White House , his hands folded before him 
  later , at his own news conference at the Court , he said he had decided to retire before age overtook him . 
  the age of 85 is pretty old , Mr Blackmun said dryly 
  I don't want to reach a point where my senility level reaches unacceptable proportions 
  and I don't want to be asked to retire like Oliver Wendell Holmes Jr , who stepped down in 1932 at the age of 90 
  a man armed with a hammer and a spear gun attacked the flight crew of a Federal Express cargo plane today 
  he attacked them before the crew wrestled him to the floor and the captain safely landed the plane 
  three people aboard the DC10 were critically injured and a fourth suffered less serious injuries , said Rick Roberts of the Regional Medical Center at Memphis 
  the suspected attacker was among the most seriously hurt people , said Dick Marquise , an agent of the Federal Bureau of Investigation 
  Larry Cox , the president of the Memphis Shelby County Airport Authority , said the crew members suffered head and body injuries 
  they were very bloody , Mr Cox said 
- it looked like they had been in an explosion or a film you would see of Vietnam 
  it must have been hand-to-hand combat 
  only the pilot was still able to fly after the attack , and he brought the plane in 
  he brought the plane in , Mr Cox said , adding that the captain obviously had great skill 
  Federal Express identified its plane 's crew as Captain David G Sanders , 49 , and James M Tucker , 42 , the first officer 
  the crew also included Andre H Peterson , 39 , the second officer 
  the passenger was Auburn Calloway , 42 , a DC10 second officer with Federal Express , the company said 
  no one else was on the plane , Federal Express said 
  a Federal panel today cleared the way for Government approval of the first genetically engineered food 
  they cleared the way for the food , a firmer tomato that can ripen longer on the vine before being picked for shipment 
  after three days of hearings , Dr David A Kessler , the Commissioner of Food and Drugs , said action would come within 90 days 
  he said he thought that final action on the tomato , called the Flavr Savr , would come within 90 days 
  other agency officials said approval was expected 
  although no official vote was taken , Dr Kessler said he heard no dissent today on the safety evaluation of the Flavr Savr tomato 
  he said the committee thought that the evaluation of the Flavr Savr was exceptionally thorough 
  while the tomato sailed through , members of the panel , the Food Advisory Committee , said proponents and critics raised questions 
  critics of genetic engineering techniques in food raised questions about the agency 's policy on biotechnology products 
  the tomato is the first of an expected wave of genetically engineered foods headed to market 
  already there are other types of genetically engineered products , including biochemicals used to make cheese and a hormone to stimulate the milk production of cows 
  the cattle hormone has prompted protests 
  the members of the F D A committee , which met here outside Washington , gave high marks to Calgene Inc , which makes the tomato 
  the company produced a substantial amount of data to show it was safe 
  the agency 's approval is not technically required before the tomato goes into supermarkets 
  still , the company sought the agency 's approval to insure a smooth path to market 
  the new director of the National Association for the Advancement of Colored People held a closed meeting on Friday with black militants and leftists 
  he held a meeting to discuss increasing their influence in the organization 
  the session has angered NAACP board members , who learned of it only afterward 
  the meeting in Detroit was led by the group 's executive director , Dr Benjamin F Chavis Jr , whose spokesman spoke today 
  his spokesman said today that Mr Chavis did so at the behest of some of those invited 
  the spokesman , Don Rojas , said the meeting was organized by the group 's Detroit chapter , which mailed out the invitations 
  the meeting brought together representatives of what Mr Chavis termed the Pan-African community , the progressive community and the nationalist community 
  coming after criticism of Mr Chavis within the NAACP for his overtures to the Nation of Islam , the meeting appeared to be an effort to broaden an organization 
  the meeting was an effort to broaden an organization that is being increasingly seen as ineffective and irrelevant to young blacks 
  they invited Alton H Maddox , a New York lawyer who headed the Senate campaign of the Rev Al Sharpton 
  they also invited Maulana Ron Karenga , a California State professor known for heading US , a radical nationalist group , and for inventing the holiday known as Kwanzaa 
  and they invited Angela Davis , a professor at the University of California at Santa Cruz and a former Communist 
  she was acquitted of kidnapping and murder charges in taking hostages from a courtroom in San Rafael , California , in 1970 
  a state judge and three others were killed in the incident 
  others closer to the political mainstream , still on the political left , were also invited , including the Rev Calvin O Butts Third 
  they also invited Calvin Butts , the pastor of the Abyssinian Baptist Church in Harlem , Cornel West , a professor of philosophy at Princeton , and two actors 
  Dr William Gibson , the organization 's chairman , said he was unaware of the meeting until he was told about it 
  he was unaware of it , even though the invitation was sent out under his name 
  Rush-hour traffic moved as usual today , at a crawl , as the Santa Monica Freeway opened for business 
  it opened for business for the first time since the January earthquake toppled two of its bridges 
  but even as politicians celebrated the reconstruction of the nation 's busiest freeway , questions arose about the adequacy of the repairs 
  Governor Pete Wilson , Mayor Richard J Riordan of Los Angeles and Federico F Pena , the Federal Secretary of Transportation , were there 
  they were among those on the roadway late Monday night 
  they were on the roadway when a phalanx of police officers of motorcycles , followed by rows of merry-making drivers , inaugurated the rebuilt road . 
  at opening ceremonies this morning , Vice President Al Gore praised the quick repairs and said jubilantly that the rubber is meeting the road today 
  but the festivities were marred by disclosures in the Los Angeles Times today that in February consultants made recommendations 
  consultants to the California Department of Transportation made recommendations 
  they recommended fortifying the abutments of the two fallen bridges , but they were already in place because of the accelerated construction schedule . 
  in the event of a major earthquake , the four concrete structures would move laterally 
  the four concrete structures , on which the ends of the bridges rest and are connected to land , would move laterally 
  they would move laterally , causing the bridge deck to slip to one side 
  after internal review , state transportation officials decided last Sunday to go forward with the work 
- they went forward with the work , which they estimated would take two weeks to put out to bid and a few days to complete 
  and they would tack on 100000 dollars to the 30-million-dollar federally financed project . 
  they said the work , drilling eight holes into the ground , then putting in reinforced steel and pouring concrete , could proceed 
  it could proceed without again closing the freeway , which they said was safe even without being strengthened 
- it 's ultraconservative , but because it 's sitting on a soft-soil site , we decided it was prudent , said the engineer 
- it 's ultraconservative , said State Department of Transportation 's chief bridge engineer , James Roberts 
  we're talking about reducing the future risk of damage from minimal risk to no risk 
- it 's not really a big deal 
  a tiny insect that apparently hitched a ride to Florida from West Africa aboard Hurricane Andrew in 1992 has infested groves 
  it has suddenly begun infesting citrus groves throughout the state 
  it has been sucking the life from orange , grapefruit , lemon and lime leaves and drying up profits for the beleaguered 8-billion-dollar-a-year citrus industry 
  the pest , a moth called the citrus leaf miner that is only one tenth of an inch long at maturity , was first spotted 
  it was first spotted last spring in a few lime groves south of Miami 
  but with another growing season getting under way , it has become clear that millions of moth larvae have burrowed into leaves 
  they have burrowed into leaves in every citrus-growing county in the state 
  millions of larvae have burrowed , disrupting the process of photosynthesis vital to the health and growth of young trees 
- it 's been like an explosion , said Carlos Balerdi , a horticulturist and agronomist at the University of Florida 
- the pest does not directly attack citrus fruit , scientists here said , or normally infest mature trees 
  rather , it seeks out the newest leaves on young trees , stunting their growth and rendering them unproductive as long as they are under attack 
  Jorge Pena , an entomologist at the University of Florida who is with the Tropical Research and Education Center here , said they worked 
  he and other researchers were working against the clock to control the pest 
  but the citrus leaf miner , which originated in Asia , has already spread from Florida to Central America and the Caribbean , he said 
  growers in California , Texas and Mexico should also be concerned 
  Dr Pena and other scientists theorize that Hurricane Andrew may have brought the citrus leaf miner from West Africa 
  it comes from West Africa , which had been the westernmost point of its range 
  the pest , which has been known to be carried long distances by wind , appeared during the first growing cycle after the storm 
  the Clinton Administration moved on two fronts today to reshape the way the Government manages logging in the nation 's remaining ancient forests 
  in Seattle , the Administration asked a Federal judge to restore some logging in the old forests of the Pacific Northwest 
  they will restore logging in the Northwest , where for five years the courts have all but eliminated logging on public land 
  they eliminated logging to protect the northern spotted owl 
  and the United States Forest Service canceled a 50-year contract with the Alaska Pulp Corporation that has allowed it to cut timber 
  they can cut timber in the Tongass National Forest , a program that environmentalists have assailed for years 
- environmental groups and the timber industry , for conflicting reasons , today criticized the plan to protect the spotted owl and other species 
  the plan would protect the spotted owl and other species in Washington , Oregon and California 
  although groups criticized the plan , the decision on the Alaskan forest was clearly welcomed by environmentalists 
  Alaska Pulp is one of two companies with special contracts to cut trees in the Tongass 
  the Tongass is one of the last remaining stretches of temperate rain forest in the world 
  the contract that was canceled , one of the biggest ones in the nation involving publicly owned forests , would have allowed the company to cut more lumber 
  it would have allowed them to cut another two billion board feet of lumber by 2011 
  the Forest Service had warned the company that the contract might be terminated after Alaska Pulp shut a mill in Sitka last year , laying off 400 people 
  the long-term contract was intended to provide mill jobs in Alaska 
  defending the spotted owl plan , Administration officials said that neither industrial nor environmental critics of its plan could offer a way 
  they could not offer a better way to save the threatened owl 
  they had no better way to save the owl and preserve a forest that offers habitat for a multitude of species while also nurturing the region 's economy 
  environmentalists said the plan was intended to appease the timber industry , and the industry said it was illegal and unbalanced 
  and the Administration admitted that even if the plan survived legal challenges , it would take at least three years to put into effect 
No errors!
exit 0
