ARSENAL will make a last-ditch attempt to sign Everton star Idrissa Gueye, it's sensationally been claimed.
The midfielder, 29, was understood to be a target for French giants Paris Saint-Germain and he has asked the club to let him leave.
But Team Talk claim Arsenal have now entered the race and they are said to be willing to pay Everton's valuation of £40million for the Frenchman.
The news will come as a shock to Arsenal fans, who have been told the club are struggling to raise funds to make permanent signings in the January transfer window.
That still appears to be the case as the report claims Arsenal will only offer to pay the fee in instalments and ask that they delay the first one until August.
Gueye submitted a written request to leave last week after PSG made a £21.5m offer for him.
That is said to fall well short of what Everton are demanding but Arsenal are reportedly willing to meet the Toffees' figure.
Toffees boss Marco Silva fuelled speculation when he left Gueye out of the matchday squad to face Huddersfield on Tuesday.
However, he insisted it was a precautionary measure as he is suffering with a minor injury.
"He had a minor problem with his groin," Silva said.
"We tried to be honest with all of you and with our fans.
"After the match I tried to find out if something new has happened because I expected your question and there's nothing new.


Essential for the registration and verification of sporicidal claims with the EPA as a countertop disinfectant and the FDA as a high-level disinfectant, the AOAC 966.04 Sporicidal Activity Test uses either Bacillus subtilis or Clostridium sporogenes as the model organism for endospore-forming bacteria. The test begins with the dessication of 105-106 colony-forming units of the specified species onto each individual carrier. The starting number of spores per carrier is enumerated to ensure a robust challenge for the disinfectant.
Following enumeration, the testing begins by transferring dried, inoculated carriers into the testing disinfectant. The carriers are exposed to the disinfectant for a specified contact time after which they are transferred to a recovery media supplemented with a neutralization compound appropriate to the disinfectant's active ingredient. The recovery broth allows any spores that were not killed in the disinfection process to retain viability prior to incubation. A 21 day period of incubation—anaerobic incubation in the case of C. sporogenes—gives the microbe the chance to grow to levels perceivable for qualitative assessment of growth.
Following incubation, tubes positive for growth are counted and their population is verified as being comprised of the original microbe by plating on trypic soy agar and/or gram staining and subsequent visualization.
The AOAC 966.04 Sporicidal Activity Test contrasts with the more R&D approach of an ASTM E2315 Suspension Time Kill using endospores, giving a more robust challenge for the rigor of regulatory claims. An ASTM E2315 gives the disinfectant a "best case" scenario of total emersion and total contact of spore to disinfectant; the Sporicidal Activity Test has the spores dried onto a surface.
With Microchem Laboratory, both tests can be personalized to the study sponsor's needs with variation on the microbial load present in the test as well as variation in contact times—perfect for zoning-in on an effective minimum specific to the disinfectant. Similarly, some high-level disinfectants require a mixing prior to use. This period has an inherent "dwell time" or the space between inital mixing and use. Microchem has experience varying this parameter in tests, including very minute dwell times designed to mimic the mixing of base and activator en route to the nebulizer of a spray bottle. Beyond that, many other parameters can be varied within the test, such as the contact temperature and the "soil load" or presence of organic matter intended to increase the rigor of the test.


text:
Scotland has a wealth of public sector data. This data can be used to unlock new possibilities to improve the wellbeing of people living in Scotland
Research Data Scotland are bringing together expertise, resource and capabilities from a range of existing data-led programmes across the public sector.
This approach ensures transparency about who is requesting data, which datasets and for what purpose and is an important component in maintaining public trust.
A researcher support service has therefore been developed through the creation of this website to provide guidance on access to data, information governance and the rich analytical environment.
The Scottish Government's commitment to deliver Research Data Scotland featured in the Programme for Government in September 2019 and recognised the social and economic benefits that the new service could bring. RDS is being developed as a non-for profit organisation. It will be a partnership that includes the Scottish Government, other public bodies such as PHS (eDRIS), NRS, and working in partnership with organisations like EPCC and Scottish Universities.
The high level thematic research areas include: world of work; poverty and fair work; resilient communities; realising our children potential; public health and social care.
Research Data Scotland
Bayes Centre, 47 Potterrow
Edinburgh EH8 9BT
Email: researchdata@gov.scot

redpajama_set_name: RedPajamaCommonCrawl


This is skilled automotive body and fender repairing and painting work.
An employee in this class is responsible for fabricating, repairing, rebuilding, and painting automotive bodies, fenders, equipment, and accessories. Under general supervision, the employee performs tasks of average difficulty requiring exercise of some initiative and independent judgment. Work is reviewed through inspection, observation, and results achieved.
Rebuilds, replaces and repairs automotive and truck bodies and accessories; replaces glass, removes dents, and straightens door panels, quarter panels, fenders, and hoods with hammers and fender irons; cuts away bent and damaged body parts; grinds, discsands, saws worn and rusted parts; lays out and fabricates parts; welds breaks and fractures and fills holes with body solder or repairs with plastic.
Mixes paint; brushes and spray paints a wide variety of automotive equipment and parts; sands rough and rusted spots; masks out areas to remain unpainted with masking tape; applies primers, fillers and paints; rubs and buffs painted area after drying and removes masking; applies undercoating; stripes and paints serial numbers and insignia on municipal equipment.
Operates and maintains shop and light mechanical equipment; operates lightweight automotive equipment.
Accurately records time and information on work performed in the Fleet Information System.
Working knowledge of: principles, methods, material, tools, and equipment used in automotive body and fender rebuilding and repairing, as well as in metal and fiberglass fabrication and repair; processes and equipment involved in preparing automotive and other equipment for painting; techniques and equipment used in spray and brush painting; occupational hazards and appropriate safety precautions.
Ability to: rebuild and repair automotive bodies; prepare bodies for painting and mix and apply paint; establish and maintain effective working relationships with others; follow oral and written instructions; perform duties requiring physical strength and endurance.
Skill in: use and care of the tools and equipment utilized in automotive body and fender rebuilding, repairing and painting work; mixing and matching paints and applying and finishing by brushing and/or spraying; operating light and medium automotive equipment.
Graduation from an accredited high school or vocational school and one (1) year of experience in automotive body and fender rebuilding, repairing, and painting; or an equivalent combination of training and experience.


worksheets kumon english download free.
best kindergarten maths worksheets free download math levels co image ideas on kumon english eng.
free printable winter worksheets from and all kids grammar worksheet kindergarten for math online kid maths fill in kind grade 2 download kumon english pdf.
math worksheets writing grade 1 workbooks download file for kumon english pdf.
worksheets driver abstract online reading docs d various maths by size tablet answer book f date shared mar sample and free freesheets of kumon english workshee.
kumon english worksheets download pdf.
math worksheets download free 2 kumon english.
worksheets free download collection of for kindergarten them and try to solve.
kindergarten reading worksheets 2 kumon english download pdf.
math exercise worksheet stock photo worksheets download division long kumon english free workshe.
math worksheets download free kumon english pdf.
worksheets download math best of 7 images on kumon english down.
free printable worksheets for preschoolers download them and try to solve 6 kumon english pdf.
worksheets for grade 2 download kumon english pdf.
new free printable worksheets com letters for kindergarten all download and letter h children kids writing sentences long divisi.
worksheets free download reading l kumon english pdf.
for kindergarten worksheets free download kumon english.
lucky leprechaun multiplication worksheet 3 worksheets printable kumon english download pdf.
math worksheets download free 3 kumon english.
worksheets doc free of best kumon english download.
download my book of numbers 1 workbooks full online 2 kumon english worksheets pdf.
free worksheets amazing maths math and on of kumon english download.
native language worksheets studied in various kumon english download pdf.
free worksheets prettier all reading printable of kumon english.
free printable worksheets for preschoolers download them and try to solve 2 kumon english.
worksheets for kindergarten download them and try to solve 2 kumon english free.
foreign language worksheets studied in various kumon english download free.
ideas of maths worksheets download also service 4 kumon english pdf.


Senior Lancs councillors criticise Cuadrilla's record on planning conditions – DRILL OR DROP?
Since Cuadrilla started work at its Preston New Road fracking site near Blackpool council planners have admitted they have received "a lot of complaints and allegations" about breaches of the traffic management plan and other conditions on work at the site.
Cllr Johnson, who voted for the Preston New Road application, was speaking at a meeting at which Cuadrilla sought relaxations of planning conditions at another Lancashire shale gas site.
It wanted a taller rig, longer working hours, higher noise limits and an extended duration for plugging, abandonment and restoration at Becconsall on the Ribble Estuary.
"You can hardly say that the applicant has made life easy for himself in this case. They have had nearly three years then they suddenly discover that the equipment they need isn't available.
The committee approved some of Cuadrilla's proposed changes for Becconsall (DrillOrDrop report) but members voiced their frustration at the requests.
Cllr Nikki Penney, pictured second left, questioned why the company now needed a 32m rig when it had previously agreed to one 22m high.
"You don't just disappear a rig. If there is no reason then I think this committee is being held in contempt, when they [Cuadrilla] start wriggling whenever we tell them what we want and what would be better for the future and they come back with something else.
"It is contemptuous quite frankly.
"I haven't been convinced for the need for change to the original conditions. There is a discipline with this process that has been gone through some years ago.
"I recall when they lost a drill down there at the drilling site and then they were here saying 'If we can't do this it won't be restored', and so on and so forth.
"It's not surprising to hear our elected councillors seem to have difficulty in believing Cuadrilla can effectively stick to agreed planning conditions, after having experienced so many breaches and failures in the past.
"As the unfolding debacle continues at Preston New Road and planning conditions are being flouted daily, it's more confirmation that this company is not fit to operate in our communities.
"You don't just disappear a rig"…..get back to school!
The original application was submitted utilising Cuadrilla's rig which has been decommissioned. To replace the rig a contractor's rig is required. Subsequently the rig height has increased from 22m to 32m.
Last year no work at all was carried out at the Becconsall site even though they told the residents and LCC they would have the site restored by October 2016.
In all that time they could not organise the hire of a 'typical work over rig' of 22m or less.
No wonder those who decide whether this industry can develop are doubting the companies ability to do what they say.
They missed a lot of deadline didn't. The site deadline extended twice. What were they doing all this time? Sitting on their hands. No wonder the local has a bad image about Cuadrilla. Poor management again.
Hey TW – you are starting to see why we don't trust these people!
They certainly are not competent in time management skills that is for sure.
Cowboys – through and through.
No you're right Peeny – I doubt Cuadrilla actually owned a rig for them to "disappear" – or would they have maybe kept one in the filing cabinet in Lichfield just in case? What do you think?
If you had worked in the industry you would understand that the costs associated with hot stacking (working and ready to go), cold stacking (mothballed) and recommissioning and mobilising a stacked rig are high. Usually millions of dollars are required to recommission a cold stacked rig. So why would a company keep a rig ready to go for an undefined period in case it got planning permission and might go back to work if there is an alternative rig available at market rates for the required short period? The 10m difference in height is a red herring, another last ditch attempt by the antis to try and stop something they don't want. Although why they don't want the well P & A'd and the site restored is beyond me? I thought the whole anti thing was about keeping things as they are? Why object to site restoration? After all the well in it's current state will be leaking millions of tons of methane and volatiles into the atmosphere and accelerating global climate change. Why would you not want to end this? You really are an odd bunch… A 440k electricity pylon is 50m high and is there forever, well almost. Do you object to these as well?
Nobody is objecting to site restoration! The point is that Cuadrilla had 3 years to sort this out after their application went in so now they can't provide the rig they said would NOT EXCEED 22m, they say it's not available! Why do you defend that? Oh sorry, you would defend them whatever they did or, in this case, didn't do? Now that is odd!
Indeed Maureen – he doesn't seem to understand why people are concerned by Cuadrilla's inability to abide by the regulations and conditions that they have agreed to. It's not like it's the first time is it?
Perhaps you don't understand the business? Make them use a 22m rig and forget about site restoration.
So are you saying that the rid they agreed to use in the original application could never have been used for site restoration Paul. I mean I don't know, but if so you seem to be suggesting that Cuadrilla have been very manipulative here.
I am saying that the 22m rig probably doesn't exist anymore, or at least is not serviceable. So they should be made to use a rig that is ready to work as soon as possible and that you should not keep harping on about the height – which is significantly less than a pylon.
if your damned if you do and are damned if you don't, then Don't ??
As a councillor I expect those who receive planning permission with conditions to keep to those conditions or lose the permission to proceed AND reinstate the site.
Then why have Cuadrilla been allowed to get away with planning breeches at Preston New Road? Why do they no longer need to have a wheel wash for lorries leaving when that was part of the planning application?


