For the past two weeks, I have covered some of the more compelling names in free agency at the running back position. Lev Bell and Tevin Coleman topped those pieces but now we move onto the free agent wide receivers.
I really believe that the following players can have an impact on Fantasy Football next season if they land in the right situation. Robby Anderson and Geronimo Allison are restricted free agents at this point so I will leave them off for now.
The secondary wideout on a good passing offense will always have value. Stefon Diggs was the WR11 last season. Tyler Boyd was the WR16, and Calvin Ridley the WR19. Each of these offenses passes the ball in volume with quarterbacks that spread it around.
Let's see if we can find a few players that can fit the WR2 role for their team next season.
John Brown had 558 yards through seven games last season for the Ravens with Joe Flacco. He finished the year with 715 yards even though he played in all 16 games. Let that sink in. The key here is that Brown played a 16-game season proving to Fantasy owners- and more importantly NFL teams- that he can stay healthy throughout an entire year.
The Chargers will lose Tyrell Willams to free agency so they will have a need for a field stretcher. If they do not promote Travis Benjamin, I like John Brown to slide into a situation where he could produce.
Moncrief has yet to have a 1,000-yard season in the NFL. 2015 was his best year with 64 catches, 733 yards, and six touchdowns. Mediocre at best for the 26-year old. After a year in Jacksonville where he got paid $10m to share targets with Dede Westbrook, Keelan Cole, and D.J. Chark, Moncrief ended up seeing only 89 targets. In worse news, he only caught 48 of those passes.
It always felt like a weird signing that didn't quite fit. With Marqise Lee back and under contract and Westbrook progressing into a reliable option, it seems Moncrief's time as a Jaguar will be short-lived.
Someone will have to play wide receiver for the Raiders next season. Jordy Nelson is the only guy under contract so I imagine they will try and pair him up with a speedster. While injuries have slowed down Moncrief, he ran a 4.4 40-yard dash out of the NFL combine according to playerprofiler.com. Often times last year Moncrief was open on a go-route but neither Blake Bortles nor Cody Kessler could deliver.
But, Moncrief will be able to provide Derek Carr with an outside threat that can get first downs and occasionally win a 50/50 ball downfield. Of course, Moncrief does most of his damage in the red zone. An area of the field that Carr found Michael Crabtree often over a three-year span.
Same stadium, same problem for the other team on the North Bay. The 49ers go into 2019 with 32-year-old Pierre Garcon under contract and a bunch of young talent. Donte Pettis will take on a big role next season and I feel great about Trent Taylor now that Wes Welker has joined the staff as wide receivers coach.
Garcon's future is murky at best and Moncrief would be a solid replacement for him. Moncrief can provide size and speed that Garcon does not possess and would complement the 49ers young core nicely.
Chris Hogan, Cordarrelle Patterson, and Phillip Dorsett are all unrestricted free agents in 2019. With Josh Gordon out of the league again, that will leave only Super Bowl MVP Julian Edelman and…(crickets).
Tyrell "The Giselle" is known as a burner in the NFL. His 15.9 yards per reception were 11th in the league last season. With Keenan Allen hogging all the targets, Williams put up 41/65 which is respectable. While the Chargers are a great fit for Williams, he will want to test the market and the emergence of Mike Williams makes Tyrell less of a priority for LA.
The Patriots would make Williams a flex-worthy play every week if he were on the outside in New England. Brady can still get the ball down the fieldd, but Williams is 6'4″ and can win contested slant routes too. I would pump the draft button all day on Williams as a Patriot.
See above. These teams need somebody. The Raiders notoriously love speed and the 49ers just need a body. You think Kyle Shanahan could find a way to use a big-bodied receiver who can get downfield and make plays? Hmmm where have we seen that before?
T.Y. Hilton deserves an actual threat on the other side of the field. The Colts have a need for a WR2 and Williams and Hilton would make a solid combo. Andrew Luck has been known to keep multiple weapons solvent in Fantasy Football. Hilton, Willliams, Eric Ebron, and the core of running backs on this roster would be even more imposing than last season.


text:
Q: Fundamental question of amortized analysis A data structure supports an operation foo such that a sequence of n operations foo takes Θ(n log n) time to perform in the worst case.

a) What is the amortized time of an foo operation?
b) How large can the actual time of a single foo operation be?

a) First I assume foo is O(log n) worst case.
So the amortized cost comes from how often the foo tales its worst case. Since we know nothing further the amortized is between O(1) and log n
b) O(log n)
Is this correct? What is the proper way to argue here?

A: a) if n operations take Θ(n log n), then by definition the amortized time for a foo operation is Θ(log n) The amortized time is averaged over all the operations, so you don't count the worst case against just the operation that caused it, but amortized against all the others, too.
b) foo could occasionally cost O(n), as long as it's not more than O(log n) times. foo could even occasionally cost O(n log n), as long as that doesn't happen more than a constant (i.e., O(1)) number of times.
When you do amortized analysis, you don't multiple the worst case by the number of operations, but rather by the number of times that worst case actually happens.
For example, take the strategy of pushing elements into a vector one at a time, but growing the memory by doubling the allocated size each time the new element does not fit in the current allocation. Each doubling instance costs O(n) because you have to copy/move all the current elements. But the amortized time is actually linear, because you copy 1 element once, 2 elements once, 4 elements once, etc: overall you've done log(n) doublings but the sum of the cost of each of these is just 1+2+4+8+...+n = 2*n-1 = O(n). So the amortized time of this push implementation is O(1), even though the worst case is O(n).

redpajama_set_name: RedPajamaStackExchange


We have decided to make heart books. Teachers will provide all the necessary materials.
We think that this will be a great opportunity for parents to see the students in the classroom and to work together with both their children and the other children in the class. We hope to see many parents there!


Did you know broccoli is part of the cabbage family? It's large, flowered head is the vegetable we eat! In fact, the word broccoli has its roots in the Italian language as the plural of a word which translates as "the flowering top of a cabbage."
Broccoli is classified in the Italica cultivar group of the species Brassica oleracea, the same as many other crops we grow including both Kale and Cauliflower.
Broccoli has been around for at least 2,000 years and was a favorite food of the Romans. A traditionally popular vegetable, broccoli's spectacular reputation keeps growing as its consumption has tripled over the last 25 years.
At Innovative Produce we produce broccoli of the highest quality for both export and domestic consumption.
One of the hottest new superfoods on the market this brassica has shed it's image as a bitter and unappetizing side dish to become a versatile and tasty option. We believe there is no better place to grow Brussels Sprouts than the Santa Maria Valley where harvest is possible all 52 weeks of the year.
Carrots come in all shapes and sizes. From the iconic orange Nantes variety to all other colors of the rainbow this healthy snack has long been a favorite for snacking and hearty dishes such as stews and roasts.
Cauliflower is a close relative to broccoli and during early stages of growth the plants look strikingly similar to the untrained eye. As it matures, the plant produces "wrapper leaves" which encircle around the snowy white curds protecting them from the yellowing effects of the sun. A perfect head of cauliflower maintains its brilliant white appearance and a delicious crunchy texture.
The high nutritional value of cauliflower along with its versatility in the kitchen (it is now used from everything as a substitute for buffalo wings to an additive to pizza crust) has lead to a steady increase in its popularity. Few vegetables offer a better combination of versatility and nutrition than cauliflower.
The unmistakable form and crunch of celery makes it an essential ingredient not only traditional soups and stews but also in many of today's popular appetizers from the party platter to the bloody mary.
Contrary to popular myths, celery doesn't really contain negative calories; but chomp away, at only 6 calories per stalk, it's definitely one of the lowest calorie foods (just watch out for the peanut butter and ranch!).
Cilantro, also known as Coriander or Chinese parsley, may be seen as a trendy herb, but it has actually been utilized for many centuries.
Cilantro leaves are finely divided and sit atop of a slender stalk which is very similar to parsley. It has many health benefits due to its high levels of potassium, calcium, manganese, iron, and magnesium. All parts of the plant are edible, but the fresh leaves and the dried seeds are the most commonly used in cooking. Cilantro is easily recognizable by its strong, spicy, and even nutty flavor making it a favorite in many Latin American, Asian and Mediterranean dishes.
Iceberg lettuce has a bold flavor and form. Its crunchy texture makes it a good choice for salads and sandwiches.
Iceberg lettuce is sometimes thought of as having low nutritional value but that's simply not true. As a good source of fiber, potassium, calcium, Vitamin A, Vitamin C, and iron, iceberg lettuce is a great addition to any healthy diet so eat up!
Italian Parsley is a member of the Apiaceae family which contains herbs known for their aromatic properties and hollow stems. This parsley is cultivated as an herb, vegetable, and spice.
It can be initially distinguished from its counterparts by its flat, deeper green, loosely-toothed leaves and its aromatic oils. Italian Parsley is rich in antioxidants including vitamins A, C, E and carotene. Its mild, fresh flavor can be used in anything from soups and stocks, to cheese, and even seasoning fresh meats.
Kale is a form of cabbage (Brassica oleracea Acephala group) which grows in a variety of different shapes and forms with some varieties reaching as high as six or seven feet. Of the many different varieties available we grow three types of kale: Tuscan, Green, and Red, all delicious in their own ways.
Rest easy with kale in your diet, it's high in beta carotene, potassium, vitamin C, lutein, zeaxanthin, and reasonably rich in calcium. Kale, along with broccoli and other Brassicas, contains sulforaphane (particularly when chopped or minced), a chemical with potent anti-cancer properties. The health benefits of Kale go on and on, likely why it is praised as a super food!
Leaf Lettuce has always been the sandwich maker. With it's soft delicate texture and bright green color green leaf lettuce is a great way to compliment your burger or complete your salad.
Mini Sweet Peppers are a great snack for kids and adults alike. Dip them in your favorite hummus/dressing or enjoy them solo for a healthy midday snack.
Romaine, or cos lettuce, is a variety of lettuce that grows in tall heads of sturdy leaves with a firm rib down the center. The name cos lettuce derives from the Greek island of Kos, where it originated, and to this day remains a key ingredient in the classic Greek salad.
The thick ribs of the larger outer leaves, should have a milky fluid inside which gives romaine the typically fine-bitter herb taste. If this does not suit your tastes, try this lettuce in its increasingly more popular form as sweet Romaine hearts. Romaine is the essential ingredient in Caesar salads and is commonly used in cuisine around the globe.
Romanesco is a relative to Broccoli and Cauliflower. These members of the Brassica oleracea family have been cultivated in the Santa Maria Valley for generations due to it's ideal temperate climate. With its stylish look and delicious taste Romanesco is hard to pass up for any chef.
Spinach is a versatile vegetable. From juices to salads, smoothies to pastas spinach seems to find its way into all of our dishes. Organically spinach is very susceptible to attack by mildew, but given the right conditions it thrives in the Santa Maria Valley.
The Santa Maria Valley is the premium outdoor strawberry growing area. With cool nights and temperate days we enjoy a year round harvest season achieved through two separate plantings. With superior quality and consistency Santa Maria Strawberries continue to delight consumers worldwide.
Tuscan Kale is a vegetable known by many names: Black Kale, Dino Kale, Lacinato Kale, Cavolo Nero. It is slightly sweeter than its green brother and has an appetizing dark green appearance. Try it in Ribollita soup, a hearty dish from it's namesake area.


