Kashif Qadri Photography is one of the best Photographers in Karachi. If you are looking for the best Photographers in Karachi and you like the work of Kashif Qadri Photography then send an inquiry now and we will connect you with Kashif Qadri Photography as soon as possibe.
Kashif Qadri provides a full range of professional photography and is an expert of transforming ideas into reality. He is known for professionally capturing the best and most loved moments, without losing their originality and natural content.


The Petroleum Corporation of Jamaica (PCJ) has received three applications for licences for oil and gas exploration as at the June 15 deadline for the submission of bids.
Group Managing Director at PCJ, Dr. Raymond Wright said the applications were for ten blocks but noted that there was some overlapping in some of the blocks applied for. A block has a minimum measurement of 2,500 square kilometers.
Dr. Wight told JIS News that the applicants would be informed in another three months or so, whether they were successful in obtaining the licences for onshore and off-shore exploration, after which, the contractor would undertake further seismic and geo-physical work to determine the best sites for drilling. He indicated that drilling could commence within another three to five years.
Dr. Wright, while delivering a pubic lecture at the University of the West Indies' (UWI) Mona campus recently, had said that a Production Sharing Arrangement would be in place between the PCJ and the successful oil companies, which means that, profits from the field will be split between the contractor and the PCJ.
Additionally, he pointed out that companies would have to bear the exploration expenditure and be reimbursed through a cost recovery process. The arrangement would also see royalties being paid to the government for the oil and gas produced.


abutment: plane or point designed to give support or withstand thrust, especially on projecting part of structure.
adapter: connector that enables different parts or devices to fit or function together.
anchor bolt: threaded rod embedded in foundation for support and stabilization of wood sill.
angle iron: metal brace used to reinforce comers or angles.
angle rafter: rafter in sloping roof.
aperture: usually narrow opening, slit, or crack.
apron: plate or covering for mechanical device that protects its operator; interior trim beneath window stool.
arbor: short spindle that supports rotating machine part.
arm: small extension attached horizontally at angle to large base.
axle: shaft or spindle that supports rotating wheel.


text:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;

using Moq;

using NUnit.Framework;

using SalaryCalculator.Data.Contracts;
using SalaryCalculator.Data.Repositories;
using SalaryCalculator.Tests.Mocks;

namespace SalaryCalculator.Tests.Data.Repository
{
    [TestFixture]
    public class Constructor_Should
    {
        [Test]
        public void Constructor_ShouldThrowArgumentNullExceptionWithCorrectMessage_WhenDbContextParameterIsNull()
        {
            // Arrange
            ISalaryCalculatorDbContext nullableDbContext = null;

            // Act & Assert
            Assert.That(
                () => new SalaryCalculatorRepository<FakeEmployee>(nullableDbContext),
                Throws.InstanceOf<ArgumentNullException>().With.Message.Contains("The argument is null"));
        }

        [Test]
        public void Constructor_ShouldCreateInstanceCorrectly_WhenParameterIsSetCorrectly()
        {
            // Arrange
            var mockedDbContext = new Mock<ISalaryCalculatorDbContext>();

            // Act
            var repository = new SalaryCalculatorRepository<FakeEmployee>(mockedDbContext.Object);

            // Assert
            Assert.IsInstanceOf(typeof(IRepository<FakeEmployee>), repository);
        }
    }
}

redpajama_set_name: RedPajamaGithub


Protecting your identity can feel like an overwhelming task. But there are a few simple things you can do to avoid becoming a victim.
You'll find these strategies used in emails, on social media and when shopping online.
Someone can't get to their money and they'll pay you to help.
A new girlfriend or boyfriend you meet online starts asking for money.
A business or government organization says you owe them money and makes threats.
Someone tells you your identity has been stolen and they need information to protect you.
Someone offers you a job but wants you to pay them first.
Visit our Security Center for a list of the latest frauds.
Never give personal information to people who call or contact you online.
If you think an organization contacting you is legitimate, tell them you'll call them back. Then use the number on their website.
Always make sure a check has cleared before withdrawing funds.
Avoid public Wi-Fi for banking and making purchases.
If you receive an email with a link to a site that asks for your password or personal information, manually type the site's address and log in like you normally would.
If you think you've been a victim of fraud, call your bank and credit card companies to report it.
Also contact one of the three credit bureaus: Equifax, Experian or TransUnion. Ask them to put a fraud alert on your credit file.
Take the next step with the Bank of Colorado Diamond Secure Account .
You can gain added protection and peace-of-mind with Bank of Colorado's Diamond Secure Account. You get all the financial features of a checking account, plus IDProtect®, our identity theft protection service, as well as Cellular Telephone Protection to help cover your cell phone if it's damaged or stolen. Learn more .
Special Insurance Program Notes (Identity Fraud Expense Reimbursement Coverage (included with IDProtect) and Cellular Telephone Protection): The descriptions herein are summaries only. They do not include all terms, conditions and exclusions of the policies described. Please refer to the actual policies for complete details of coverage and exclusions. Insurance is offered through the company named on the certificate of insurance. Insurance products are not insured by FDIC or any Federal Government Agency; not a deposit of or guaranteed by the bank or any bank affiliate.


Not found on the server.
The legend of the gigolette continues!
I know exactly what you mean about the fonts. You think you have it all planned out, and then 100 pages into the book they use one you've never seen before. For one sentence.
Will you continue this till the end? I wish I get better at reading japanese.
Yes, we're going to finish the series.
we are a fansub which aims to translate Yurikam to the Spanish, so we would like to help you edit it, so you can fast forward with this incredible project.
Could you send me an email if you are interested in?
Thanks for the offer. I've sent you an email!
Soon™. The chapter is in QC right now.


OBJECTIVE To reduce exercise-associated hypoglycemia, individuals with type 1 diabetes on continuous subcutaneous insulin infusion typically perform basal rate reductions (BRRs) and/or carbohydrate feeding, although the timing and amount of BRRs necessary to prevent hypoglycemia are unclear. The goal of this study was to determine if BRRs set 90 min pre-exercise better attenuate hypoglycemia versus pump suspension (PS) at exercise onset.
RESEARCH DESIGN AND METHODS Seventeen individuals completed three 60-min treadmill exercise (∼50% of VO2peak) visits in a randomized crossover design. The insulin strategies included 1) PS at exercise onset, 2) 80% BRR set 90 min pre-exercise, and 3) 50% BRR set 90 min pre-exercise.
RESULTS Blood glucose level at exercise onset was higher with 50% BRR (191 ± 49 mg/dL) vs. 80% BRR (164 ± 41 mg/dL; P < 0.001) and PS (164 ± 45 mg/dL; P < 0.001). By exercise end, 80% BRR showed the smallest drop (−31 ± 58 mg/dL) vs. 50% BRR (−47 ± 50 mg/dL; P = 0.04) and PS (−67 ± 41 mg/dL; P < 0.001). With PS, 7 out of 17 participants developed hypoglycemia versus 1 out of 17 in both BRR conditions (P < 0.05). Following a standardized meal postexercise, glucose rose with PS and 50% BRR (both P < 0.05), but failed to rise with 80% BRR (P = 0.16). Based on interstitial glucose, overnight mean percent time in range was 83%, 83%, and 78%, and time in hypoglycemia was 2%, 1%, and 5% with 80% BRR, 50% BRR, and PS, respectively (all P > 0.05).
CONCLUSIONS Overall, a 50–80% BRR set 90 min pre-exercise improves glucose control and decreases hypoglycemia risk during exercise better than PS at exercise onset, while not compromising the postexercise meal glucose control.
This article contains Supplementary Data online at http://care.diabetesjournals.org/lookup/suppl/doi:10.2337/dc18-2204/-/DC1.


That small seed planted in 1958 grew, just as Chandler grew. The church grew to meet the needs around it. The church building was built and then expanded. A parish hall was added in the early 1980s, and in 1986 both ends of the current church sanctuary were removed and the building was dramatically lengthened. An education building was constructed in 1988 to meet the needs of the many children and young families who became part of the community.
What that small seed grew into is what our campus looks like today – a vibrant faith community focused on growing as the family of God.
The Episcopal Church is unique in that it retains the ancient traditions of Christianity while embracing modern theology and contemporary understandings of the human person. The Episcopal Church today is part of the worldwide Anglican Communion, a diverse association of churches that make up the largest protestant denomination in the world.
On April 4, 1958, a group of dreamers, pioneers and visionaries broke ground on Erie Street in Chandler, Arizona. Their vision was to build a place of community, a place that served the people around them and a place that upheld the traditions of Episcopal worship. At first, it wasn't much to look at. The small adobe building that anchored the church property was nicknamed "Rosie's Cantina" for its demure size and simple, southwestern look, but the people of the church, those visionaries and dreamers, had built it themselves and they knew it was a small seed that would bear fruit.


