When writer-director Dee Rees debuted Mudbound at this year’s Sundance Film Festival in January, it came as a welcome shock to those of us who’d fallen in love with her tiny, intimate debut feature, Pariah, in 2011 — it was just such a leap of scope and ambition. With Pariah, Rees explores her own coming of age as an African-American lesbian through Adepero Oduye as a Brooklyn teen going through a similar awakening. It’s small-scale and beautifully shot, and its dramas are about personal growth. Mudbound, meanwhile, is a sprawling southern epic about two families, one white and one black (the McCallums and the Jacksons), each made up of a married couple, a grandfather-type patriarch, and a struggling-for-purpose young man (Garrett Hedlund’s Jamie and Jason Mitchell’s Ronsel) trying to eke out a life in the literal mud of post-WWII Mississippi. It centers on the plight of women — one stuck in a passionless marriage (Carey Mulligan’s Laura), and one stuck on the wrong side of a service economy (an excellent Mary J. Blige as Florence) — plus PTSD, as the younger men return from war and become unlikely friends. Mudbound also delves into racism, as Ronsel discovers that the country he risked his life fighting for overseas still doesn’t see him as a full person.
Mudbound is based on Hillary Jordan’s 2008 novel of the same name, and is only Rees’s second theatrical feature, not counting her Emmy-winning work co-writing and directing HBO’s Bessie. Rees joined the project both behind the camera and to infuse an existing script from Virgil Williams with her own sensibilities. We talked to her about her process, what it’s like to hang out with Mary J. Blige, and the racist joke she had to write.
On a practical level, how do you write? I’m not a writer that writes every day. I just kind of have ideas. I jot them down when I have them and when I have enough, I just start. And for me I start more around noon and I’m all about feeling. Once there’s a theme I can’t not write.
I get everything out on index cards, whether it’s a phrase or an idea or a scene. And then my first step is to write longhand, because it’s a direct connection from your brain to the page, from your heart to the page. Then I type it up, and when I type that functions as the first edit, because when I’m reading that back I trim that down even more.
What’s the first thing you wrote? I wrote poetry and short stories. I would send them to magazines, they wouldn’t get in. But short stories are how I found philosophy and how I’d understand the world. Filmmaking in general is my second career. I thought that writing wasn’t practical, so I went to business school and got an MBA and I worked three years in grant management. My first job was at Proctor and Gamble in Cincinnati, my second job was at a pharmaceutical company in Berkeley Heights, New Jersey. My third job was at Palmolive. And I realized, three jobs in three years, maybe it wasn’t the job. It had to be me. I wasn’t doing what I really loved to do, so I quit my job, went to film school at NYU, got an MFA, and just started over. All I knew was prose then. I didn’t write scripts until I got to film school.
How did you conceive of this screenplay? This project first started for me in 2015. One of the producers, Cassian Elwes, had brought me the original script, written by this guy named Virgil Williams, and I thought there was a lot of there there, and that inspired me to read the book. Virgil and I never worked together; he just wrote the first draft and I rewrote the script for production. I really wanted to draw out some of the inner life more and to have the Jackson family [the black family] more rounded. I rewrote it so it was a story about two families who were connected in a way that they were reflecting each other. I wanted, on a bigger thematic level, to show how these families are all in the mud, they’re all connected to the land, and what it means to not be able to come home and what it means to the family around you.
The dialogue is incredibly thick and specific. How’d you get that down? I’m from Tennessee, so that’s part of it. We had a dialect coach, so each of the characters is doing a different accent. Like the Jackson family, my grandmother is from Louisiana — they’re from Mississippi — but I was kind of able to draw on her sayings, her aphorisms and used those, and my dad and parents are from Tennessee, so I used all that and put it in. I kept a lot from Virgil’s first draft in terms of how the McCallans spoke. But I wanted to make sure Laura doesn’t sound like Henry. Laura is a bit more refined in ways, but Henry’s got an engineering degree. And Pappy [Jonathan Banks, the white grandfather] doesn’t sound like Henry [his son] because Pappy’s more ignorant. Like, I wrote the racist joke that Pappy says.It’s in the scene where Hap asserts that Ronsel is an officer in the military. And Pappy says, “What do you call a nigger with stripes? … A ra-Coon!”
Whoa. Why’d you feel it was so important to write that? Because it gives dimension to the bigotry and illustrates how it’s manifested in a more nuanced way — not always menacing, but playful. Like, Pappy genuinely finds this funny and undoubtedly has a wealth of other “nigger” jokes stored up in his head.
I grew up in Nashville in the ’80s. So I heard tons of “nigger” jokes. Some told maliciously, others told by white classmates who didn’t see anything wrong in what they were saying. They were repeating what they heard their parents or sibling or friends saying. It was in some ways abstract to them, the dehumanizing aspect of it. Sometimes consciously connected to the black person standing in front of them to whom they’re telling a “nigger joke.” Sometimes strangely disconnected. There’d be the old irrational cop-out, “You’re not a nigger, but those other people are niggers.” Or the blatantly racist generalization or observation or anecdote, quickly followed by the weak verbal panacea of, “…no offense,” or whatever. But at the end of it all, “nigger” was a ready quiver in the adolescent white quill. It was a decisive fight-ender — or usually fight-starter — and a guaranteed gut punch that would momentarily stun or destabilize or rock the recipient. So I had that to draw from.
Do you see the industry as more receptive to black female filmmakers than when you started? Not necessarily. No. I think it’s about taking time to build relationships, so the people I’m working with are people I’ve known since 2009. At the end of the day, I feel like it falls upon critics and audiences to talk about the work first and talk about the maker second. I think that when people are limited by the labels that are put on them, then that necessarily limits the perceptions of what people can do. So for me, excellence is excellence. If something is excellent, call it that. If something is mediocre, call it that. To me, if excellent work were celebrated and recognized, then it would go a long way toward acknowledging the people who make it and their capabilities. A time needs to come when what you see on the screen is undeniable.
This movie cost $11 million, compared to $500,000 for Pariah, but still not much money for how rich and layered it looks. What’s it like to get a low-budget movie about diverse storytelling made these days? In a weird way, this movie was the easiest one to finance. The money was already kind of raised. So it was about what that meant in terms of production constraints. Originally, this would’ve been a much larger budget, but we couldn’t get it, so it was like, “Okay, how do we make it work?” That meant we had less days. I think we shot 31 days altogether, 28 days in Louisiana, 2 days in Budapest, and then we shot a day in Long Island at a WWII museum — that’s where we shot the B-25s on real B-25 planes. The budgetary constraints reflect how much time you get, but for me as a director, the thing I’m interested in are performances. So a bigger budget, at the end of the day, would’ve bought me more extras, but it wouldn’t have bought me more time. It wouldn’t have bought me those performances.
And then Netflix bought it for $12.5 million, in the biggest deal at Sundance. It’s amazing, everyone’s investment is paid off and we made a film that looks like it cost twice that much. As an artist, you want your work to be seen, to be out there. So the idea that someone in Florida could watch this the same day as someone on Portugal is huge. When you talk about intersectionality and expanding the conversation, just being seen that broadly definitely does that.
For me I feel like my first film, Pariah, was kept alive because of Netflix. So to me I was happy to go with them because with Pariah, we did a small, limited release, but it didn’t get attention. And then it was on Netflix and people really knew about it. People to this day are still discovering Pariah, in the same way that I think Netflix is going to give Mudbound a legacy.
I think Mary J. Blige is a revelation. Why’d you want her as Florence, this proud wife and mother who has to serve Carey Mulligan’s character, even when her white husband is part of the reason her family isn’t advancing? I wanted Mary for Florence because I saw Florence as being someone who saw everything and said little of what she saw. She had to be somewhat in her head and someone who had a reserve on the exterior, but on the interior had a lot of thought, a lot of light behind the eyes. Mary has that kind of vulnerability. If you’ve ever been at one of her concerts, it’s like a therapy session with 30,000 people. She’s not saying lines, she’s living every line, and that’s the same thing with her work as an actor. She living every moment. She’s not just kind of reciting. She’s really in it, really throws herself away and becomes the character. So I knew that she could go there, and just see this woman, see this life in her eyes. You see how when she’s with her husband she takes her hair down, but when she’s with the McCallans, she has her armor on. Mary pulls it off.
Do you still hang out with her? We’ve hung out a few times. Mary’s such a cool open person, just a great spirit. It’s so great to be invited into her space. She’s someone whom I could text or email or call.
Are you leaning more toward movies or TV, post-Mudbound? I’m casting another film that hopefully will shoot in the spring and then I have a couple of TV irons in the fire that I should know more about by the end of the year.
It seems like a lot of independent filmmakers are going to TV because it’s so hard to get low-budget movies made. I was wondering if that’s why you ultimately followed up Pariah with an HBO movie. I want to get out of the independent film box. I just want to work in film, period. But after Pariah, I had all these ideas. I had this spec pilot I’d written about Nashville called The ’Ville. Ironically, I was getting people like, “No one wants to talk about Nashville,” and then a show comes out called Nashville on ABC a year later! Pariah opened doors that allowed me to always write, because after Pariah, Focus hired me to write another feature about a woman cop, that I wanted to do. They didn’t end up producing it, but because of that they asked me to write a pilot for a Viola Davis show. That didn’t go. But then HBO called me to rewrite Bessie, so I rewrote Bessie, and then they asked me to direct it. So Pariah definitely opened doors in that it kept me working as an artist. I never wasn’t working after Sundance 2011. I was writing things that didn’t get produced but I was always exercising that muscle the whole thing. It comes full circle. I was directing Bessie and that’s when Cassie reached out with Mudbound.
I didn’t know that your way into Bessie was rewriting it. Do you always envision things as a writer before you envision them as a director? I got into this business because I wanted to tell stories. That’s what got me into filmmaking. I wanted to bring writing to life. To me, that was always the end. I wanted to create worlds and create characters that live on in people’s minds. and I wanted to be able to realize them. I always wanted to be an auteur. For me, I was open to doing adaptation, but I always wanted to do original work and create worlds and just create characters that would live on in people’s minds. I see it as all part of the same thing. Just to create something new.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]