Our Linkworking Project has been running for 10 years. We currently run sixteen sessions a week on the inpatient wards at the Bethlem Royal Hospital and in the community resource centres. In 2016 we reached 2217 vulnerable service users to discuss their care and treatment. These sessions are followed by a handover with ward/service managers; where we raised 2804 issues to address immediate needs. Our project supports service users to understand their treatment, services available to them and brings hope during dark and difficult times, in fact many of our team joined after coming into contact with the project themselves. Our outcomes and qualitative data provide insight for the CCG and have a positive impact on local commissioning.
We run 10 Mental Health Open Forums each year, attracting over 520 (2016) Service users. It is designed for service users to come together in a safe environment to meet commissioners and Service Providers, giving them a chance to ask questions and debate current and topical issues/services relevant to their recovery and wellbeing. Our forums also attract large numbers of carers and professionals.
Our Welfare Benefit Surgery has helped thousands of vulnerable people make and maintain benefit claims (634 during 2016). We also attend assessments and have won over 70 ESA & PIP tribunals. We support claimants to maintain their On-Line Universal Credit (UC) Claims; which is a major obstacle as many of our clients are illiterate or have no computer experience. We address immediate financial poverty through access to food banks and Discretionary Payments. Currently we work very closely with Mind's Welfare Benefits service and have close relationships with SLaM, Croydon Council and the DWP.
Hear Us require Trustees to help lead the organisation to reach new heights.
POTENTIAL CONFLICTS OF INTEREST If you consider that you have any conflicts of interest in applying for this post, please identify what these are and how you would manage them.


It is our passion to 'get it right' for service users and their families. We are constantly striving to develop new solutions for difficult situations. We continue to reach new horizons and will continue to constantly respond to changing needs.
We listen to service users and their relatives and advocates so that we can build individual care and support programmes to achieve the very best for the individual concerned.
Maintaining a good quality of life is fundamental to our approach. We encourage external activities as a part of this, and ensure everyone is included in that encouragement to avoid isolating any of our service users.
We also provide a range of therapies such as physiotherapy, occupational therapy and hydrotherapy.
Independence is very important and we work hard to achieve as independent a life as possible for everyone, even when faced with severe disability. We help to gradually increase independence and celebrate personal achievements.


text:
Taco Villa Gets a Reopening in St. Cloud
by Lynn Dobmeier | Apr 5, 2022 | Variety | 0 comments
Taco Villa on 25th ninth Ave N. Photo credit Edgardo Oviedo.
Article written by Edgardo Oviedo
Taco Villa, who used to be on Division Street in Waite Park but later closed in 2011, reopened on March 1st, 2022, at 25th ninth ave N with new owners Bob and Susan Abel. Taco Villa took the location from the former Taco Johns that used to be in downtown St. Cloud.
Residents of St. Cloud seemed excited for the reopening of Taco Villa, as Police Officers had to direct traffic on opening day because of the long lines, Said Susan Abel Owner of Taco Villa.
Taco Villa was a past favorite for the residents of St. Cloud, as it was operating for over 40 years before it closed in 2011. Former Owners Lyle and Ken Introduced Taco Villa in St. Cloud in the Mid 1960's before Ken died of Cancer, and Lyle had to run it alone. Later Lyle Kjesbo was experiencing health problems, which led to the family selling their restaurant to pay for his medical expenses.
Owner's Bob and Susan Abel were able to get into contact with the original owners of the receipt to acquire all the original recipes from the Kjesbo brothers. "It was important to get the original receipt, for one to use the name of the company, and to get the closest thing to the original taco villa", Said Susan Abel Daughter in Law of Bob Abel. Susan Abel will be in charge of running the new Taco Villa location.
The New Taco Villa owners said they want to do more for the community and bring back the original Taco Villa that all residents known to Love. Their future plans is to have Catering for their restaurant.
The restaurants hours are 11 a.m. to 6 p.m. Tuesday through Friday, and 11 a.m. to 4 p.m. Saturday. The Owner's said once they acquire enough staff, that hours are to change.

redpajama_set_name: RedPajamaCommonCrawl


text:
Valkeapää est un patronyme finnois pouvant désigner :
 Jukka-Pekka Valkeapää (1977-), réalisateur finlandais ;
 Nils-Aslak Valkeapää (1943-2001), écrivain et musicien finlandais de culture same ;
 Pertti Valkeapää (1951-), joueur finlandais de hockey sur glace.

Patronyme finnois

redpajama_set_name: RedPajamaWikipedia


text:
Baseball: Spring Training Games in Florida, Arizona Canceled
Major League Baseball will suspend operations, including spring training and the first two weeks of the regular season, in response to the spread of coronavirus, the league announced.
The MLB season was originally set to start March 26, but Opening Day will now occur no earlier than April 9. MLB is the fourth major American pro sports league to suspend its season due to the outbreak of COVID-19, joining the NBA, NHL and MLS.
The decision comes after the league's owners discussed plans on a conference call Thursday afternoon. MLB ceased operations at 4 p.m. ET on Thursday, but spring training games were played as scheduled in Florida on Thursday afternoon with fans in attendance.
Minor League Baseball also announced the start of its season would be delayed, and MLB said that qualifying for the World Baseball Classic was postponed indefinitely.
Previous NBA Suspends its Season
Next March Madness: NCAA Tournaments Canceled Due to Coronavirus


text:
Britney Spears, The Weeknd, and More Celebs Love This Miami Beach Hotel — See Inside Its Massive Penthouse Suite
It's easy to see why stars flock to The Setai's glamorous oceanfront suites.
By Nina Ruggiero
Everyone wants to feel like a celebrity on vacation, and during COVID-19, travelers with the means are seeking exclusive experiences more than ever — from private jets and hotel buyouts to yacht and villa rentals — now for health and safety reasons even over the Instagram cred. But in Miami Beach, known in the "before time" for its packed nightclubs and boisterous beaches, true privacy is found only by those who know where to look.
That's likely why, when visiting Miami in the fall, singer The Weeknd chose The Setai — a favorite of Britney Spears and reportedly even Beyonce and Madonna. The Setai's oceanfront and oceanview suites sit alongside private residences in a separate building overlooking its three pools (one cold, one medium, one warm, so you can always find your perfect temperature) and of course South Beach's signature sugar sand and turquoise water.
Credit: Nina Ruggiero
Two-bedroom suites, with ocean and city views from their stunning, glass-encased living rooms and expansive, wrap-around terraces, start at $2,200 a night ($5,800 during peak season). Request a corner configuration with an ocean-facing bed — there's arguably no better master bedroom view on South Beach.
Credit: The Setai
Starting at $30,000 a night, the 10,000-square-foot, four-bedroom penthouse, The Weeknd's suite of choice, spans the entire 40th floor and boasts a rooftop pool, hot tub, and terrace, along with its own dining room and stocked kitchen, so guests never need to leave. If they do decide to venture out, they can do so without wandering through the main hotel's common spaces.
Guests who book these suites, which range from one to four bedrooms, have access to round-trip airport transfers, daily breakfasts (in suite or at Jaya, the hotel's popular restaurant with a serene, pool-centered courtyard), valet parking, and more.
The Setai is taking COVID-19 seriously, testing staffers monthly and adding in a 24-hour buffer for enhanced cleaning measures after a guest checks out. And guests have noticed — in September, when most were only dipping their toes into travel again for the first time, occupancy was up 10% year over year.
The hotel's popular Jazz Brunch, paused by COVID, returns for Christmas Day, and on New Year's Eve, executive chef Vijay Veena will host a five-course "Silk Road" dining experience in Jaya's courtyard that promises "exotic entertainment" and free-flowing champagne.
A longtime hotspot for international travelers and Miami's most cosmopolitan visitors, The Setai has cemented itself as a local favorite and responsible, staycation-worthy venue during COVID-19, signaling a successful future once we're able to navigate the globe freely once again.
Nina Ruggiero is Travel + Leisure's deputy digital editor. A New Yorker living in Los Angeles, she's happiest on a beach, a cobblestone street, or in a hotel bathtub with a view. Find her on Instagram @ninamarienyc.


text:
Bill Shorten says he 'doesn't like' Adani's mega-mine but 'can't ban it because of sovereign risk'
By political reporter Allyson Horn
Posted Fri 2 Mar 2018 at 2:44am Friday 2 Mar 2018 at 2:44am Fri 2 Mar 2018 at 2:44am , updated Fri 2 Mar 2018 at 3:07am Friday 2 Mar 2018 at 3:07am Fri 2 Mar 2018 at 3:07am
Federal Opposition leader Bill Shorten at speaking at the NSW Labor Conference in Sydney on Sunday July 30. (AAP)
abc.net.au/news/shorten-says-he-cant-ban-adani-mine-because-of-sovereign-risk/9503100
Opposition Leader Bill Shorten has launched an attack on the Adani coal mine, but declared he cannot scrap it because of sovereign risk.
Mr Shorten criticised the economical viability and environmental credentials of the proposed Queensland project, also proclaiming, "I don't like it".
But after a week of pressure to clarify his intentions, Mr Shorten admitted he cannot simply ban the mine.
"I make no secret that I don't like it very much" he said.
"But ... I also respect the principle of Australian politics. That is, one government enters into contracts, then a future Government can't just rip them up.
"To do so would be sovereign risk."
Sovereign risk, in this instance, refers to the risk of Adani being detrimentally affected by a change in the Government's policy or position.
The Opposition Leader's plans for the Carmichael coal mine have been under scrutiny ever since prominent businessman Geoff Cousins claimed Mr Shorten assured him the mine could be revoked if Labor wins government.
Sorry, this video is not yet available or has expired
Geoff Cousins says Bill Shorten told him Labor would reconsider the Adani licence. (Leigh Sales)
Today, Mr Shorten said Adani had promised too much, but delivered too little.
"I don't think the project is going to materialise, the Adani mining company seems to have missed plenty of deadlines, it doesn't seem to stack up financially, commercially or indeed environmentally," he said.
"[But] you can't simply ban it and create sovereign risk.
"No party, even the Greens political party, can simply say they can simply ban something. You've got to adhere to the law."
It had been reported by Sky News that Mr Shorten wanted to take a public stand on blocking the mine, but was talked down by senior colleagues.
Under questioning by reporters, he denied the conversation.
"No," he said.
"No prime minister can simply ignore the law. No prime minister worth their salt should simply engage in massive sovereign risk.
"We're not going to make Australia a nation who has a reputation for changing existing contracts."
Posted 2 Mar 2018 2 Mar 2018 Fri 2 Mar 2018 at 2:44am , updated 2 Mar 2018 2 Mar 2018 Fri 2 Mar 2018 at 3:07am
Sceptical Shorten open to revoking Adani mine licence, businessman says
Labor told Adani unlikely to be able to challenge any scrapping of mine licence
Activism and Lobbying
Mining (Rural)
Mining Environmental Issues
Mining and Metals Industry
9m ago 9 minutes ago Tue 31 Jan 2023 at 9:34pm


Welcome to the new and improved Doodle Art Alley! For the longest time I have been wanting to switch my hosting site so that I can get rid of Media Fire (the file sharing company I used to hold all my coloring pages). I hated that visitors had to download the pages before they could print. But I knew the work involved would be more than I wanted to put in. But I finally bit the bullet and did it - and guess what...it wasn't too bad. (of course I can say that now that it's over) Now you don't have to download. Yea!!! I hope you are as excited as I am.
It takes a lot of work to keep up these websites and without tons of visitors like yourself, I wouldn't be able to maintain them. Please share with friends and family. Thanks!


