text:
The Guardian March 26, 2003
Reinventing McDonald's
by Marcus Browning*
In August last year the World Food Program launched an international appeal
to feed millions of starving people in Southern Africa. More than 10
million people were at risk of starvation across six countries. At the time
an estimated seven million people required food immediately with that
number to reach 12.8 million by March this year. Meanwhile, in Norway,
McDonald's fast food chain was launching its latest marketing innovation,
the "McAfrika" sandwich: beef, cheese, tomato and salad on pita bread,
"based on an authentic African recipe".
McDonald's is attempting to reinvent itself to climb out of a slump that
threatens its very existence. Competition in the form of home-grown fast
food outlets selling variations of national cuisines plus ongoing
opposition in some countries to its food imperialism are helping to deepen
this slump.
To push its interests, McDonalds has become a partner in UNICEF and the
United Nations Children's Fund that launched the annual World Children's
Day at McDonald's last year. This is also part of the attempt of US
corporations to corporatise the United Nations and turn it into a business
enterprise.
They are in this new venture with the likes of Microsoft's Bill Gates, the
Credit Suisse Group of Switzerland, the Conrad Hilton Foundation, Cisco
Systems and Procter and Gamble.
These and other corporations have been in discussions with the UN with the
aim of setting up Public-Private Partnerships (PPPs), to make private
profit at public expense.
UNICEF and McDonald's already have a PPP in the form of the marketing
exercise World Children's Day At McDonald's.
As part of this exercise, on Halloween in the US last year 20 million
UNICEF trick-or-treat boxes were distributed through McDonald's.
Major promotional events were staged in Asia. In China access to concerts
broadcast over the internet came via the purchase of a Big Mac burger, with
a tiny percentage of sales being hived off to UNICEF. In Hong Kong
McDonald' s put on a "Love for our future with UNICEF" promotion, with
money going to UNICEF through the sale of postcards at Hong Kong McDonald's
outlets.
In terms of children's programs, representatives from governments, NGOs,
the UN and corporations last year began a "dialogue" to "discuss the role
of such partnerships in achieving A World Fit For Children".
In May 2002, these groups adopted a statement in which "business leaders
agreed in principal to work to widen the participation of corporate support
to children; to recognise business responsibilities to children and the
social and environmental impacts business operations can have on children;
ensure no corporate exploitation of children; and to promote a fair market
place that builds healthy communities."
Nice principles but what is the reality?
In a letter sent to UNICEF executive director Carol Bellamy, children's
rights activists, health experts, doctors and public health advocates
attacked the fast food giant's involvement in UN children's programs.
"McDonald's is a global leader in the marketing of junk food that is
creating soaring rates of childhood obesity and type 2 diabetes", said the
letter, "and that is disrupting traditional ways of food preparation in
families and cultures.
"It is truly a challenge to see how this partnership with McDonald's is
consistent with UNICEF's claim to promote 'good nutrition' to the world's
children. As you know, McDonald's markets precisely the high-added-fat,
high-added-sugar junk food that undermines good nutrition for the world's
children."
Though the move into China is a grab for the world's biggest market, the
McDonald's/UNICEF World's Children's Day is a global PR exercise marked
down for Denmark, Australia, New Zealand, USA, France, Mexico, Japan and
Public relations and advertising have been fundamental to the growth of
McDonalds. Its image is everything because its content is worse than
nothing. So it was that Britain's Food Commission condemned network GMTV's
recent sponsorship deal with McDonalds for its Diggit cartoon spot.
Adverts show three-to-eight-year-olds (the program's target audience)
eating a McDonald's birthday party meal which includes cheeseburger,
French-fries, Coke and cake.
Based on the recommended daily intake (RDI) for the target age group, this
meal contains 60 per cent more saturated fat; 79 per cent more sugar and
128 per cent more salt than the RDI.
The "caring" McDonald's clearly has an unspoken motto: get them early and
they're yours for life.
Growth of a food monopoly
McDonald's attempt to reinvention itself is not only driven by the need to
rescue its image but, like all transnational corporations, it has an
insatiable hunger for profits.
Late last year McDonald's share price was the lowest in seven years. In
December it admitted that, due to a protracted fall in sales, it would be
forced to announce, for the fist time in its 47-year history, a quarterly
The slump is the result of many waking up to the reality of McDonald's as a
major global food monopoly. It is also being hit by the growth of rival
monopolies and the general economic crisis of capitalism.
As a statement from its headquarters in the US state of Illinois coyly put
it, "It's fair to say that McDonald's is playing to win in a competitive
marketplace, and is taking necessary actions to move the business forward."
Like other global agri-business monopolies, McDonald's cleaned up on the
bonanza that came out of exploitative agricultural programs that culminated
in a wholesale corporate take-over of agriculture in the underdeveloped
nations in the 1970s; the so-called Green Revolution.
Supported by the UN Food and Agricultural Organisation, it involved the
introduction of supposedly hardy, easy-to-grow strains of grain and crops
such as maize. The program was promoted as the saviour of the poor and
hungry (along the lines that GM food is being touted today).
In fact it was used by big agribusiness to ruthlessly appropriate primary
food production — the precursor of today's drive to force genetically
modified farming methods on the world. The Green Revolution ushered in
seed-fertiliser-insecticide dependence and the imposition of cash crop
farming on an unprecedented scale.
It gave monopolies like Monsanto absolute control over a nation's
agriculture. This is how it worked. The farmer had to buy seed from
Monsanto that responded only to Monsanto's fertiliser and raised crops that
could only be protected from pests by Monsanto's pesticides.
Agricultural diversity — mixed crop farming meant primarily for local
consumption — was in many cases undermined and replaced with single cash
crops (an extension of the mono-culture nature of what is today known as
corporate globalisation).
This gave rise to a classic version of capitalist overproduction, with
people going hungry while across their farmlands thousands of hectares of
cash crops ripened in preparation for harvest and export.
Such a frenzied and ruthless grab for the world's agricultural resources
made ideal pickings for McDonald's, the most blatantly mono-cultural food
corporation in the world.
In the process it has been responsible for devastating environmental
destruction. Vast tracts of land were cleared with resulting soil and water
degradation to allow for cattle growing to satisfy its demand for beef.
Its demand for cash crops such as wheat and potatoes keeps a steel grip on
farmers by perpetuating their dependence on McDonald's, farmers that
McDonald's can abandon the instant a cheaper price is on offer elsewhere.
Breaking that grip requires consideration of fundamental questions,
including the sovereignty of nations and their economic independence from
the dictates of transnational corporations, and the rights of all human
beings to basic needs, including food and water.
There are now millions of children in the developed wealthy nations facing
major health problems due to obesity from bad diets foisted on them by fast
food pushers. At the same time, tens of millions go hungry and suffer
malnutrition in the underdeveloped nations.
That such a ludicrous situation can exist is further proof — if any is
needed — of the utter failure of capitalism — a system based on
exploitation, lying and theft. It is now striving to dominate everywhere,
using any means to save it from its final rejection and collapse.
The Death of Ronald or Suddenly Last Summer
He claps his
gloved hands,
face a plaster
cast death mask,
little does
he know it.
"Now boys and girls .
(the target;
squeezing
every red cent
from their
upturned faces,
their throats to him -
perspective he
is all teeth and
mouth and nostrils).
Then, suddenly
so it seemed —
"We've had enough.
Sloppy nonsense"
And they point
to the dawn of a new day
their teeth, saying
in unison
"no more, no more".
They turn on him
with rage in them
all those years of abuse,
aware of themselves at
Alarmed, Ronald retreats
in on himself
at the edge
of a sea of
cattle bones,
on the shore of
a treeless
dustbowl,
beneath a bald mountain,
he expires,
is buried,
stiff as a board
as he always was.
They wash their hands
of him,
his flame-red
slooshed away.
"And they'd better not
send any more of 'em"
*Tom Pearson
Back to index page


text:
Now displaying: June, 2019
Elon Musk and Jeff Bezos on Reality Collision Course 0
Nothing too serious here. Just poking some fun at our real life super heroes.
Sponsored by http://GloryDoesntComeCheap.com
Unleash Your Superhero!
Planet of the Apes 0
What is the most abundant life in the Universe? That's a bold question, considering we have yet to see undisputed proof that ET even exists. The only model we have, is on Earth. So let's unpack that, and see what we end up with.
Earth, 4.6 billion years old. That's our scale. The scale has already been split into four eons.
The first eon is called Hadean. That first eon, lasted from 4.57 billion to 4.1 billion years ago. At 4.53 billion years, a mars sized object hit the earth, forming the moon. At 4.1 to 3.8, water and organic material begin falling to Earth.
It would be during this eon 4.0-2.8 billion years ago, where life on Earth took a foothold, the Archean eon. They were single celled creatures including microscopic microfossils.
At 3.6 billion years, we can see the emergence of cyanobacteria. These little guys begin to produce oxygen in Earths' great oxygenation event.
2.5 billion years ago, Earths oxygen level begins to significantly rise.
Notice that Earth is almost half as old as it is now, yet populated with these simple life forms, and there's nowhere near enough oxygen in the air for animals or humans.
Once the oxygen level starts to rise, multi-celled organisms start showing up. The cells have a protected nucleus, which now house DNA.
At 2 billion years ago, photosynthesis begins to produce more oxygen. Creatures start using oxygen to process fat, sugar, and protein.
At a billion years ago, a super continent forms. Life looks like cool sponges and funky worms. Half a billion years ago, the Cambrian explosion gives rise to more complex animals that evolve and diversify rapidly.
490-445 million years ago, we see the first plants and fungi appear on land, then an Ice age. After this time, jawed fish appear, then more complex plants, increasing oxygen, winged insects.
Then 252 million years ago, the Great Dying event wipes out 95% of life on Earth. Then Dinosaurs take over the planet until Bam, a big rock from the sky wipes them out.
With nothing around to eat plants, plants become trees. Forests become the new modern habitat. With all that food around, mammals start getting bigger and bigger. The first primates appear. Those opposable thumb tree swingers eventually hit the ground That's when the Earth became the Planet of the Apes
Planet Nursery on Visual 0
Our sensors are picking up, no wait, we have a visual. Computer, put it on screen. Whoa, that's new. The image is showing two, not one but two planets in orbit around it's parent star. It's not exactly a hi rez image, but it's enough to be only the second time a multi-planetary system has been captured using direct imaging.
The host star is called PDS 70, located 370 light years away. Its just a baby, only 6 million years old, a bit smaller than our sun, and is still building up steam from its surrounding accretion disk. This is all the stuff in a busy young solar system, that needs to get cleaned up. And that's exactly what these two planets are doing.
They are big planets, several times bigger than Jupiter. That's why we can pick them up on visual. As they orbit around the star, they are clearing the debris in their paths.
The inner most planet, PDS 70 b, is the closest to it's star, 3 billion Km, which is about how far Uranus is from the Sun. Further out is PDS 70 c, closer to 6 billion Km away, like Neptune.
We have images of other fully formed planets, but none like this, not this young.

redpajama_set_name: RedPajamaCommonCrawl


As I explained in my post about the 1992 NHL Expansion, at a Board of Governors meeting in December, 1989 the National Hockey League decided to expand from 21 member clubs to 28 by the turn of the century. They added a team in 1991, another two in 1992, two more in 1993: five down, two to go.
The next round of expansion began in the fall of 1996. Eleven prospective ownership groups from nine different cities made formal applications for an NHL expansion franchise. Groups from Hamilton, Norfolk (Virginia), Oklahoma City and three from Houston were unsuccessful in convincing the NHL's expansion committee that they merited franchises, while four bids were accepted and conditional franchises were awarded to groups in Atlanta, Columbus (Ohio), St. Paul and Nashville on June 25, 1997. (The eleventh bid from a group in Raleigh, North Carolina was withdrawn early due to stalled negotiations over the building of a new arena there. In May of 1997 Peter Karmanos, owner of the Hartford Whalers, announced that his team was relocating to North Carolina to begin play in the fall of '97; the Carolina Hurricanes played at the Greensboro Coliseum in Greensboro for two seasons until the new arena in Raleigh was completed.) The NHL met its goal of having 28 member clubs by 2000.
It didn't take Nashville owner Craig Leipold long to begin assembling his hockey operations staff. David Poile, long-time general manager of the Washington Capitals, was hired to the same position in Nashville on July 9, 1997. Head coach Barry Trotz and assistant coach Paul Gardner were hired less than a month later; they had filled the same positions with the Portland Pirates of the AHL, top affiliate of the Capitals. After the team's logo was revealed in September they held a "name the team" contest: they would be known as the Nashville Predators.
The rules of the 1998 Expansion Draft were similar to the rules of the draft in 1993 with a few changes.
In 1993 the existing clubs were allowed to protect one goaltender, five defencemen and nine forwards, which had significant ramifications on their rosters. In the weeks leading up to the 1993 Expansion Draft several trades involving goaltenders were made in order for the existing teams to better position themselves to stem their losses due to the draft. John Vanbiesbrouck, Ron Hextall, Mark Fitzpatrick, Stephane Beauregard, Jimmy Waite, Peter Sidorkiewicz and Craig Billington were among the goalies moved (Vanbiesbrouck and Fitzpatrick were chosen in the draft).
It was decided that in the 1998, 1999 and 2000 drafts the existing clubs would be allowed protect the same number of players as they had in 1993 or they could choose to protect two goaltenders, three defencemen and seven forwards instead. They could enjoy the privilege of protecting two goaltenders at the expense of leaving more defencemen and forwards exposed.
It was known that there would be an expansion draft in 1999 for the Atlanta Thrashers so the existing clubs were afforded a couple more small concessions in 1998: if they lost a goaltender in 1998 they would be exempt from losing one in the 1999 draft, and they would be allowed to each protect an additional forward or defenceman in 1998. (In effect the teams had the option of protecting one goaltender, five defencemen and ten forwards; one goalie, six defencemen and nine forwards; two goalies, three defencemen and eight forwards; or two goalies, four defencemen and seven forwards.) First and second year players were exempt, as were unsigned North American entry draft choices. Unsigned European draft choices from the 1994 Entry Draft and earlier drafts were eligible for claim.
The existing clubs were compelled to expose players with minimum levels of NHL experience as well, as they had been in the 1993 draft. Each would have to expose at least one defenceman and two forwards with a minimum of 40 games played in the NHL in 1997-98 or 75 games over the course of the 1996-97 and 1997-98 seasons. The goaltender requirements would depend on whether the existing club was protecting one or two goalies. If the team protected a pair of goalies it had to expose one that had played in 10 games in 1997-98 or 25 over the course of 1996-97 and 1997-98. (A "game" in this case was considered to mean any game in which a goalie played for at least 31 minutes.) If the existing club protected only one goalie they did not have to expose a goalie with NHL experience.
The Predators would choose only one player from each of the existing clubs, a total of 26: three goaltenders, eight defencemen, thirteen forwards and two more players from any other position. In the days leading up to the draft David Poile told the media he would use those two 'extra' picks on goaltenders.
The draft was nominally held Friday, June 26, 1998 but there was no real set time. It wasn't really a draft per se because the Predators were the only ones participating. From midnight on the morning of Friday the 19th (the time a trade freeze went into effect) to the time of the news conference at Marine Midland Arena in Buffalo on Friday the 26th David Poile had free reign to negotiate who he would take from each of the existing clubs. Poile didn't have to worry about competing with another club for expansion draft selections so he could concentrate on finding precisely who he wanted from each of the existing clubs, or he could negotiate considerations from the other clubs in exchange for not picking certain players. Friday the 26th was really just the date of the press conference to announce the selections and was the day the 'official' transactions were filed with the NHL Central Registry.
A league-wide trade freeze occurred between midnight Friday, June 19 and immediately following the draft on Friday June 26th. The protected lists were filed by the end of the day on Sunday the 21st.
As always seemed to be the case at expansion drafts in the 1990s many of the trades before the draft involved goaltenders.
The Sabres suspected that backup goalie Steve Shields (who was admirable in relief of Dominik Hasek in the 1997 playoffs) would be chosen by the Predators if he was left exposed so he was dealt to the Sharks instead. At the time the Sharks' goalies, Kelly Hrudey and Mike Vernon, were 36 and 34 years old respectively and Hrudey was a pending free agent (he retired over the summer and became an analyst for Hockey Night in Canada). Shields split time with Vernon in 1998-99 and was named the Sharks' starting goalie in 1999-2000, a position he held briefly until it was usurped by Evgeni Nabokov in 2001.
The Flames acquired Ken Wregget from the Penguins hoping to improve their goaltending in 1998-99; in 1997-98 Rick Tabaracci, Dwayne Roloson and Tyler Moss combined for a league-worst 0.892 save percentage. Wregget was 34 years old and spent most of the 1997-98 season injured, and he did the same in 1998-99. Ultimately Wregget only played 27 games for the Flames in that one season, leaving for Detroit as a free agent in the summer of 1999. The Flames' goaltending in 1998-99 was disastrous until they signed Fred Brathwaite from the Canadian national team mid-season.
You'll notice that the Predators' list of selections includes several Group III unrestricted free agents: Al Iafrate, Uwe Krupp and Mike Richter. There's a piece of a trivia that a lot of people probably won't believe: Mike Richter was an original Nashville Predator. The reason why David Poile selected these unrestricted free agents was that under the collective bargaining agreement of the time a team that lost Group III free agents would receive compensatory draft picks for the (net) loss. Poile didn't really want to keep these players, he hoped that they would sign somewhere else for a lot of money. The more a player was paid the higher compensatory draft pick that their former team would receive.
Mike Richter re-signed with the Rangers on July 15, 1998 and the Predators received the 52nd overall pick in the 1999 draft, which they used to select Adam Hall. Uwe Krupp signed with the Red Wings on July 7, 1998 and the Predators received the 67th overall pick in the 1999 draft, which they used to select Jan Lasak. Al Iafrate was signed by the Hurricanes on July 14, 1998. He never played a game for the Hurricanes and announced his retirement September 1. The Predators received nothing for him.
In the hours that followed the expansion draft picks announcement the Predators made a series of trades with a smattering of teams. Most of these trades were pre-arranged: the Predators were being compensated for picking certain players from certain teams, or from not picking certain players from other teams. Most of the compensation going the other way from the Predators was "future considerations".
Reportedly the Flames gave Dowd to the Predators for not selecting one of their goaltenders. The Flames only protected Ken Wregget, allowing them to protect more of their defencemen and forwards. The Blackhawks reportedly did the same for not selecting Chris Terreri. The Kings traded Timonen and Vopat to the Predators for having chosen Frederic Chabot and (reportedly) not choosing defenceman Garry Galley. Being that Chabot was a goalie it meant that the Kings would be exempt from losing a goalie to the Atlanta Thrashers in the 1999 Expansion Draft.
Other trades in the weeks that followed included the Predators trading Mike Sullivan to the Coyotes for a draft pick, the Kings sending Vitali Yachmenev to the Predators for future considerations, the Stars getting Tony Hrkac from the Predators for future considerations, and Doug Brown being traded back to the Red Wings by the Predators for Petr Sykora ("the other Petr Sykora", the defenceman born in 1978 not the winger born in 1976), a third round pick in 1999 (traded to the Oilers who selected Mike Comrie) and a conditional draft pick in 1999 (the 124th overall selection which the Wings got for losing Bob Rouse in free agency—the Predators chose Alexandr Krevsun).
The Predators also traded Jim Dowd and goalie Mikhail Shtalenkov to the Oilers just before the season started (October 1) for defencemen Drake Berehowsky and Greg de Vries and goalie Eric Fichaud. The Oilers re-signed Bob Essensa and felt Fichaud was expendable, I guess.
This is very impressive. Thanks for posting. Excited for the draft this year!
Hello, my understanding is teams were able to protect 9-5-1 or 7-3-2. Why in some of the protected lists (i.e. Fla Panthers) are 10 protected forwards listed?
"It was known that there would be an expansion draft in 1999 for the Atlanta Thrashers so the existing clubs were afforded a couple more small concessions in 1998: if they lost a goaltender in 1998 they would be exempt from losing one in the 1999 draft, and they would be allowed to each protect an additional forward or defenceman in 1998. (In effect the teams had the option of protecting one goaltender, five defencemen and ten forwards; one goalie, six defencemen and nine forwards; two goalies, three defencemen and eight forwards; or two goalies, four defencemen and seven forwards.)"
I think this was an attempt to even out the talent pools available for the four new clubs (and make sure the new teams were at least somewhat competitive), and conversely to spread out the existing clubs' "risk" of losing good players. In '98 the Predators had a smaller pool of skaters to choose from (because the existing clubs could protect 9-6-1, 10-5-1, 7-4-2 or 8-3-2), in '99 the Thrashers had a smaller pool of goalies to choose from (because a team that lost a goalie in '98 couldn't lose one in '99), and in 2000 the Blue Jackets and Wild would be competing with each other for the best selections.