text:
Times News
Deadlines and Policies
Kingsport Times-News
Local Business Courts Education Health Care History Law Enforcement Nation Politics State Weather
Blog Column Editorial Letter to the Editor
Anniversary Community Engagement Obituary Wedding
Baseball Basketball Football Golf Motorsports Softball Track & Field
Art & Culture Fairs & Festivals GoTri Events Music
Cooking Faith Fashion Health & Fitness Hobbies & Interests Parenting Pets Seniors
JCTN150
JCTN 150: 5 questions with John Birchette about life in Johnson City
EDITOR'S NOTE: This article is the latest in an occasional series of 5 Questions features regarding the people and families of Johnson City shaping the city's past, present and future as we celebrate the city's 150th birthday. Look for more May 19, 2019 at 6:34 PM
Five questions with Tom Hager, Johnson City's longest serving school board member
Hager recently spoke with the Johnson City Press to tell us more about himself, his time on the board and more.
Johnson City 150th Anniversary
Johnson City 150 Years: The Darden/Strain family
Brothers Bill and Steve Darden share a rich genealogy of family roots deeply engrained in Johnson City's history.
Updated May 11, 2019 at 5:30 PM
Oldest Tennessee church still holding services
Sinking Creek Baptist has provided many people a church home for almost 250 years.
Johnson City celebrates its 150th anniversary
Appointed in February 2018, the Sesquicentennial Commission was directed to plan, prepare and organize events throughout 2019 to celebrate Johnson City's 150th anniversary.
The brief but impactful history of mining in Johnson City
One could say that Johnson City's brief but intense love-affair with iron began with the charter of the East Tennessee and Western North Carolina (ET&WNC) Railroad in 1866. One of three railroads that would build the city of Johnson City, giving the outside world access to the iron-rich areas close by.
Cherokee students take a look at Johnson City's past on sesquicentennial Digital Learning Day
Schools across the Johnson City Schools district held Digital Learning Day events Thursday to learn more about Johnson City's rich history since its founding and incorporation in 1869. The events revolved around the city's 150th anniversary and how far the community has come.
Sesquicentennial Commission
Sesquicentennial Commission accepts list of events to be featured in History Plaza project
The Sesquicentennial Commission voted Tuesday to accept a recommended list of historical events that could be engraved into the legacy plaza, one of the projects proposed in King Commons Park to celebrate Johnson City's 150th anniversary.
ETSU
ETSU: History Harvest aims to preserve history of Johnson City, public invited to share stories for Sesquicentennial project
This spring, the East Tennessee State University Department of History is sponsoring its second History Harvest, an effort to locate and digitally preserve documents, photographs, artifacts, and personal and family histories. The title of this year's effort is "Johnson City's History Harvest: Preserving Our Heritage."
Today in Johnson City History: January 15
Jan. 15, 1864: Local historian, attorney and Tennessee Supreme Court Justice Samuel Cole Williams was born near Humboldt, Tennessee. He moved to Johnson City in the 1890s to practice law. He and his wife donated money and land to Jan 15, 2019 at 7:15 AM
Prominent people in Johnson City history
The contributions of hundreds, if not thousands, of citizens, city leaders and entrepreneurs gradually shaped and molded Johnson City into what it is today, but few have matched the influence of Henry Johnson, George L. Carter and Walter Brownlow. Jan 14, 2019 at 8:48 AM
Jan. 14, 1909: The Johnson City Press reported on a proposal to build a new Science Hill High School. Board of Education member J.K. Brading had presented plans and specifications prepared by Architect C.O. Mitchell for a new Updated Jan 14, 2019 at 8:26 AM
Sesquicentennial Celebration: Capt. John D. Exum
As Johnson City prepares to celebrate its Sesquicentennial, or 150th birthday, the Johnson City Press is off to a roaring start with articles that remind us of the vital place of Mountain Home, and the railroads in Jan 13, 2019 at 7:00 AM
Railroad museum offers a glimpse into a slower time
It's a trip to the past, when the world moved at the speed of trains.
Jan. 13, 1887: Community news or ad in The Comet? "Our old neighbor and townsman Major Scott was on our streets yesterday, looking as young and spry as though he carried the weight of but two instead of four score years. The oId Jan 13, 2019 at 12:00 AM
Johnson City Press Videos
Get Email Newsletters Like Us On Facebook Follow Us On Twitter Add Us On Google+ RSS Feeds

redpajama_set_name: RedPajamaCommonCrawl


One of my favorite Northwest First Women is Stagecoach Mary, the First African-American Woman mail carrier for the U.S. Postal Service. Mary was a slave born in Hickam County, Tennessee, where she lived for the first thirty years of her life. Her birth is not recorded, but she was probably born about 1832. When her mother pondered what to name her, she looked around the plantation and decided on Mary Fields.
It was not unusual in those times for a slave child to become friendly with a white plantation child and for those two to later grow apart. This path was a little different for Mary. She was friends with the plantation owner's daughter, Dolly Dunn. They were separated when Dolly went off to boarding school and then Dolly joined a convent. During the Civil War Mary was left behind on the plantation where she had to learn survival skills. She learned to plant her own food, to raise poultry and, most important, to use plants for medicine. Then Mary and Dolly's paths, atypically, reunited.
Dolly, who was now Sister Amadeus, invited Mary to come to Ohio to work in the convent. Both were about 30 years old at the time. When Sister Amadeus went to the missions of Montana, Mary remained behind. Then Sister Amadeus became ill and Mary went to Cascade, Montana, where the nuns had opened a school for Native American girls. Mary was already around 53 years old. She treated Sister Amadeus, who recovered. The nuns then paid Mary by engaging her to manage their gardens and chickens. She did manual labor, repaired buildings, did laundry, hauled freight. Eventually she became the forewoman at the convent.
Mary, however, was definitely not religious. She liked to drink and smoke in the bars with the rowdies in town. She was 6'2" and could deck a man with one blow. When the men at the convent realized that Mary was making more money than they were, they began to bad-mouth her, probably just relating actual events. The nuns had either not known of her outside activities, or had turned a blind eye, but the bishop did not. Mary was fired.
She then ran a restaurant, but she had this propensity to give away food to whoever couldn't pay. The restaurant, not surprisingly, was a failure. She was already about 60 when she heard Wells Fargo was looking for someone to deliver the mail. Each applicant had to hitch horses to a wagon and she did so in record time, beating the other contenders. Thus, she became the First African-American to deliver the mail and only the second woman.
Mary had a reputation for always being on time with the mail. If her wagon and mule were caught in a snowdrift, she went forward on snowshoes. She was known for her dedication and it was during this time that she gained the sobriquet "Stagecoach Mary." This is probably a reflection of her reliability, but some say she actually drove a stagecoach.
She was also known for her kindness to others, but Mary Fields still liked to drink and smoke. When the city of Cascade barred women from the saloons (other than prostitutes, of course), the mayor made a special exception for Mary—for the balance of her life.


With so many flash restaurants to explore, dining in Montenegro can be easily spoilt by choice. In this small culturist country that offers the best from the Adriatic Sea, you may want to hit the right spot when making up your mind for a meal to remember. The newly opened THE SPOT Restaurant and Lounge in The Chedi Luštica Bay, Montenegro is the recent talk-of-the-town dining scene in this region. mylifestlenews writes.
Opened less than two months, The Spot is the brasserie-style restaurant that is the place to be in Montenegro. The newly developed Luštica Bay township houses the International hotel brand - The Chedi Luštica Bay, Montenegro. The entire area is new to many visitors and even to the locals and gradually, it will no doubt become the latest hangout to all when it enters to a more mature stage of development.
This stylish outlet really has some eye-catching design details which play on the seaside location, as its setting is on the Marina Promenade with endless sea vistas. Whether you want a leisurely brunch, light snack or casual dinner, this is the perfect choice to enjoy some memorable food.
This is an all-day dining option, which is very different from The Restaurant - another all-day dining upstairs where breakfast, lunch and dinner can be had every day as well. THE SPOT Restaurant & Lounge is more fun and full of vibes, the moment you walk in from the ground floor entrance, you know you are in a playful space with elegant indoor furnishings and relaxing outdoor furniture options in which to soak up the summer atmosphere both night and day.
THE SPOT Restaurant Lounge plays with outdoor elements combining textured stone walls, rustic wood-beamed ceilings and soft pendant lighting, which provides a luminous ambience at night. The bar section is also a standout with a blue wall and gold leather-covered bar stools, so the overall design is eye-catching in a very attractive way and definitely is another picturesque spot to hang out while sipping the signature cocktails.
We decided to drop by for dinner and cocktails and we most definitely felt that we made the right choice. First of all, the service is very attentive, the environment makes you feel right at home and you begin browsing the menu with anticipation, particularly when you can see the culinary theatrics taking place in the showpiece open kitchen.
Secondly, the menu is very enticing and we started off with some Tapas bites recommendations to get the taste buds happening, with a Beef Cheek BOMB served with spicy brava sauce and green mojo. The beef cheeks were two large balls of succulent and juicy minced meat combined with potato with a 'dressing' of tomato sauce and some miniature green sprouts sprinkled on the top. It is more than just a generous portion for tapas and definitely worth going back for.
The 36 Month Iberican ham with tomato bread had such a distinctive flavor and coupled with the tomato bruschetta was a must try. And again the portion is more than a generous tapas serving.
Seafood figures largely on menus in this region, so we thought a taste of their Traste Bay Seafood Soup scented with local herbs and spices was the go. Don't judge the book by its cover as the presentation may just look like Thai Tom Yum Goong (not to be said Tom Yum Goong is one of our all times favorites) but this soup was rich and intense in flavor, instantly giving you a fresh taste of the sea with each seafood ingredient superbly cooked but not overcooked delicate seafood - the treasures comes what lies beneath. One couldn't have asked for a better dip into the flavor of the sea as there are chunks of cuttlefish, prawns, fish and stone clams in the delicious soup that is spiced up with local herbs.
This was followed by a bowl of Clams stewed in wine sauce, lemon cloud and thyme leaf. They were light and pleasant in taste with just the right balance of extras which encompassed white wine, thyme and lemon cloud – none of which took away from the freshness of the clams as the highlight of the dish. Totally fresh and taste from the sea and delectable.
Montenegrins love their meat, so we opted for a 28 Day Dry Aged Entrecôte with Romesco Sauce. The steak was perfection personified and the flavor of the beef was superb, with just the right amount of fat to add that fulsome taste. It can hardly go wrong when an entrecôte is served. Another plus side is you get to choose your steak knife to go with your mood, which is another nice touch from a bistro style restaurant.
Another main course we had was the Brick Pressed Half Chicken with Moroccan Carrot Salad. The chicken was unbeatable, juicy and tender. The portion may look small but the chicken has quite a substantial amount of meat.
We were quite sated at this point, but desserts kept on beckoning, so we dived into the menu once more to choose a White Chocolate and Matcha Panna Cotta with Raspberry Sauce and fresh Berries and Kirsch Macerated Strawberries with Basil Gel, Lemon Candy and Mascarpone Ice Cream. Kirsch Macerated strawberry dessert has a look of a crumbled mess about it. The portion is right and the taste is rich in the macerated fruit which is given a kick with the Kirsch liqueur that is offset by the coolness of the basil gel. The mascarpone ice cream sat atop the crumbly cake texture. This was a triumph in flavours and textures on both desserts we picked and quite a contrast in dessert making and flavours.
White Chocolate and Matcha Panna Cotta has a look of berries floating on a green pond with the taste truly in Matcha heaven, thick and rich and thus a very specific flavor that may not suit everyone, but if it does, you will love this creation.
THE SPOT Restaurant & Lounge menu is full of local ingredients ranging from produce encompassing fish, meats, olive oils and wines, so you will most definitely benefit from these tastes of Montenegro and the taste is spot on - thanks to its Catalan Chef who brought in its hometown flavours to bring more life to the menu creation.
We asked for the waiter to select some local wines and we were not disappointed and couldn't get over the value these wines offered not to say the menu is more that generously "under priced" especially for The Chedi international standard. The evening was memorable, as every detail had been thought of by the service team and they took the time and did not hesitate to explain their philosophy and give recommendations.
While we probably ordered more food than we anticipated, we could not help but try so many dishes, as the menu had so much that took our eye. An outstanding effort, considering the restaurant has only been open for two months, yet everyone looks so comfortable and confident with what they are doing and the kitchen is most definitely firing on all cylinders with the quality of dishes that we sampled. We have our hats off to a great new dining destination in Luštica Bay, Montenegro, THE SPOT has certainly hit the right spot of food aficionados alike.