Childhood is the perfect time to solidify your kids' love of the outdoors. These camps are here to help.
When it comes to plotting the perfect summer for your kids, balance is key. Aim for a mix of unstructured outside play time—backyard sprinkler tag, rambling along local trails, tire swings—and organized adventures that will give them the skills and support they need to take their love of the outdoors well into adulthood. These five picks do an admirable job.
Set on 6,000 acres of meadows and ponderosa forests, Sanborn combines traditional sleep-away camp with extended backcountry expeditions. The largest private camp in the country, it has access to more 14,000-foot peaks than any other program in Colorado, and kids can head out on two- to five-day backpacking and horsepacking trips to bag summits, cast for trout, climb granite crags, and explore the high country.
What's nice about Sanborn is that they don't try to organize the whole day. Back in camp, kids can chose from more than 16 activities, including bouldering, anoeing, tubing, and a ropes course. Combine that with classic camp fare like archery, arts and crafts, ghost stories, and roasting marshmallows, and you have a recipe for a summer they won't forget. Monthlong sessions for girls and boys 9 to 17, $4,500; two-week sessions for 7- to 10-year olds, $2,400.
Back in 2004, founder Aimee Frazier started taking her children and their friends on hikes along the rugged beaches and trails near their home in coastal Washington. Nine years later, these impromptu outings have grown into a year-round education program dedicated to fostering a connection between young people and the natural world, inspiring kids to give back to the environment and their communities and teaching them fundamental backcountry skills and outdoor leadership.
Wild Whatcom's day camps are full of outdoor play: rock-hopping, waterfall hunting, scrambling, and more. Along the way, kids learn to identify edible plants, build fires, and navigate with a compass; each week ends with an overnight campout. Tweens and teens can sign up for three- to ten-day backcountry expeditions, from beginner-friendly backpacking rambles along the Baker River to the more ambitious, 26-mile Cascades crossing.
Five-day camps for 6 to 13-year-olds, from $175; multiday backpacking adventures for kids 9 and up, from $320.
Thanks to the efforts of the National Interscholastic Cycling Association (NICA) mountain biking is the newest and fastest-growing high school sport in the country, with more than a thousand racers in seven states and plans to go coast-to-coast by the end of the year.
This summer, Moab-based outfitter Western Spirit Adventures is teaming up with NICA to launch two new backcountry skills camps, in Sun Valley and Durango, for girls and boys ages 15 to 18. In Colorado, aspiring student racers will bomb down a 2,000-foot singletrack descent in Telluride, ride technical alpine terrain along the Colorado Trail and Durango's marquis ride, Hermosa Creek. Sun Valley campers log an average of 20 miles a day on narrow, steep trails, many of which are above 10,000 feet. At both, campers spend their nights camping out trailside. Six-day camps, ages 15-18, $1,185.
This renowned, family-run kayaking school on the banks of the Salmon River, in remote Forks of Salmon, California, has groomed many a competitive paddler—starting with the owner's son, Rush Sturges, who went on to win the junior world freestyle championships and shoot first descents around the world.
While Otter Bar offers weeklong whitewater kayaking camps for adults and kids, the last week of July is dedicated to introducing the sport to river rats ages 10 to 14. Otter Bar's Not Quite Grown Ups program (NQGU) teaches beginning and intermediate paddlers boat control, basic strokes, wet exits, and Eskimo rolls on the lodge's flatwater pond before graduating to the mellow, clear-water rapids on the Klamath River. NQGU camp runs concurrently with adult camps at the main lodge, so you can run Class II rapids while your kids are learning to roll, and meet up later to swim in the river. Call it babysitting, with major benefits. The week fills up fast, so book early. $950.
Studies show that preschool is the best time for kids to get interested in outdoor adventure. Problem is, there is a dearth of summer camps willing to let your toddler loose on a climbing wall.
Not any more. With a handful of day camps in Denver and Boulder, Avid4Adventure puts kayaking, climbing, and biking within reach of three-and-four-year olds. Preschoolers learn to paddle hardshell whitewater kayaks in a two-foot-deep tank, top-rope on an artificial climbing wall, and shred an off-road Strider balance bike course, using top-of-the line gear from Jackson kayaks and Specialized. With five different adventures in five days— leave-no-trace exploring, arts and crafts, and yoga round out the week—the camp's goal is to create well-rounded outdoor enthusiasts who, by the time they're seven, have graduated to real rock, rivers, and singletrack. Five-day sessions for kids ages 3-12, $375.
Bonus: Avid4 recently partnered with Outside to launch Outside Adventure Kids, a series of adventure day camps which will launch with a pilot program in Marin this summer for kids aged 7 to 12.


text:
Museum websites
Blog del Museu
Activities for
All publics
Opening times and admission fees
Of the museum
Of the Jardí Botànic
To the Museum at the Forum Park
To the Botanical Gardens at the Montjuïc Park
To the research premises of Ciutadella Park
Evolutionary and Behavioural Ecology
Non-Arthropod Invertebrates
Explore the online collections
Acquisition of collections
Geological collections
Salvador collection
Study areas and research facilities
Natural diversity
Conservation of the Mediterranean flora
Biostratigraphy and Palaeobiogeography of the Tethys Sea
Geoarchaeology and Archaeometry
Documentary fund
Documentary products
Scientific production of the Museum
Scientific consultation of the collections
Loan of collections
The NAT
Be a part of the Museum
The Museum and society
Spaces for hire
Jardí Botànic de Barcelona
Museu Martorell
Museum Blog
NAT Award
Nat award 2019
Spinosaurus, the lost giant of the Cretaceous
Compartir a Google
The temporary exhibition Spinosaurus: the lost giant of the Cretaceous in the Museu Blau of Barcelona, presents the first known dinosaur adapted for swimming and the largest known carnivorous dinosaur. The exhibition, organized by the National Geographic Society in partnership with the University of Chicago, has been supplemented with fossils from the museum's collections, which include the remains of this singular dinosaur.
Spinosaurus, with a length of 15 meters and weighing 6.8 tonnes, is enormous – even bigger than Tyrannosaurus rex – and shows characteristics that make it unique: a skull similar to that of a crocodile, an immense dorsal crest and short hind legs for moving in water.
A full-size replica of the skeleton occupies the central space of the exhibition and is surrounded by models, fossils and audiovisual displays that recreate the fauna and ecosystem of North Africa in the Cretaceous period, 95 million years ago, when the region was an immense river delta. We can also see how modern technology applied to paleontology has made it possible to reconstruct the skeleton, and the re-creation of a full-scale model, which has been installed in the Forum square, opposite the entrance to the museum.
The journey begins with the unusual history of the discovery and rediscovery of this unique African dinosaur, which has taken a century to complete. Spinosaurus first saw the light in 1912, when the German paleontologist Ernst Stromer discovered a skeleton in the Sahara Desert (Egypt). Those fossils, currently preserved in the Munich museum, disappeared in a bomb raid during the Second World War.
More than a century after the original find, the explorers and paleontologists Nizar Ibrahim and Paul Sereno, with the collaboration of explorers and scientists from all over the world, undertook an adventure accompanied by mystery and coincidences that, with perseverance and scientific rigour, led them to rediscover a skeleton even more complete than Stromer's lost specimen.
The results of this research on the new find, which revealed the size and semi-aquatic lifestyle of Spinosaurus, were published in the journal Science in 2014 and are the origin of this exhibition, which was inaugurated in the National Geographic Museum in Washington.
Museu Blau: temporary exhibition gallery
Tuesday to Saturday, from 10 to 19h
Sunday and holidays, from 10 to 20 h
Closed: Mondays except holidays, January 1, May 1, June 24 and December 25
Admission fee:
Exhibition ticket Spinosaurus Normal: 6,5 € Reducida (*): 4,50 € (*) Consulteu les categories d'entrada reduïda
Combined ticket: 'Planeta Vida' + Spinosaurus 10,5 €
Produced:
Nationat Geographic Society and adapted by Museu de Ciències Naturals de Barcelona
Monkeys. A primate story
1919 - 2019 Any Ramon Magalef
Tue-Fri: from 10 to 18 h
Sat: from 10 to 19h
Sun and holidays: from 10 to 20h
Mo - Su: from 10 to 17h
We use own cookies and third parties to improve our services. If you continue browsing, we consider that you accep this use You can change the settings and get more information at legal notes.Ok