PORT-AU-PRINCE - The death toll from Tropical Storm Isaac has surged to 19 in Haiti as reports of damage and destruction trickle in from remote areas, authorities said Monday. The storm tore over Haiti early Saturday, visiting renewed misery in an impoverished country where an estimated 400,000 people are still living in tent camps more than two years after a catastrophic 2010 earthquake killed 250,000 people. By Monday, 19 people had been confirmed killed, and six were missing, in storm-related incidents including six people in the hard-hit west and five people in the south, civil defence officials said.
Another 15,000 people had to be evacuated and 335 homes were destroyed, they said. Civil defence chief Alta Jean-Baptiste said, "We compile the data as best we can, but we don't have the technological means to get data in fast. There are regions we haven't been to yet." Some 5,000 Haitians were evacuated from tent camps ahead of the storm, which was in the Gulf of Mexico Monday after sweeping Cuba and lashing the Florida Keys. It was on a track headed toward the New Orleans area almost seven years after it was devastated by Hurricane Katrina.


As "The Capital of Craft," it's no surprise that San Diego County has more than 115 craft breweries. Without a doubt, one of the first breweries to put San Diego on the map is Stone Brewing. Their original location in Escondido is a bit of a haul from central San Diego, but is totally worth the drive. It's located in this strange industrial area and doesn't look like much from the street, but when you walk in you'll understand why it's so popular. They have more than 35 beers on tap, and even have wine for the non-hop heads. You will NOT find bar food on their menu—instead you'll find things like kimchi, curry and yakisoba. But I go there for the massive indoor-outdoor space with a beautiful rustic ambiance (it's also a wedding venue) and, of course, the beer. During the summer they have outdoor movies in the garden where you can drink your favorite beer while watching a classic. Stone is definitely known for their IPAs, but my favorites are the pale ale and the cali-belgique. I took a guided-tour of the brewery to check out the behind-the-scenes action, too. The tour ends with a beer tasting of four brews and a souvenir glass. I highly recommend it.
With a limited restaurant selection in Escondido, Bellamy's is definitely at the top of the list. The upscale bistro has a French-inspired menu from French Master Chef Patrick Ponsaty. I opted for the chef's "inspiration menu" to get a sampling of everything. The plating presentation was stunning for all four courses that included sea bass, scallops, duck breast and creme brûlée. And since the French love small portions, I didn't feel too stuffed by the end of dinner. After imbibing craft beer, you'll be ready to eat!


A local partnership of LIAA's UpNorth Media Center.
LIAA's UpNorth Media Center collaborates with local community organizations across the region. LIAA supports the Traverse City Film Festival (TCFF) in making the festival experience accessible to all throughout the year. In addition to helping capture video of the events for TCFF's website, we air festival highlights, filmmaker interviews and filmmaker panel discussions on UpNorthTV.


Hi there! Do you happen to do English to Arabic translations? I'm trying to find someone who can translate the quote 'all time is unredeemable' to Arabic. I haven't had much luck! I would be so appreciative if you could!
as a logo on our da'wah button badge. can i?
if you didnt permit it, i will delete it right way. syukran'alayk..
Salaam i would like to ask you if you would be interested in designing a logo for our dawah organization?


text:
Wine refrigerators offer a smaller alternative to wine cellars and are available in capacities ranging from small, 16-bottle units to furniture-quality pieces that can contain 400 bottles. Wine refrigerators are not ideal for aging, but rather serve to chill wine to the proper temperature for drinking. These refrigerators keep the humidity low (usually under 50%), below the optimal humidity of 50% to 70%. Lower humidity levels can dry out corks over time, allowing oxygen to enter the bottle, which reduces the wine's quality through oxidation.[142] While some types of alcohol are sometimes stored in freezer, such as vodka, it is not possible to safely freeze wine in the bottle, as there is insufficient room for it to expand as it freezes and the bottle will usually crack. Certain shapes of bottle may allow the cork to be pushed out by the ice, but if the bottle is frozen on its side, the wine in the narrower neck will invariably freeze first, preventing this.
Communication between the Old World and the New World in the Columbian Exchange influenced the history of cooking. The movement of foods across the Atlantic, from the New World, such as potatoes, tomatoes, maize, beans, bell pepper, chili pepper, vanilla, pumpkin, cassava, avocado, peanut, pecan, cashew, pineapple, blueberry, sunflower, chocolate, gourds, and squash, had a profound effect on Old World cooking. The movement of foods across the Atlantic, from the Old World, such as cattle, sheep, pigs, wheat, oats, barley, rice, apples, pears, peas, chickpeas, green beans, mustard, and carrots, similarly changed New World cooking.[11]
Some popular types of ethnic foods include Italian, French, Japanese, Chinese, American, Cajun, Thai, African, Indian and Nepalese. Various cultures throughout the world study the dietary analysis of food habits. While evolutionarily speaking, as opposed to culturally, humans are omnivores, religion and social constructs such as morality, activism, or environmentalism will often affect which foods they will consume. Food is eaten and typically enjoyed through the sense of taste, the perception of flavor from eating and drinking. Certain tastes are more enjoyable than others, for evolutionary purposes.
Food aid can benefit people suffering from a shortage of food. It can be used to improve peoples' lives in the short term, so that a society can increase its standard of living to the point that food aid is no longer required.[130] Conversely, badly managed food aid can create problems by disrupting local markets, depressing crop prices, and discouraging food production. Sometimes a cycle of food aid dependence can develop.[131] Its provision, or threatened withdrawal, is sometimes used as a political tool to influence the policies of the destination country, a strategy known as food politics. Sometimes, food aid provisions will require certain types of food be purchased from certain sellers, and food aid can be misused to enhance the markets of donor countries.[132] International efforts to distribute food to the neediest countries are often coordinated by the World Food Programme.[133]
^ "Pesticides in Organic Farming". University of California, Berkeley. Retrieved 2014-06-17. Organic foods are not necessarily pesticide-free. Organic foods are produced using only certain pesticides with specific ingredients. Organic pesticides tend to have substances like soaps, lime sulfur and hydrogen peroxide as ingredients. Not all natural substances are allowed in organic agriculture; some chemicals like arsenic, strychnine, and tobacco dust (nicotine sulfate) are prohibited.
In the context of wine production, terroir is a concept that encompasses the varieties of grapes used, elevation and shape of the vineyard, type and chemistry of soil, climate and seasonal conditions, and the local yeast cultures.[72] The range of possible combinations of these factors can result in great differences among wines, influencing the fermentation, finishing, and aging processes as well. Many wineries use growing and production methods that preserve or accentuate the aroma and taste influences of their unique terroir.[73] However, flavor differences are less desirable for producers of mass-market table wine or other cheaper wines, where consistency takes precedence. Such producers try to minimize differences in sources of grapes through production techniques such as micro-oxygenation, tannin filtration, cross-flow filtration, thin-film evaporation, and spinning cones.[74]
Several organisations have begun calling for a new kind of agriculture in which agroecosystems provide food but also support vital ecosystem services so that soil fertility and biodiversity are maintained rather than compromised. According to the International Water Management Institute and UNEP, well-managed agroecosystems not only provide food, fiber and animal products, they also provide services such as flood mitigation, groundwater recharge, erosion control and habitats for plants, birds, fish and other animals.[70]
Literary references to wine are abundant in Homer (8th century BC, but possibly relating earlier compositions), Alkman (7th century BC), and others. In ancient Egypt, six of 36 wine amphoras were found in the tomb of King Tutankhamun bearing the name "Kha'y", a royal chief vintner. Five of these amphoras were designated as originating from the king's personal estate, with the sixth from the estate of the royal house of Aten.[33] Traces of wine have also been found in central Asian Xinjiang in modern-day China, dating from the second and first millennia BC.[34]
As previously discussed, the body is designed by natural selection to enjoy sweet and fattening foods for evolutionary diets, ideal for hunters and gatherers. Thus, sweet and fattening foods in nature are typically rare and are very pleasurable to eat. In modern times, with advanced technology, enjoyable foods are easily available to consumers. Unfortunately, this promotes obesity in adults and children alike.
The Mayo Clinic Diet is the official diet developed by Mayo Clinic, based on research and clinical experience. It focuses on eating healthy foods that taste great and increasing physical activity. It emphasizes that the best way to keep weight off for good is to change your lifestyle and adopt new health habits. This diet can be tailored to your own individual needs and health history — it isn't a one-size-fits-all approach.
While some Christians consider the use of wine from the grape as essential for the validity of the sacrament, many Protestants also allow (or require) pasteurized grape juice as a substitute. Wine was used in Eucharistic rites by all Protestant groups until an alternative arose in the late 19th century. Methodist dentist and prohibitionist Thomas Bramwell Welch applied new pasteurization techniques to stop the natural fermentation process of grape juice. Some Christians who were part of the growing temperance movement pressed for a switch from wine to grape juice, and the substitution spread quickly over much of the United States, as well as to other countries to a lesser degree.[112] There remains an ongoing debate between some American Protestant denominations as to whether wine can and should be used for the Eucharist or allowed as an ordinary drink, with Catholics and some mainline Protestants allowing wine drinking in moderation, and some conservative Protestant groups opposing consumption of alcohol altogether.[citation needed]
The expansion of agriculture, commerce, trade, and transportation between civilizations in different regions offered cooks many new ingredients. New inventions and technologies, such as the invention of pottery for holding and boiling water, expanded cooking techniques. Some modern cooks apply advanced scientific techniques to food preparation to further enhance the flavor of the dish served.[2]
A particular diet may be chosen to seek weight loss or weight gain. Changing a subject's dietary intake, or "going on a diet", can change the energy balance and increase or decrease the amount of fat stored by the body. Some foods are specifically recommended, or even altered, for conformity to the requirements of a particular diet. These diets are often recommended in conjunction with exercise. Specific weight loss programs can be harmful to health, while others may be beneficial and can thus be coined as healthy diets. The terms "healthy diet" and "diet for weight management" are often related, as the two promote healthy weight management. Having a healthy diet is a way to prevent health problems, and will provide the body with the right balance of vitamins, minerals, and other nutrients.[4]
Wines from other fruits, such as apples and berries, are usually named after the fruit from which they are produced combined with the word "wine" (for example, apple wine and elderberry wine) and are generically called fruit wine or country wine (not to be confused with the French term vin de pays). Other than the grape varieties traditionally used for wine-making, most fruits naturally lack either sufficient fermentable sugars, relatively low acidity, yeast nutrients needed to promote or maintain fermentation, or a combination of these three characteristics. This is probably one of the main reasons why wine derived from grapes has historically been more prevalent by far than other types, and why specific types of fruit wine have generally been confined to regions in which the fruits were native or introduced for other reasons.
^ Luke, Kim. "Evidence That Human Ancestors Used Fire One Million Years Ago". Retrieved 27 October 2013. An international team led by the University of Toronto and Hebrew University has identified the earliest known evidence of the use of fire by human ancestors. Microscopic traces of wood ash, alongside animal bones and stone tools, were found in a layer dated to one million years ago
Wine tasting is the sensory examination and evaluation of wine. Wines contain many chemical compounds similar or identical to those in fruits, vegetables, and spices. The sweetness of wine is determined by the amount of residual sugar in the wine after fermentation, relative to the acidity present in the wine. Dry wine, for example, has only a small amount of residual sugar. Some wine labels suggest opening the bottle and letting the wine "breathe" for a couple of hours before serving, while others recommend drinking it immediately. Decanting (the act of pouring a wine into a special container just for breathing) is a controversial subject among wine enthusiasts. In addition to aeration, decanting with a filter allows the removal of bitter sediments that may have formed in the wine. Sediment is more common in older bottles, but aeration may benefit younger wines.[89]
Some traditional foods have geographical indications and traditional specialities in the European Union designations per European Union schemes of geographical indications and traditional specialties: Protected designation of origin (PDO), Protected geographical indication (PGI) and Traditional specialities guaranteed (TSG). These standards serve to promote and protect names of quality agricultural products and foodstuffs.[62]
In 1994, over 100 countries became signatories to the Uruguay Round of the General Agreement on Tariffs and Trade in a dramatic increase in trade liberalization. This included an agreement to reduce subsidies paid to farmers, underpinned by the WTO enforcement of agricultural subsidy, tariffs, import quotas, and settlement of trade disputes that cannot be bilaterally resolved.[113] Where trade barriers are raised on the disputed grounds of public health and safety, the WTO refer the dispute to the Codex Alimentarius Commission, which was founded in 1962 by the United Nations Food and Agriculture Organization and the World Health Organization. Trade liberalization has greatly affected world food trade.[114]
Cooking meals for two doesn't mean you have to stick with leftovers (or meat-based dishes). These easy vegetarian meals — ranging from better-than-takeout Pepper-Only Pizza to Spanish Omelets — will keep you and your partner satisfied. Whether you're gearing up for an impressive at-home date night, or just want to avoid grabbing fast food, these plant-based meals for two are equally healthy and delicious.
Seeds of plants are a good source of food for animals, including humans, because they contain the nutrients necessary for the plant's initial growth, including many healthful fats, such as omega fats. In fact, the majority of food consumed by human beings are seed-based foods. Edible seeds include cereals (corn, wheat, rice, et cetera), legumes (beans, peas, lentils, et cetera), and nuts. Oilseeds are often pressed to produce rich oils - sunflower, flaxseed, rapeseed (including canola oil), sesame, et cetera.[8]


text:
Court sides with Christian broadcaster over anti-gay remarks
A court has ruled that the Korea Communications Commission's (KCC) restriction on a Christian broadcasting company - which aired anti-gay remarks - violated the principle of religious freedom. According to legal circles, Monday, the Seoul Administrative Court issued a ruling recently in favor of the Christian Television System (CTS) in a lawsuit the channel had filed to annul...
Couple face arrest for abandoning dead daughter in kimchi container for 3 years
A divorced couple accused of keeping the body of their dead infant daughter in a plastic container for three years to hide her death attended their arrest warrant hearing at a court Tuesday.
Drunk US soldier beats up taxi driver in Seongnam
A member of the United States Forces Korea (USFK) has been arrested after beating up a taxi driver so badly that the victim could not work for a number of days, according to the police in Seongnam, Gyeonggi Province on Sunday.
Moon's chief of staff banned from overseas travel over hiring scandal
Prosecutors have imposed an overseas travel ban on a former presidential chief of staff for alleged involvement in a hiring scandal, sources said Sunday.
Prosecution demands 5-year prison term for ex-justice minister
Prosecutors on Friday demanded five years in prison and a fine of 12 million won ($9,225) for former Justice Minister Cho Kuk, who stands accused of academic irregularities involving his children and interference with an inspection into a corruption case.
Supreme Court confirms acquittal of senior prosecutor of assaulting Justice Minister Han during 2020 raid
The Supreme Court on Wednesday confirmed a ruling that cleared a senior prosecutor of charges that he assaulted now-Justice Minister Han Dong-hoon during an investigation in 2020.
Court upholds restraining order against YouTuber accused of tailing justice minister
The Supreme Court has upheld a restraining order against a YouTuber accused of tailing Justice Minister Han Dong-hoon on his way home for a month.
Millennials, Gen. Z vulnerable to digital sex crime
Lee, an 18-year-old girl in Seoul, met an unidentified male at an online chatting space through social media. He asked her where she lives, which school she attends and asked for photos of her. His demands became more lurid as he asked for more revealing photos, which turned her off and prompted her to ignore his additional messages. Later, Lee's friend informed her that the ...
Murder suspect extradited to New Zealand
A 42-year-old woman, who is suspected of killing her two children, has been extradited to New Zealand. According to the Ministry of Justice, Tuesday, the woman, surnamed Lee is a New Zealand citizen of Korean descent and was handed over along with evidence to the New Zealand authorities the previous day at Incheon International Airport.
Prison sentence sought for man for cruel acts against girlfriend
The prosecution on Tuesday demanded five years in prison for a man accused of confining his girlfriend and forcing her to eat dog feces.
123456 7 8910


text:
Adnams Ghost Ship Declared Nation's Best Independent Beer In A Can At Indie Beer Can Festival
World's very first competition to find the best beers in cans
Adnams Ghost Ship by Adnams was awarded the title 'best independent beer in a can' at the Indie Beer Can Festival last night. Second and third place in the world first competition, sponsored by the Can Makers in partnership with the Society of Independent Brewers (SIBA), went to 13 Guns from Thwaites and Breakfast Stout from Arbor Ales respectively.
The winning beer is a citrusy Pale Ale brewed using Citra hops. The judging team praised its luscious notes of tropical fruit, beautifully balanced malts, and sparkling amber appearance.
Emma Hibbert, Marketing Director at Adnams, comments: "We are overjoyed to have been recognised by such a prestigious panel of judges. Ghost Ship has been a real success story for Adnams. Times are good for canned beer, with more and more premium beer brands choosing the format."
Chiara Nesbitt, one of the five independent judges and Beer Buyer for Tesco, comments: "The competition was very tight but Adnam's Ghost Ship clearly stood out from the others. We felt this beer had the widest appeal of the finalists and all agreed it was a joy to drink and suited the canned format perfectly. All twelve finalists are great examples of how independent beers look and taste great in cans."
Coming in second place, 13 Guns was described by the judges as having aromas and flavours of orange and grapefruit, and a more-ish finish. Breakfast Stout, meanwhile, has highly aromatic notes of black coffee and vanilla and was called 'a real bomb of a beer'.
Graham Fenton, Chairman of the Can Makers, says: "It has been a privilege to sample such a great range of beers and to select our fantastic winner. It's also been gratifying to see how successfully Indie Beer Can Festival has tapped into the rapidly growing trend for independent beers in cans. Cans are convenient, light, quickly chilled and they look great. In America canned independent beers are the height of cool, it won't be long before the same can be said in the UK."
Nick Stafford, SIBA commercial director, adds: "We'd like to extend our congratulations to the deserved winner, Adnams. There are many superb independent beers in the market which pay tribute to the craft, quality and innovation of the industry. We're pleased to have been involved in this competition, which has generated huge interest in cans and encouraged SIBA members to explore it as another way of bringing their beers to the growing number of craft beer drinkers."
Launched in April 2014, the Indie Beer Can Festival invited independent brewers in the UK and Eire to submit their beers, regardless of original pack format, for judging in cans. From over 100 entrants 12 were chosen as finalists and those not already in can also won the opportunity to trial in can for the Festival final.
The full judging panel included industry experts Adrian Tierney-Jones and Jane Peyton; Chiara Nesbitt, Beer Buyer for Tesco; President of Cask Brewing Systems Inc, Peter Love; and Graham Fenton, Chairman of the Can Makers. The winners were announced at the Indie Beer Can Festival on September 11th .


Today's big marketing push - the SoA web store is live on the new site. Well done to our webmaster, Peter Barham. Use the navigation bar on the left to move between mass purchases of games and mass purchases of publications. My top buy - the DVD, which contains all the issues of Slingshot from just before the ice age up to and including 2005 (but it's only available to society members, so make sure you join up at the same time). By the way, I'm not sure people realise that the subscriptions are by calendar year - whenever you subscribe in the current year, you get all the issues for that year so far, and then get the issues sent through for the rest of the year, as they come out.
Couple of other announcements as well - if you re-upped your subscription in time (I think before the end of February) you also get an incentive, which has been for quite a while a game - this year's game is called "Roma Invicta?", is written by Garrett Mills and Phil Sabin, and provides a strategic perspective of Hannibal's campaign in Italy, 218 to 216BC. Now, we've had a number of production delays with this, and ultimately it ended up with the same new printers who published the latest Slingshot. It's just arrived with members in the UK, and you should also be seeing it further afield in the next few days.
And ... there is a new mailing list for society members. If the committee has your email address, you should have received an invitation. We've started it to try and provide a closer means of communication between the society's committee and the membership. I plan to start running polls on it as regards various thoughts we have for Slingshot. So if you haven't responded to your invitation, please do so!