We are scheduled to teach Gottman Level One: Bridging the Couples Chasm on March 3 and 4. Seating is limited in that we will offer this workshop in an intimate setting here in the beautiful Sonoma wine country. This training is open to all mental health professionals. Click here for more information.


Earlier this week I headed up to Portland, to Sequoia Gallery and Studios, for a Zorn palette portrait demo. With only 90 minutes to paint, I had to work quickly, but sometimes that's a good thing! It certainly cuts down on any perfectionist tendencies I might be harboring.
I have a TON of workshops coming up. To see a complete list, check out my Workshops page. Thanks for looking!
Here's a painting I did using only the primary colors (Cadmium red, Cadmium yellow, and Ultramarine blue), plus white. A great way to capture truly brilliant bright reds is to lighten them by adding yellow instead of white. Titanium white has a blue cast, which ever-so-slightly cools and dulls orangey Cad red. A dash of yellow lightens it, keeps it saturated, and gives it a warm kick that helps it advance towards the eye.
Here are the three stages of my painting. First, I tone the canvas with a dull orange I mix from all three colors, laying in my drawing and pulling out some highlights. Second, I firm up my drawing with a darker shade, indicating my darkest darks and noting the overall value scheme. And third: add color!
Back in the studio, feeling excited about painting! Working hard on the concept that if you nail the value, you can really use any color you like. And using contrast to reinforce my focal point. Notice how that little triangle of purple next to the bright yellow slash ever-so-subtly keeps your eye on the glass float, front and center? That's a complementary color contrast at work!
Speaking of work: I've got a portrait workshop next weekend, Feb 20-22nd, at Oregon Art Supply with two spots open. Sign up if you feel like working with me - and having fun too!
Still Life Painting: The Next Level!
My second workshop in Shreveport, Louisiana (read all about the first one here) was a group who'd painted with me last October. Besides being incredibly flattered that they'd come back for more, I was excited to see how their work had progressed, and try out some new ideas!
...we took a field trip to the art supply store, and had a varnishing demonstration.
Also they plied me with King Cake!
On the last day of the workshop, we set up a new, large still life, and used limited palettes - one of each of the primary colors, plus white. Below right you can see my demo palette: I chose Alizarin Crimson, Cerulean Blue, and Yellow Ocher.
My painting had very muted yellows, as a result, but the color harmony was automatic. We all learned a ton about the unique properties of the three colors we chose!
"Limited Palette demo at Shreveport"
Thanks, Ladies, for being such a great group! Can't wait until the next time.
Painting the Dynamic Still Life...in Shreveport!
"Green Apple Demo at Shreveport"
I just got back from a week in sunny Shreveport, Louisiana, teaching two fabulous still life workshops! The first was a group of new (to me) students, who spent three intense days delving into values, color, and brushwork, and made some amazing paintings.
We set up three colorful, communal still life tables, and gathered around. The students got to zoom in on the subjects that appealed to them. Some painted apples, some painted turnips. All got a chance to experiment with different colors and subjects throughout the weekend.
In one of my favorite exercises, we limited the number of brushstrokes used to make a quick painting. Here's my demo: two lemons, in 25 strokes!
It was an enthusiastic, talented, friendly, and fun group of artists! Grateful I got to paint with you all.
January's session of Zorn Palette Portrait was a blast, with a new model every day, two painting demos by moi, and tons of great work by the students!
Here are the students' portraits of Maya. So good!!
I'm already looking forward to the next round of this workshop - lining up some fresh model faces, too. There are a couple of spots still available for February 20-22, at Oregon Art Supply. Register here!


The Pathway Accommodation and Support System (PASS) is an online shared system utilised by every homeless service provider and all local authorities in Ireland.
The system provides 'real-time' information in terms of homeless presentation and bed occupancy across the Dublin region.
All of the information recorded on PASS produces the most recent statistics for the number of persons that are homeless.
The four Dublin local authorities, Health Service Executive and all homeless services continue to develop more effective mechanisms to collate and share information (subject to Data Protection) on individuals and families presenting as homeless to ensure more integrated service provision and that an effective case management approach can take place.
A shared information system for homeless services will enable agencies working directly with people who are homeless to record and share the work they do with their clients. This will improve the delivery of services to clients by ensuring that resources are used effectively by reducing duplication of effort and facilitating agencies to work together to provide a continuum of care and integrate service delivery.
PASS will allow individual projects to monitor the work they do and the work other projects do with a client, what they do and when they do it, the key outcomes from this work and its effectiveness. It will provide the DRHE with the information necessary for the monitoring and evaluation of services.
Support agencies to provide a better service to clients by sharing information and targeting their work.
The PASS system will provide statistics to projects about individual clients and the work of the project as a whole. This information can be used to plan future service developments.PASS will provide us with statistical information on the homeless population profile and use of services. This information will be used to monitor the effectiveness of the strategy, identify emerging trends and to monitor service delivery.
The information recorded on the system will be limited to information required to track and plan the delivery of services to clients. All information is recorded in line with the protocols developed by homeless services for the PASS system and Data Protection legislation.
The National PASS Office monitors and enforces the Data Protection Acts 1988 & 2003 and fulfils the role of certified Data Controller. Information stored on PASS is highly sensitive in nature and should be protected accordingly. Staff in the National PASS Office are responsible for ensuring full compliance with Data Protection legislation.
If you would like further information on PASS please contact us at pass@dublincity.ie or telephone 01 2226825.


text:
'use strict';

function _inheritsLoose(subClass, superClass) { subClass.prototype.__proto__ = superClass && superClass.prototype; subClass.__proto__ = superClass; }

var parser = require('./parser');

var transformer = require('./transformer');

var nodes = require('./nodes');

var _require = require('./lib'),
    TemplateError = _require.TemplateError;

var _require2 = require('./runtime'),
    Frame = _require2.Frame;

var Obj = require('./object'); // These are all the same for now, but shouldn't be passed straight
// through

var compareOps = {
  '==': '==',
  '===': '===',
  '!=': '!=',
  '!==': '!==',
  '<': '<',
  '>': '>',
  '<=': '<=',
  '>=': '>='
};