text:
District 214 highlights career exploration opportunities at Future Ready Showcase
Parents of students in fourth through eighth grades in High School District 214's boundaries are invited to the Future Ready Showcase on Monday, May 14, an evening that shows District 214's Career Pathways program in action.
Hersey's State Level Successes
Several Hersey groups have had success at state-level competitions.
District 214 Board appoints Prospect High School administrator
The High School District 214 Board of Education on February 8 appointed Christina Athanasopoulos as Prospect High School's Division Head of World Language and Social Science for the 2018-2019 school year. Athanasopoulos, an Advanced Placement Psychology teacher at John Hersey High School, has extensive experience in the social science field.
Grants help District 214 engage more students in manufacturing and STEM careers
Three grants provided by GCAMP, or Golden Corridor Advanced Manufacturing Partnership, are helping High School District 214 engage more students in manufacturing and STEM careers. The grants, totaling approximately $7,300, fund an after-school program for middle school students, underwrite a portion of a high-mileage vehicle competition for high school students, and provide VEX robotics kits for an early high school credit robotics class.
District 214 basketball returns to Arlington High
The Grace Gym in the former Arlington High School will come alive again with the competition of District 214 basketball when the Education Foundation, in partnership with the District and the Alumni Council, hosts a three-game varsity basketball event.
EIU and District 214 partnership enhances college opportunities for students and adult learners
A new partnership between Eastern Illinois University (EIU) and High School District 214 will increase college access and affordability for high school students and adult learners in the northwest suburbs.
Three District 214 students participate in all-state theatre production
Three High School District 214 students were selected to participate in the 2018 Illinois High School Theatre Festival earlier this month.
District 214 leader named finalist for National Superintendent of the Year
The Illinois Superintendent of the Year, Dr. David Schuler of High School District 214 in the northwest suburbs of Cook County, is one of four finalists for the National Superintendent of the Year according to the American Association of School Administrators (AASA).
Dr. David R. Schuler named Illinois Superintendent of the Year
Dr. David R. Schuler of High School District 214 has been named the 2018 Illinois Superintendent of the Year by the Illinois Association of School Administrators (IASA).


text:
HomeBookingsLive Acts
Jencarlos Canela is a multitalented singer, songwriter and actor best known for his uplifting Latin pop music and starring roles in telenovelas and dramas. Jencarlos made his screen debut in 2009 with a recurring role as Alfredo Torres on the hit Latin soap-opera Pecados Ajenos.
The success of this part led to further acting opportunities, including a lead role in Más Sabe el Diablo, a highly popular telenovela that spawned a successful film adaptation, and another central part in Mi corazón insiste en Lola Volcán with Carmen Villalobos, earning him the award for Novela of the Year and Favorite Lead Actor at Premios Tu Mundo 2012. In 2015 Jencarlos made his English-language television debut, starring in Eva Longoria's NBC show Telenovela – this has been a fruitful partnership, with the actor returning in 2018 to star alongside Longoria in ABC'S drama Grand Hotel.
Jencarlos' music career has matched the success of his television work: he's released three highly popular studio albums, culminating in the confessional pop record 'Jen' released on Universal Music Latin. His first two albums reached No. 1 on the Latin Pop chart, with 'Búscame' earning a Gold certification. The artist was awarded 'Song of Summer' at the 2013 Premios Junventud awards for his smash hit 'I Love It'.
Booked by
Mark Swartz
Book Jencarlos Canela
Please select oneUKAfricaAsiaAustralia & New ZealandCISEuropeIndiaMiddle EastNorth AmericaSouth America
Would you like to receive exclusive information about our new signings, tours and rosters? We only send you information that you tell us is relevant, and won't share your email with anyone else.
By submitting this form, you consent to us using the details you provide to respond to your enquiry. A backup of these details will be held, but can only be accessed by authorised individuals. If you would like your data to be removed from our backups, please email info@mn2s.com.
Los del Rio


Discussion in 'Classic Manual Cameras' started by davecaz, Jun 9, 2018.
Going through another box of eBay fodder, I came to a Konica FC-1. It's in really nice cosmetic condition, and the lens looks great, but it won't wind or fire. The mirror is in the return position, not stuck. It has a built-in meter and an AE position on the aperture ring, so I thought "dead batteries?"
Opening up what I presume to be the battery compartment, I found this mystery object. Anyone have a clue? It seems determined to remain firmly in place.
The owner's manual states: "Turn the cover of the battery chamber upside down, put its edge under the red mark of the battery case and pull up the case to remove the case from the battery chamber." It is supposed to hold 4 LR44 batteries.
A nice camera to use (like the FS-1 without the winder) and not that common, I think.
m42 dave beat me to it. Butkus has a manual, in this link, In page 12 it explains how to change the batteries. That plastic thing is a battery holder. As said above it takes four LR-44, also SR-44 or the "76" equivalent types.
Please do send Mr Butkus a donation if this is useful.
Thanks, Dave and Julio. I should have RTFM before posting, but I honestly thought this was some jerry-rigged modification, so I didn't expect the manual to have the answer. As it turns out, it IS jerry-rigged, but by design.
This is the kind of "clever" engineering that drives companies out of business. After you pry the thing out of the camera and open it up, this is what it looks like.
And from the bottom, when it's closed and full of batteries.
I would hate to have to attempt changing batteries in this thing in the field. You'd be juggling the camera, the battery compartment cover, the "caddy", 4 dead batteries and 4 new batteries while keeping track of which is which and, oh yeah, the sharpened pencil or other pointy implement that is required to poke the batteries up out of the caddy from the bottom. It was a PITA while sitting at my desk. Apparently, it connects the batteries in parallel because, with 4 fresh 1.5v batteries installed, it outputs ~1.5 volts, rather than the 6v I was expecting. Which explains why they didn't stack them but, hello?!?, ever hear of AA, or even AAA, batteries?
And, after all that, the camera still doesn't work. No LEDs in the finder, shutter won't fire, nuthin'. It's too bad, because I kind of liked the look and feel of the camera, and I've read that the Konica lenses are generally excellent.


text:
import * as express from 'express';

import { BasicCard, Carousel, List, OptionItem, RichResponse } from './response-builder';
import { ActionPaymentTransactionConfig, Cart, GooglePaymentTransactionConfig, LineItem,
         Location, Order, OrderUpdate, TransactionDecision, TransactionValues } from './transactions';

/**
 * List of standard intents that the app provides.
 * @actionssdk
 * @dialogflow
 */
export enum StandardIntents {
    /** App fires MAIN intent for queries like [talk to $app]. */
    MAIN,
    /** App fires TEXT intent when action issues ask intent. */
    TEXT,
    /** App fires PERMISSION intent when action invokes askForPermission. */
    PERMISSION,
    /** App fires OPTION intent when user chooses from options provided. */
    OPTION,
    /** App fires TRANSACTION_REQUIREMENTS_CHECK intent when action sets up transaction. */
    TRANSACTION_REQUIREMENTS_CHECK,
    /** App fires DELIVERY_ADDRESS intent when action asks for delivery address. */
    DELIVERY_ADDRESS,
    /** App fires TRANSACTION_DECISION intent when action asks for transaction decision. */
    TRANSACTION_DECISION,
    /** App fires CONFIRMATION intent when requesting affirmation from user. */
    CONFIRMATION,
    /** App fires DATETIME intent when requesting date/time from user. */
    DATETIME,
    /** App fires SIGN_IN intent when requesting sign-in from user. */
    SIGN_IN,
    /** App fires NO_INPUT intent when user doesn't provide input. */
    NO_INPUT,
    /** App fires CANCEL intent when user exits app mid-dialog. */
    CANCEL,
    /** App fires NEW_SURFACE intent when requesting handoff to a new surface from user. */
    NEW_SURFACE,
    /** App fires REGISTER_UPDATE intent when requesting the user to register for proactive updates. */
    REGISTER_UPDATE,
    /** App receives CONFIGURE_UPDATES intent to indicate a custom REGISTER_UPDATE intent should be sent. */
    CONFIGURE_UPDATES
}

/**
 * List of supported permissions the app supports.
 * @actionssdk
 * @dialogflow
 */
export enum SupportedPermissions {
    /**
     * The user's name as defined in the
     * {@link https://developers.google.com/actions/reference/conversation#UserProfile|UserProfile object}
     */
    NAME,
    /**
     * The location of the user's current device, as defined in the
     * {@link https://developers.google.com/actions/reference/conversation#Location|Location object}.
     */
    DEVICE_PRECISE_LOCATION,
    /**
     * City and zipcode corresponding to the location of the user's current device, as defined in the
     * {@link https://developers.google.com/actions/reference/conversation#Location|Location object}.
     */
    DEVICE_COARSE_LOCATION,
    /**
     * Confirmation to receive proactive content at any time from the app.
     */
    UPDATE
}

/**
 * List of built-in argument names.
 * @actionssdk
 * @dialogflow
 */