Company/Tax dilemma ... Help needed!
Hello, I am ready to purchase my first investment property and I can't find anyone with the relevant knowledge to help me figure out how to solve my dilemma.
Firstly let me give you some context.
I am 22 and I have 0 previous real estate experience apart from the countless books, property viewings, youtube videos and seminars I have read and seen.
I have a relatively well-paid job which has allowed me to save £25,000 to invest in real estate. I still live at home currently and don't intend to move out yet. I can reproduce this amount of money saved almost yearly within my current situation so I would like to invest in multiple rental properties whilst I am in this position.
The issue; As I don't have a residential mortgage and never have done I have been told that I will not qualify for a buy to let mortgage.
I understand the benefits behind buying property under a company name because I am in the higher tax bracket prior to an investment property.
Therefore I don't understand how I am to go about investing.
If buying in my own name will wreck my cash flow because of the tax I will be paying then surely I need to buy through an LTD company but I can't do that if I don't have a mortgage already.
I considered buying a property and "living" in it for so long before transferring it to a company owned property which would allow for a smaller down payment (preferable obviously) but then I would have to pay tax and fees on the transaction. If anybody could give me some advice on this I would be extremely grateful.
Hi Josh and welcome to the tribe.
You have been given inaccurate information.
You actually don't need to be a home-owner to access BTL finance, although you will need a salary of more than £25K.
If you contact the PT Brokers Team (number above) they will be able to advise you of the financial products you have access to, including residential mortgages.
I would recommend that you consider buying your own home and then renting out up to two rooms to lodgers. You can benefit from the £7.5K tax free Rent A Room allowance while learning to reference and manage tenants.
When you are in a position two (say after two years), change your residential property to a buy to let mortgage, redeem your resi loan, and then use the difference as a deposit on your next residence.
See - Using residence as stepping stone to BTL - where I explain this is how we started our portfolio 15 years ago. Our 2 lodgers bring in £1250.00 per month, but our mortgage is half that, meaning you may be able to build up your deposit pot quicker from this excess cash flow.
Hope that sparks a way forwards and good luck!
Thank you, Vanessa, I hadn't considered doing that but it is certainly something I would like to do in the future. I feel like property prices are going to dip a lot (temporarily) when Brexit actually happens so I think I may wait for that to happen and then invest in a property which requires light refurbishment so that I can buy low and add some sweat equity allowing me to make a good chunk of money on the way in.
I live in South Wales. So if I was to do this would you say to invest in an area such as Cardiff (where there are universities and a high chance of value growth) or would the town where I live(Bridgend) be a viable option? There are a lot of houses being built here lately and it has great transport facilities and is only 20 minutes outside of the capital. If I did this for two years as you said and saved say £40,000 would I be able to sell the property to my own LTD company and then rinse and repeat or is the 7.5K tax-free a one-off?
Thanks for replying anyway, I will give PT brokers a call.
There is common misconception about needing to have another property (your home) before securing a BTL mortgage. This is driven by misunderstanding of the rulers and how lenders apply them.
Lenders are concerned that you will secretly love them and so the mortgage may be regulated and bring them regulated risk.
it's a valid concern but one that's easily dealt with by dualoguing with lenders. Of course some your circumstances are a red line never to be crossed but for many this won't be a problem. You just need to evidence what you've said above.
We do these sorts of mortgages frequently so it won't be a problem. Borrowing in a company reduces the pool of lenders further but not terribly and as a tax advisor (and broker) it is usually only sensible if you wish to retain profits in the company as s24 tax may be a kick in the teeth but paying corporation tax and then income tax on dividends hardly makes anyone much better off. However reading into what you plan I can see the merits particularly as you don't have your own home yet.
if you need any help please give me a shout.
Thank you for getting back to me, I will email you in the coming week to discuss your different services if thats cool.
1/ Your ability to save 25k per year, this is excellent by the way and your biggest asset/advantage.
2/ The fact you'll want to move out of your parents at some point which will hamper your ability to save 25k per year.
Save until you can buy a residential 3/4 bedroom freehold house in your area, then rent 2 or 3 rooms out to lodgers, that way your mortgage will be covered and you'll have a house effectively cost free giving the same net benefit of living with your parents and crucially preserving your ability to save 100k every four years.
Thanks for your advice, I appreciate it a-lot.
I currently think this is the route I am going to take when the market is right, I didn't know there was a 7.5k tax relief until today so I think thats a huge bonus.I don't really want to move out but it seems there is more pros than cons.
Out of interest Josh how much does a 3/4 bedroom house cost in your town?
NatWest will loan you money for a buy to let even if you do not have a residential mortgage. Hope this helps.