text:
Detailed contents, authors & artists included
I. Welcome
Preface: Context, Organization, and Non-traditional publishing
Introduction: Fifty Years of Women's Studies
II. Section one: The History of Gender, Women, and Sexuality Studies
1. The History of San Diego State University's Women's Studies Program
Photos from SDSU library exhibit
2. The Praxis of Africana Women's Studies: Lessons from Clark Atlanta University
3. The Enduring Struggle: Findings from the History of Women's and Gender Studies in the Global South
Untitled (student art)
4. Women's-Gender-Sexuality-Feminist Studies: The Politics of Departmental Naming
5. An Annotated Bibliography on the History of Gender, Women, and Sexuality Studies in the Americas
Students answer: Why Gender, Women, and Sexuality Studies?
6. Why GWSS Still Matters
III. Section two: The Praxis of Gender, Women, and Sexuality Studies
7. Bridging the Academy and the Community, One Breath at a Time: The Healing Power of Africana Women's Studies
8. WGS Changes Lives: A Meditation on Feminist Praxis
9. Teaching Women's & Gender Studies: Teaching Tools for Life
10. From Theory to Content: Feminist Publishing Makes Women's Studies Powerful
Stifle (student art)
11. The Struggle Continues: Women of Color Faculty and Institutional Barriers
En La Lucha (student art)
12. Turning a Feminist Lens on Administration
13. Women, Gender and Sexuality Studies: A Degree and Perspective for 'Essential Workers' in the 21st Century
IV. Section three: Doing Gender, Women, and Sexuality Studies
14. Writing Social Justice: Thoughts from a WGSS Major
Not Your Beauty (student art)
15. Gender Studies Work at the University of Ghana
16. Parar para Avanzar: Feminist Activism in 2019 Latin American Mobilizations
Marginalized Cage (student art)
17. Disrupting Systems of Oppression by Re-centering Indigenous Feminisms
18. No One is Disposable: Ecofeminism and Climate Crisis
19. Women's & Gender Studies at Community Colleges: Breakthroughs and Challenges
Hometown (student poetry)
20. The Power of Words: A Discussion of Chanel Miller's Know My Name
Sins of the Skinny Body (student art)
V. Section four: Wrapping Things Up
Conclusion: Damn Straight We Persisted
Artist statement: Interior Intimacies Series
A Lesbian Marriage (student art)
Kitchen Top (student art)
The authors, in pictures
Persistence is Resistance: Celebrating 50 Years of Gender, Women & Sexuality Studies
"As a non-binary queer person, I find it imperative to study oppression through a feminist lens. Being a GSWS major and studying the experiences and perspectives of women, POC, and queer individuals allows me to recognize the ways in which oppressive systems affect these groups. By doing so we are able to explore ways to dismantle these systems."
Michael Castro, they/them/theirs
Santiago Canyon College, class of 2020
Gender, Sexuality, & Women's Studies major
"Gender, Women, and Sexualities Studies gave me the power to take control of my narrative in life and undo years of systemic gaslighting."
Lauren Raimunde, pronouns undisclosed
Smith College, class of 2020
Study of Women and Gender major
Previous: Women, Gender and Sexuality Studies: A Degree and Perspective for 'Essential Workers' in the 21st Century
Next: Section three: Doing Gender, Women, and Sexuality Studies
Persistence is Resistance: Celebrating 50 Years of Gender, Women & Sexuality Studies by Julie Shayne is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License, except where otherwise noted.


text:
Explore: Construction, architecture and property
Estate Surveyor
Polly B
00:00:03 My name is Polly B, I'm an estate surveyor for Tarmac and I'm based in Essex in a town called Colchester where we have one of our quarries and is our regional office. An estate surveyor touches on a lot of subjects. It's primarily managing a property portfolio for Tarmac which involves looking after land that we own or land that we have as a lease.
00:00:30 We have geologists that help inform decisions we made, we have engineers that help inform decisions we make, we work with all sort of different people throughout Tarmac and they all help provide information that we need to put planning applications together to get permissions for new quarries or new asphalt or concrete plants.
00:00:53 When I was at school I was very interested in the countryside, I grew up on a farm, wasn't interested in intellectual work whatsoever. Really keen on sports and was never the top of the class. When I first thought about my career I wanted to be a vet which was obviously related to living on a farm and growing up with animals and such. And when I had to choose my career path at 16 I didn't really want to commit to such intellectual subjects such as chemistry and physics and biology.
00:01:31 So, I decided to go for the sort of more every day geography, geology, English. I also did performing arts to give me a bit of diversity in there. And then I had a year out because I just didn't know where I wanted to go, if I wanted to go to university or if I wanted to go straight into work and with the A Levels I'd got, no particular career path it chose for me and in my year out I travelled to Kenya and lived on a farm out there, on a dairy farm and came back knowing kind of where I wanted to go and what path I wanted to take.
00:02:08 So, I embarked on a university course at Newcastle and I did countryside management and I think that's when I was first introduced to chartered surveying and becoming involved in managing land and I started my first job as a land agent going down a rural route rather than a minerals route.
00:02:33 Going to Kenya was certainly a turning point. It made me realise how people have different values in life. Out there the values are much more basic, survival, food and shelter and just getting through every day. So, it was real chance to make me sort of grow up in a way and appreciate things in life and an 18 year old coming from London had obviously bigger issues going on that actually were irrelevant when you're out there.
00:03:06 You had to just muck in and enjoy from day to day and I maybe did things there that I would never have done six months before going and it just gave me a better perspective on life and made me sort of channel more where I wanted to go with my life.
00:03:23 I felt really proud when I finally got my RICS qualification. It had been a long process, lots of years, lots of hard work and when I finally got those exam results in the post that was probably one of the best days. My husband held a surprise party that I had no idea to and being me walked in and burst into tears when everybody started shouting.
00:03:52 In five to 10 years time I hope I would've progressed up the career ladder a bit, maybe be an estate's manager. Who knows.
Polly B is a Surveyor for Tarmac, looking after land they own or lease. She was always interested in the countryside but didn't decide what to do for a career until she took a gap year in Kenya, living on a farm there. "Going to Kenya was certainly a turning point. It made me realise how people have different values in life."
More information about Chartered surveyors
? Chartered surveyors conduct surveys related to the measurement, management, valuation and development of land, natural resources, buildings, other types of property, and infrastructure such as harbours, roads and railway lines.
Entrants usually possess an accredited degree, equivalent qualification and/or postgraduate qualification. Entrants must also have successfully completed a probationary training period and professional assessment. Entry requirements to professional bodies vary.
Surveys, measures and describes land surfaces to establish property boundaries and to aid with construction or cartographic work;
Surveys mines, prepares drawings of surfaces, hazards and other features to control the extent and direction of mining;
Surveys buildings to determine necessary alterations and repairs;
Measures shore lines, elevations and underwater contours, establishes high and low water marks, plots shore features and defines navigable channels.
Public admin. & defence 1699
Other professional 1376
Land Agent
Forestry Commission Scotland
Chartered Surveyor
Dakota Hotels
Commercial Property Lawyer
Farrer & Co
Building Services Technician
Events, Maintenance & Grounds
Wood Green Animal Shelter
Job Listings for Chartered surveyors:
Quantity Surveying Degree Apprenticeship
Kier Group, Leeds
Estimators-All levels- Bristol
Turner & Townsend, Bristol
Kier Group, London
Self employed Estimator / Quantity Surveyor
Glendale Interiors, Remote
Kier Group, Sheffield
Commercial Graduate (Summer 2023)
TechnipFMC, Aberdeen
Kier Group, Manchester
Apprentice Quantity Surveyor
Tilbury Douglas, Castleford
Degree Apprentice Quantity Surveyor (Chartered)
Tarmac, Waltham Forest
Kier Group, Nottingham