export enum BuiltInArgNames {
    /**
     * Permission granted argument.
     */
    PERMISSION_GRANTED,
    /**
     * Option selected argument.
     */
    OPTION,
    /**
     * Transaction requirements check result argument.
     */
    TRANSACTION_REQ_CHECK_RESULT,
    /**
     * Delivery address value argument.
     */
    DELIVERY_ADDRESS_VALUE,
    /**
     * Transactions decision argument.
     */
    TRANSACTION_DECISION_VALUE,
    /**
     * Confirmation argument.
     */
    CONFIRMATION,
    /**
     * DateTime argument.
     */
    DATETIME,
    /**
     * Sign in status argument.
     */
    SIGN_IN,
    /**
     * Reprompt count for consecutive NO_INPUT intents.
     */
    REPROMPT_COUNT,
    /**
     * Flag representing finality of NO_INPUT intent.
     */
    IS_FINAL_REPROMPT,
    /**
     * New surface value argument.
     */
    NEW_SURFACE,
    /** Update registration value argument. */
    REGISTER_UPDATE
}

/**
 * List of possible conversation stages, as defined in the
 * {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}.
 * @actionssdk
 * @dialogflow
 * @deprecated Use {@link ConversationTypes} instead.
 */
export type ConversationStages = ConversationTypes;

/**
 * List of possible conversation types, as defined in the
 * {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}.
 * @actionssdk
 * @dialogflow
 */
export enum ConversationTypes {
    /**
     * Unspecified conversation state.
     */
    UNSPECIFIED,
    /**
     * A new conversation.
     */
    NEW,
    /**
     * An active (ongoing) conversation.
     */
    ACTIVE,
}

/**
 * List of surface capabilities supported by the app.
 * @actionssdk
 * @dialogflow
 */
export enum SurfaceCapabilities {
    /**
     * The ability to output audio.
     */
    AUDIO_OUTPUT,
    /**
     * The ability to output on a screen
     */
    SCREEN_OUTPUT,
}

/**
 * List of possible user input types.
 * @actionssdk
 * @dialogflow
 */
export enum InputTypes {
    /**
     * Unspecified.
     */
    UNSPECIFIED,
    /**
     * Input given by touch.
     */
    TOUCH,
    /**
     * Input given by voice (spoken).
     */
    VOICE,
    /**
     * Input given by keyboard (typed).
     */
    KEYBOARD
}

/**
 * List of possible sign in result status values.
 * @actionssdk
 * @dialogflow
 */
export enum SignInStatus {
    /**
     * Unknown status.
     */
    UNSPECIFIED,
    /**
     * User successfully completed the account linking.
     */
    OK,
    /**
     * Cancelled or dismissed account linking.
     */
    CANCELLED,
    /**
     * System or network error.
     */
    ERROR
}

/**
 * Possible update trigger time context frequencies.
 */
export enum TimeContextFrequency {
    DAILY
}

/**
 * User provided date/time info.
 */
export interface DateTime {
    date: {
        year: number;
        month: number;
        day: number;
    };
    time: {
        hours: number;
        minutes: number;
        seconds: number;
        nanos: number;
    };
}

/**
 * User's permissioned name info.
 */
export interface UserName {
    /** User's display name. */
    displayName: string;
    /** User's given name. */
    givenName: string;
    /** User's family name. */
    familyName: string;
}

/**
 * User's permissioned device location.
 */
export interface DeviceLocation {
    /** {latitude, longitude}. Requested with SupportedPermissions.DEVICE_PRECISE_LOCATION. */
    coordinates: object;
    /** Full, formatted street address. Requested with SupportedPermissions.DEVICE_PRECISE_LOCATION. */
    address: string;
    /** Zip code. Requested with SupportedPermissions.DEVICE_COARSE_LOCATION. */
    zipCode: string;
    /** Device city. Requested with SupportedPermissions.DEVICE_COARSE_LOCATION. */
    city: string;
}

/**
 * User object.
 */
export interface User {
    /** Random string ID for Google user. */
    userId: string;
    /** User name information. Null if not requested with {@link AssistantApp#askForPermission|askForPermission(SupportedPermissions.NAME)}. */
    userName: UserName;
    /** Unique Oauth2 token. Only available with account linking. */
    accessToken: string;
    /**
     * Timestamp for the last access from the user.
     * Retrieve using app.getLastSeen() to get a Date object or null if never seen.
     */
    lastSeen: string;
    /**
     * A string persistent across sessions.
     * Retrieved and set using app.userStorage which allows you to store it like an JSON object
     * which is abstracted for convenience by the client library.
     */
    userStorage: string;
}

/**
 * Actions on Google Surface.
 */
export interface Surface {
    /** Capabilities of the surface. */
    capabilities: Capability[];
}

/**
 * Surface capability.
 */
export interface Capability {
    /** Name of the capability. */
    name: string;
}

/**
 * Intent Argument. For incoming intents, the argument value can be retrieved
 * using {@link AssistantApp#getArgument}.
 */
export interface IntentArgument {
    /** Name of the argument. */
    name: string;
    /** Text value of the argument. */
    textValue: string;
}

/**
 * The Actions on Google client library AssistantApp base class.
 *
 * This class contains the methods that are shared between platforms to support the conversation API
 * protocol from Assistant. It also exports the 'State' class as a helper to represent states by
 * name.
 */
export class AssistantApp {
    /**
     * The session state.
     */
    state: string;

    /**
     * The session data in JSON format.
     */
    data: object;

    /**
     * The data persistent across sessions in JSON format.
     * It exists in the same context as getUser().userId
     *
     * @example
     * // Actions SDK
     * const app = new ActionsSdkApp({request: request, response: response});
     * app.userStorage.someProperty = 'someValue';
     * // Dialogflow
     * const app = new DialogflowApp({request: request, response: response});
     * app.userStorage.someProperty = 'someValue';
     */
    userStorage: object;

    /**
     * List of standard intents that the app provides.
     * @actionssdk
     * @dialogflow
     */
    readonly StandardIntents: typeof StandardIntents;

    /**
     * List of supported permissions the app supports.
     * @actionssdk
     * @dialogflow
     */
    readonly SupportedPermissions: typeof SupportedPermissions;

    /**
     * List of built-in argument names.
     * @actionssdk
     * @dialogflow
     */
    readonly BuiltInArgNames: typeof BuiltInArgNames;

    /**
     * List of possible conversation stages, as defined in the
     * {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}.
     * @actionssdk
     * @dialogflow
     * @deprecated Use {@link ConversationTypes} instead.
     */
    readonly ConversationStages: typeof ConversationTypes;

    /**
     * List of possible conversation types, as defined in the
     * {@link https://developers.google.com/actions/reference/conversation#Conversation|Conversation object}.
     * @actionssdk
     * @dialogflow
     */
    readonly ConversationTypes: typeof ConversationTypes;

    /**
     * List of surface capabilities supported by the app.
     * @actionssdk
     * @dialogflow
     */
    readonly SurfaceCapabilities: typeof SurfaceCapabilities;

    /**
     * List of possible user input types.
     * @actionssdk
     * @dialogflow
     */
    readonly InputTypes: typeof InputTypes;

    /**
     * List of possible sign in result status values.
     * @actionssdk
     * @dialogflow
     */
    readonly SignInStatus: typeof SignInStatus;

    /**
     * Values related to supporting {@link Transactions}.
     */
    readonly Transactions: typeof TransactionValues;

    /**
     * Possible update trigger time context frequencies.
     */
    readonly TimeContextFrequency: typeof TimeContextFrequency;

    // ---------------------------------------------------------------------------
    //                   Public APIs
    // ---------------------------------------------------------------------------

    /**
     * Handles the incoming Assistant request using a handler or Map of handlers.
     * Each handler can be a function callback or Promise.
     *
     * @example
     * // Actions SDK
     * const app = new ActionsSdkApp({request: request, response: response});
     *
     * function mainIntent (app) {
     *   const inputPrompt = app.buildInputPrompt(true, '<speak>Hi! <break time="1"/> ' +
     *         'I can read out an ordinal like ' +
     *         '<say-as interpret-as="ordinal">123</say-as>. Say a number.</speak>',
     *         ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
     *   app.ask(inputPrompt);
     * }
     *
     * function rawInput (app) {
     *   if (app.getRawInput() === 'bye') {
     *     app.tell('Goodbye!');
     *   } else {
     *     const inputPrompt = app.buildInputPrompt(true, '<speak>You said, <say-as interpret-as="ordinal">' +
     *       app.getRawInput() + '</say-as></speak>',
     *         ['I didn\'t hear a number', 'If you\'re still there, what\'s the number?', 'What is the number?']);
     *     app.ask(inputPrompt);
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(app.StandardIntents.MAIN, mainIntent);
     * actionMap.set(app.StandardIntents.TEXT, rawInput);
     *
     * app.handleRequest(actionMap);
     *
     * // Dialogflow
     * const app = new DialogflowApp({request: req, response: res});
     * const NAME_ACTION = 'make_name';
     * const COLOR_ARGUMENT = 'color';
     * const NUMBER_ARGUMENT = 'number';
     *
     * function makeName (app) {
     *   const number = app.getArgument(NUMBER_ARGUMENT);
     *   const color = app.getArgument(COLOR_ARGUMENT);
     *   app.tell('Alright, your silly name is ' +
     *     color + ' ' + number +
     *     '! I hope you like it. See you next time.');
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(NAME_ACTION, makeName);
     * app.handleRequest(actionMap);
     *
     * @param handler The handler (or Map of handlers) for the request.
     * @actionssdk
     * @dialogflow
     */
    handleRequest(handler: ((app: AssistantApp) => any) | (Map<string, (app: AssistantApp) => any>)): void;