text:
enum
{
    MC_STRING = STRING
};             // substitute enumeration variable MC_STRING for STRING, use MC_STRING below
#undef STRING  // undefine STRING as it conflicts with STRING enum in fmtlib/format.h

#include "CoolProp.h"
#include "DataStructures.h"
#include "HumidAirProp.h"

namespace CoolProp {
extern void apply_simple_mixing_rule(const std::string& identifier1, const std::string& identifier2, const std::string& rule);
}

enum EC
{
    MUST_BE_REAL = 1,
    INSUFFICIENT_MEMORY,
    INTERRUPTED,  // Mathcad Error Codes
    BAD_FLUID,
    BAD_IF97_FLUID,
    BAD_PARAMETER,
    BAD_PHASE,  // CoolProp Error Codes
    ONLY_ONE_PHASE_SPEC,
    BAD_REF,
    NON_TRIVIAL,
    NO_REFPROP,
    NOT_AVAIL,
    BAD_INPUT_PAIR,
    BAD_QUAL,
    TWO_PHASE,
    NON_TWO_PHASE,
    T_OUT_OF_RANGE,
    P_OUT_OF_RANGE,
    H_OUT_OF_RANGE,
    S_OUT_OF_RANGE,
    TP_SATURATION,
    HA_INPUTS,
    BAD_BINARY_PAIR,
    BAD_RULE,
    PAIR_EXISTS,
    UNKNOWN,
    NUMBER_OF_ERRORS
};  // Dummy Code for Error Count