Transamerican Auto Parts will present its "Life Is Better Off-Road" SEMA Builder Award to the best presented, most off-road-capable truck, Jeep or SUV on display at the 2015 SEMA Show.
Transamerican Auto Parts (TAP) will introduce the "Life Is Better Off-Road" SEMA Builder Award at the 2015 SEMA Show in Las Vegas. The award is an annual industry prize bestowed by Transamerican Auto Parts to the best-presented, truly off-road-capable truck, Jeep or SUV on display at the Show.
This award is open to all off-road vehicle constructors and product manufacturers on display at the 2015 SEMA Show, and will be judged by an elite panel of industry experts. As the off-road performance category continues to grow in popularity, the Transamerican Auto Parts "Life is Better Off-Road" award will recognize the unique technological achievements and engineering advancements specific to the development of aftermarket products for off-road trucks, Jeeps and SUVs.
The panel of judges, representing a cross-section of the off-road industry, will include fabricators, journalists, industry personalities and professional off-road racers. They will select 10 semi-finalists from among the submitted entries based on such criteria as off-road reliability and capability, real-world functionality, quality of craftsmanship and overall vehicle presentation. From those contenders, one Jeep and one truck/SUV will be chosen as the two finalists to vie for the designation of being named the most authentic off-road-capable vehicle at the Show.
Transamerican Auto Parts President and CEO Greg Adler will present the award—a custom-designed trophy—on Thursday, November 5, at 2:00 p.m., at the ProComp/Transamerican Auto Parts booth (#62112) within the SEMA SCORE Baja 1000 Experience Area (located outside of the South Hall in the Silver Lot).
In addition to the award itself, the winner will receive a cover feature and multi-page vehicle spotlight in Off Road Adventures magazine; a professional photo shoot; recognition across the spectrum of Transamerican social media and digital channels; a promotional email campaign highlighting the award and winners; an invitation to be displayed in feature locations at TAP-sponsored events, tradeshows, and truck and Jeep fests; and extensive partner media coverage of the award. The 10 semi-finalists will also be included in the full media campaign and receive ribbons in recognition of the accomplishment.
To submit your off-road SEMA display vehicle for award consideration, visit the Transamerican Auto Parts website, where you may complete your entry online or download the PDF application. Email the completed application to lifeisbetteroffroadaward@transamericanautoparts.com.


text:
Weight Gain Increases Breast Cancer Risk: Study
Higher estrogen levels believed to contribute to disease
Amanda Gardner
MONDAY, Oct. 22, 2007 (HealthDay News) -- Women who gain weight any time after the age of 18 are more likely to develop breast cancer than women who maintain a stable weight, a new study suggests.
In other words, when it comes to breast cancer, there's no good time to gain weight as an adult.
"We found that weight gain throughout adulthood as well as weight gain at specific stages of life were associated with risk of breast cancer, compared with maintaining a stable weight," said study lead author Jiyoung Ahn, a fellow with the nutritional epidemiology branch at the National Cancer Institute's division of cancer epidemiology and genetics. "Specific stages include during early reproductive years, late reproductive years, and perimenopausal and postmenopausal years."
Ahn's findings included women who did not take menopausal hormone therapy, which has been linked to a heightened risk of breast cancer.
"This is just one more very important piece of evidence demonstrating the importance of weight gain to the development of breast cancer," said Dr. Jay Brooks, chairman of hematology/oncology at Ochsner Health System in Baton Rouge, La.
The findings are published in the Oct. 22 issue of Archives of Internal Medicine.
Obesity has been shown to be a risk factor for breast cancer during the postmenopausal years. This is probably because estrogens, which fuel breast cancer growth, accumulate in fat tissue. It's been unclear, however, if the timing of weight gain might influence risk.
For the new study, the researchers analyzed data on almost 100,000 postmenopausal women who were participating in the National Institutes of Health-AARP Diet and Health Study.
At the beginning of the study, in 1996, the women reported their weight and body measurements at ages 18, 35 and 50. They were then classified, based on their body mass index, as underweight, normal weight, overweight or obese.
Among women who did not take menopausal hormone therapy, gaining weight in the early reproductive years (ages 18 to 35), the late reproductive years (ages 35 to 50), perimenopausal and postmenopausal years (age 50 to the present) and throughout adulthood (age 18 to the present) was associated with a heightened risk of developing breast cancer compared with women who maintained a stable weight.
Women who were at or below a normal weight at age 18 but were overweight or obese at ages 35 and 50 had 1.4 times the risk of developing breast cancer, compared with women who had maintained a normal weight. Women who subsequently lost weight had the same cancer risk as those who maintained a stable weight.
But isn't gaining weight a normal part of aging?
Experts increasingly are saying no.
"The issue was outside of the scope of this study, [but] limited data suggest that weight gain is not inevitable with age," Ahn said.
Brooks added: "In our society, most people gain weight [as they age] but that may not be what we should be doing. It's something you should be avoiding as you age. It's not something you should assume just because it's the societal norm."
Visit the National Cancer Institute for more on breast cancer.
SOURCES: Jiyoung Ahn, Ph.D., fellow, nutritional epidemiology branch, division of cancer epidemiology and genetics, National Cancer Institute, Bethesda, Md.; Jay Brooks, chairman of hematology/oncology, Ochsner Health System, Baton Rouge, La.; Oct. 22, 2007, Archives of Internal Medicine
Consumer News Products Language Dieting To Lose Weight News types Weight: Misc. Topics Obesity Women's Problems: Misc. English News


text:
» Magic Shop
O Jaysankey
Last Updated on Tue, 03 May 2016 | Magic Shop
Any number of adjectives could be used to describe my old friend Jay Sankey - intelligent, creative, funny, unpredictable -but even I would have to stretch to get to "children's entertainer." Nothing in his past, his performances, or his surgical use of profanity would suggest a predisposition for kidshows. And yet, despite this, he is now the creator, producer and host of a brand new Canadian television series called Spellz that's dedicated to teaching kids about the art of magic. Naturally, this opens the door to a variety of questions, like "is this one of the Seven Signs of Armageddon?" While Biblical scholars research the latter, let's explore the former via this interview conducted six weeks after Spellz hit the airwaves.
DAVID ACER: First of all, I have to start by asking you if you realise there's a spelling mistake in the title of your new educational kidshow.
JAY SANKEY: [nods] I think, as more viewers watch the show, they'll get comfortable with both 'L's.
DA: Is this the first TV you've ever done? JS: [laughs] There's a leading question. No, it is not.
DA: What else have you done? JS: [pauses to think]
DA: I remember there was that episode of Matlock.
JS: [laughs] Well, when I used to do stand-up comedy I taped a few different one-man shows up here in Canada. DA: "Up" relative to the U.S. JS: Up relative to the Earth's core. I also had a bizarre weekly character on a national talk show called Friday Night with Ralph Benmurghi. I played this weird guy up in a corner of the studio who was called... I forget what he was called. I was a character who was apparently in control of all the sound and lights in the studio. Sort of like Radar O'Reilly, but a cyber-guy. DA: How long did that last? JS: Too long. DA: And that would be. JS: I think about three, four months. DA: But you didn't do magic in that. JS: No. No magic in any of that stuff. DA: What about magic on television? JS: The usual collection of, probably, twenty or twenty five spots over the years. Everything from breakfast television to telethons to talkshows as a magician, then later I did many of those same shows as a comic. These are four or five minute walk-on spots where you're doing a little magic or a little comedy. DA: So when every magician with the means is approaching broadcasters to get a David-Blaine style show on the air, you decided to pitch a kid's show.
JS: That's after pitching a David Blaine style show. And a magic documentary show, and a let's-get-to-the-basis-of-wonder documentary/psychology/sociology show, trying to look at what is people's experience of wonder. When they find a goose in the newspaper box they open that morning and they know there's no way that goose should be there, what do they do with that? So I pitched all these shows. And even the kids show - I mention it to magicians and they go, "Oh yeah, that must have been an easy sell." Nope. That wasn't an easy sell either. DA: So how did it finally sell? JS: My dear friend and creative partner in this show, David Peck, he's always saying, "well you know it comes down to relationships", and of course there's more truth to that than not in my opinion. And the proof of that would be that he approached a few different production companies and when he approached GAPC he got a good vibe off them, then he worked very diligently over many months developing a relationship. DA: Did he approach them initially about this series in particular, or about doing a series in general, then, through his relationship, came to shape a series they would be interested in? In other words did the relationship evolve from the series or did the series evolve from the relationship?
JS: The series evolved from the relationship, because the first thing we used as a calling card was my Amazing Magic Anybody Can Do [a DVD on beginner's magic that Jay put out for the public]. They were impressed with me on camera and thought I would be good with kids. DA: So they wanted to develop something for kids about magic.
JS: Right. And the rest of it was really about brainstorming. That's where we got the mix, which in retrospect seems so obvious -historical segments, teaching segments, wacky magic segments. Different kinds of things. So it was very much a collaborative effort creatively, and it began with David watering the relationship. DA: How many episodes did you shoot? JS: In the first season we shot 13 half-hours, which, after previewing, they decided to whittle down to one thirty-second spot. [both laugh]
JS: No, they decided to cut them up into 26 11-minute shows.
DA: That's an odd format. Do they have other 11-minute shows, or do they pair you up with a really long shampoo commercial? JS: GAPC and the broadcaster - TVO - have other segment shows. Short segment, fast-paced, for kids. That's a style they've developed. DA: Who's Bridget?
JS: Bridget is my 16-year-old co host, and
Pictures from left to right:
1. Early promo shot.
2. Performing at an outdoor corporate gig for the Labatt's Brewing company, 1989.
4. Working the streets in Toronto, 1980.
5. Lecturing at the U.S. magician's convention 'Close Encounter of the Magic Kind', 1983.
she's very much a co-host, because maybe 80 percent of the show takes place with Bridget and me on set. The remaining 20 percent is either me or Bridget alone. DA: What's the show's demographic? JS: Fetus to sophomore. DA: Are there a lot of fetuses watching? JS: There's a new kind of cable hook-up. DA: Why have a co-host? JS: We all seemed to agree that a young, female co-host would help attract female viewers, but also bridge the gap - excuse the pun, because her name is Bridget - in age. DA: So instead of teaching the viewer the tricks, you teach Bridget and the viewer learns with her.
JS: Repetition is a big part of helping kids learn and make an emotional investment. There are three or four different kinds of segments in every show. It's not like we spend the whole show teaching tricks. I show Bridget a trick. Bridget is impressed by the trick. The second part is I teach Bridget how the trick is performed. i.e., where you hold your hands, when you look someone in the eye, what you say and why you say it. Then we cut to black-and-white footage, like old-time movie footage, kind of grainy and scratchy, of the Amazing Bridget, and she now performs the trick for the camera. DA: What if it's a colour-change? JS: [stares stone-faced] DA: Okay, what kind of tricks do you teach? JS: Standard beginner tricks we all learned from Uncle Moses - two straws that melt through each other, bending a spoon against a table, rubbing a coin on your elbow and it vanishes, the wobbly pencil. Tricks that are visual, simple. Also, what's clever and is going to appeal to the imagination of a nine-year-old.
DA: The wobbly pencil is a whole trick?
JS: Totally. The segments are fast. When I perform a trick, it can be as short as 20 seconds but no longer than 45 or 50 seconds. They're single, quick effects, and only one per episode.
DA: What's the difference between teaching a trick and exposing a trick? JS: Oh, everything. The difference between educating and revealing is in the spirit in which you do it, and it's also in what the viewer takes away. If the viewer takes away knowledge of the methodology of a trick, but no increase of respect, no increase of comprehension, no sense of how to perform the trick, it can only hurt magic. DA: How do you stay true to that? JS: We have historical segments where we talk about the history of magic and I, my god, was asked to act - I'm Dai Vernon, I'm Houdini, I'm Malini. And there are also 30-second segments where it's just me talking about things like patter, timing, practicing -real psychology aspects of performing magic for people. It's very comprehensive and extremely respectful of magic. DA: Did the producers ever do, or shoot, or ask for anything you vetoed? JS: One of their cool ideas was to ask a whole lot of kids in the Ottawa area to come in and show us some tricks, and they taped them. So they've got these total amateur, sweety-pie, awkward, funny, overly serious kids doing these tricks at the end of every 11-minute episode. Now if they flub them we don't use it, but on one of them a kid used a thumbtip, but for two seconds, you could see it, and it took us a long time to get the production company and the network to understand that that could not be kept in at any price, that I would literally leave the show. That's an example of exposing without education.
When they find a goose in the newspaper box they open that morning and they know there's no way that goose should be there, what do they do with that?
DA: My experience with young kids and magic is, once they learn a trick - any trick - they tend to think they know all tricks. Given that, do you think you might be making the job of kidshow magicians in Ontario harder? JS: They asked me to do a promotional thing for the show at a book festival here in
Advanced Hypnosis For Newbies
For anyone concerned that this is a report designed to teach readers how to convince crowds of people to act like chickens or dance to an unheard song just with a carefully placed keyword - relax. While hypnosis is often paraded in that form with large crowds visiting celebrity hypnosis experts to see what wonders they can perform, the majority of hypnosis used is to aid people seeking a solution to a problem they cannot resolve easily with any other method.
Online Hypnosis Training Course
Mind Control Techniques Training
How to Attract Taurus Man
Get Ultimate Magick Power
Automatic Sexual Chemistry
Learn how to be ventriloquist
Blackjack Betting Systems
Free Personalized Archetype Reading


Built by Landon Homes! Ready November 30th!2 story, 5 bed, 4 bath, 2 car garage home. Formal dining, breakfast nook, study, master suite, and guest room down. Upstairs has a bedrooms and 2 baths, a spacious gameroom overlooking family room, and secluded media room.
Built by Landon Homes! Ready April! This 2 story home has lots of space for your family! With 5 bedrooms, 4.5 bathrooms, study, formal dining, media room, gameroom, and a computer nook area. Kitchen and master bathroom have updated granite countertops and tile flooring. Hardwood floors throughout main rooms on first floor. And so much more!


A family business established in 1964, Kettal prides itself on European-made quality with all of its products manufactured in the firm's plant in a small coastal town near Barcelona. The in-house manufacturing allows a close attention to detail as well as the ability to customize to meet clients' needs, making each piece of furniture unique. Kettal works with the most important names in the international design scene including Patricia Urquiola, Jasper Morrison, Doshi Levien and Hella Jongerlius. All Kettal furniture is made to order in Spain with a lead time of 12-14 weeks.


[Hurrying] orcs were digging... lines of deep trenches in a huge ring, just out of bowshot from the walls; and as the trenches were made each was filled with fire, though how it was kindled or fed, by art or devilry, none could see. All day the labour went forward, while the men of Minas Tirith looked on, unable to hinder it. And as each length of trench was completed, they could see great wains approaching; and soon yet more companies of the enemy were swiftly setting up, each behind the cover of a trench, great engines for the casting of missiles. There were none upon the City walls large enough to reach so far or to stay the work.
But the engines did not waste shot upon the indomitable wall.... As soon as the great catapults were set... they began to throw missiles marvellously high, so that they passed right above the battlement and fell thudding within the first circle of the City; and many of them by some secret art burst into flame as they came toppling down.
In vain men shook their fists at the pitiless foes that swarmed before the Gate. Curses they heeded not, nor understood the tongues of western men; crying with harsh voices like beasts and carrion-birds. But soon there were few left in Minas Tirith who had the heart to stand up and defy the hosts of Mordor.


Africa meets the Caribbean with this Chilli Venom made of organic habanero chillies and fresh herbs. It will charm you with flavour before striking you suddenly with a deadly bite. Add on anything that needs a serious dose of heat and flavour.


text:
Martinez set to decide future
David Whelan says Roberto Martinez, pictured, will decide his future on Thursday
May 22 2013 15:28 PM
Wigan manager Roberto Martinez is to decide his future in the next 24 hours, according to chairman Dave Whelan.
https://www.independent.ie/sport/soccer/martinez-set-to-decide-future-29288664.html
https://www.independent.ie/sport/soccer/c206b/29288662.ece/AUTOCROP/h342/PANews_N0312931369231175348A_I1.jpg
The Spaniard has been linked with a number of clubs in recent weeks and the Latics' relegation from the Premier League - despite also winning the FA Cup - has led to increased speculation about his future.
Whelan said Thursday was 'D-day' for Martinez, but he remained hopeful that not only would the 39-year-old stay, but also agree a contract extension. "We have had a constructive meeting today and Roberto wants 24 hours to speak to his wife and decide what he wants to do," he said.
"He needs a bit of time, which I think is fair, and tomorrow we will know - it is decision day."
Martinez, who has 12 months left on his existing contract, has been one of the front-runners for the vacant Everton job following David Moyes' move to Manchester United.
However, Tony Pulis' departure from Stoke on Tuesday would give him another Premier League option while confirmation Manuel Pellegrini and his coaching staff are leaving Malaga could raise the possibility of him returning to his homeland.
But there is also a chance Martinez, who has previously turned down Aston Villa and was on Liverpool's short-list to succeed Kenny Dalglish last summer, will remain at the DW Stadium and try to get the club back into the Premier League at the first attempt.
"I told him exactly as I saw it: his future for the next two years lies with Wigan Athletic," added Whelan. "If he wants to opt out of his contract and go then there is a bit of compensation to be paid but I hope that won't be the case.
"I hope he will extend his contract. As I see it there are two (Premier League) clubs available and does each club want him?
"We are talking about Roberto for the whole of Europe. I am not sure which club or the other has approached him but I am sure the club which will approach him will be bigger than Wigan. I hope he stays but tomorrow I will be able to tell you."
Breaking FAI reach agreement to enable Limerick FC to apply for Division One licence after...
Harry Clarke The FAI have reached agreement with Limerick FC to enable the Munster side to apply for a licence to compete in the 2020 SSE Airtricity League.
Ashley Young completes move from Manchester United to Inter Milan in £1.5m deal
Independent.ie Newsdesk Ashley Young has completed his move from Manchester United to Inter Milan.
Premier League referees advised to use VAR pitchside monitors - but only for red...
Jamie Gardner Referees have been advised to use pitchside monitors to make a final ruling on red card decisions, Independent.ie understands.
Richard Dunne: 'Liverpool will set the record straight but Manchester United can hurt... Premier League
Ole Gunnar Solskjaer hits back at Klopp criticism as Marcus Rashford set to miss... Premier League
Aidan Fitzmaurice: 'Return of football's 'old guard' sparks much debate in a... International Soccer
O'Driscoll's next step in remarkable journey Arsenal
Dublin Port's trade with Europe spikes as Brexit takes toll on UK Brexit
FAI reach agreement to enable Limerick FC to apply for Division One licence after...
The FAI have reached agreement with...
Ashley Young has completed his move from Manchester United to Inter Milan.
Brent Pope: 'You can expect that Rhys Ruddock will have a point to prove this...
It's hard to think that Leo Cullen will rotate too...
Referees have been advised to use pitchside...
RTÉ not to renew contract of long-standing GAA commentator Brian Carthy
RTÉ has not renewed the contract of its long serving GAA...
Limerick FC's High Court action against FAI adjourned till Monday as weekend...
Discussions aimed at resolving Limerick FC's...
Boost for Dessie Farrell as Con O'Callaghan shoulder injury not as severe as first feared
CON O'CALLAGHAN is set to miss the first three...
Padriac Mannion confirmed as Galway captain for 2020 league and All-Ireland tilt
PADRAIC MANNION will skipper the Galway hurlers as they...
John Mann has vowed that Chelsea's pioneering...
Vincent Hogan: Meet Michael Edwards, Liverpool's man with the moneyball midas touch
In February 2015, just after Dele Alli signed for...


text:
package credentials // import "google.golang.org/genproto/googleapis/iam/credentials/v1"

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import _ "google.golang.org/genproto/googleapis/api/annotations"

import (
	context "golang.org/x/net/context"
	grpc "google.golang.org/grpc"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4

// IAMCredentialsClient is the client API for IAMCredentials service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type IAMCredentialsClient interface {
	// Generates an OAuth 2.0 access token for a service account.
	GenerateAccessToken(ctx context.Context, in *GenerateAccessTokenRequest, opts ...grpc.CallOption) (*GenerateAccessTokenResponse, error)
	// Generates an OpenID Connect ID token for a service account.
	GenerateIdToken(ctx context.Context, in *GenerateIdTokenRequest, opts ...grpc.CallOption) (*GenerateIdTokenResponse, error)
	// Signs a blob using a service account's system-managed private key.
	SignBlob(ctx context.Context, in *SignBlobRequest, opts ...grpc.CallOption) (*SignBlobResponse, error)
	// Signs a JWT using a service account's system-managed private key.
	SignJwt(ctx context.Context, in *SignJwtRequest, opts ...grpc.CallOption) (*SignJwtResponse, error)
	// Exchange a JWT signed by third party identity provider to an OAuth 2.0
	// access token
	GenerateIdentityBindingAccessToken(ctx context.Context, in *GenerateIdentityBindingAccessTokenRequest, opts ...grpc.CallOption) (*GenerateIdentityBindingAccessTokenResponse, error)
}

type iAMCredentialsClient struct {
	cc *grpc.ClientConn
}

func NewIAMCredentialsClient(cc *grpc.ClientConn) IAMCredentialsClient {
	return &iAMCredentialsClient{cc}
}

func (c *iAMCredentialsClient) GenerateAccessToken(ctx context.Context, in *GenerateAccessTokenRequest, opts ...grpc.CallOption) (*GenerateAccessTokenResponse, error) {
	out := new(GenerateAccessTokenResponse)
	err := c.cc.Invoke(ctx, "/google.iam.credentials.v1.IAMCredentials/GenerateAccessToken", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *iAMCredentialsClient) GenerateIdToken(ctx context.Context, in *GenerateIdTokenRequest, opts ...grpc.CallOption) (*GenerateIdTokenResponse, error) {
	out := new(GenerateIdTokenResponse)
	err := c.cc.Invoke(ctx, "/google.iam.credentials.v1.IAMCredentials/GenerateIdToken", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *iAMCredentialsClient) SignBlob(ctx context.Context, in *SignBlobRequest, opts ...grpc.CallOption) (*SignBlobResponse, error) {
	out := new(SignBlobResponse)
	err := c.cc.Invoke(ctx, "/google.iam.credentials.v1.IAMCredentials/SignBlob", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *iAMCredentialsClient) SignJwt(ctx context.Context, in *SignJwtRequest, opts ...grpc.CallOption) (*SignJwtResponse, error) {
	out := new(SignJwtResponse)
	err := c.cc.Invoke(ctx, "/google.iam.credentials.v1.IAMCredentials/SignJwt", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *iAMCredentialsClient) GenerateIdentityBindingAccessToken(ctx context.Context, in *GenerateIdentityBindingAccessTokenRequest, opts ...grpc.CallOption) (*GenerateIdentityBindingAccessTokenResponse, error) {
	out := new(GenerateIdentityBindingAccessTokenResponse)
	err := c.cc.Invoke(ctx, "/google.iam.credentials.v1.IAMCredentials/GenerateIdentityBindingAccessToken", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// IAMCredentialsServer is the server API for IAMCredentials service.
type IAMCredentialsServer interface {
	// Generates an OAuth 2.0 access token for a service account.
	GenerateAccessToken(context.Context, *GenerateAccessTokenRequest) (*GenerateAccessTokenResponse, error)
	// Generates an OpenID Connect ID token for a service account.
	GenerateIdToken(context.Context, *GenerateIdTokenRequest) (*GenerateIdTokenResponse, error)
	// Signs a blob using a service account's system-managed private key.
	SignBlob(context.Context, *SignBlobRequest) (*SignBlobResponse, error)
	// Signs a JWT using a service account's system-managed private key.
	SignJwt(context.Context, *SignJwtRequest) (*SignJwtResponse, error)
	// Exchange a JWT signed by third party identity provider to an OAuth 2.0
	// access token
	GenerateIdentityBindingAccessToken(context.Context, *GenerateIdentityBindingAccessTokenRequest) (*GenerateIdentityBindingAccessTokenResponse, error)
}

func RegisterIAMCredentialsServer(s *grpc.Server, srv IAMCredentialsServer) {
	s.RegisterService(&_IAMCredentials_serviceDesc, srv)
}

func _IAMCredentials_GenerateAccessToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GenerateAccessTokenRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(IAMCredentialsServer).GenerateAccessToken(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.iam.credentials.v1.IAMCredentials/GenerateAccessToken",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(IAMCredentialsServer).GenerateAccessToken(ctx, req.(*GenerateAccessTokenRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _IAMCredentials_GenerateIdToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GenerateIdTokenRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(IAMCredentialsServer).GenerateIdToken(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.iam.credentials.v1.IAMCredentials/GenerateIdToken",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(IAMCredentialsServer).GenerateIdToken(ctx, req.(*GenerateIdTokenRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _IAMCredentials_SignBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SignBlobRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(IAMCredentialsServer).SignBlob(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.iam.credentials.v1.IAMCredentials/SignBlob",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(IAMCredentialsServer).SignBlob(ctx, req.(*SignBlobRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _IAMCredentials_SignJwt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SignJwtRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(IAMCredentialsServer).SignJwt(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.iam.credentials.v1.IAMCredentials/SignJwt",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(IAMCredentialsServer).SignJwt(ctx, req.(*SignJwtRequest))
	}
	return interceptor(ctx, in, info, handler)
}

func _IAMCredentials_GenerateIdentityBindingAccessToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GenerateIdentityBindingAccessTokenRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(IAMCredentialsServer).GenerateIdentityBindingAccessToken(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.iam.credentials.v1.IAMCredentials/GenerateIdentityBindingAccessToken",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(IAMCredentialsServer).GenerateIdentityBindingAccessToken(ctx, req.(*GenerateIdentityBindingAccessTokenRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _IAMCredentials_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.iam.credentials.v1.IAMCredentials",
	HandlerType: (*IAMCredentialsServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "GenerateAccessToken",
			Handler:    _IAMCredentials_GenerateAccessToken_Handler,
		},
		{
			MethodName: "GenerateIdToken",
			Handler:    _IAMCredentials_GenerateIdToken_Handler,
		},
		{
			MethodName: "SignBlob",
			Handler:    _IAMCredentials_SignBlob_Handler,
		},
		{
			MethodName: "SignJwt",
			Handler:    _IAMCredentials_SignJwt_Handler,
		},
		{
			MethodName: "GenerateIdentityBindingAccessToken",
			Handler:    _IAMCredentials_GenerateIdentityBindingAccessToken_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/iam/credentials/v1/iamcredentials.proto",
}

func init() {
	proto.RegisterFile("google/iam/credentials/v1/iamcredentials.proto", fileDescriptor_iamcredentials_c860f4c52834cce8)
}

var fileDescriptor_iamcredentials_c860f4c52834cce8 = []byte{
	// 421 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x4f, 0x4b, 0xe3, 0x40,
	0x18, 0xc6, 0x99, 0x1e, 0xb6, 0x4b, 0x0e, 0xbb, 0x90, 0x3d, 0x6d, 0xd9, 0x53, 0x0e, 0x0b, 0x9b,
	0x85, 0x8c, 0xad, 0x56, 0x21, 0x55, 0xb0, 0xb1, 0x2a, 0x0d, 0x88, 0xe0, 0x9f, 0x8b, 0xb7, 0x69,
	0x3a, 0x0c, 0xa3, 0xc9, 0x4c, 0xcc, 0x4c, 0x5b, 0x44, 0xbc, 0x78, 0xf2, 0xee, 0xd5, 0x83, 0x1f,
	0xc4, 0x8f, 0xe0, 0xcd, 0xaf, 0xe0, 0xcd, 0x2f, 0xe0, 0x51, 0x26, 0x99, 0xd0, 0x80, 0x8d, 0x26,
	0x78, 0xcc, 0x9b, 0xe7, 0x79, 0xde, 0xdf, 0xc3, 0x0c, 0x63, 0x38, 0x84, 0x73, 0x12, 0x62, 0x48,
	0x51, 0x04, 0x83, 0x04, 0x8f, 0x31, 0x93, 0x14, 0x85, 0x02, 0x4e, 0xdb, 0x6a, 0x54, 0x98, 0x38,
	0x71, 0xc2, 0x25, 0x37, 0x7f, 0x67, 0x7a, 0x87, 0xa2, 0xc8, 0x29, 0xfe, 0x9d, 0xb6, 0x5b, 0x7f,
	0x74, 0x14, 0x8a, 0x29, 0x44, 0x8c, 0x71, 0x89, 0x24, 0xe5, 0x4c, 0x1b, 0x5b, 0x7f, 0xcb, 0x17,
	0x05, 0x3c, 0x8a, 0x38, 0xcb, 0x74, 0x9d, 0x97, 0xa6, 0xf1, 0x63, 0xd8, 0xdf, 0xdb, 0x9a, 0x4b,
	0xcc, 0x47, 0x60, 0xfc, 0xda, 0xc5, 0x0c, 0x27, 0x48, 0xe2, 0x7e, 0x10, 0x60, 0x21, 0x8e, 0xf8,
	0x19, 0x66, 0x66, 0xd7, 0x29, 0x85, 0x71, 0x16, 0xe8, 0x0f, 0xf0, 0xf9, 0x04, 0x0b, 0xd9, 0x5a,
	0xad, 0x6b, 0x13, 0x31, 0x67, 0x02, 0x5b, 0x3b, 0xd7, 0x4f, 0xcf, 0xb7, 0x8d, 0x4d, 0xab, 0xa7,
	0x98, 0x2f, 0x19, 0x8a, 0xf0, 0x46, 0x9c, 0xf0, 0x53, 0x1c, 0x48, 0x01, 0x6d, 0x28, 0x70, 0x32,
	0xa5, 0x81, 0x32, 0xf2, 0x09, 0x53, 0x93, 0x2b, 0x97, 0xbc, 0x0f, 0x73, 0x81, 0x6d, 0x3e, 0x00,
	0xe3, 0x67, 0xbe, 0x67, 0x38, 0xce, 0xaa, 0xb4, 0x2b, 0x30, 0x69, 0x6d, 0x5e, 0xa3, 0x53, 0xc7,
	0xa2, 0x2b, 0x78, 0x69, 0x85, 0x75, 0x6b, 0xad, 0x6e, 0x05, 0x1d, 0xa4, 0xf0, 0xef, 0x81, 0xf1,
	0xfd, 0x90, 0x12, 0xe6, 0x85, 0x7c, 0x64, 0xda, 0x1f, 0x40, 0xe4, 0xa2, 0x1c, 0xf8, 0x7f, 0x25,
	0xad, 0x26, 0xed, 0xa5, 0xa4, 0x5d, 0x6b, 0xa9, 0x2a, 0xa9, 0xd0, 0x09, 0x0a, 0xf1, 0x0e, 0x18,
	0x4d, 0x95, 0xe8, 0xcf, 0xa4, 0xf9, 0xef, 0x93, 0xad, 0xfe, 0x4c, 0xe6, 0x80, 0x76, 0x15, 0xa9,
	0xe6, 0x73, 0x53, 0xbe, 0x15, 0x0b, 0xd6, 0xe1, 0xf3, 0x67, 0x52, 0xe1, 0xdd, 0x34, 0x0c, 0x6b,
	0x7e, 0x42, 0x6a, 0x89, 0xbc, 0xf0, 0x28, 0x1b, 0x53, 0x46, 0x8a, 0xd7, 0x7b, 0x50, 0xe9, 0x80,
	0xcb, 0xec, 0x79, 0xa9, 0xed, 0x2f, 0xa6, 0xe8, 0xbe, 0xc7, 0x69, 0xdf, 0x7d, 0xcb, 0xaf, 0x7f,
	0x73, 0xca, 0xb2, 0x5d, 0x60, 0x7b, 0xc3, 0x93, 0x81, 0xc6, 0x23, 0x3c, 0x44, 0x8c, 0x38, 0x3c,
	0x21, 0x90, 0x60, 0x96, 0xbe, 0x05, 0x30, 0xfb, 0x85, 0x62, 0x2a, 0x16, 0x3c, 0x1b, 0xbd, 0xc2,
	0xe7, 0x2b, 0x00, 0xa3, 0x6f, 0xa9, 0x67, 0xf9, 0x2d, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x1f, 0xfe,
	0xa1, 0xd2, 0x04, 0x00, 0x00,
}

redpajama_set_name: RedPajamaGithub


How to choose clothes for work, without disrupting the business dress code? What is the dress code is to follow the rules of the dress code; on the dress code restrictions.
In order to determine all the rules of dress code at work, let's first talk about the concept of dress code, that he includes in itself, the origin of this concept. See, also, diluting strict dress code.
What is the dress code? Dress code - it is a peculiar form of dress and wearing her principles to visit a variety of events, activities and offices. With the English dress code means "dress code", where the dress - clothes, and code - Code rule. This concept could win popularity very quickly and now it is used in all countries of the world.
As always, the advantage belongs business suit. In the first place - three-piece suits. You can not only save, but also always look great at work, if you get yourself in the season 2 three-piece suit and will create a combination of them.
Most office colors are: white, gray, black, and, of course, beige. But as such there is no limitation in the colors, the main thing is that the color was not provocative. For an important business meeting and fit dark shades of blue and green - They help to "adjust" a positive way with the staff.
Footwear business woman It is bound to be very neat, clean, with closed toe and low heel (Up to 5 cm).
The appearance of the girl, not putting on stockings or tights, even on a hot day is simply unacceptable phenomenon.
It should also be remembered that the wear in the companies model pantsthat adhesive qualities, Often considered bad form. A strongly slacks on the severity and did not officially set up.
Business dress code for women is considered to be strict enough with respect to the jewelry. Not allowed screaming bright jewelry, Great decoration. In this situation, welcome small jewelry of noble metal. Ear-ring should not, therefore, recommend to abandon variety of long earrings, rings, and earrings, pendants.
According to Russian business dress code manicure It should be compulsory, but only moderate. Broken nails are not clean, and bright red, too long nails are not allowed in the same degree. On the nails short length french manicure will be the perfect option.
It seems that there is nothing difficult and menalways save pantsuit. But here there are some nuances. Do I have to work every day wearing a tie, and a range of colors to be a shirt? It is possible that some companies are allowed to wear shirts and jeans, but this is not allowed in Europe. It all depends on the corporation, in which you work. Read where to buy high quality business men's shirts?
A jacket men should not be too encircle the body or hanging, until the middle of the thumb It should be the length of the sleeve, until the middle of the heel It should be the length of the pants.
One and the same color must be shoes, bag and belt.
Pockets on the trousers It should not ottopyrivatsya, allowed only to put a handkerchief, lighter, keys, a small amount of cash.
Men They are not allowed to wear shorts in summer.
It should be added that in offices do not welcome her clothes and items made of leather. The apotheosis of the office are considered bad taste plastic bags for papersSo the documentation is best to wear daddy and personal belongings in a small business bag.


text:
#include <Plasma/DataFlow/DFPolygonNodes.h>
#include <Plasma/DataFlow/DFNodeAttr.h>
#include <Plasma/DataFlow/DFGraph.h>
#include <Plasma/Manipulator/Manipulator.h>
#include <Plasma/Renderable/Renderable.h>
#include <Plasma/Geometry/MeshGeometry.h>
#include <Plasma/Intersector.h>

#include <Fusion/Core/Key.h>
#include <Fusion/VM/VMFmt.h>

#if _MSC_VER
// 'this' used in member initializer list.
#pragma warning( disable: 4355 )
#endif

/*==============================================================================
  UNNAME NAMESPACE
==============================================================================*/

UNNAMESPACE_BEGIN

ConstString _polygonName;

RCP<Gfx::DepthState> _defDepth    = new Gfx::DepthState();
RCP<Gfx::AlphaState> _defBlending = new Gfx::AlphaState();

// MODE_STROKES
Vec3f  _col_v_default    = Vec3f( 2.0f, 2.0f, 2.0f );
Vec3f  _col_v_selected_p = Vec3f( 4.0f, 0.0f, 0.0f );
Vec3f  _col_v_selected_s = Vec3f( 0.0f, 1.0f, 0.0f );
Vec3f  _col_e_default    = Vec3f( 0.0f, 0.0f, 0.0f );
Vec3f  _col_e_selected   = _col_v_selected_p;

float  _siz_v_default  =  8.0f;
float  _siz_v_selected = 13.0f;

//------------------------------------------------------------------------------
//!
RCP<DFNode> polygonVM( VMState* vm, int idx )
{
   RCP<DFPolygonNode> node = new DFPolygonNode();
   DFPolygon* poly         = node->polygon();

   // Reading multiple polygon/loops?.
   for( int p = 1; VM::geti( vm, idx, p ); ++p )
   {
      // Read one vertex.
      poly->reserveVertices( VM::getTableSize( vm, -1 ) );
      for( int i = 1; VM::geti( vm, -1, i ); ++i )
      {
         poly->addVertex( VM::toVec3f( vm, -1 ) );
         VM::pop(vm);
      }
      VM::pop(vm);
   }
   poly->computeDerivedData();
   return node;
}

//------------------------------------------------------------------------------
//!
inline void pushBack( Vector<float>& vec, const Vec3f& val )
{
   vec.pushBack( val.x );
   vec.pushBack( val.y );
   vec.pushBack( val.z );
}

//------------------------------------------------------------------------------
//!
inline void pushBack( Vector<float>& vec, float val )
{
   vec.pushBack( val );
}

UNNAMESPACE_END

NAMESPACE_BEGIN

/*==============================================================================
   STATIC INITIALIZATION
==============================================================================*/

//-----------------------------------------------------------------------------
//!
void initializePolygonNodes()
{
   _polygonName = "Polygon";

   DFNodeSpec::registerNode(
      DFSocket::POLYGON,
      _polygonName, polygonVM,
      "Polygon", "2D polygon generator.",
      nullptr
   );
}

//-----------------------------------------------------------------------------
//!
void terminatePolygonNodes()
{
   _polygonName = ConstString();
}

/*==============================================================================
   CLASS DFPolygonOutput
==============================================================================*/

//------------------------------------------------------------------------------
//!
RCP<DFPolygon>
DFPolygonOutput::getPolygon()
{
   return _delegate();
}

//------------------------------------------------------------------------------
//!
DFSocket::Type
DFPolygonOutput::type() const
{
   return POLYGON;
}

/*==============================================================================
   CLASS DFPolygonInput
==============================================================================*/

//------------------------------------------------------------------------------
//!
RCP<DFPolygon>
DFPolygonInput::getPolygon()
{
   if( !_output ) return nullptr;
   return _output->getPolygon();
}

//------------------------------------------------------------------------------
//!
DFSocket::Type
DFPolygonInput::type() const
{
   return POLYGON;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonInput::isConnected() const
{
   return _output != nullptr;
}

//------------------------------------------------------------------------------
//!
void
DFPolygonInput::connect( DFOutput* output )
{
   CHECK( type() == output->type() );
   if( _output ) disconnectFrom( _output );
   _output = (DFPolygonOutput*)output;
}

//------------------------------------------------------------------------------
//!
void
DFPolygonInput::disconnect( DFOutput* output )
{
   if( _output == output ) _output = nullptr;
}

//------------------------------------------------------------------------------
//!
void
DFPolygonInput::disconnect()
{
   if( !_output ) return;
   disconnectFrom( _output );
   _output = nullptr;
}

/*==============================================================================
   CLASS DFPolygonMultiInput
==============================================================================*/

//------------------------------------------------------------------------------
//!
RCP<DFPolygon>
DFPolygonMultiInput::getPolygon( uint i )
{
   if( i >= _outputs.size() ) return nullptr;
   return _outputs[i]->getPolygon();
}

//------------------------------------------------------------------------------
//!
DFSocket::Type
DFPolygonMultiInput::type() const
{
   return POLYGON;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonMultiInput::isConnected() const
{
   return !_outputs.empty();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonMultiInput::connect( DFOutput* output )
{
   CHECK( type() == output->type() );
   _outputs.pushBack( (DFPolygonOutput*)output );
}

//------------------------------------------------------------------------------
//!
void
DFPolygonMultiInput::disconnect( DFOutput* output )
{
   _outputs.removeSwap( (DFPolygonOutput*)output );
}

//------------------------------------------------------------------------------
//!
void
DFPolygonMultiInput::disconnect()
{
   for( auto it = _outputs.begin(); it != _outputs.end(); ++it )
   {
      disconnectFrom( *it );
   }
   _outputs.clear();
}

/*==============================================================================
   CLASS DFPolygonRenderable
==============================================================================*/

class DFPolygonRenderable:
   public Renderable
{
public:

   /*----- methods -----*/

   DFPolygonRenderable( DFPolygonEditor* e );
   virtual void render( Gfx::Pass&, const Viewport& ) const;

   void update();

   MeshGeometry*   edgeMesh() { return _meshEdge.ptr(); }
   MeshGeometry* vertexMesh() { return _meshVert.ptr(); }

   bool pick( const Viewport&, const Vec2f& pos, float r, DFPolygonEditor::Pick& );

protected:

   //friend class DFStrokesEditor::Pick;

   /*----- data members -----*/

   DFPolygonEditor*       _editor;
   RCP<MeshGeometry>      _meshEdge;
   RCP<MeshGeometry>      _meshVert;
   RCP<Gfx::Program>      _progEdge;
   RCP<Gfx::Program>      _progVert;
   RCP<Gfx::SamplerList>  _texVert;
   RCP<Gfx::ConstantList> _constFront;
};

//------------------------------------------------------------------------------
//!
DFPolygonRenderable::DFPolygonRenderable( DFPolygonEditor* e ):
   _editor( e )
{
   // Material.
   Vec4f color(1.0f);
   RCP<Gfx::ConstantBuffer> constant = Core::gfx()->createConstants( 4*sizeof(float) );
   constant->addConstant( "color", Gfx::CONST_FLOAT4, 0, color.ptr() );
   _constFront = Gfx::ConstantList::create( constant );

   _progEdge = data( ResManager::getProgram( "shader/program/editor/l_standard" ) );
   _progVert = data( ResManager::getProgram( "shader/program/editor/p_standard" ) );

   Gfx::TextureState state;
   RCP<Image> img = data( ResManager::getImage( "image/particle1" ) );
   _texVert = new Gfx::SamplerList();
   _texVert->addSampler( "colorTex0", img->texture(), state );

   // Geometry.
   _meshEdge = new MeshGeometry( MeshGeometry::LINES  );
   const int edgeAttribs[] = {
      MeshGeometry::POSITION,
      MeshGeometry::COLOR,
      0
   };
   _meshEdge->setAttributes( edgeAttribs );

   _meshVert = new MeshGeometry( MeshGeometry::POINTS );
   const int vertAttribs[] = {
      MeshGeometry::POSITION,
      MeshGeometry::COLOR,
      MeshGeometry::GENERIC_1, // Size
      0
   };
   _meshVert->setAttributes( vertAttribs );

   update();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonRenderable::update()
{
   Vector<float> egver; // vec3: pos, vec3: color
   Vector<float> vgver; // vec3: pos, vec3: color, flt: size
   Vector<uint32_t> eindices;
   Vector<uint32_t> vindices;

   const DFPolygon* poly = _editor->polygon();

   // Vertices.
   for( auto v = poly->begin(); v != poly->end(); ++v )
   {
      vindices.pushBack( uint(vindices.size()) );
      pushBack( vgver, (*v) );
      pushBack( vgver, _col_v_default );
      pushBack( vgver, _siz_v_default );

      pushBack( egver, (*v) );
      pushBack( egver, _col_e_default );
   }
   // Edges.
   const uint n = uint(poly->numVertices());
   for( uint i = 0, j = n-1; i < n; j=i++ )
   {
      eindices.pushBack( j );
      eindices.pushBack( i );
   }

   // Tweak for selection.
   auto& selection = _editor->selection();
   for( auto cur = selection.begin(); cur != selection.end(); ++cur )
   {
      float* ptr         = vgver.data() + cur->_idx*7;
      Vec3f::as( ptr+3 ) = (*cur) == selection.last() ? _col_v_selected_p : _col_v_selected_s;
      ptr[6]             = _siz_v_selected;
   }

   // Updating the meshes.
   MeshGeometry* emesh = edgeMesh();
   MeshGeometry* vmesh = vertexMesh();

   emesh->clearPatches();
   emesh->deallocate();
   if( !egver.empty() )
   {
      emesh->allocateIndices( uint(eindices.size()) );
      emesh->copyIndices( eindices.data() );
      emesh->allocateVertices( uint(egver.size())/6 );
      emesh->copyAttributes( egver.data(), 6, 6, 0 );
      emesh->addPatch( 0, uint(eindices.size()) );
   }
   emesh->updateProperties();
   emesh->invalidateRenderableGeometry();

   vmesh->clearPatches();
   vmesh->deallocate();
   if( !vgver.empty() )
   {
      vmesh->allocateIndices( uint(vindices.size()) );
      vmesh->copyIndices( vindices.data() );
      vmesh->allocateVertices( uint(vgver.size())/7 );
      vmesh->copyAttributes( vgver.data(), 7, 7, 0 );
      vmesh->addPatch( 0, uint(vindices.size()) );
   }
   vmesh->updateProperties();
   vmesh->invalidateRenderableGeometry();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonRenderable::render( Gfx::Pass& pass, const Viewport& ) const
{
   // Front pass.
   pass.setAlphaState( _defBlending );
   pass.setDepthState( _defDepth );
   pass.setConstants( _constFront );
   pass.setProgram( _progEdge );
   pass.setSamplers(0);
   pass.setWorldMatrix( Mat4f::identity().ptr() );
   _meshEdge->render( pass );
   pass.setProgram( _progVert );
   pass.setSamplers( _texVert.ptr() );
   _meshVert->render( pass );
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonRenderable::pick( const Viewport& vp, const Vec2f& pos, float r, DFPolygonEditor::Pick& p )
{
   uint32_t idx;
   if( vertexMesh()->pick( vp, pos, r, idx ) )
   {
      p._idx = idx;
      return true;
   }
   return false;
}

/*==============================================================================
   CLASS DFPolygonManipulator
==============================================================================*/

class DFPolygonManipulator:
   public Manipulator
{
public:

   /*----- methods -----*/

   DFPolygonManipulator( DFPolygonEditor* e, DFPolygonRenderable* r );

   inline DFPolygonEditor*  editor()      { return _editor; }
   virtual Renderable* renderable() const { return _renderable.ptr(); }

   // Events.
   virtual bool onKeyPress( const Event& ev );
   virtual bool onPointerPress( const Event& ev );
   virtual bool onPointerRelease( const Event& ev );
   virtual bool onPointerMove( const Event& ev );

protected:

   /*----- data members -----*/

   DFPolygonEditor*          _editor;
   RCP<DFPolygonRenderable>  _renderable;
   bool                      _clearSel;
   DFPolygonEditor::Pick     _pick;
   Planef                    _plane;
};

//------------------------------------------------------------------------------
//!
DFPolygonManipulator::DFPolygonManipulator( DFPolygonEditor* e, DFPolygonRenderable* r ):
   _editor( e ), _renderable( r )
{
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonManipulator::onKeyPress( const Event& ev )
{
   switch( ev.value() )
   {
      case Key::BACKSPACE:
      case Key::DELETE: _editor->removeVertex(); return true;
      default:;
   }
   return false;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonManipulator::onPointerPress( const Event& ev )
{
   _clearSel = false;
   // Vertex creation.
   if( Core::isKeyPressed( Key::SHIFT ) )
   {
      // Intersection ray and normal.
      float t = CGConstf::infinity();
      Rayf ray( camera()->position(), viewport()->direction( ev.position() ) );
      Planef plane( Vec3f( 0.0f, 0.0f, 1.0f ) );
      if( Intersector::trace( plane, ray, t ) )
      {
         Vec3f p = ray.point(t);
         _editor->createVertex( p );
      }
      return true;
   }

   // Picking.
   if( _renderable->pick( *viewport(), ev.position(), 10.0f, _pick ) )
   {
      // Update selection.
      if( Core::isKeyPressed(Key::CTRL) )
      {
         if( !_editor->toggleSelection( _pick ) ) _pick.invalidate();
      }
      else if( !_editor->selection().has( _pick ) ) _editor->setSelection( _pick );
      // Find intersection plane.
      Vec3f n( 0.0f, 0.0f, 1.0f );
      Vec3f p = editor()->polygon()->vertex( _pick._idx );
      _plane  = Planef( n, p );
   }
   else
      _clearSel = true;
   return !_clearSel;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonManipulator::onPointerRelease( const Event& ev )
{
   _pick.invalidate();
   if( _clearSel && ev.pointer().withinPress(5) )
   {
      _clearSel = false;
      _editor->clearSelection();
   }
   return false;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonManipulator::onPointerMove( const Event& ev )
{
   if( _pick.isValid() )
   {
      Rayf ray( camera()->position(), viewport()->direction( ev.position() ) );
      float t = CGConstf::infinity();
      if( Intersector::trace( _plane, ray, t ) )
      {
         Vec3f p = ray.point(t);
         _editor->moveVertex( p );
      }
      return true;
   }
   return false;
}

/*==============================================================================
   CLASS DFPolygonEditor
==============================================================================*/

//------------------------------------------------------------------------------
//!
DFPolygonEditor::DFPolygonEditor( DFPolygonNode* n ): _node(n)
{
   _renderable = new DFPolygonRenderable( this );
}

//------------------------------------------------------------------------------
//!
RCP<Manipulator>
DFPolygonEditor::manipulator()
{
   return RCP<Manipulator>( new DFPolygonManipulator( this, _renderable.ptr() ) );
}

//------------------------------------------------------------------------------
//!
RCP<DFNodeAttrList>
DFPolygonEditor::attributes() const
{
   RCP<DFNodeAttrList> atts = new DFNodeAttrList();

   // Strokes UI.
   RCP<DFNodeAttrList> strokes = new DFNodeAttrList();
   atts->add( DFNodeAttr( "XYZ", 0, "Position" ) );

   return atts;
}

//------------------------------------------------------------------------------
//!
RCP<DFNodeAttrStates>
DFPolygonEditor::attributesStates() const
{
   RCP<DFNodeAttrStates> states = new DFNodeAttrStates();
   const Pick& pick             = _selection.last();

   if( pick.isValid() )
      states->set( 0, polygon()->vertex( pick._idx ) );

   return states;
}

//------------------------------------------------------------------------------
//!
void DFPolygonEditor::updateAttributes( const DFNodeAttrStates& attribs )
{
   for( auto cur = attribs.begin(); cur != attribs.end(); ++cur )
   {
      if( cur->_id == 0 )
      {
         moveVertex( cur->_value.getVec3() );
      }
   }
}

//------------------------------------------------------------------------------
//!
void DFPolygonEditor::updateUI()
{
   _node->graph()->msg().modify( _node, attributesStates().ptr() );
}

//------------------------------------------------------------------------------
//!
void
DFPolygonEditor::updateSelection()
{
   updateUI();
   if( _renderable.isValid() ) _renderable->update();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonEditor::updateAll()
{
   // Invalidate graph.
   _node->graph()->invalidate( _node );
   // Invalidate UI and renderable.
   updateUI();
   if( _renderable.isValid() ) _renderable->update();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonEditor::moveVertex( const Vec3f& p )
{
   if( _selection.empty() ) return;

   // Update geometry.
   DFPolygon* poly = polygon();
   Vec3f delta     = p - poly->vertex( _selection.last()._idx );

   for( auto pick = _selection.begin(); pick != _selection.end(); ++pick )
   {
      poly->vertex( pick->_idx ) += delta;
   }

   updateAll();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonEditor::createVertex( const Vec3f& p )
{
   Pick nPick;
   if( _selection.empty() )
   {
      polygon()->addVertex( p );
      nPick._idx = int(polygon()->numVertices())-1;
   }
   else
   {
      nPick._idx = _selection.last()._idx+1;
      polygon()->insertVertex( nPick._idx, p );
   }

   // Handle selection.
   _selection.set( nPick );

   updateAll();
}

//------------------------------------------------------------------------------
//!
void
DFPolygonEditor::removeVertex()
{
   // Deleting vertices.
   DFPolygon* poly = polygon();
   for( auto pick = _selection.begin(); pick != _selection.end(); ++pick )
   {
      poly->removeVertex( pick->_idx );
      // For now only remove one element since other selection id could be invalid.
      break;
   }
   _selection.clear();

   updateAll();
}

/*==============================================================================
   CLASS DFPolygonNode
==============================================================================*/

//------------------------------------------------------------------------------
//!
DFPolygonNode::DFPolygonNode()
{
   _output.delegate( makeDelegate( this, &DFPolygonNode::process ) );
   _polygon = new DFPolygon();
}

//------------------------------------------------------------------------------
//!
const ConstString&
DFPolygonNode::name() const
{
   return _polygonName;
}

//------------------------------------------------------------------------------
//!
uint
DFPolygonNode::numInputs() const
{
   return 0;
}

//------------------------------------------------------------------------------
//!
DFOutput*
DFPolygonNode::output()
{
   return &_output;
}

//------------------------------------------------------------------------------
//!
DFInput*
DFPolygonNode::input( uint )
{
   return nullptr;
}

//------------------------------------------------------------------------------
//!
RCP<DFPolygon>
DFPolygonNode::process()
{
   return _polygon;
}

//------------------------------------------------------------------------------
//!
RCP<DFNodeEditor>
DFPolygonNode::edit()
{
   if( _editor.isNull() )  _editor = new DFPolygonEditor( this );
   return _editor;
}

//------------------------------------------------------------------------------
//!
bool
DFPolygonNode::dumpCustom( TextStream& os, StreamIndent& indent ) const
{
   os << indent << "{" << nl;
   ++indent;
   for( auto cur = _polygon->begin(); cur != _polygon->end(); ++cur )
   {
      os << indent << VMFmt( *cur ) << "," << nl;
   }
   --indent;
   os << indent << "}" << nl;
   return os.ok();
}

NAMESPACE_END


text:
PROSTEP INC | 3290 W. Big Beaver Rd. Suite 220 Troy, MI 48084| Tel. 1-877-678-3701
Why PROSTEP INC
OpenPDM
OpenPDM Connect
OpenPDM Integrate
OpenPDM Migrate
OpenPDM Collaborate
OpenPDM C-Center
OpenDXM GlobalX
Data Visualization and Collaboration
PDF Generator 3D
3D PDF Pro
Tetra4D Solutions
Buy 3D PDF Pro and Tetra4D
ARAS Integration
ARAS Migration
ARENA Integration
DASSAULT Integration
Dassault 3DEXPERIENCE Integration
Exalead OnePart Integration
DASSAULT Migration
PTC Integration
PTC Migration
SIEMENS Integration
SIEMENS Migration
OSLC
PLM Migration
PLM Integration
PLM Collaboration
B2B Data Exchange with Managed File Transfer
Secure Data Exchange | CAD Data Exchange
Technical Data Package (TDP)
Digital Thread & Digital Twin Solutions
PLM Consulting and Strategy
Automotive PLM
Aerospace PLM
Shipbuilding PLM
PLM Solutions in Other Industries
PROSTEP TechDay 2020
Product Lifecycle Management (PLM) White Papers
3D PDF Samples and Examples
PLM Conference Presentations
PROSTEP Product Guides
Secure Data Exchange
Cleaning Up the PLM Infrastructure at Karcher
A PROSTEP Featured Story – Download this featured story here.
PLM projects that are driven by Engineering sometimes lose sight of the strategic dimension of product lifecycle management. But Kärcher realized in good time that although unifying the CAD system environment is a necessary condition for improving integration of the engineering processes, it is not, on its own, sufficient. Discussions with the different departments at the various locations revealed that clear-cut requirements management, uniform change management and end-to-end project management are equally important aspects. "When we discovered this, we stopped the CAD selection project and asked PROSTEP to help us find the right PLM strategy," states Matthias Steinmann, Central R&D Services Manager at Kärcher, talking to a member of the editorial team.
Seven Different CAD Systems
The global growth of the company involved the acquisition of a large number of companies, which led to a heterogeneous IT system environment. Although most CAD users develop their products using Catia V5, a total of seven different CAD systems are used across the company. A further obstacle to collaboration across the different locations is the lack of a central data backbone for Engineering. In Winnenden, where the company is headquartered, the CAD data is managed with SAP PLM. In the USA, PTC Creo is used and linked to the PLM system Windchill but with no connection to SAP. And at many other locations, file-based management systems are still used for the CAD data.
Kärcher has employees in 100 companies worldwide, including Germany, Italy, Romania, China, the USA, Mexico and Brazil. To allow multiple locations to collaborate when developing new products, the company aims to establish product platforms and set up competence centers for specific technologies. According to Steinmann, this is not possible with the system environment as it stands: "Engineering operations have to become far more closely knit if we want to use the same components everywhere."
Initially, Kärcher simply wanted to open up its large-scale CATIA installation in Winnenden to other locations. But the idea ran into licensing restrictions and would have required considerable additional investment, and so the company investigated the alternative of CAD systems from other vendors. Benchmark tests showed that Kärcher's products could in principle be developed using any of the systems under consideration. But the tests also revealed that the heterogeneous, fragmented PLM environment was a far more significant problem when it came to the joint use and exchange of the CAD data. "We remain committed to the idea of a uniform CAD system, but we have realized that, whatever system we opt for, PLM offers us far greater leverage in the product engineering process and can even help us migrate the CAD data," says Steinmann.
"We remain committed to the idea of a uniform CAD system, but we have realized that, whatever system we opt for, PLM offers us far greater leverage in the product engineering process and can even help us migrate the CAD data."
Matthias Steinmann, Central R&D Services Manager at Kärcher
Vendor-Neutral PLM Consulting
Kärcher entrusted Darmstadt-headquartered PROSTEP AG with drawing up the new PLM strategy and specifying the system requirements because vendor-neutral consulting was seen as being extremely important. Or, as Steinmann puts it: "We had already been in touch with an American consulting company but decided to use PROSTEP because of their closer physical proximity. We would not have managed to handle the project without PROSTEP's consulting services."
"We had already been in touch with an American consulting company but decided to use PROSTEP because of their closer physical proximity. We would not have managed to handle the project without PROSTEP's consulting services."
As a first step in the project, the consultants analyzed the existing system and process environments from the perspective of the collaboration requirements and the envisaged efficiency gains. The aim was to identify which was the better option for a uniform PLM solution across the entire group: direct linking via SAP PLM or a dual-vendor strategy with separate PLM and ERP systems. The analysis revealed that the processes at Kärcher are well defined, but that they are not put into practice consistently throughout the company. End-to-end change and maturity management is a fundamental prerequisite for collaboration across locations and has to be implemented. Changes during the course of the projects are not sufficiently transparent. BOM management is not homogeneous and there is also no strategy for handling BOMs in the concept phase. The integrated SAP and PLM system environments also require considerable manual intervention.
On evaluating the findings, the consultants came to the conclusion that separate ERP and PLM systems were a more appropriate solution for the various national subsidiaries and for collaboration across different locations than direct linking via SAP PLM. One of the reasons for this is that the process requirements of the various product divisions are extremely varied. Kärcher not only makes mass-produced goods that are produced to order or ordered from stock. They also manufacture custom equipment and variants, which means that it is also necessary to support configure-to-order and engineer-to-order processes. According to Steinmann, it would require considerable effort to map this level of complexity in SAP PLM.
System Selection Criteria
The second step in the project was for the consultants to work together with the departments to specify requirements governing the choice of PLM system. These were incorporated into the requirements specification and an evaluation matrix was drawn up. Kärcher had taken a fundamental decision not to go with a neutral PLM system. In other words, the decision which PLM system to use entailed a preliminary decision regarding the CAD system to be used throughout the company. Nevertheless, since the migration process will stretch over a significant period, support for multi-CAD environments is an important criterion that has to be met by the PLM system.
"One important insight from the assessments was the desire expressed by all departments, including those that were not involved with engineering, to implement transparent change management that was capable of clearly representing changes to the requirements made during the course of the project. And so we expanded the scope of the project to cover application lifecycle management (ALM) in order to ensure that the issue of change management was also addressed," explains Steinmann. Requirements management is of particular relevance to electronic engineering and software engineering, which are becoming increasingly prominent at Kärcher, as most of today's products contain mechatronic components. But it is envisaged that all device requirements be integrated.
The consultants from PROSTEP analyzed Kärcher's product portfolio, which has grown enormously and become far more diverse over the past few years. The variant and configuration strategies of the different product divisions vary considerably. This demands an extremely flexible PLM solution that has to support different processes and bill of materials (BOM) concepts. "According to our strategy, the eBOMs will be created in the PLM system," says Steinmann and adds: "And we and PROSTEP are currently considering whether we should also derive the plant-neutral mBOMs directly in the PLM system and then condition them for the specific plants." One thing is certain: there will be separate engineering and manufacturing BOMs in order to allow flexible control over their introduction into the manufacturing operation.
Cross-System Change Process
A uniform change process across the entire group is crucial for collaboration across different locations, as Steinmann explains: "We want to know when each change was incorporated in production and what units have the changed component fitted so that service staff can make use of this information." Details of how the change process will be organized with regard to interaction between the PLM system and the ERP system have not yet been finalized, but it is probable that the two systems will communicate changes to each other depending on the maturity of the product. This requires a powerful, bidirectional interface.
The importance of project management when selecting the PLM system is still an open issue that will be examined separately. The reason for this is that a different organizational unit is responsible for project management and the project team do not wish to preempt any decisions taken there. "But, together with the consultants from PROSTEP, we have already developed a concept showing how we can use PLM to provide optimum support for our new product engineering process, what tasks need to be completed at a given level of maturity and what work packages result from this," explains Steinmann. Ideally, these tasks should be mapped in the PLM system in order to be able to monitor their progress more effectively.
"But, together with the consultants from PROSTEP, we have already developed a concept showing how we can use PLM to provide optimum support for our new product engineering process, what tasks need to be completed at a given level of maturity and what work packages result from this."
The decision as to which system to use is due to be made by the middle of the year. And then things will start to get really exciting. The company is fully aware that the implementation of a PLM system is a change project that will run for several years, as Steinmann points out: "This means that we need an open, scalable solution that can grow with us, as we cannot roll out everything at once." PROSTEP will advise and support Kärcher during the introduction phase and will monitor whether the objectives of the project have been achieved.
Working Full Steam to Ensure Success
The name Kärcher is synonymous with top performance in the world of cleaning, and not just in the professional sector. The foundation for the success of the family-owned company with headquarters in Winnenden was laid by Swabian inventor Alfred Kärcher in 1950, when he developed the world's first hot-water high-pressure cleaner. The introduction of the first portable high-pressure cleaner heralded the breakthrough into the domestic appliance market, a market that is today served by a wide range of products for cleaning floors, windows and facades and for watering the garden – naturally all in the familiar Kärcher yellow. In the field of professional cleaning, the company offers not only its anthracite-colored high-pressure cleaner but also floor scrubbers and scrubber dryers, sweepers and vacuum sweepers, snow throwers, water treatment and recycling systems and complete vehicle cleaning systems.
Alongside international expansion, a strategy that the company has followed systematically since the 1970s, innovation is the most important driver of growth for the company. This is no longer restricted to the products themselves but also encompasses digital services such as a fleet management system for facilities cleaning services and a smartphone app for operating the automatic watering unit in the garden.
www.kaercher.com
Michael Wendenburg | Economic Engineering
Categories Industry, Integration, Published Articles Post navigation
Planning and Documenting the Assembly Process in 3D
Product Data Deserves Greater Protection
Join over 20,000 people who learn about PLM solutions and digital transformation.
PROSTEP INC
PROSTEP is the world's leading product life cycle integration and migration specialists for the discrete manufacturing industry.
Inquiries please send us a message or email us at infocenter@prostep.com.
Tetra4D Partner Solutions
PROSTEP INC | 3290 W. Big Beaver Suite 220 Rd. Troy, MI 48084 | 1-877-678-3701 | Contact | Privacy Policy
© 2020 PROSTEP INC