    /**
     * Equivalent to {@link AssistantApp#askForPermission|askForPermission},
     * but allows you to prompt the user for more than one permission at once.
     *
     * Notes:
     *
     * * The order in which you specify the permission prompts does not matter -
     *   it is controlled by the Assistant to provide a consistent user experience.
     * * The user will be able to either accept all permissions at once, or none.
     *   If you wish to allow them to selectively accept one or other, make several
     *   dialog turns asking for each permission independently with askForPermission.
     * * Asking for DEVICE_COARSE_LOCATION and DEVICE_PRECISE_LOCATION at once is
     *   equivalent to just asking for DEVICE_PRECISE_LOCATION
     *
     * @example
     * const app = new DialogflowApp({request: req, response: res});
     * const REQUEST_PERMISSION_ACTION = 'request_permission';
     * const GET_RIDE_ACTION = 'get_ride';
     *
     * function requestPermission (app) {
     *   const permission = [
     *     app.SupportedPermissions.NAME,
     *     app.SupportedPermissions.DEVICE_PRECISE_LOCATION
     *   ];
     *   app.askForPermissions('To pick you up', permissions);
     * }
     *
     * function sendRide (app) {
     *   if (app.isPermissionGranted()) {
     *     const displayName = app.getUserName().displayName;
     *     const address = app.getDeviceLocation().address;
     *     app.tell('I will tell your driver to pick up ' + displayName +
     *         ' at ' + address);
     *   } else {
     *     // Response shows that user did not grant permission
     *     app.tell('Sorry, I could not figure out where to pick you up.');
     *   }
     * }
     * const actionMap = new Map();
     * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission);
     * actionMap.set(GET_RIDE_ACTION, sendRide);
     * app.handleRequest(actionMap);
     *
     * @param context Context why the permission is being asked; it's the TTS
     *     prompt prefix (action phrase) we ask the user.
     * @param permissions Array of permissions App supports, each of
     *     which comes from AssistantApp.SupportedPermissions.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return A response is sent to Assistant to ask for the user's permission; for any
     *     invalid input, we return null.
     * @actionssdk
     * @dialogflow
     */
    askForPermissions(context: string, permissions: string[], dialogState?: object): express.Response | null;

    /**
     * Prompts the user for permission to send proactive updates at any time.
     *
     * @example
     * const app = new DialogflowApp({request, response});
     * const REQUEST_PERMISSION_ACTION = 'request.permission';
     * const PERMISSION_REQUESTED = 'permission.requested';
     * const SHOW_IMAGE = 'show.image';
     *
     * function requestPermission (app) {
     *   app.askForUpdatePermission('show.image', [
     *     {
     *       name: 'image_to_show',
     *       textValue: 'image_type_1'
     *     }
     *   ]);
     * }
     *
     * function checkPermission (app) {
     *   if (app.isPermissionGranted()) {
     *     app.tell(`Great, I'll send an update whenever I notice a change`);
     *   } else {
     *     // Response shows that user did not grant permission
     *     app.tell('Alright, just let me know whenever you need the weather!');
     *   }
     * }
     *
     * function showImage (app) {
     *   showPicture(app.getArgument('image_to_show'));
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission);
     * actionMap.set(PERMISSION_REQUESTED, checkPermission);
     * actionMap.set(SHOW_IMAGE, showImage);
     * app.handleRequest(actionMap);
     *
     * @param intent If using Dialogflow, the action name of the intent
     *     to be triggered when the update is received. If using Actions SDK, the
     *     intent name to be triggered when the update is received.
     * @param intentArguments The necessary arguments
     *     to fulfill the intent triggered on update. These can be retrieved using
     *     {@link AssistantApp#getArgument}.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return A response is sent to Assistant to ask for the user's permission; for any
     *     invalid input, we return null.
     * @actionssdk
     * @dialogflow
     */
    askForUpdatePermission(intent: string, intentArguments: IntentArgument[], dialogState?: object): express.Response | null;

    /**
     * Checks whether user is in transactable state.
     *
     * @example
     * const app = new DialogflowApp({request: request, response: response});
     * const WELCOME_INTENT = 'input.welcome';
     * const TXN_REQ_COMPLETE = 'txn.req.complete';
     *
     * let transactionConfig = {
     *     deliveryAddressRequired: false,
     *     type: app.Transactions.PaymentType.BANK,
     *     displayName: 'Checking-1234'
     * };
     * function welcomeIntent (app) {
     *   app.askForTransactionRequirements(transactionConfig);
     * }
     *
     * function txnReqCheck (app) {
     *   if (app.getTransactionRequirementsResult() === app.Transactions.ResultType.OK) {
     *     // continue cart building flow
     *   } else {
     *     // don't continue cart building
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(TXN_REQ_COMPLETE, txnReqCheck);
     * app.handleRequest(actionMap);
     *
     * @param
     *     transactionConfig Configuration for the transaction. Includes payment
     *     options and order options. Optional if order has no payment or
     *     delivery.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @actionssdk
     * @dialogflow
     */
    askForTransactionRequirements(transactionConfig?: ActionPaymentTransactionConfig | GooglePaymentTransactionConfig, dialogState?: object): express.Response | null;

    /**
     * Asks user to confirm transaction information.
     *
     * @example
     * const app = new DialogflowApp({request: request, response: response});
     * const WELCOME_INTENT = 'input.welcome';
     * const TXN_COMPLETE = 'txn.complete';
     *
     * let transactionConfig = {
     *     deliveryAddressRequired: false,
     *     type: app.Transactions.PaymentType.BANK,
     *     displayName: 'Checking-1234'
     * };
     *
     * let order = app.buildOrder();
     * // fill order cart
     *
     * function welcomeIntent (app) {
     *   app.askForTransaction(order, transactionConfig);
     * }
     *
     * function txnComplete (app) {
     *   // respond with order update
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(TXN_COMPLETE, txnComplete);
     * app.handleRequest(actionMap);
     *
     * @param order Order built with buildOrder().
     * @param
     *     transactionConfig Configuration for the transaction. Includes payment
     *     options and order options.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response
     * @dialogflow
     */
    askForTransactionDecision(order: Order, transactionConfig: ActionPaymentTransactionConfig | GooglePaymentTransactionConfig, dialogState?: object): express.Response | null;

    /**
     * Asks the Assistant to guide the user to grant a permission. For example,
     * if you want your app to get access to the user's name, you would invoke
     * the askForPermission method with a context containing the reason for the request,
     * and the AssistantApp.SupportedPermissions.NAME permission. With this, the Assistant will ask
     * the user, in your agent's voice, the following: '[Context with reason for the request],
     * I'll just need to get your name from Google, is that OK?'.
     *
     * Once the user accepts or denies the request, the Assistant will fire another intent:
     * assistant.intent.action.PERMISSION with a boolean argument: AssistantApp.BuiltInArgNames.PERMISSION_GRANTED
     * and, if granted, the information that you requested.
     *
     * Read more:
     *
     * * {@link https://developers.google.com/actions/reference/conversation#ExpectedIntent|Supported Permissions}
     * * Check if the permission has been granted with {@link AssistantApp#isPermissionGranted|isPermissionsGranted}
     * * {@link AssistantApp#getDeviceLocation|getDeviceLocation}
     * * {@link AssistantApp#getUserName|getUserName}
     *
     * @example
     * const app = new DialogflowApp({request: req, response: res});
     * const REQUEST_PERMISSION_ACTION = 'request_permission';
     * const GET_RIDE_ACTION = 'get_ride';
     *
     * function requestPermission (app) {
     *   const permission = app.SupportedPermissions.NAME;
     *   app.askForPermission('To pick you up', permission);
     * }
     *
     * function sendRide (app) {
     *   if (app.isPermissionGranted()) {
     *     const displayName = app.getUserName().displayName;
     *     app.tell('I will tell your driver to pick up ' + displayName);
     *   } else {
     *     // Response shows that user did not grant permission
     *     app.tell('Sorry, I could not figure out who to pick up.');
     *   }
     * }
     * const actionMap = new Map();
     * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission);
     * actionMap.set(GET_RIDE_ACTION, sendRide);
     * app.handleRequest(actionMap);
     *
     * @param context Context why permission is asked; it's the TTS
     *     prompt prefix (action phrase) we ask the user.
     * @param permission One of the permissions Assistant supports, each of
     *     which comes from AssistantApp.SupportedPermissions.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant.
     * @return A response is sent to the Assistant to ask for the user's permission;
     *     for any invalid input, we return null.
     * @actionssdk
     * @dialogflow
     */
    askForPermission(context: string, permission: string, dialogState?: object): express.Response | null;

    /**
     * Returns true if the request follows a previous request asking for
     * permission from the user and the user granted the permission(s). Otherwise,
     * false. Use with {@link AssistantApp#askForPermissions|askForPermissions}.
     *
     * @example
     * const app = new ActionsSdkApp({request: request, response: response});
     * // or
     * const app = new DialogflowApp({request: request, response: response});
     * app.askForPermissions("To get you a ride", [
     *   app.SupportedPermissions.NAME,
     *   app.SupportedPermissions.DEVICE_PRECISE_LOCATION
     * ]);
     * // ...
     * // In response handler for subsequent intent:
     * if (app.isPermissionGranted()) {
     *  // Use the requested permission(s) to get the user a ride
     * }
     *
     * @return true if permissions granted.
     * @dialogflow
     * @actionssdk
     */
    isPermissionGranted(): boolean;

    /**
     * Asks user for delivery address.
     *
     * @example
     * // For DialogflowApp:
     * const app = new DialogflowApp({request, response});
     * const WELCOME_INTENT = 'input.welcome';
     * const DELIVERY_INTENT = 'delivery.address';
     *
     * function welcomeIntent (app) {
     *   app.askForDeliveryAddress('To make sure I can deliver to you');
     * }
     *
     * function addressIntent (app) {
     *   const postalCode = app.getDeliveryAddress().postalAddress.postalCode;
     *   if (isInDeliveryZone(postalCode)) {
     *     app.tell('Great looks like you\'re in our delivery area!');
     *   } else {
     *     app.tell('I\'m sorry it looks like we can\'t deliver to you.');
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(DELIVERY_INTENT, addressIntent);
     * app.handleRequest(actionMap);
     *
     * // For ActionsSdkApp:
     * const app = new ActionsSdkApp({request, response});
     * const WELCOME_INTENT = app.StandardIntents.MAIN;
     * const DELIVERY_INTENT = app.StandardIntents.DELIVERY_ADDRESS;
     *
     * function welcomeIntent (app) {
     *   app.askForDeliveryAddress('To make sure I can deliver to you');
     * }
     *
     * function addressIntent (app) {
     *   const postalCode = app.getDeliveryAddress().postalAddress.postalCode;
     *   if (isInDeliveryZone(postalCode)) {
     *     app.tell('Great looks like you\'re in our delivery area!');
     *   } else {
     *     app.tell('I\'m sorry it looks like we can\'t deliver to you.');
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(DELIVERY_INTENT, addressIntent);
     * app.handleRequest(actionMap);
     *
     * @param reason Reason given to user for asking delivery address.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant.
     * @return HTTP response.
     * @actionssdk
     * @dialogflow
     */
    askForDeliveryAddress(reason: string, dialogState?: object): express.Response | null;