// table of error messages
// if user function never returns an
// error -- you do not need to create this
// table
char* CPErrorMessageTable[NUMBER_OF_ERRORS] = {"Interrupted",
                                               "Insufficient Memory",
                                               "Argument must be real",
                                               "Invalid Fluid String",
                                               "IF97 Backend supports pure water only",
                                               "Invalid Parameter String",
                                               "Invalid Phase String",
                                               "Only one input key phase specification allowed",
                                               "Cannot use this REF State with this fluid",
                                               "Input Parameter is Non-Trivial",
                                               "REFPROP not installed correctly",
                                               "This Output parameter is not available for this Fluid",
                                               "This Input Pair is not yet support for this Fluid",
                                               "Input vapor quality must be between 0 and 1",
                                               "Output variable not valid in two phase region",
                                               "Output variable only valid in two phase region",
                                               "Temperature out of range",
                                               "Pressure out of range",
                                               "Enthalpy out of range",
                                               "Entropy out of range",
                                               "Temperature-Pressure inputs in 2-phase region; use TQ or PQ",
                                               "At least one of the inputs must be [T], [R], [W], or [Tdp]",
                                               "Could not match binary pair",
                                               "Mixing rule must be \"linear\" or \"Lorentz-Berthelot\".",
                                               "Specified binary pair already exists.",
                                               "ERROR: Use get_global_param_string(\"errstring\") for more info",
                                               "Error Count - Not Used"};

// this code executes the user function CP_get_global_param_string, which is a wrapper for
// the CoolProp.get_global_param_string() function, used to get a global string parameter from CoolProp
LRESULT CP_get_global_param_string(LPMCSTRING ParamValue,  // output (value of parameter)
                                   LPCMCSTRING ParamName)  // name of parameter (string) to retrieve
{
    std::string s;
    // Invoke the std::string form of get_global_param_string() function, save result to a new string s
    try {
        s = CoolProp::get_global_param_string(ParamName->str);
    } catch (const CoolProp::ValueError& e) {
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("parameter") != std::string::npos)
            return MAKELRESULT(BAD_PARAMETER, 1);
        else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // Must use MathcadAllocate(size) so Mathcad can track and release
    char* c = MathcadAllocate(static_cast<int>(s.size()) + 1);  // create a c-string (pointer) c with the same size as s
    // copy s into c, this process avoids the const-cast type which would result from instead
    // converting the string using s.c_str()
    std::copy(s.begin(), s.end(), c);
    c[s.size()] = '\0';
    // assign the string to the function's output parameter
    ParamValue->str = c;

    // normal return
    return 0;
}

// this code executes the user function CP_get_fluid_param_string, which is a wrapper for
// the CoolProp.get_fluid_param_string() function, used to get a fluid string parameter from CoolProp
LRESULT CP_get_fluid_param_string(LPMCSTRING ParamValue,  // output (value of parameter)
                                  LPCMCSTRING FluidName,  // name of fluid (string) to retrieve
                                  LPCMCSTRING ParamName)  // name of parameter (string) to retrieve
{
    std::string s;
    // Invoke the std::string form of get_fluid_param_string() function, save result to a new string s
    try {
        s = CoolProp::get_fluid_param_string(FluidName->str, ParamName->str);
    } catch (const CoolProp::ValueError& e) {
        // MSGBOX(e.what());
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("key") != std::string::npos)
            return MAKELRESULT(BAD_FLUID, 1);
        else if (emsg.find("parameter") != std::string::npos)
            return MAKELRESULT(BAD_PARAMETER, 2);
        else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // Must use MathcadAllocate(size) so Mathcad can track and release
    char* c = MathcadAllocate(static_cast<int>(s.size()) + 1);  // create a c-string (pointer) c with the same size as s
    // copy s into c, this process avoids the const-cast type which would result from instead
    // converting the string using s.c_str()
    std::copy(s.begin(), s.end(), c);
    c[s.size()] = '\0';
    // assign the string to the function's output parameter
    ParamValue->str = c;

    // normal return
    return 0;
}

// this code executes the user function CP_set_reference_state, which is a wrapper for
// the CoolProp.set_reference_stateS() function, used to set the H/S reference states
// based on a standard state string of "IIR", "ASHRAE", "NBP", or "DEF".
LRESULT CP_set_reference_state(LPCOMPLEXSCALAR Conf,   // output (dummy value)
                               LPCMCSTRING FluidName,  // name of fluidr (string) to retrieve
                               LPCMCSTRING StateStr)   // name of standard state (string) to set
{
    // Invoke the set_reference_stateS() function, no result from this void function.
    try {
        CoolProp::set_reference_stateS(FluidName->str, StateStr->str);
    } catch (const CoolProp::ValueError& e) {
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("key") != std::string::npos)
            return MAKELRESULT(BAD_FLUID, 1);
        else if ((emsg.find("Cannot use") != std::string::npos) || (emsg.find("Temperature to QT_flash") != std::string::npos))
            return MAKELRESULT(BAD_REF, 2);
        else if ((emsg.find("reference state") != std::string::npos) || (emsg.find("Reference state") != std::string::npos)
                 || (emsg.find("Reference State") != std::string::npos))
            return MAKELRESULT(BAD_PARAMETER, 2);
        else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // assign the dummy return value
    Conf->real = 0;

    // normal return
    return 0;
}