var Compiler =
/*#__PURE__*/
function (_Obj) {
  function Compiler() {
    return _Obj.apply(this, arguments) || this;
  }

  var _proto = Compiler.prototype;

  _proto.init = function init(templateName, throwOnUndefined) {
    this.templateName = templateName;
    this.codebuf = [];
    this.lastId = 0;
    this.buffer = null;
    this.bufferStack = [];
    this._scopeClosers = '';
    this.inBlock = false;
    this.throwOnUndefined = throwOnUndefined;
  };

  _proto.fail = function fail(msg, lineno, colno) {
    if (lineno !== undefined) {
      lineno += 1;
    }

    if (colno !== undefined) {
      colno += 1;
    }

    throw new TemplateError(msg, lineno, colno);
  };

  _proto._pushBuffer = function _pushBuffer() {
    var id = this._tmpid();

    this.bufferStack.push(this.buffer);
    this.buffer = id;

    this._emit("var " + this.buffer + " = \"\";");

    return id;
  };

  _proto._popBuffer = function _popBuffer() {
    this.buffer = this.bufferStack.pop();
  };

  _proto._emit = function _emit(code) {
    this.codebuf.push(code);
  };

  _proto._emitLine = function _emitLine(code) {
    this._emit(code + '\n');
  };

  _proto._emitLines = function _emitLines() {
    var _this = this;

    for (var _len = arguments.length, lines = new Array(_len), _key = 0; _key < _len; _key++) {
      lines[_key] = arguments[_key];
    }

    lines.forEach(function (line) {
      return _this._emitLine(line);
    });
  };

  _proto._emitFuncBegin = function _emitFuncBegin(name) {
    this.buffer = 'output';
    this._scopeClosers = '';

    this._emitLine('function ' + name + '(env, context, frame, runtime, cb) {');

    this._emitLine('var lineno = null;');

    this._emitLine('var colno = null;');

    this._emitLine('var ' + this.buffer + ' = "";');

    this._emitLine('try {');
  };

  _proto._emitFuncEnd = function _emitFuncEnd(noReturn) {
    if (!noReturn) {
      this._emitLine('cb(null, ' + this.buffer + ');');
    }

    this._closeScopeLevels();

    this._emitLine('} catch (e) {');

    this._emitLine('  cb(runtime.handleError(e, lineno, colno));');

    this._emitLine('}');

    this._emitLine('}');

    this.buffer = null;
  };

  _proto._addScopeLevel = function _addScopeLevel() {
    this._scopeClosers += '})';
  };

  _proto._closeScopeLevels = function _closeScopeLevels() {
    this._emitLine(this._scopeClosers + ';');

    this._scopeClosers = '';
  };

  _proto._withScopedSyntax = function _withScopedSyntax(func) {
    var _scopeClosers = this._scopeClosers;
    this._scopeClosers = '';
    func.call(this);

    this._closeScopeLevels();

    this._scopeClosers = _scopeClosers;
  };

  _proto._makeCallback = function _makeCallback(res) {
    var err = this._tmpid();

    return 'function(' + err + (res ? ',' + res : '') + ') {\n' + 'if(' + err + ') { cb(' + err + '); return; }';
  };

  _proto._tmpid = function _tmpid() {
    this.lastId++;
    return 't_' + this.lastId;
  };

  _proto._templateName = function _templateName() {
    return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName);
  };

  _proto._compileChildren = function _compileChildren(node, frame) {
    var _this2 = this;

    node.children.forEach(function (child) {
      _this2.compile(child, frame);
    });
  };

  _proto._compileAggregate = function _compileAggregate(node, frame, startChar, endChar) {
    var _this3 = this;

    if (startChar) {
      this._emit(startChar);
    }

    node.children.forEach(function (child, i) {
      if (i > 0) {
        _this3._emit(',');
      }

      _this3.compile(child, frame);
    });

    if (endChar) {
      this._emit(endChar);
    }
  };

  _proto._compileExpression = function _compileExpression(node, frame) {
    // TODO: I'm not really sure if this type check is worth it or
    // not.
    this.assertType(node, nodes.Literal, nodes.Symbol, nodes.Group, nodes.Array, nodes.Dict, nodes.FunCall, nodes.Caller, nodes.Filter, nodes.LookupVal, nodes.Compare, nodes.InlineIf, nodes.In, nodes.Is, nodes.And, nodes.Or, nodes.Not, nodes.Add, nodes.Concat, nodes.Sub, nodes.Mul, nodes.Div, nodes.FloorDiv, nodes.Mod, nodes.Pow, nodes.Neg, nodes.Pos, nodes.Compare, nodes.NodeList);
    this.compile(node, frame);
  };

  _proto.assertType = function assertType(node) {
    for (var _len2 = arguments.length, types = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
      types[_key2 - 1] = arguments[_key2];
    }

    if (!types.some(function (t) {
      return node instanceof t;
    })) {
      this.fail("assertType: invalid type: " + node.typename, node.lineno, node.colno);
    }
  };

  _proto.compileCallExtension = function compileCallExtension(node, frame, async) {
    var _this4 = this;

    var args = node.args;
    var contentArgs = node.contentArgs;
    var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true;

    if (!async) {
      this._emit(this.buffer + " += runtime.suppressValue(");
    }

    this._emit("env.getExtension(\"" + node.extName + "\")[\"" + node.prop + "\"](");

    this._emit('context');

    if (args || contentArgs) {
      this._emit(',');
    }

    if (args) {
      if (!(args instanceof nodes.NodeList)) {
        this.fail('compileCallExtension: arguments must be a NodeList, ' + 'use `parser.parseSignature`');
      }

      args.children.forEach(function (arg, i) {
        // Tag arguments are passed normally to the call. Note
        // that keyword arguments are turned into a single js
        // object as the last argument, if they exist.
        _this4._compileExpression(arg, frame);

        if (i !== args.children.length - 1 || contentArgs.length) {
          _this4._emit(',');
        }
      });
    }

    if (contentArgs.length) {
      contentArgs.forEach(function (arg, i) {
        if (i > 0) {
          _this4._emit(',');
        }

        if (arg) {
          _this4._emitLine('function(cb) {');

          _this4._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}');

          var id = _this4._pushBuffer();

          _this4._withScopedSyntax(function () {
            _this4.compile(arg, frame);

            _this4._emitLine("cb(null, " + id + ");");
          });

          _this4._popBuffer();

          _this4._emitLine("return " + id + ";");

          _this4._emitLine('}');
        } else {
          _this4._emit('null');
        }
      });
    }

    if (async) {
      var res = this._tmpid();

      this._emitLine(', ' + this._makeCallback(res));

      this._emitLine(this.buffer + " += runtime.suppressValue(" + res + ", " + autoescape + " && env.opts.autoescape);");

      this._addScopeLevel();
    } else {
      this._emit(')');

      this._emit(", " + autoescape + " && env.opts.autoescape);\n");
    }
  };

  _proto.compileCallExtensionAsync = function compileCallExtensionAsync(node, frame) {
    this.compileCallExtension(node, frame, true);
  };

  _proto.compileNodeList = function compileNodeList(node, frame) {
    this._compileChildren(node, frame);
  };

  _proto.compileLiteral = function compileLiteral(node) {
    if (typeof node.value === 'string') {
      var val = node.value.replace(/\\/g, '\\\\');
      val = val.replace(/"/g, '\\"');
      val = val.replace(/\n/g, '\\n');
      val = val.replace(/\r/g, '\\r');
      val = val.replace(/\t/g, '\\t');

      this._emit("\"" + val + "\"");
    } else if (node.value === null) {
      this._emit('null');
    } else {
      this._emit(node.value.toString());
    }
  };

  _proto.compileSymbol = function compileSymbol(node, frame) {
    var name = node.value;
    var v = frame.lookup(name);

    if (v) {
      this._emit(v);
    } else {
      this._emit('runtime.contextOrFrameLookup(' + 'context, frame, "' + name + '")');
    }
  };

  _proto.compileGroup = function compileGroup(node, frame) {
    this._compileAggregate(node, frame, '(', ')');
  };

  _proto.compileArray = function compileArray(node, frame) {
    this._compileAggregate(node, frame, '[', ']');
  };

  _proto.compileDict = function compileDict(node, frame) {
    this._compileAggregate(node, frame, '{', '}');
  };

  _proto.compilePair = function compilePair(node, frame) {
    var key = node.key;
    var val = node.value;

    if (key instanceof nodes.Symbol) {
      key = new nodes.Literal(key.lineno, key.colno, key.value);
    } else if (!(key instanceof nodes.Literal && typeof key.value === 'string')) {
      this.fail('compilePair: Dict keys must be strings or names', key.lineno, key.colno);
    }

    this.compile(key, frame);

    this._emit(': ');

    this._compileExpression(val, frame);
  };

  _proto.compileInlineIf = function compileInlineIf(node, frame) {
    this._emit('(');

    this.compile(node.cond, frame);

    this._emit('?');

    this.compile(node.body, frame);

    this._emit(':');

    if (node.else_ !== null) {
      this.compile(node.else_, frame);
    } else {
      this._emit('""');
    }

    this._emit(')');
  };

  _proto.compileIn = function compileIn(node, frame) {
    this._emit('runtime.inOperator(');

    this.compile(node.left, frame);

    this._emit(',');

    this.compile(node.right, frame);

    this._emit(')');
  };

  _proto.compileIs = function compileIs(node, frame) {
    // first, we need to try to get the name of the test function, if it's a
    // callable (i.e., has args) and not a symbol.
    var right = node.right.name ? node.right.name.value // otherwise go with the symbol value
    : node.right.value;

    this._emit('env.getTest("' + right + '").call(context, ');

    this.compile(node.left, frame); // compile the arguments for the callable if they exist

    if (node.right.args) {
      this._emit(',');

      this.compile(node.right.args, frame);
    }

    this._emit(') === true');
  };

  _proto._binOpEmitter = function _binOpEmitter(node, frame, str) {
    this.compile(node.left, frame);

    this._emit(str);

    this.compile(node.right, frame);
  }; // ensure concatenation instead of addition
  // by adding empty string in between

  _proto.compileOr = function compileOr(node, frame) {
    return this._binOpEmitter(node, frame, ' || ');
  };

  _proto.compileAnd = function compileAnd(node, frame) {
    return this._binOpEmitter(node, frame, ' && ');
  };

  _proto.compileAdd = function compileAdd(node, frame) {
    return this._binOpEmitter(node, frame, ' + ');
  };

  _proto.compileConcat = function compileConcat(node, frame) {
    return this._binOpEmitter(node, frame, ' + "" + ');
  };

  _proto.compileSub = function compileSub(node, frame) {
    return this._binOpEmitter(node, frame, ' - ');
  };

  _proto.compileMul = function compileMul(node, frame) {
    return this._binOpEmitter(node, frame, ' * ');
  };

  _proto.compileDiv = function compileDiv(node, frame) {
    return this._binOpEmitter(node, frame, ' / ');
  };

  _proto.compileMod = function compileMod(node, frame) {
    return this._binOpEmitter(node, frame, ' % ');
  };

  _proto.compileNot = function compileNot(node, frame) {
    this._emit('!');

    this.compile(node.target, frame);
  };

  _proto.compileFloorDiv = function compileFloorDiv(node, frame) {
    this._emit('Math.floor(');

    this.compile(node.left, frame);

    this._emit(' / ');

    this.compile(node.right, frame);

    this._emit(')');
  };

  _proto.compilePow = function compilePow(node, frame) {
    this._emit('Math.pow(');

    this.compile(node.left, frame);

    this._emit(', ');

    this.compile(node.right, frame);

    this._emit(')');
  };

  _proto.compileNeg = function compileNeg(node, frame) {
    this._emit('-');

    this.compile(node.target, frame);
  };

  _proto.compilePos = function compilePos(node, frame) {
    this._emit('+');

    this.compile(node.target, frame);
  };

  _proto.compileCompare = function compileCompare(node, frame) {
    var _this5 = this;

    this.compile(node.expr, frame);
    node.ops.forEach(function (op) {
      _this5._emit(" " + compareOps[op.type] + " ");

      _this5.compile(op.expr, frame);
    });
  };

  _proto.compileLookupVal = function compileLookupVal(node, frame) {
    this._emit('runtime.memberLookup((');

    this._compileExpression(node.target, frame);

    this._emit('),');

    this._compileExpression(node.val, frame);

    this._emit(')');
  };

  _proto._getNodeName = function _getNodeName(node) {
    switch (node.typename) {
      case 'Symbol':
        return node.value;

      case 'FunCall':
        return 'the return value of (' + this._getNodeName(node.name) + ')';

      case 'LookupVal':
        return this._getNodeName(node.target) + '["' + this._getNodeName(node.val) + '"]';

      case 'Literal':
        return node.value.toString();

      default:
        return '--expression--';
    }
  };

  _proto.compileFunCall = function compileFunCall(node, frame) {
    // Keep track of line/col info at runtime by settings
    // variables within an expression. An expression in javascript
    // like (x, y, z) returns the last value, and x and y can be
    // anything
    this._emit('(lineno = ' + node.lineno + ', colno = ' + node.colno + ', ');

    this._emit('runtime.callWrap('); // Compile it as normal.

    this._compileExpression(node.name, frame); // Output the name of what we're calling so we can get friendly errors
    // if the lookup fails.

    this._emit(', "' + this._getNodeName(node.name).replace(/"/g, '\\"') + '", context, ');

    this._compileAggregate(node.args, frame, '[', '])');

    this._emit(')');
  };

  _proto.compileFilter = function compileFilter(node, frame) {
    var name = node.name;
    this.assertType(name, nodes.Symbol);

    this._emit('env.getFilter("' + name.value + '").call(context, ');

    this._compileAggregate(node.args, frame);

    this._emit(')');
  };

  _proto.compileFilterAsync = function compileFilterAsync(node, frame) {
    var name = node.name;
    var symbol = node.symbol.value;
    this.assertType(name, nodes.Symbol);
    frame.set(symbol, symbol);

    this._emit('env.getFilter("' + name.value + '").call(context, ');

    this._compileAggregate(node.args, frame);

    this._emitLine(', ' + this._makeCallback(symbol));

    this._addScopeLevel();
  };

  _proto.compileKeywordArgs = function compileKeywordArgs(node, frame) {
    this._emit('runtime.makeKeywordArgs(');

    this.compileDict(node, frame);

    this._emit(')');
  };

  _proto.compileSet = function compileSet(node, frame) {
    var _this6 = this;

    var ids = []; // Lookup the variable names for each identifier and create
    // new ones if necessary

    node.targets.forEach(function (target) {
      var name = target.value;
      var id = frame.lookup(name);

      if (id === null || id === undefined) {
        id = _this6._tmpid(); // Note: This relies on js allowing scope across
        // blocks, in case this is created inside an `if`

        _this6._emitLine('var ' + id + ';');
      }

      ids.push(id);
    });

    if (node.value) {
      this._emit(ids.join(' = ') + ' = ');

      this._compileExpression(node.value, frame);

      this._emitLine(';');
    } else {
      this._emit(ids.join(' = ') + ' = ');

      this.compile(node.body, frame);

      this._emitLine(';');
    }

    node.targets.forEach(function (target, i) {
      var id = ids[i];
      var name = target.value; // We are running this for every var, but it's very
      // uncommon to assign to multiple vars anyway

      _this6._emitLine("frame.set(\"" + name + "\", " + id + ", true);");

      _this6._emitLine('if(frame.topLevel) {');

      _this6._emitLine("context.setVariable(\"" + name + "\", " + id + ");");

      _this6._emitLine('}');

      if (name.charAt(0) !== '_') {
        _this6._emitLine('if(frame.topLevel) {');

        _this6._emitLine("context.addExport(\"" + name + "\", " + id + ");");

        _this6._emitLine('}');
      }
    });
  };

  _proto.compileSwitch = function compileSwitch(node, frame) {
    var _this7 = this;

    this._emit('switch (');

    this.compile(node.expr, frame);

    this._emit(') {');

    node.cases.forEach(function (c, i) {
      _this7._emit('case ');

      _this7.compile(c.cond, frame);

      _this7._emit(': ');

      _this7.compile(c.body, frame); // preserve fall-throughs

      if (c.body.children.length) {
        _this7._emitLine('break;');
      }
    });

    if (node.default) {
      this._emit('default:');

      this.compile(node.default, frame);
    }

    this._emit('}');
  };

  _proto.compileIf = function compileIf(node, frame, async) {
    var _this8 = this;

    this._emit('if(');

    this._compileExpression(node.cond, frame);

    this._emitLine(') {');

    this._withScopedSyntax(function () {
      _this8.compile(node.body, frame);

      if (async) {
        _this8._emit('cb()');
      }
    });

    if (node.else_) {
      this._emitLine('}\nelse {');

      this._withScopedSyntax(function () {
        _this8.compile(node.else_, frame);

        if (async) {
          _this8._emit('cb()');
        }
      });
    } else if (async) {
      this._emitLine('}\nelse {');

      this._emit('cb()');
    }

    this._emitLine('}');
  };

  _proto.compileIfAsync = function compileIfAsync(node, frame) {
    this._emit('(function(cb) {');

    this.compileIf(node, frame, true);

    this._emit('})(' + this._makeCallback());

    this._addScopeLevel();
  };

  _proto._emitLoopBindings = function _emitLoopBindings(node, arr, i, len) {
    var _this9 = this;

    var bindings = [{
      name: 'index',
      val: i + " + 1"
    }, {
      name: 'index0',
      val: i
    }, {
      name: 'revindex',
      val: len + " - " + i
    }, {
      name: 'revindex0',
      val: len + " - " + i + " - 1"
    }, {
      name: 'first',
      val: i + " === 0"
    }, {
      name: 'last',
      val: i + " === " + len + " - 1"
    }, {
      name: 'length',
      val: len
    }];
    bindings.forEach(function (b) {
      _this9._emitLine("frame.set(\"loop." + b.name + "\", " + b.val + ");");
    });
  };

  _proto.compileFor = function compileFor(node, frame) {
    var _this10 = this;

    // Some of this code is ugly, but it keeps the generated code
    // as fast as possible. ForAsync also shares some of this, but
    // not much.
    var i = this._tmpid();

    var len = this._tmpid();

    var arr = this._tmpid();

    frame = frame.push();

    this._emitLine('frame = frame.push();');

    this._emit("var " + arr + " = ");

    this._compileExpression(node.arr, frame);

    this._emitLine(';');

    this._emit("if(" + arr + ") {");

    this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');'); // If multiple names are passed, we need to bind them
    // appropriately

    if (node.name instanceof nodes.Array) {
      this._emitLine("var " + i + ";"); // The object could be an arroy or object. Note that the
      // body of the loop is duplicated for each condition, but
      // we are optimizing for speed over size.

      this._emitLine("if(runtime.isArray(" + arr + ")) {");

      this._emitLine("var " + len + " = " + arr + ".length;");

      this._emitLine("for(" + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {"); // Bind each declared var

      node.name.children.forEach(function (child, u) {
        var tid = _this10._tmpid();

        _this10._emitLine("var " + tid + " = " + arr + "[" + i + "][" + u + "];");

        _this10._emitLine("frame.set(\"" + child + "\", " + arr + "[" + i + "][" + u + "]);");

        frame.set(node.name.children[u].value, tid);
      });

      this._emitLoopBindings(node, arr, i, len);

      this._withScopedSyntax(function () {
        _this10.compile(node.body, frame);
      });

      this._emitLine('}');

      this._emitLine('} else {'); // Iterate over the key/values of an object

      var _node$name$children = node.name.children,
          key = _node$name$children[0],
          val = _node$name$children[1];

      var k = this._tmpid();

      var v = this._tmpid();

      frame.set(key.value, k);
      frame.set(val.value, v);

      this._emitLine(i + " = -1;");

      this._emitLine("var " + len + " = runtime.keys(" + arr + ").length;");

      this._emitLine("for(var " + k + " in " + arr + ") {");

      this._emitLine(i + "++;");

      this._emitLine("var " + v + " = " + arr + "[" + k + "];");

      this._emitLine("frame.set(\"" + key.value + "\", " + k + ");");

      this._emitLine("frame.set(\"" + val.value + "\", " + v + ");");

      this._emitLoopBindings(node, arr, i, len);

      this._withScopedSyntax(function () {
        _this10.compile(node.body, frame);
      });

      this._emitLine('}');

      this._emitLine('}');
    } else {
      // Generate a typical array iteration
      var _v = this._tmpid();

      frame.set(node.name.value, _v);

      this._emitLine("var " + len + " = " + arr + ".length;");

      this._emitLine("for(var " + i + "=0; " + i + " < " + arr + ".length; " + i + "++) {");

      this._emitLine("var " + _v + " = " + arr + "[" + i + "];");

      this._emitLine("frame.set(\"" + node.name.value + "\", " + _v + ");");

      this._emitLoopBindings(node, arr, i, len);

      this._withScopedSyntax(function () {
        _this10.compile(node.body, frame);
      });

      this._emitLine('}');
    }

    this._emitLine('}');

    if (node.else_) {
      this._emitLine('if (!' + len + ') {');

      this.compile(node.else_, frame);

      this._emitLine('}');
    }

    this._emitLine('frame = frame.pop();');
  };

  _proto._compileAsyncLoop = function _compileAsyncLoop(node, frame, parallel) {
    var _this11 = this;

    // This shares some code with the For tag, but not enough to
    // worry about. This iterates across an object asynchronously,
    // but not in parallel.
    var i = this._tmpid();

    var len = this._tmpid();

    var arr = this._tmpid();

    var asyncMethod = parallel ? 'asyncAll' : 'asyncEach';
    frame = frame.push();

    this._emitLine('frame = frame.push();');

    this._emit('var ' + arr + ' = runtime.fromIterator(');

    this._compileExpression(node.arr, frame);

    this._emitLine(');');

    if (node.name instanceof nodes.Array) {
      var arrayLen = node.name.children.length;

      this._emit("runtime." + asyncMethod + "(" + arr + ", " + arrayLen + ", function(");

      node.name.children.forEach(function (name) {
        _this11._emit(name.value + ",");
      });

      this._emit(i + ',' + len + ',next) {');

      node.name.children.forEach(function (name) {
        var id = name.value;
        frame.set(id, id);

        _this11._emitLine("frame.set(\"" + id + "\", " + id + ");");
      });
    } else {
      var id = node.name.value;

      this._emitLine("runtime." + asyncMethod + "(" + arr + ", 1, function(" + id + ", " + i + ", " + len + ",next) {");

      this._emitLine('frame.set("' + id + '", ' + id + ');');

      frame.set(id, id);
    }

    this._emitLoopBindings(node, arr, i, len);

    this._withScopedSyntax(function () {
      var buf;

      if (parallel) {
        buf = _this11._pushBuffer();
      }

      _this11.compile(node.body, frame);

      _this11._emitLine('next(' + i + (buf ? ',' + buf : '') + ');');

      if (parallel) {
        _this11._popBuffer();
      }
    });

    var output = this._tmpid();

    this._emitLine('}, ' + this._makeCallback(output));

    this._addScopeLevel();

    if (parallel) {
      this._emitLine(this.buffer + ' += ' + output + ';');
    }

    if (node.else_) {
      this._emitLine('if (!' + arr + '.length) {');

      this.compile(node.else_, frame);

      this._emitLine('}');
    }

    this._emitLine('frame = frame.pop();');
  };

  _proto.compileAsyncEach = function compileAsyncEach(node, frame) {
    this._compileAsyncLoop(node, frame);
  };

  _proto.compileAsyncAll = function compileAsyncAll(node, frame) {
    this._compileAsyncLoop(node, frame, true);
  };

  _proto._compileMacro = function _compileMacro(node, frame) {
    var _this12 = this;

    var args = [];
    var kwargs = null;

    var funcId = 'macro_' + this._tmpid();

    var keepFrame = frame !== undefined; // Type check the definition of the args

    node.args.children.forEach(function (arg, i) {
      if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) {
        kwargs = arg;
      } else {
        _this12.assertType(arg, nodes.Symbol);

        args.push(arg);
      }
    });
    var realNames = args.map(function (n) {
      return "l_" + n.value;
    }).concat(['kwargs']); // Quoted argument names

    var argNames = args.map(function (n) {
      return "\"" + n.value + "\"";
    });
    var kwargNames = (kwargs && kwargs.children || []).map(function (n) {
      return "\"" + n.key.value + "\"";
    }); // We pass a function to makeMacro which destructures the
    // arguments so support setting positional args with keywords
    // args and passing keyword args as positional args
    // (essentially default values). See runtime.js.

    var currFrame;

    if (keepFrame) {
      currFrame = frame.push(true);
    } else {
      currFrame = new Frame();
    }

    this._emitLines("var " + funcId + " = runtime.makeMacro(", "[" + argNames.join(', ') + "], ", "[" + kwargNames.join(', ') + "], ", "function (" + realNames.join(', ') + ") {", 'var callerFrame = frame;', 'frame = ' + (keepFrame ? 'frame.push(true);' : 'new runtime.Frame();'), 'kwargs = kwargs || {};', 'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {', 'frame.set("caller", kwargs.caller); }'); // Expose the arguments to the template. Don't need to use
    // random names because the function
    // will create a new run-time scope for us

    args.forEach(function (arg) {
      _this12._emitLine("frame.set(\"" + arg.value + "\", l_" + arg.value + ");");

      currFrame.set(arg.value, "l_" + arg.value);
    }); // Expose the keyword arguments

    if (kwargs) {
      kwargs.children.forEach(function (pair) {
        var name = pair.key.value;

        _this12._emit("frame.set(\"" + name + "\", ");

        _this12._emit("Object.prototype.hasOwnProperty.call(kwargs, \"" + name + "\")");

        _this12._emit(" ? kwargs[\"" + name + "\"] : ");

        _this12._compileExpression(pair.value, currFrame);

        _this12._emit(');');
      });
    }

    var bufferId = this._pushBuffer();

    this._withScopedSyntax(function () {
      _this12.compile(node.body, currFrame);
    });

    this._emitLine('frame = ' + (keepFrame ? 'frame.pop();' : 'callerFrame;'));

    this._emitLine("return new runtime.SafeString(" + bufferId + ");");

    this._emitLine('});');

    this._popBuffer();

    return funcId;
  };

  _proto.compileMacro = function compileMacro(node, frame) {
    var funcId = this._compileMacro(node); // Expose the macro to the templates

    var name = node.name.value;
    frame.set(name, funcId);

    if (frame.parent) {
      this._emitLine("frame.set(\"" + name + "\", " + funcId + ");");
    } else {
      if (node.name.value.charAt(0) !== '_') {
        this._emitLine("context.addExport(\"" + name + "\");");
      }

      this._emitLine("context.setVariable(\"" + name + "\", " + funcId + ");");
    }
  };

  _proto.compileCaller = function compileCaller(node, frame) {
    // basically an anonymous "macro expression"
    this._emit('(function (){');

    var funcId = this._compileMacro(node, frame);

    this._emit("return " + funcId + ";})()");
  };

  _proto._compileGetTemplate = function _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) {
    var parentTemplateId = this._tmpid();

    var parentName = this._templateName();

    var cb = this._makeCallback(parentTemplateId);

    var eagerCompileArg = eagerCompile ? 'true' : 'false';
    var ignoreMissingArg = ignoreMissing ? 'true' : 'false';

    this._emit('env.getTemplate(');

    this._compileExpression(node.template, frame);

    this._emitLine(", " + eagerCompileArg + ", " + parentName + ", " + ignoreMissingArg + ", " + cb);

    return parentTemplateId;
  };

  _proto.compileImport = function compileImport(node, frame) {
    var target = node.target.value;

    var id = this._compileGetTemplate(node, frame, false, false);

    this._addScopeLevel();

    this._emitLine(id + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(id));

    this._addScopeLevel();

    frame.set(target, id);

    if (frame.parent) {
      this._emitLine("frame.set(\"" + target + "\", " + id + ");");
    } else {
      this._emitLine("context.setVariable(\"" + target + "\", " + id + ");");
    }
  };

  _proto.compileFromImport = function compileFromImport(node, frame) {
    var _this13 = this;

    var importedId = this._compileGetTemplate(node, frame, false, false);

    this._addScopeLevel();

    this._emitLine(importedId + '.getExported(' + (node.withContext ? 'context.getVariables(), frame, ' : '') + this._makeCallback(importedId));

    this._addScopeLevel();

    node.names.children.forEach(function (nameNode) {
      var name;
      var alias;

      var id = _this13._tmpid();

      if (nameNode instanceof nodes.Pair) {
        name = nameNode.key.value;
        alias = nameNode.value.value;
      } else {
        name = nameNode.value;
        alias = name;
      }

      _this13._emitLine("if(Object.prototype.hasOwnProperty.call(" + importedId + ", \"" + name + "\")) {");

      _this13._emitLine("var " + id + " = " + importedId + "." + name + ";");

      _this13._emitLine('} else {');

      _this13._emitLine("cb(new Error(\"cannot import '" + name + "'\")); return;");

      _this13._emitLine('}');

      frame.set(alias, id);

      if (frame.parent) {
        _this13._emitLine("frame.set(\"" + alias + "\", " + id + ");");
      } else {
        _this13._emitLine("context.setVariable(\"" + alias + "\", " + id + ");");
      }
    });
  };

  _proto.compileBlock = function compileBlock(node) {
    var id = this._tmpid(); // If we are executing outside a block (creating a top-level
    // block), we really don't want to execute its code because it
    // will execute twice: once when the child template runs and
    // again when the parent template runs. Note that blocks
    // within blocks will *always* execute immediately *and*
    // wherever else they are invoked (like used in a parent
    // template). This may have behavioral differences from jinja
    // because blocks can have side effects, but it seems like a
    // waste of performance to always execute huge top-level
    // blocks twice

    if (!this.inBlock) {
      this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : ');
    }

    this._emit("context.getBlock(\"" + node.name.value + "\")");

    if (!this.inBlock) {
      this._emit(')');
    }

    this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id));

    this._emitLine(this.buffer + " += " + id + ";");

    this._addScopeLevel();
  };

  _proto.compileSuper = function compileSuper(node, frame) {
    var name = node.blockName.value;
    var id = node.symbol.value;

    var cb = this._makeCallback(id);

    this._emitLine("context.getSuper(env, \"" + name + "\", b_" + name + ", frame, runtime, " + cb);

    this._emitLine(id + " = runtime.markSafe(" + id + ");");

    this._addScopeLevel();

    frame.set(id, id);
  };

  _proto.compileExtends = function compileExtends(node, frame) {
    var k = this._tmpid();

    var parentTemplateId = this._compileGetTemplate(node, frame, true, false); // extends is a dynamic tag and can occur within a block like
    // `if`, so if this happens we need to capture the parent
    // template in the top-level scope

    this._emitLine("parentTemplate = " + parentTemplateId);

    this._emitLine("for(var " + k + " in parentTemplate.blocks) {");

    this._emitLine("context.addBlock(" + k + ", parentTemplate.blocks[" + k + "]);");

    this._emitLine('}');

    this._addScopeLevel();
  };

  _proto.compileInclude = function compileInclude(node, frame) {
    this._emitLine('var tasks = [];');

    this._emitLine('tasks.push(');

    this._emitLine('function(callback) {');

    var id = this._compileGetTemplate(node, frame, false, node.ignoreMissing);

    this._emitLine("callback(null," + id + ");});");

    this._emitLine('});');

    var id2 = this._tmpid();

    this._emitLine('tasks.push(');

    this._emitLine('function(template, callback){');

    this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2));

    this._emitLine('callback(null,' + id2 + ');});');

    this._emitLine('});');

    this._emitLine('tasks.push(');

    this._emitLine('function(result, callback){');

    this._emitLine(this.buffer + " += result;");

    this._emitLine('callback(null);');

    this._emitLine('});');

    this._emitLine('env.waterfall(tasks, function(){');

    this._addScopeLevel();
  };

  _proto.compileTemplateData = function compileTemplateData(node, frame) {
    this.compileLiteral(node, frame);
  };

  _proto.compileCapture = function compileCapture(node, frame) {
    var _this14 = this;

    // we need to temporarily override the current buffer id as 'output'
    // so the set block writes to the capture output instead of the buffer
    var buffer = this.buffer;
    this.buffer = 'output';

    this._emitLine('(function() {');

    this._emitLine('var output = "";');

    this._withScopedSyntax(function () {
      _this14.compile(node.body, frame);
    });

    this._emitLine('return output;');

    this._emitLine('})()'); // and of course, revert back to the old buffer id

    this.buffer = buffer;
  };

  _proto.compileOutput = function compileOutput(node, frame) {
    var _this15 = this;

    var children = node.children;
    children.forEach(function (child) {
      // TemplateData is a special case because it is never
      // autoescaped, so simply output it for optimization
      if (child instanceof nodes.TemplateData) {
        if (child.value) {
          _this15._emit(_this15.buffer + " += ");

          _this15.compileLiteral(child, frame);

          _this15._emitLine(';');
        }
      } else {
        _this15._emit(_this15.buffer + " += runtime.suppressValue(");

        if (_this15.throwOnUndefined) {
          _this15._emit('runtime.ensureDefined(');
        }

        _this15.compile(child, frame);

        if (_this15.throwOnUndefined) {
          _this15._emit("," + node.lineno + "," + node.colno + ")");
        }

        _this15._emit(', env.opts.autoescape);\n');
      }
    });
  };

  _proto.compileRoot = function compileRoot(node, frame) {
    var _this16 = this;

    if (frame) {
      this.fail('compileRoot: root node can\'t have frame');
    }

    frame = new Frame();

    this._emitFuncBegin('root');

    this._emitLine('var parentTemplate = null;');

    this._compileChildren(node, frame);

    this._emitLine('if(parentTemplate) {');

    this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);');

    this._emitLine('} else {');

    this._emitLine("cb(null, " + this.buffer + ");");

    this._emitLine('}');

    this._emitFuncEnd(true);

    this.inBlock = true;
    var blockNames = [];
    var blocks = node.findAll(nodes.Block);
    blocks.forEach(function (block, i) {
      var name = block.name.value;

      if (blockNames.indexOf(name) !== -1) {
        throw new Error("Block \"" + name + "\" defined more than once.");
      }

      blockNames.push(name);

      _this16._emitFuncBegin("b_" + name);

      var tmpFrame = new Frame();

      _this16._emitLine('var frame = frame.push(true);');

      _this16.compile(block.body, tmpFrame);

      _this16._emitFuncEnd();
    });

    this._emitLine('return {');

    blocks.forEach(function (block, i) {
      var blockName = "b_" + block.name.value;

      _this16._emitLine(blockName + ": " + blockName + ",");
    });

    this._emitLine('root: root\n};');
  };

  _proto.compile = function compile(node, frame) {
    var _compile = this['compile' + node.typename];

    if (_compile) {
      _compile.call(this, node, frame);
    } else {
      this.fail("compile: Cannot compile node: " + node.typename, node.lineno, node.colno);
    }
  };

  _proto.getCode = function getCode() {
    return this.codebuf.join('');
  };

  _inheritsLoose(Compiler, _Obj);

  return Compiler;
}(Obj);