    /**
     * Asks user for a confirmation.
     *
     * @example
     * const app = new DialogflowApp({ request, response });
     * const WELCOME_INTENT = 'input.welcome';
     * const CONFIRMATION = 'confirmation';
     *
     * function welcomeIntent (app) {
     *   app.askForConfirmation('Are you sure you want to do that?');
     * }
     *
     * function confirmation (app) {
     *   if (app.getUserConfirmation()) {
     *     app.tell('Great! I\'m glad you want to do it!');
     *   } else {
     *     app.tell('That\'s okay. Let\'s not do it now.');
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(CONFIRMATION, confirmation);
     * app.handleRequest(actionMap);
     *
     * @param prompt The confirmation prompt presented to the user to
     *     query for an affirmative or negative response. If undefined or null,
     *     Google will use a generic yes/no prompt.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @actionssdk
     * @dialogflow
     */
    askForConfirmation(prompt?: string, dialogState?: object): express.Response | null;

    /**
     * Asks user for a timezone-agnostic date and time.
     *
     * @example
     * const app = new DialogflowApp({ request, response });
     * const WELCOME_INTENT = 'input.welcome';
     * const DATETIME = 'datetime';
     *
     * function welcomeIntent (app) {
     *   app.askForDateTime('When do you want to come in?',
     *     'Which date works best for you?',
     *     'What time of day works best for you?');
     * }
     *
     * function datetime (app) {
     *   app.tell({speech: 'Great see you at your appointment!',
     *     displayText: 'Great, we will see you on '
     *     + app.getDateTime().date.month
     *     + '/' + app.getDateTime().date.day
     *     + ' at ' + app.getDateTime().time.hours
     *     + (app.getDateTime().time.minutes || '')});
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(DATETIME, datetime);
     * app.handleRequest(actionMap);
     *
     * @param initialPrompt The initial prompt used to ask for a
     *     date and time. If undefined or null, Google will use a generic
     *     prompt.
     * @param datePrompt The prompt used to specifically ask for the
     *     date if not provided by user. If undefined or null, Google will use a
     *     generic prompt.
     * @param timePrompt The prompt used to specifically ask for the
     *     time if not provided by user. If undefined or null, Google will use a
     *     generic prompt.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @actionssdk
     * @dialogflow
     */
    askForDateTime(initialPrompt?: string, datePrompt?: string, timePrompt?: string, dialogState?: object): express.Response | null;

    /**
     * Hands the user off to a web sign in flow. App sign in and OAuth credentials
     * are set in the {@link https://console.actions.google.com|Actions Console}.
     * Retrieve the access token in subsequent intents using
     * app.getUser().accessToken.
     *
     * @example
     * const app = new DialogflowApp({ request, response });
     * const WELCOME_INTENT = 'input.welcome';
     * const SIGN_IN = 'sign.in';
     *
     * function welcomeIntent (app) {
     *   app.askForSignIn();
     * }
     *
     * function signIn (app) {
     *   if (app.getSignInStatus() === app.SignInstatus.OK) {
     *     let accessToken = app.getUser().accessToken;
     *     app.ask('Great, thanks for signing in!');
     *   } else {
     *     app.ask('I won\'t be able to save your data, but let\'s continue!');
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(SIGN_IN, signIn);
     * app.handleRequest(actionMap);
     *
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @actionssdk
     * @dialogflow
     */
    askForSignIn(dialogState?: object): express.Response | null;

    /**
     * Requests the user to switch to another surface during the conversation.
     *
     * @example
     * const app = new DialogflowApp({ request, response });
     * const WELCOME_INTENT = 'input.welcome';
     * const SHOW_IMAGE = 'show.image';
     *
     * function welcomeIntent (app) {
     *   if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
     *     showPicture(app);
     *   } else if (app.hasAvailableSurfaceCapabilities(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
     *     app.askForNewSurface('To show you an image',
     *       'Check out this image',
     *       [app.SurfaceCapabilities.SCREEN_OUTPUT]
     *     );
     *   } else {
     *     app.tell('This part of the app only works on screen devices. Sorry about that');
     *   }
     * }
     *
     * function showImage (app) {
     *   if (!app.isNewSurface()) {
     *     app.tell('Ok, I understand. You don't want to see pictures. Bye');
     *   } else {
     *     showPicture(app, pictureType);
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(SHOW_IMAGE, showImage);
     * app.handleRequest(actionMap);
     *
     * @param context Context why new surface is requested; it's the TTS
     *     prompt prefix (action phrase) we ask the user.
     * @param notificationTitle Title of the notification appearing on
     *     new surface device.
     * @param capabilities The list of capabilities required in
     *     the surface.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @dialogflow
     * @actionssdk
     */
    askForNewSurface(context: string, notificationTitle: string, capabilities: SurfaceCapabilities[], dialogState?: object): express.Response | null;

    /**
     * Requests the user to register for daily updates.
     *
     * @example
     * const app = new DialogflowApp({ request, response });
     * const WELCOME_INTENT = 'input.welcome';
     * const SHOW_IMAGE = 'show.image';
     *
     * function welcomeIntent (app) {
     *   app.askToRegisterDailyUpdate('show.image', [
     *     {
     *       name: 'image_to_show',
     *       textValue: 'image_type_1'
     *     }
     *   ]);
     * }
     *
     * function showImage (app) {
     *   showPicture(app.getArgument('image_to_show'));
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(SHOW_IMAGE, showImage);
     * app.handleRequest(actionMap);
     *
     * @param intent If using Dialogflow, the action name of the intent
     *     to be triggered when the update is received. If using Actions SDK, the
     *     intent name to be triggered when the update is received.
     * @param intentArguments The necessary arguments
     *     to fulfill the intent triggered on update. These can be retrieved using
     *     {@link AssistantApp#getArgument}.
     * @param dialogState JSON object the app uses to hold dialog state that
     *     will be circulated back by Assistant. Used in {@link ActionsSdkApp}.
     * @return HTTP response.
     * @dialogflow
     * @actionssdk
     */
    askToRegisterDailyUpdate(intent: string, intentArguments: IntentArgument[], dialogState?: object): express.Response | null;

    /**
     * Gets the {@link User} object.
     * The user object contains information about the user, including
     * a string identifier and personal information (requires requesting permissions,
     * see {@link AssistantApp#askForPermissions|askForPermissions}).
     *
     * @example
     * const app = new DialogflowApp({request: request, response: response});
     * // or
     * const app = new ActionsSdkApp({request: request, response: response});
     * const userId = app.getUser().userId;
     *
     * @return Null if no value.
     * @actionssdk
     * @dialogflow
     */
    getUser(): User;

    /**
     * If granted permission to user's name in previous intent, returns user's
     * display name, family name, and given name. If name info is unavailable,
     * returns null.
     *
     * @example
     * const app = new DialogflowApp({request: req, response: res});
     * const REQUEST_PERMISSION_ACTION = 'request_permission';
     * const SAY_NAME_ACTION = 'get_name';
     *
     * function requestPermission (app) {
     *   const permission = app.SupportedPermissions.NAME;
     *   app.askForPermission('To know who you are', permission);
     * }
     *
     * function sayName (app) {
     *   if (app.isPermissionGranted()) {
     *     app.tell('Your name is ' + app.getUserName().displayName));
     *   } else {
     *     // Response shows that user did not grant permission
     *     app.tell('Sorry, I could not get your name.');
     *   }
     * }
     * const actionMap = new Map();
     * actionMap.set(REQUEST_PERMISSION_ACTION, requestPermission);
     * actionMap.set(SAY_NAME_ACTION, sayName);
     * app.handleRequest(actionMap);
     * @return Null if name permission is not granted.
     * @actionssdk
     * @dialogflow
     */
    getUserName(): UserName;

    /**
     * Gets the user locale. Returned string represents the regional language
     * information of the user set in their Assistant settings.
     * For example, 'en-US' represents US English.
     *
     * @example
     * const app = new DialogflowApp({request, response});
     * const locale = app.getUserLocale();
     *
     * @return User's locale, e.g. 'en-US'. Null if no locale given.
     * @actionssdk
     * @dialogflow
     */
    getUserLocale(): string;

    /**
     * Get the user's last seen time as a Date object.
     * Not supported in V1.
     *
     * @example
     * const app = new DialogflowApp({request, response});
     * const lastSeen = app.getLastSeen();
     *
     * @return User's last seen date or null if never seen
     */
    getLastSeen(): Date | null;

    /**
     * If granted permission to device's location in previous intent, returns device's
     * location (see {@link AssistantApp#askForPermissions|askForPermissions}).
     * If device info is unavailable, returns null.
     *
     * @example
     * const app = new DialogflowApp({request: req, response: res});
     * // or
     * const app = new ActionsSdkApp({request: req, response: res});
     * app.askForPermission("To get you a ride",
     *   app.SupportedPermissions.DEVICE_PRECISE_LOCATION);
     * // ...
     * // In response handler for permissions fallback intent:
     * if (app.isPermissionGranted()) {
     *   sendCarTo(app.getDeviceLocation().coordinates);
     * }
     *
     * @return Null if location permission is not granted.
     * @actionssdk
     * @dialogflow
     */
    getDeviceLocation(): DeviceLocation;

    /**
     * Gets type of input used for this request.
     * @return One of AssistantApp.InputTypes.
     *     Null if no input type given.
     * @dialogflow
     * @actionssdk
     */
    getInputType(): number | string;