// this code executes the user function CP_Props1SI, which is a wrapper for
// the CoolProp.PropsSI() function, used to simply extract a
// fluid-specific parameter that is not dependent on the state
LRESULT CP_Props1SI(LPCOMPLEXSCALAR Prop,  // pointer to the result
                    LPCMCSTRING Fluid,     // string with a valid CoolProp fluid name
                    LPCMCSTRING PropName)  // a fluid property
{
    unsigned int errPos;
    std::string PropNameBrackets(PropName->str);
    PropNameBrackets = "[" + PropNameBrackets + "]";
    std::string FluidString = Fluid->str;

    // pass the arguments to the CoolProp.Props1() function
    Prop->real = CoolProp::Props1SI(Fluid->str, PropName->str);

    // Note: Props1SI does not throw exceptions, but instead
    // sets global parameter "errstring" and returns _HUGE.
    // Use ValidNumber(val) to see if Props1SI failed with an error message...
    if (!ValidNumber(Prop->real)) {
        std::string emsg = CoolProp::get_global_param_string("errstring");
        CoolProp::set_error_string(emsg);  // reset error string so Mathcad can retrieve it
        if (emsg.find("valid fluid") != std::string::npos) {
            if (emsg.find("Neither input") != std::string::npos) {
                if (emsg.find("REFPROP") != std::string::npos) {
                    // Fluid can be in either parameter location, find out which.
                    // It will be in brackets in the error message.
                    if (FluidString.find("REFPROP") != std::string::npos)
                        errPos = 1;  // [REFPROP::???] is in Fluid->str, i.e. position 1
                    else
                        errPos = 2;  // [REFPROP::???] is in PropName->str, i.e. position 2
                    return MAKELRESULT(BAD_FLUID, errPos);
                } else if (emsg.find("IF97") != std::string::npos) {
                    if (FluidString.find("IF97") != std::string::npos)
                        errPos = 1;  // [IF97::???] is in Fluid->str, i.e. position 1
                    else
                        errPos = 2;  // [IF97::???] is in PropName-str, i.e. position 2
                    return MAKELRESULT(BAD_IF97_FLUID, errPos);
                } else
                    return MAKELRESULT(BAD_FLUID, 1);
            } else  //  "Both inputs"
                return MAKELRESULT(BAD_PARAMETER, 2);
        } else if (emsg.find("Unable to use") != std::string::npos) {
            // PropName can be in either parameter location, find out which.
            // It will be in brackets in the error message.
            if (emsg.find(PropNameBrackets) != std::string::npos)
                errPos = 2;  // [PropName] is in error message, i.e. position 2
            else
                errPos = 1;  // [Fluid] variable is in error message, i.e. position 1
            // Now determine specific error type
            if (emsg.find("Output string is invalid") != std::string::npos)
                return MAKELRESULT(BAD_PARAMETER, errPos);
            else if (emsg.find("non-trivial") != std::string::npos)
                return MAKELRESULT(NON_TRIVIAL, errPos);
            else if (emsg.find("No outputs") != std::string::npos)
                return MAKELRESULT(NOT_AVAIL, errPos);
            else
                return MAKELRESULT(UNKNOWN, errPos);
        } else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // normal return
    return 0;
}

// this code executes the user function CP_PropsSI, which is a wrapper for
// the CoolProp.PropsSI() function, used to extract a fluid-specific parameter that is dependent on the state
LRESULT CP_PropsSI(LPCOMPLEXSCALAR Prop,         // pointer to the result
                   LPCMCSTRING OutputName,       // string with a valid CoolProp OutputName
                   LPCMCSTRING InputName1,       // CoolProp InputName1
                   LPCCOMPLEXSCALAR InputProp1,  // CoolProp InputProp1
                   LPCMCSTRING InputName2,       // CoolProp InputName2
                   LPCCOMPLEXSCALAR InputProp2,  // CoolProp InputProp2
                   LPCMCSTRING FluidName)        // CoolProp Fluid
{
    unsigned int errPos;
    std::string Prop1Name(InputName1->str);
    std::string Prop2Name(InputName2->str);
    std::string FluidString = FluidName->str;
    CoolProp::parameters key1;

    // check that the first scalar argument is real
    if (InputProp1->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 3);  // if not, display "Argument must be real" under scalar argument

    // check that the second scalar argument is real
    if (InputProp2->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 5);  // if not, display "Argument must be real" under scalar argument

    // pass the arguments to the CoolProp.Props() function
    Prop->real = CoolProp::PropsSI(OutputName->str, InputName1->str, InputProp1->real, InputName2->str, InputProp2->real, FluidName->str);

    // Note: PropsSI does not throw exceptions, but instead
    // sets global parameter "errstring" and returns _HUGE.
    // Use ValidNumber(val) to see if PropsSI failed with an error message...
    if (!ValidNumber(Prop->real)) {
        std::string emsg = CoolProp::get_global_param_string("errstring");
        CoolProp::set_error_string(emsg);  // reset error string so Mathcad can retrieve it
        if (emsg.find("Input pair variable is invalid") != std::string::npos) {
            if (!is_valid_parameter(Prop1Name, key1))
                errPos = 2;  // First input parameter string; position 2.
            else             // must be the second input parameter that's bad
                errPos = 4;  // Second input parameter string; position 4.
            return MAKELRESULT(BAD_PARAMETER, errPos);
        } else if (emsg.find("Input Name1") != std::string::npos) {
            return MAKELRESULT(BAD_PARAMETER, 2);  // first position input parameter
        } else if (emsg.find("Input Name2") != std::string::npos) {
            return MAKELRESULT(BAD_PARAMETER, 4);  // second position input parameter
        } else if (emsg.find("Phase can only be specified on one") != std::string::npos) {
            return MAKELRESULT(ONLY_ONE_PHASE_SPEC, 4);  // second position parameter
        } else if (emsg.find("valid phase") != std::string::npos) {
            if (!is_valid_parameter(Prop1Name, key1))
                errPos = 2;                         // First input parameter string; position 2.
            else                                    // must be the second input parameter that's bad
                errPos = 4;                         // Second input parameter string; position 4.
            return MAKELRESULT(BAD_PHASE, errPos);  // second position parameter
        } else if (emsg.find("This pair of inputs") != std::string::npos) {
            return MAKELRESULT(BAD_INPUT_PAIR, 2);  // second position parameter
        } else if (emsg.find("Input vapor quality") != std::string::npos) {
            if (Prop1Name == "Q")
                return MAKELRESULT(BAD_QUAL, 3);  // First value position
            else
                return MAKELRESULT(BAD_QUAL, 5);  // Second value position
        } else if (emsg.find("Output string is invalid") != std::string::npos) {
            return MAKELRESULT(BAD_PARAMETER, 1);  // first position parameter
        } else if (emsg.find("not valid in two phase region") != std::string::npos) {
            return MAKELRESULT(TWO_PHASE, 1);  // first position parameter
        } else if (emsg.find("only defined within the two-phase") != std::string::npos) {
            return MAKELRESULT(NON_TWO_PHASE, 1);  // first position parameter
        } else if (emsg.find("not implemented") != std::string::npos) {
            return MAKELRESULT(NOT_AVAIL, 1);  // first position parameter
        } else if (emsg.find("Initialize failed") != std::string::npos) {
            if (emsg.find("REFPROP") != std::string::npos) {
                if (emsg.find("cannot use") != std::string::npos)
                    return MAKELRESULT(NO_REFPROP, 6);
                else
                    return MAKELRESULT(BAD_FLUID, 6);
            } else if (emsg.find("IF97") != std::string::npos) {
                return MAKELRESULT(BAD_IF97_FLUID, 6);
            } else
                return MAKELRESULT(BAD_FLUID, 6);
        } else if (emsg.find("Temperature") != std::string::npos) {
            if (Prop1Name == "T")
                return MAKELRESULT(T_OUT_OF_RANGE, 3);  // First value position
            else
                return MAKELRESULT(T_OUT_OF_RANGE, 5);  // Second value position
        } else if (emsg.find("Saturation pressure") != std::string::npos) {
            if (Prop1Name == "P")
                return MAKELRESULT(TP_SATURATION, 3);  // First value position
            else
                return MAKELRESULT(TP_SATURATION, 5);  // Second value position
        } else if (emsg.find("Pressure") != std::string::npos) {
            if (Prop1Name == "P")
                return MAKELRESULT(P_OUT_OF_RANGE, 3);  // First value position
            else
                return MAKELRESULT(P_OUT_OF_RANGE, 5);  // Second value position
        } else if ((emsg.find("Enthalpy") != std::string::npos) || (emsg.find("solution because Hmolar") != std::string::npos)) {
            if ((Prop1Name == "H") || (Prop1Name == "Hmolar"))
                return MAKELRESULT(H_OUT_OF_RANGE, 3);  // First value position
            else
                return MAKELRESULT(H_OUT_OF_RANGE, 5);  // Second value position
        } else if ((emsg.find("Entropy") != std::string::npos) || (emsg.find("solution because Smolar") != std::string::npos)) {
            if ((Prop1Name == "S") || (Prop1Name == "Smolar"))
                return MAKELRESULT(S_OUT_OF_RANGE, 3);  // First value position
            else
                return MAKELRESULT(S_OUT_OF_RANGE, 5);  // Second value position
        } else
            return MAKELRESULT(UNKNOWN, 1);
    }
    // normal return
    return 0;
}

// this code executes the user function CP_HAPropsSI, which is a wrapper for
// the CoolProp.HAPropsSI() function, used to extract humid air properties in base-SI units
LRESULT CP_HAPropsSI(LPCOMPLEXSCALAR Prop,         // pointer to the result
                     LPCMCSTRING OutputName,       // string with a valid CoolProp Output Name
                     LPCMCSTRING InputName1,       // CoolProp InputName1
                     LPCCOMPLEXSCALAR InputProp1,  // CoolProp InputProp1
                     LPCMCSTRING InputName2,       // CoolProp InputName2
                     LPCCOMPLEXSCALAR InputProp2,  // CoolProp InputProp2
                     LPCMCSTRING InputName3,       // CoolProp InputName3
                     LPCCOMPLEXSCALAR InputProp3)  // CoolProp InputProp3
{
    unsigned int errPos;
    std::string OutName(OutputName->str);
    OutName = "[" + OutName + "]";
    std::string Prop1Name(InputName1->str);
    Prop1Name = "[" + Prop1Name + "]";
    std::string Prop2Name(InputName2->str);
    Prop2Name = "[" + Prop2Name + "]";
    std::string Prop3Name(InputName3->str);
    Prop3Name = "[" + Prop3Name + "]";

    // check that the first scalar argument is real
    if (InputProp1->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 3);  // if not, display "must be real" under scalar argument

    // check that the second scalar argument is real
    if (InputProp2->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 5);  // if not, display "must be real" under scalar argument

    // check that the third scalar argument is real
    if (InputProp3->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 7);  // if not, display "must be real" under scalar argument

    // pass the arguments to the HumidAirProp.HAProps() function
    Prop->real =
      HumidAir::HAPropsSI(OutputName->str, InputName1->str, InputProp1->real, InputName2->str, InputProp2->real, InputName3->str, InputProp3->real);

    // Note: HAPropsSI does not throw exceptions, but instead
    // sets global parameter "errstring" and returns _HUGE.
    // Use ValidNumber(val) to see if HAPropsSI failed with an error message...
    if (!ValidNumber(Prop->real)) {
        std::string emsg = CoolProp::get_global_param_string("errstring");
        CoolProp::set_error_string(emsg);  // reset error string so Mathcad can retrieve it

        errPos = 0;
        if (emsg.find(OutName) != std::string::npos)
            errPos = 1;
        else if (emsg.find(Prop1Name) != std::string::npos)
            errPos = 2;
        else if (emsg.find(Prop2Name) != std::string::npos)
            errPos = 4;
        else if (emsg.find(Prop3Name) != std::string::npos)
            errPos = 6;

        if (errPos != 0)
            return MAKELRESULT(BAD_PARAMETER, errPos);
        else if (emsg.find("at least one of the variables") != std::string::npos)
            return MAKELRESULT(HA_INPUTS, 2);
        else
            // Only the Generic Error message supported at this time for HAPropsSI for any other errors
            return MAKELRESULT(UNKNOWN, 1);
    }

    // normal return
    return 0;
}

// this code executes the user function CP_get_mixture_binary_pair_data, which is a wrapper for
// the CoolProp.get_mixture_binary_pair_data() function, used to get the requested binary pair
// interaction parameter (always returned as a string).
LRESULT CP_get_mixture_binary_pair_data(LPMCSTRING Value,  // output string (string contains value of parameter)
                                        LPCMCSTRING CAS1,  // FIrst component
                                        LPCMCSTRING CAS2,  // Second component
                                        LPCMCSTRING Key)   // name of the binary pair parameter (string) to retrieve
{
    std::string s;
    // Invoke the std::string form of get_global_param_string() function, save result to a new string s
    try {
        s = CoolProp::get_mixture_binary_pair_data(CAS1->str, CAS2->str, Key->str);
    } catch (const CoolProp::ValueError& e) {
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("parameter") != std::string::npos)
            return MAKELRESULT(BAD_PARAMETER, 3);
        else if (emsg.find("binary pair") != std::string::npos)
            return MAKELRESULT(BAD_BINARY_PAIR, 1);
        else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // Must use MathcadAllocate(size) so Mathcad can track and release
    char* c = MathcadAllocate(static_cast<int>(s.size()) + 1);  // create a c-string (pointer) c with the same size as s
    // copy s into c, this process avoids the const-cast type which would result from instead
    // converting the string using s.c_str()
    std::copy(s.begin(), s.end(), c);
    c[s.size()] = '\0';
    // assign the string to the function's output parameter
    Value->str = c;

    // normal return
    return 0;
}

// this code executes the user function CP_apply_simple_mixing_rule, which is a wrapper for
// the CoolProp.apply_simple_mixing_rule() function, used to set the mixing rule for a
// specific binary pair.
LRESULT CP_apply_simple_mixing_rule(LPMCSTRING Msg,    // output string (verification message)
                                    LPCMCSTRING CAS1,  // First component
                                    LPCMCSTRING CAS2,  // Second component
                                    LPCMCSTRING Rule)  // Mixing rule, either 'linear' or 'Lorentz-Berthelot'
{
    std::string s = Rule->str;
    s.append(" mixing rule set.");
    // Invoke the std::string form of get_global_param_string() function, save result to a new string s
    try {
        CoolProp::apply_simple_mixing_rule(CAS1->str, CAS2->str, Rule->str);
    } catch (const CoolProp::ValueError& e) {
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("simple mixing rule") != std::string::npos) {
            return MAKELRESULT(BAD_RULE, 3);
        } else if (emsg.find("already in") != std::string::npos) {
            return MAKELRESULT(PAIR_EXISTS, 1);
        } else if (emsg.find("key") != std::string::npos) {
            if (emsg.find(CAS1->str) != std::string::npos) {
                return MAKELRESULT(BAD_FLUID, 1);
            } else if (emsg.find(CAS2->str) != std::string::npos) {
                return MAKELRESULT(BAD_FLUID, 2);
            } else
                return MAKELRESULT(UNKNOWN, 1);
        } else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // Must use MathcadAllocate(size) so Mathcad can track and release
    char* c = MathcadAllocate(static_cast<int>(s.size()) + 1);  // create a c-string (pointer) c with the same size as s
    // copy s into c, this process avoids the const-cast type which would result from instead
    // converting the string using s.c_str()
    std::copy(s.begin(), s.end(), c);
    c[s.size()] = '\0';
    // assign the string to the function's output parameter
    Msg->str = c;

    // normal return
    return 0;
}

// this code executes the user function CP_set_mixture_binary_pair_data, which is a wrapper for
// the CoolProp.set_mixture_binary_pair_data() function, used to set the mixing rule for a
// specific binary pair.
LRESULT CP_set_mixture_binary_pair_data(LPMCSTRING Msg,          // output string (verification message)
                                        LPCMCSTRING CAS1,        // First component
                                        LPCMCSTRING CAS2,        // Second component
                                        LPCMCSTRING Param,       // Parameter Name String to set
                                        LPCCOMPLEXSCALAR Value)  // Parameter Value
{
    std::string s = Param->str;
    s.append(" parameter set.");

    // check that the first scalar argument is real
    if (Value->imag != 0.0) return MAKELRESULT(MUST_BE_REAL, 4);  // if not, display "must be real" under scalar argument

    // Invoke the std::string form of get_global_param_string() function, save result to a new string s
    try {
        CoolProp::set_mixture_binary_pair_data(CAS1->str, CAS2->str, Param->str, Value->real);
    } catch (const CoolProp::ValueError& e) {
        std::string emsg(e.what());
        CoolProp::set_error_string(emsg);
        if (emsg.find("parameter") != std::string::npos) {
            return MAKELRESULT(BAD_PARAMETER, 3);
        } else if (emsg.find("key") != std::string::npos) {
            if (emsg.find(CAS1->str) != std::string::npos)
                return MAKELRESULT(BAD_FLUID, 1);
            else
                return MAKELRESULT(BAD_FLUID, 2);
        } else
            return MAKELRESULT(UNKNOWN, 1);
    }

    // Must use MathcadAllocate(size) so Mathcad can track and release
    char* c = MathcadAllocate(static_cast<int>(s.size()) + 1);  // create a c-string (pointer) c with the same size as s
    // copy s into c, this process avoids the const-cast type which would result from instead
    // converting the string using s.c_str()
    std::copy(s.begin(), s.end(), c);
    c[s.size()] = '\0';
    // assign the string to the function's output parameter
    Msg->str = c;

    // normal return
    return 0;
}

// fill out a FUNCTIONINFO structure with the information needed for registering the function with Mathcad
FUNCTIONINFO PropsParam = {
  "get_global_param_string",                                 // Name by which MathCAD will recognize the function
  "Name of the parameter to retrieve",                       // Description of input parameters
  "Returns the value of the requested CoolProps parameter",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_get_global_param_string,                   // Pointer to the function code.
  MC_STRING,                                                 // Returns a MathCAD string
  1,                                                         // Number of arguments
  {MC_STRING}                                                // Argument types
};

// fill out a FUNCTIONINFO structure with the information needed for registering the function with Mathcad
FUNCTIONINFO FluidParam = {
  "get_fluid_param_string",                                  // Name by which MathCAD will recognize the function
  "Fluid, Name of the parameter to retrieve",                // Description of input parameters
  "Returns the value of the requested CoolProps parameter",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_get_fluid_param_string,                    // Pointer to the function code.
  MC_STRING,                                                 // Returns a MathCAD string
  2,                                                         // Number of arguments
  {MC_STRING, MC_STRING}                                     // Argument types
};

// fill out a FUNCTIONINFO structure with the information needed for registering the function with Mathcad
FUNCTIONINFO RefState = {
  "set_reference_state",                                           // Name by which MathCAD will recognize the function
  "Fluid, Reference State String",                                 // Description of input parameters
  "Sets the reference state to either IIR, ASHRAE, NBP, or DEF.",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_set_reference_state,                             // Pointer to the function code.
  COMPLEX_SCALAR,                                                  // Returns a MathCAD complex scalar
  2,                                                               // Number of arguments
  {MC_STRING, MC_STRING}                                           // Argument types
};

// fill out a FUNCTIONINFO structure with the information needed for registering the function with Mathcad
FUNCTIONINFO Props1SI = {
  "Props1SI",                                                                                // Name by which MathCAD will recognize the function
  "Fluid, Property Name",                                                                         // Description of input parameters
  "Returns a fluid-specific parameter, where the parameter is not dependent on the fluid state",  // Description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_Props1SI,                                                                       // Pointer to the function code.
  COMPLEX_SCALAR,                                                                                // Returns a MathCAD complex scalar
  2,                                                                                // Number of arguments
  {MC_STRING, MC_STRING}                                                                          // Argument types
};

// fill out a FUNCTIONINFO structure with the information needed for registering the function with Mathcad
FUNCTIONINFO PropsSI = {
  "PropsSI",                                                                                // Name by which MathCAD will recognize the function
  "Output Name, Input Name 1, Input Property 1, Input Name 2, Input Property 2, Fluid Name",  // Description of input parameters
  "Returns a fluid-specific parameter, where the parameter is dependent on the fluid state",  // Description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_PropsSI,                                                                    // Pointer to the function code.
  COMPLEX_SCALAR,                                                                             // Returns a MathCAD complex scalar
  6,                                                                                // Number of arguments
  {MC_STRING, MC_STRING, COMPLEX_SCALAR, MC_STRING, COMPLEX_SCALAR, MC_STRING}                // Argument types
};

FUNCTIONINFO HAPropsSI = {
  "HAPropsSI",  // Name by which MathCAD will recognize the function
  "Output Name, Input Name 1, Input Property 1, Input Name 2, Input Property 2, Input Name 3, Input Property 3",  // Description of input parameters
  "Returns a parameter of humid air, where the parameter is dependent on the fluid state",  // Description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_HAPropsSI,                                                                // Pointer to the function code.
  COMPLEX_SCALAR,                                                                           // Returns a MathCAD complex scalar
  7,                                                                                // Number of arguments
  {MC_STRING, MC_STRING, COMPLEX_SCALAR, MC_STRING, COMPLEX_SCALAR, MC_STRING, COMPLEX_SCALAR}  // Argument types
};

FUNCTIONINFO GetMixtureData = {
  "get_mixture_binary_pair_data",                            // Name by which MathCAD will recognize the function
  "CAS 1, CAS 2, Name of the parameter to retrieve",         // Description of input parameters
  "Returns the value of the requested CoolProps parameter",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_get_mixture_binary_pair_data,              // Pointer to the function code.
  MC_STRING,                                                 // Returns a MathCAD string
  3,                                                         // Number of arguments
  {MC_STRING, MC_STRING, MC_STRING}                          // Argument types
};

FUNCTIONINFO ApplyMixingRule = {
  "apply_simple_mixing_rule",                   // Name by which MathCAD will recognize the function
  "CAS 1, CAS 2, Mixing Rule",                  // Description of input parameters
  "Sets a simple mixing rule for binary pair",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_apply_simple_mixing_rule,     // Pointer to the function code.
  MC_STRING,                                    // Returns a MathCAD string
  3,                                            // Number of arguments
  {MC_STRING, MC_STRING, MC_STRING}             // Argument types
};

FUNCTIONINFO SetMixtureData = {
  "set_mixture_binary_pair_data",                             // Name by which MathCAD will recognize the function
  "CAS 1, CAS 2, Parameter Name, Parameter value",            // Description of input parameters
  "Sets the value of the specified binary mixing parameter",  // description of the function for the Insert Function dialog box
  (LPCFUNCTION)CP_set_mixture_binary_pair_data,               // Pointer to the function code.
  MC_STRING,                                                  // Returns a MathCAD string
  4,                                                          // Number of arguments
  {MC_STRING, MC_STRING, MC_STRING, COMPLEX_SCALAR}           // Argument types
};

// ************************************************************************************
// DLL entry point code.
// ************************************************************************************
// The _CRT_INIT function is needed if you are using Microsoft's 32 bit compiler
#ifdef _WIN32
extern "C" BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved);
#endif

extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) {
    switch (dwReason) {
        case DLL_PROCESS_ATTACH:
            //
            // DLL is attaching to the address space of
            // the current process.
            //
            if (!_CRT_INIT(hDLL, dwReason, lpReserved)) return FALSE;

            // register the error message table
            // Note, that if your function never returns
            // an error -- you do not need to
            // register an error message table
            if (!CreateUserErrorMessageTable(hDLL, NUMBER_OF_ERRORS, CPErrorMessageTable)) break;

            // and if the errors register OK
            // go ahead and
            // register user function
            CreateUserFunction(hDLL, &PropsParam);
            CreateUserFunction(hDLL, &FluidParam);
            CreateUserFunction(hDLL, &RefState);
            CreateUserFunction(hDLL, &Props1SI);
            CreateUserFunction(hDLL, &PropsSI);
            CreateUserFunction(hDLL, &HAPropsSI);
            CreateUserFunction(hDLL, &GetMixtureData);
            CreateUserFunction(hDLL, &SetMixtureData);
            CreateUserFunction(hDLL, &ApplyMixingRule);
            break;

        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:

            if (!_CRT_INIT(hDLL, dwReason, lpReserved)) {
                Sleep(1000);  // Attempt to keep CRT_INIT from detaching before all threads are closed
                return FALSE;
            }
            break;
    }
    return TRUE;
}