module.exports = {
  compile: function compile(src, asyncFilters, extensions, name, opts) {
    if (opts === void 0) {
      opts = {};
    }

    var c = new Compiler(name, opts.throwOnUndefined); // Run the extension preprocessors against the source.

    var preprocessors = (extensions || []).map(function (ext) {
      return ext.preprocess;
    }).filter(function (f) {
      return !!f;
    });
    var processedSrc = preprocessors.reduce(function (s, processor) {
      return processor(s);
    }, src);
    c.compile(transformer.transform(parser.parse(processedSrc, extensions, opts), asyncFilters, name));
    return c.getCode();
  },
  Compiler: Compiler
};


Equality, Progress, and "Having It All"
Have women accomplished "having it all?" What does "having it all" mean, anyway? Did the mill girls in Lowell "have it all"? In this interactive workshop program, you can decide for yourself! We'll start with "Workers on the Line", an experience co-hosted with the Tsongas Industrial History Center, where you can explore the labor issues relevant to Lowell's mill women. After the workshop, join in on a conversation with Ranger Resi on gender equality and women's work, historically and today.


text:
Robert Flippin
Fax: +1 212 9848040
Robert Flippin Executive Vice President
New York City 200 Park Avenue
Professional Experience
Robert Flippin is an Executive Vice President in CBRE's Brokerage Group located in the New York City office. Mr. Flippin's primary focus is on tenant representation in the New York Tri-State region, but includes supporting the needs of his clients on a national and global basis.
Throughout his 30-year career, Mr. Flippin has been actively involved in several of the largest and most noteworthy transactions in the metropolitan area. Most recently, he represented the law firm Mayer Brown in its relocation from 1675 Broadway to 190,000 square feet at 1221 Avenue of the Americas. He also represented the law firm of Weil Gotshal in its renewal of 388,000 square feet at 767 Fifth Avenue (September 2014), as well as several other locations around the country and internationally.
Mr. Flippin also represented major Japanese Bank, Mizuho Corporate Bank, in its 170,000 square foot renewal at 1251 Avenue of the Americas, and recently negotiated their expansion for an additional 40,000 square feet in the building.
In the Downtown market, Mr. Flippin recently assisted the New York State Banking Department in leasing 240,000 square feet at One State Street Plaza, and has also represented Cadwalder Wickersham & Tart, Nomura Securities, Atlantic Mutual, Weiss Peck & Greer (and others) on numerous projects.
Prior to joining CBRE, Mr. Flippin was an International Director with Jones Lang LaSalle Americas.
Member, United States All-American Lacrosse team
Member, The Real Estate Board of New York (REBNY)
Member, The Young Men's and Women's Real Estate Association of New York
Princeton University, Bachelor of Arts in History, 1983
Princeton University, Bachelor of Arts in Economics, 1983
745 Seventh Avenue
111 Pavenia Avenue, Jersey City, NJ
Tokyo Marine
70,000 square feet | 230 Park Avenue
100 Manhattanville Road, Purchase, NY
Endurance Reinsurance
European American Bank
400,000 square feet | Uniondale, Long Island
Thor Equities, LLC
545 Madison Avenue | Leased the entire building on behalf of owner.