    /**
     * Get the argument value by name from the current intent.
     * If the argument is included in originalRequest, and is not a text argument,
     * the entire argument object is returned.
     *
     * Note: If incoming request is using an API version under 2 (e.g. 'v1'),
     * the argument object will be in Proto2 format (snake_case, etc).
     *
     * @example
     * const app = new DialogflowApp({request: request, response: response});
     * const WELCOME_INTENT = 'input.welcome';
     * const NUMBER_INTENT = 'input.number';
     *
     * function welcomeIntent (app) {
     *   app.ask('Welcome to action snippets! Say a number.');
     * }
     *
     * function numberIntent (app) {
     *   const number = app.getArgument(NUMBER_ARGUMENT);
     *   app.tell('You said ' + number);
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(WELCOME_INTENT, welcomeIntent);
     * actionMap.set(NUMBER_INTENT, numberIntent);
     * app.handleRequest(actionMap);
     *
     * @param argName Name of the argument.
     * @return Argument value matching argName
     *     or null if no matching argument.
     * @dialogflow
     * @actionssdk
     */
    getArgumentCommon(argName: string): object;

    /**
     * Gets transactability of user. Only use after calling
     * askForTransactionRequirements. Null if no result given.
     *
     * @return One of Transactions.ResultType.
     * @dialogflow
     * @actionssdk
     */
    getTransactionRequirementsResult(): string;

    /**
     * Gets order delivery address. Only use after calling askForDeliveryAddress.
     *
     * @return Delivery address information. Null if user
     *     denies permission, or no address given.
     * @dialogflow
     * @actionssdk
     */
    getDeliveryAddress(): Location;

    /**
     * Gets transaction decision information. Only use after calling
     * askForTransactionDecision.
     *
     * @return Transaction decision data. Returns object with
     *     userDecision only if user declines. userDecision will be one of
     *     Transactions.ConfirmationDecision. Null if no decision given.
     * @dialogflow
     * @actionssdk
     */
    getTransactionDecision(): TransactionDecision;

    /**
     * Gets confirmation decision. Use after askForConfirmation.
     *
     * @return False if user replied with negative response. Null if no user
     *     confirmation decision given.
     * @dialogflow
     * @actionssdk
     */
    getUserConfirmation(): boolean | null;

    /**
     * Gets user provided date and time. Use after askForDateTime.
     *
     * @return Date and time given by the user. Null if no user
     *     date and time given.
     * @dialogflow
     * @actionssdk
     */
    getDateTime(): DateTime;

    /**
     * Gets status of user sign in request.
     *
     * @return Result of user sign in request. One of
     * DialogflowApp.SignInStatus or ActionsSdkApp.SignInStatus
     * Null if no sign in status.
     * @dialogflow
     * @actionssdk
     */
    getSignInStatus(): string;

    /**
     * Returns true if user device has a given surface capability.
     *
     * @param requestedCapability Must be one of {@link SurfaceCapabilities}.
     * @return True if user device has the given capability.
     *
     * @example
     * const app = new DialogflowApp({request: req, response: res});
     * const DESCRIBE_SOMETHING = 'DESCRIBE_SOMETHING';
     *
     * function describe (app) {
     *   if (app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)) {
     *     app.tell(richResponseWithBasicCard);
     *   } else {
     *     app.tell('Let me tell you about ...');
     *   }
     * }
     * const actionMap = new Map();
     * actionMap.set(DESCRIBE_SOMETHING, describe);
     * app.handleRequest(actionMap);
     *
     * @dialogflow
     * @actionssdk
     */
    hasSurfaceCapability(requestedCapability: SurfaceCapabilities): boolean;

    /**
     * Gets surface capabilities of user device.
     *
     * @return Supported surface capabilities, as defined in
     *     AssistantApp.SurfaceCapabilities.
     * @dialogflow
     * @actionssdk
     */
    getSurfaceCapabilities(): string[];

    /**
     * Returns the set of other available surfaces for the user.
     *
     * @return Empty if no available surfaces.
     * @actionssdk
     * @dialogflow
     */
    getAvailableSurfaces(): Surface[];

    /**
     * Returns true if user has an available surface which includes all given
     * capabilities. Available surfaces capabilities may exist on surfaces other
     * than that used for an ongoing conversation.
     *
     * @param capabilities Must be one of
     *     {@link SurfaceCapabilities}.
     * @return True if user has a capability available on some surface.
     *
     * @dialogflow
     * @actionssdk
     */
    hasAvailableSurfaceCapabilities(capabilities: SurfaceCapabilities | SurfaceCapabilities[]): boolean;

    /**
     * Returns the result of the AskForNewSurface helper.
     *
     * @return True if user has triggered conversation on a new device
     *     following the NEW_SURFACE intent.
     * @actionssdk
     * @dialogflow
     */
    isNewSurface(): boolean;

    /**
     * Returns true if the app is being tested in sandbox mode. Enable sandbox
     * mode in the (Actions console)[console.actions.google.com] to test
     * transactions.
     *
     * @return True if app is being used in Sandbox mode.
     * @dialogflow
     * @actionssdk
     */
    isInSandbox(): boolean;

    /**
     * Returns the number of subsequent reprompts related to silent input from the
     * user. This should be used along with the NO_INPUT intent to reprompt the
     * user for input in cases where the Google Assistant could not pick up any
     * speech.
     *
     * @example
     * const app = new ActionsSdkApp({request, response});
     *
     * function welcome (app) {
     *   app.ask('Welcome to your app!');
     * }
     *
     * function noInput (app) {
     *   if (app.getRepromptCount() === 0) {
     *     app.ask(`What was that?`);
     *   } else if (app.getRepromptCount() === 1) {
     *     app.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
     *   } else if (app.isFinalReprompt()) {
     *     app.tell(`Okay let's try this again later.`);
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(app.StandardIntents.MAIN, welcome);
     * actionMap.set(app.StandardIntents.NO_INPUT, noInput);
     * app.handleRequest(actionMap);
     *
     * @return The current reprompt count. Null if no reprompt count
     *     available (e.g. not in the NO_INPUT intent).
     * @dialogflow
     * @actionssdk
     */
    getRepromptCount(): number;

    /**
     * Returns true if it is the final reprompt related to silent input from the
     * user. This should be used along with the NO_INPUT intent to give the final
     * response to the user after multiple silences and should be an app.tell
     * which ends the conversation.
     *
     * @example
     * const app = new ActionsSdkApp({request, response});
     *
     * function welcome (app) {
     *   app.ask('Welcome to your app!');
     * }
     *
     * function noInput (app) {
     *   if (app.getRepromptCount() === 0) {
     *     app.ask(`What was that?`);
     *   } else if (app.getRepromptCount() === 1) {
     *     app.ask(`Sorry I didn't catch that. Could you repeat yourself?`);
     *   } else if (app.isFinalReprompt()) {
     *     app.tell(`Okay let's try this again later.`);
     *   }
     * }
     *
     * const actionMap = new Map();
     * actionMap.set(app.StandardIntents.MAIN, welcome);
     * actionMap.set(app.StandardIntents.NO_INPUT, noInput);
     * app.handleRequest(actionMap);
     *
     * @return True if in a NO_INPUT intent and this is the final turn
     *     of dialog.
     * @dialogflow
     * @actionssdk
     */
    isFinalReprompt(): boolean;

    /**
     * Returns true if user accepted update registration request. Used with
     * {@link AssistantApp#askToRegisterDailyUpdate}
     *
     * @return True if user accepted update registration request.
     * @dialogflow
     * @actionssdk
     */
    isUpdateRegistered(): boolean;

    // ---------------------------------------------------------------------------
    //                   Response Builders
    // ---------------------------------------------------------------------------

    /**
     * Constructs RichResponse with chainable property setters.
     *
     * @param richResponse RichResponse to clone.
     * @return Constructed RichResponse.
     */
    buildRichResponse(richResponse?: RichResponse): RichResponse;

    /**
     * Constructs BasicCard with chainable property setters.
     *
     * @param bodyText Body text of the card. Can be set using setTitle
     *     instead.
     * @return Constructed BasicCard.
     */
    buildBasicCard(bodyText?: string): BasicCard;

    /**
     * Constructs List with chainable property setters.
     *
     * @param title A title to set for a new List.
     * @return Constructed List.
     */
    buildList(title?: string): List;

    /**
     * Constructs Carousel with chainable property setters.
     *
     * @return Constructed Carousel.
     */
    buildCarousel(): Carousel;

    /**
     * Constructs OptionItem with chainable property setters.
     *
     * @param key A unique key to identify this option. This key will
     *     be returned as an argument in the resulting actions.intent.OPTION
     *     intent.
     * @param synonyms A list of synonyms which the user may
     *     use to identify this option instead of the option key.
     * @return Constructed OptionItem.
     */
    buildOptionItem(key?: string, synonyms?: string | string[]): OptionItem;

    // ---------------------------------------------------------------------------
    //                   Transaction Builders
    // ---------------------------------------------------------------------------

    /**
     * Constructs Order with chainable property setters.
     *
     * @param orderId Unique identifier for the order.
     * @return Constructed Order.
     */
    buildOrder(orderId: string): Order;

    /**
     * Constructs Cart with chainable property setters.
     *
     * @param cartId Unique identifier for the cart.
     * @return Constructed Cart.
     */
    buildCart(cartId?: string): Cart;

    /**
     * Constructs LineItem with chainable property setters.
     * Because of a previous bug, the parameters are swapped compared to
     * the LineItem constructor to prevent a breaking change.
     *
     * @param name Name of the line item.
     * @param id Unique identifier for the item.
     * @return Constructed LineItem.
     */
    buildLineItem(name: string, id: string): LineItem;

    /**
     * Constructs OrderUpdate with chainable property setters.
     *
     * @param orderId Unique identifier of the order.
     * @param isGoogleOrderId True if the order ID is provided by
     *     Google. False if the order ID is app provided.
     * @return Constructed OrderUpdate.
     */
    buildOrderUpdate(orderId: string, isGoogleOrderId: boolean): OrderUpdate;
}

redpajama_set_name: RedPajamaGithub