redpajama_set_name: RedPajamaGithub


text:
2018 Summer Movie Preview
Big names (Cruise, Bullock) and familiar franchises lead the seasonal fare
by Garrett Schaffel, AARP, April 27, 2018 | Comments: 0
PHOTO BY: Warner Bros. Entertainment Inc.
Life of the Party (May 11)
Melissa McCarthy (center) pulls a Rodney Dangerfield in this Back to School-esque comedy, written by McCarthy and husband Ben Falcone. When dumped by her husband, Deanna (McCarthy) heads back to college along with her daughter (Molly Gordon), who isn't so excited about the idea. Maya Rudolph plays Deanna's best friend, Christine.
PHOTO BY: Melinda Sue Gordon/Paramount Pictures
Book Club (May 18)
A-listers (from left) Diane Keaton, 72; Candice Bergen, 71; Jane Fonda, 80; and Mary Steenburgen, 65, star in this comedy as four bored members of a book club who re-examine their lives after reading the infamously risque novel Fifty Shades of Grey. Lending support as the men in their lives are Wallace Shawn, 74; Andy Garcia, 62; Don Johnson, 68; Richard Dreyfuss, 70; and Craig T. Nelson, 74.
PHOTO BY: Jonathan Olley /Lucasfilm Ltd.
Solo: A Star Wars Story (May 25)
The Star Wars franchise continues its push, with this year's entry a prequel looking back at the early life of the beloved Han Solo. Newcomer Alden Ehrenrich (above) plays the young Solo, with Atlanta's Donald Glover supporting as Lando Calrissian and Woody Harrelson, 56, as Han's mentor. Don't worry — there will be plenty of Chewbacca.
PHOTO BY: Courtesy Warner Bros. Entertainment Inc.,Courtesy Warner Bros. Entertainm
Ocean's 8 (June 8)
Sandra Bullock, 53, takes the mantle from George Clooney in this reboot. Bullock (far left) plays Debbie, the estranged sister of Clooney's Danny Ocean, who gathers a who's who of female talent — including (from left) Cate Blanchett, Sarah Paulson, Rihanna, Helena Bonham Carter, 51, Mindy Kaling, Awkwafina and Anne Hathaway (not pictured) — to pull off a heist at New York's Met Gala.
PHOTO BY: Palmstar
Hereditary (June 8)
The summer's biggest draw for horror lovers, Hereditary earned buzz at Sundance as the scariest film in years. Starring Toni Collette and Gabriel Byrne, 67, (above) as married parents of two occupying a house that seems to be under the influence of a supernatural force, the film got great ratings from critics out of the festival, and looks to be a surefire horror hit.
PHOTO BY: Disney/Pixar
The Incredibles 2 (June 15)
This Pixar sequel picks up right where the 2004 film left off, with the head of the family, Mr. Incredible (Craig T. Nelson, 74) running the household while his wife, Elastigirl (Holly Hunter, 60), takes up the responsibility of crime-fighting and campaigning for the official return of superheroes into society. Samuel L. Jackson, 69, returns as family friend Frozone.
PHOTO BY: Universal Pictures
Jurassic World: Fallen Kingdom (June 22)
Chris Pratt's Owen Grady (above) continues to lead the way in the rebooted Jurassic Park franchise, this time trying to save the terrifying dinosaurs from a volcanic eruption to bring them to a sanctuary in America headed by Benjamin Lockwood (James Cromwell, 78). Jeff Goldblum, 65, makes an appearance as Dr. Ian Malcolm, one of the most popular figures of the original films.
PHOTO BY: Lionsgate
Sicario: Day of the Soldado (June 29)
Josh Brolin (left), 50, and Benicio del Toro (right), 51, return in this high-octane sequel to the 2015 thriller, which sees the two men turn on each other after a mission to kidnap the daughter of a Mexican drug lord. Catherine Keener, 59; Matthew Modine, 59; and Jeffrey Donovan (center) also appear.
PHOTO BY: Jonathan Prime/Universal Studios
Mamma Mia! Here We Go Again (July 20)
The first film might have covered most of ABBA's most popular songs, but this sequel still promises more tunes from the Swedish hitmakers, as well as a well-regarded cast: Amanda Seyfried (center) is back, starring alongside Christine Baranski (right), 65; Pierce Brosnan, 64; Colin Firth, 57; Andy Garcia, 62; and Julie Walters (left), 68.
10 of
PHOTO BY: Paramount
Mission: Impossible - Fallout (July 27)
Tom Cruise, 55, (above) continues to do his own stunts in this sixth Mission: Impossible film, which sees his Ethan Hunt on the run from assassins and former allies in a race against time. Simon Pegg, Ving Rhames, 58, and Alec Baldwin, 60, reprise their roles from previous films in the series, with Man of Steel's Henry Cavill and Angela Bassett, 59, joining the cast.
PHOTO BY: Sanja Bucko/2017 WARNER BROS
Crazy Rich Asians (Aug. 17)
Based on Kevin Kwan's 2015 bestseller, Crazy Rich Asians stars Constance Wu (right) as Rachel, the longtime girlfriend of Nick, played by Henry Golding (center), who she finds out comes from an extremely wealthy family. Crouching Tiger, Hidden Dragon's Michelle Yeoh (left), 55, stars as Nick's mother, with Ken Jeong appearing as his father.
PHOTO BY: Shutterstock
With her Oscar-worthy performance in "Where Is Kyra?" Michelle Pfeiffer reflects on aging in Hollywood and the next moves in her great career.


Int J Environ Res Public Health. 2010 Apr;7(4):1508-19. doi: 10.3390/ijerph7041508. Epub 2010 Apr 1.
Miranda ML1, Edwards SE, Swamy GK, Paul CJ, Neelon B.
Blood lead among pregnant women, even at modest levels, may impair offspring cognitive development. We examine whether blood lead levels (BLLs) result from current versus historic exposures, among a cohort of pregnant women. Cumulative logit models were used to characterize the relationship between maternal risk factors and higher BLLs. Maternal blood lead levels more likely result from lead remobilization from historic versus contemporaneous exposures. Even if all lead sources were abated immediately, women and their fetuses would experience lead exposure for decades. This work emphasizes the importance of addressing sources of environmental lead exposure in the United States and internationally.
Blood lead levels by race.
Int J Environ Res Public Health. 2010 Apr;7(4):1508-1519.