text:
Q: Generating a Direct Link to Embed PDFs I'm trying to create a JQuery function that will automatically find embed PDF URLs on my website and generate a link that goes directly to the PDF right before it's embed. All embed PDF links will be found in an html tag called object. So every instance of a PDF will look like this:
<object data="http://website.com/directLink.pdf" type="pdf">
...</object>

Is there a simple way to extract the URL and generate a link with it right after the object tag? I'd want the resulting link to look something like this:
Download this document here

I don't want to change the existing DOM, just generate the above code after it.

A: I would do something like this (untested, quick solution):
// Grab all objects on the page
var objects = document.querySelectorAll('object');

// Iterate through objects
for( var i = 0; i < objects.length; i++ ) {
  var el = objects[i];
  var href = el.getAttribute('data');
  // Check if the URL contains a PDF link; append link if it does
  if( ~href.indexOf('.pdf') {
    var link = document.createElement('a');
    link.href = href;
    el.parentNode.appendChild(link);
  }
}

redpajama_set_name: RedPajamaStackExchange


text:
Why Does Lockdown Online Dating Suck So Much?
The apps are there, the profiles are active but the people… they've logged off.
The apps are there, the profiles are active but the people… they've logged off.
I'm a serial dater. Some people paint, draw, journal – I date. Dating keeps me across all of the conventions and dynamics of our society, the shifts and the shafts (wink). It primes me for interaction with any sector of civilisation, it readies my communicative intellect and opens my mind to new thoughts, possibilities, complexities and orgasms.
So right now – in the thick of my Melbourne lockdown, I'm a little mad, perplexed and disheartened. The state of dating in a COVID lockdown is hardly existent. The apps are there, the profiles are active but the people… they've logged off. So I want to know, is it just me or are we just not keen on dating anymore?
Through an Insta call out, I detected the popularity of holding back from digital dating in Melbourne. People just don't want to do it anymore.
Ellie from Melbourne is done. "I've given up…Dating apps feel like mindless scrolling on Insta [and] the curfew cuts options right in half," she says, before explaining that she's had it with the walking dates and the boring monotony that is the topic of the month (year) – COVID-19.
"'How's lockdown treating you? Shit, you? Shit. Cool…' It's almost like everyone is sitting dormant."
To Ellie and many others who are used to the thriving lifestyle that dating brings, it seems a sombre dullness has shrouded this activity. There's no more spice. Literally, no more life.
I can't help but wonder if the global stress has created a sense of rebooting or solo contentment for the dating pool. Have people resorted inwards to get in touch with their needs, wants and desires within? Are people finding love in Christ? Could it be that people are flicking their beans and batting their bats well enough on their own to even consider the attention of others? Tips please!
Having much concern and many a question, I had a chat with Brisbane-based sexologist, Naomi Hutchings, to tap into the general psyche of singletons right now.
"Most of my clientele are from Melbourne!" she exclaims. "I think for some people they've just turned off and some people still struggle with the idea of meeting someone and having relationships online."
We laugh about how we rely on our phones and the internet for our banking, home needs, work and essentially most communication… but there still remains the stigma of prolonged online relationships.
"Why wouldn't you think it extends to relationships?" says Naomi. "For some people, they're nervous and frightened to put it all out there… online dating is a thing but we haven't really talked about dating skills and how to date, even before all this [the 'Vid]."
It seems like people are still interested in others, but they can't seem to stand the test of time. They're nervous about introducing intimacy – whether emotionally or physically – to the online space. She thinks it's pretty intimate in itself to even show someone your bedroom through Zoom.
Naomi says that many people are facing a tremendous amount of stress and anxiety, it's a time for them to work on their own energy and look at self in order to get through the days. For many, they're too exhausted to create new relationships and talk to strangers when they can't even figure out how they're feeling.
"I know people who have decided they're not dating until everything opens up again," says Naomi. "They'll use this time to concentrate and do some self-work… they've just gone really inward, [they're saying] 'This is where I'm at because the world's a bit scary and unpredictable at the moment'."
But I'm a little hung up on something: our fear of intimacy online. I thought that the veneer of the online format always made things easier for us – our generation had hacked the impossible, we were able to make our lives seem euphoric with the touch of our fingers and the tweak of some dials.
And we love technology, right? I thought we were the generation of Catfishes, playlist makers, creators of super drawn out 'things' with no labels. All things casual, despite physical contact or otherwise, we are meant to be good at teasing, at stretching things out and talking shit. But it seems like now is not the time for shit talking, it's pretty real.
"We haven't always talked much about the way people are – and having so many things to do – we have been forced now to stay insular, it has made people realise that we need to connect outside of just drinking at the pub," says Naomi.
But for most, we can't.
It's interesting to think that despite growing up in the age of technology, most of us having our own phones at the peak of our social blooms – our teens – we sure don't know how to use them. Perhaps we just don't know how to communicate when things are tough, period.
Naomi got her first phone when she was 24, she thinks that may have something to do with how worried the younger generation are about communicating in general. As communication moves further into the digital realm, we lose social cues from in-person interaction that are so integral to developing communication skills in our early years.
"It's a wonderful point to think about skills in communication, there's a lot of misunderstanding, no tones with text and miscommunication!"
Yet despite the generational pandemic of shitty commination skills, as well as the literal pandemic, not everyone is taking a break. Some, like myself, want to work their dating muscle.
Grace is almost 25 and she's expecting a long term relationship soon to align with what she calls her 'Timeline.'
"I'm getting back into online dating because the chance of meeting someone in person is becoming less and less likely, and my CLOCK IS TICKIN'," she says.
Grace is serious about getting serious but she's also in it for the gags. "Online dating can be a mindless activity to take up a bit of time in my boring day!" she says.
At the crux of it, online dating still isn't for everyone, even though it's all some of us have to create new connections with. We also need to remember that there's something bigger at hand here, the bloody apocalypse is looming and no matter what, COVID-19 will dominate any and all conversations right now. So maybe it isn't the most exhilarating time to date.
So write in that diary, fill that Love Honey cart, drink that home-made brew and work on you, baby, because by the looks of it, everybody could do with a communication skills tune-up. Embrace romantic literature and light a candle, because when we get out of this mess we can redefine our generational flaws.
sexcovid19irllife


Keri Arthur is a writer of fantasy, horror fiction, and romance novels from Melbourne, Australia. She began writing at the age of twelve and has finished twenty-six novels as of July 2012.
n a world of sorcery and seduction, the nights bring out the beautiful, the damned, and the desired. Here, Riley Jenson is on her own-half werewolf, half vampire, working for an organization created to police the supernatural races.


text:
Home The Wharton School Corporate Valuation
Follow The Wharton School
SchoolUniversity of Pennsylvania, The Wharton School
All dates January 27-31, 2020
LocationThe Wharton School, Philadelphia, US
CategoryCorporate Development, Finance
Value creation is a core operating principle for many of today's most successful and admired companies. But consistently achieving this outcome is not always simple or straightforward. To understand the potential sources of value for a corporation, a business leader needs an objective framework in order to analyze and evaluate the opportunities and risks that lie ahead.
Corporate Valuation provides that framework. This program helps leaders master the advanced financial tools needed to compute the impact of strategic decisions on the value of their organizations. Armed with this insight, participants in this program will increase their ability to confidently take action in ways that will produce superior financial performance and generate market-leading results for their companies.
Corporate Valuation is an advanced finance program designed for senior leaders already familiar with such concepts as net present value (NPV), internal rate of return (IRR), free cash flow, discounted cash flow analysis, return on investment, and cost of capital. Familiarity with Microsoft Excel is expected.
Participants include senior-level executives, as well as those executives moving into roles with greater responsibility who need to strengthen their financial acumen and improve their ability to make strategic, operational, and financial decisions that generate value. Executives who are responsible for acquisitions, mergers, buyouts, divestitures, restructuring, budgeting, and planning will find this program curriculum particularly relevant and beneficial.
Job titles or roles may include:
Strategic planning and/or business development executive
CEO, COO, or president of an entrepreneurial or fast-growing company
Controller or other corporate finance position
General manager, vice president, executive director
Investment analyst or investment manager
Leader of a privately owned business, especially one that is negotiating with lenders or investors
Lawyer or accountant
Fluency in English, written and spoken, is required for participation in Wharton executive education programs unless otherwise indicated.
In Corporate Valuation, you will:
Calculate corporate valuations across a range of situations and for multiple purposes
Evaluate the financial implications of strategic decisions in different settings, including merger and acquisition targets, and leveraged buyout opportunities
Analyze financial statements to better understand opportunities and risks
Recognize the limitations of different valuation techniques
Learn how to communicate to colleagues, investors, lenders, and others a clear financial strategy that will generate sustained, superior financial performance
Course information from University of Pennsylvania, The Wharton School
Michael Roberts, PhD
Professor of Finance, The Wharton School
Professor Roberts' primary research is in the area of corporate finance and in particular: capital structure, investment policy, financial contracting, and payout policy. Recent work has examined issues including the design of debt securities and the role of control rights in influencing financial and investment policy. His research has received several awards including the Brattle Prize for Distinguished Paper published in the Journal of Finance, and Best Paper awards at the Financial Management Association and Southwestern Finance Association annual conferences. He earned his BA in Economics from the University of California at San Diego, and his MA in Statistics and PhD in Economics from the University of California at Berkeley. In addition to his experience at the Wharton School, he has taught at Duke University's Fuqua School of Business.
Robert Holthausen, PhD
The Nomura Securities Company Professor, Professor of Accounting and Finance and Management; Chairperson, Accounting Department, The Wharton School
A former CPA and financial analyst and an award-winning teacher, Robert's expertise is in investment management and valuation. Prior to joining Wharton, Robert taught for a decade at the Graduate School of Business of the University of Chicago. He is an editor of the Journal of Accounting and Economics, and the author of Corporate Valuation: Theory, Practice and Evidence.
James D. Thompson, PhD
Co-founder and Director, Wharton Social Enterprise Program, The Wharton School; Adjunct Associate Professor at the School of Social Policy and Practice, University of Pennsylvania
Jim is coauthor of The Social Entrepreneur's Playbook; co-founder and director of the Wharton Social Entrepreneurship Program; and Adjunct Associate Professor at the School of Social Policy and Practice of the University of Pennsylvania. His current areas of research focus are social innovation, future market growth, and investment under conditions of high uncertainty.
He teaches in Wharton Executive Education programs and works with management teams around the world to design and execute growth strategies that increase the value of their firms. Prior to joining the academic world, he was a divisional director of a public company, responsible for business unit turnarounds and new market development. In addition to academic interests he currently serves on the executive board of a venture capital-funded technology company in Philadelphia.
Jim holds a PhD from The Swiss Institute of Technology (EPFL) and is published in the Harvard Business Review, Journal of Management, Long Range Planning, Management Science, Organization Science, and the Research-Technology Management Journal. He is a recipient of Best Paper Awards in the Academy of Management and the American Marketing Association.
Disclaimer: When you click submit, we will send an email on your behalf to The Wharton School from which you are requesting information. The email will contain your contact information so a school representative will be able to get in touch with you.
Executive Development Program
March 15-27, 2020 2 weeks
Wharton Finance for Executives
September 21-25, 2020 5 days
The CFO: Becoming a Strategic Partner
October 26-30, 2020 5 days
Private Equity: Investing and Creating Value
April 20-24, 2020 5 days


NEW BRUNSWICK — With the help of a pilot program launched by New Jersey, several homeless people who are in and out of hospital emergency rooms will get the permanent shelter and medical attention they gravely need.
The state Department of Community Affairs on Thursday announced a two-year pilot program, named Housing First, that will award 25 tenant-based housing vouchers to homeless people in the area who are frequent visitors to the emergency departments at Robert Wood Jonson University Hospital and/or Saint Peter's University Hospital.
Housing First initially launched in September with a similar program in Hudson County.
The idea is to initially meet their basic need of shelter, so then the work to address health-related issues can begin.
"On the one hand we reduce homelessness but also we reduce healthcare costs over time and also improve healthcare outcomes," DCA Assistant Commissioner Chigozie Onyema told New Jersey 101.5.
Through a partnership with local nonprofits and the hospitals, costs will be covered for two case managers to help connect voucher recipients, as well as other patients, with social service providers who can offer services related to food stamps, substance abuse, mental health issues, domestic violence and employment.
"We have a moral responsibility to positively impact the social determinants of health and improve our community's well-being before a visit to the emergency department is needed," said Leslie D. Hirsch, interim CEO and president of Saint Peter's Healthcare System, said in a press release.
The hospitals will identify the homeless individuals eligible for the program by scanning their database for high utilizers of their emergency departments. Coming Home of Middlesex County, the nonprofit providing the two case managers, will help determine who gets the vouchers first — based on health-related social needs — and keep track of the pilot program's outcomes.
"We have been able to establish this program through the determination of all the organizations involved to step outside their ordinary course of doing business to reach across sectors and collaborate for the benefit of Middlesex County residents," said Eileen O'Donnell, executive director of Coming Home. "We know that so much oft that affects a person's health status happens outside a health care facility or physician's office."