My bridezilla sisters expect me to make their wedding dresses, and more advice from Dear Prudence. | #facebookdating | #tinder | #pof


Photo illustration by Slate. Photo by cglade/iStock/Getty Images Plus.

Dear Prudence is online weekly to chat live with readers. Here’s an edited transcript of this week’s chat.

Danny Lavery: Hello, everyone! Let’s distract ourselves with one another’s personal lives, shall we?

Q. Dresses: I am crafty. In an act of hubris and love, I agreed to DIY my best friend’s wedding dress since she had no budget. It took $100, a dozen thrift stores, 100 hours, and a pint of blood, but I was able to convert an ’80s monstrosity into a rather darling modern frock. She got married and bragged about me on social media, but now everyone and their Aunt Betty is expecting me to do the same for them!

The worst are my half-sister and stepsister, and they have competing weddings going on since my stepsister had to reschedule. They both are borderline bridezillas. My half-sister lives in another state and expects me to hand-sew her wedding dress via Zoom. My stepsister has sent me pics that far extend my skills. My stepmother is borderline hysterical trying to keep the peace and my father has retreated from every fight. I am proud of what I did, but I share a house with my friend and her husband. There is no way I could do what I did with someone far away. And I don’t want to again. I love my family but I am hanging up the needle and thread. Help!

A: You do not need my help! You know what you need to do, which is say no. You are prepared to say no, you’re aware that you have to say no (because you’re being asked to put together dresses that won’t just look great on a wedding day, but that will also reconstruct the Titanic, cure disease, and julienne fries), and you’re going to say no. And it’s going to be fine. Your stepmother is not bound by a curse to get upset every time your stepsister gets upset; she’s making a choice and she’s free to stop whenever she’s ready. Your stepsister and your half-sister are not being driven by a wedding-induced infection to bully their relatives into promising favors—they are making unreasonable demands and hoping nobody pushes back. You can say no calmly, firmly, and without taking responsibility for the ensuing “But how could yous” and “But what will I wear now that I’m forced to admit you don’t secretly have Oscar de la Renta in your home office?” You did not promise anything to anyone else when you made your friend’s dress.

When I was a kid, I used to ride horses at a local barn that was staffed by terrifyingly self-possessed Midwestern women who had little slogans on their desks like “I can only please one person per day” and “Failure to plan on your part does not constitute an emergency on my part.” They intimidated the hell out of me, especially because I didn’t know anything about English-style saddles and was too afraid to ask, but in retrospect they were right about everything, including my inability to hold my seat during a canter. Take your cue from them, these unflappable women of the saddle, and don’t let anyone throw you off balance.

How to Get Advice From Prudie:

• Send questions for publication to prudence@slate.com. (Questions may be edited.)

• Join the live chat Mondays at noon. Submit your questions and comments here before or during the discussion.

• Call the voicemail of the Dear Prudence podcast at 401-371-DEAR (3327) to hear your question answered on a future episode of the show.

Q. Tips for breaking up with a narcissistic friend? I was going to write you a long letter detailing a conflict with a friend of mine and why I was right and she was wrong. But I’ve realized that this person, whom I’ve been close to for more than six years, is not a good friend to me and I need to “break up” with her. She can be really mean and manipulative at times but caring and fun at others. She has some pretty narcissistic tendencies, like freaking out whenever anyone disagrees with her.

I’m not sure how one breaks up with a friend—I’ve never broken up with anyone!—and I’m especially worried that if I do it in person or over the phone, she’ll either curse me out or act really compassionate and try to lure me back in, but I’m not sure which. How OK would it be to send a letter? I do care about her still, so ghosting is not an option. I know you talked about this in a recent letter where someone wrote in about their co-worker, but this is someone who I have welcomed into my life and home for years, and I’m pretty crushed to even be in this position. What do I do? And how do I deal with the emotional consequences of a nonromantic breakup?

A: I’m happy to run suggestions from other readers on this one, because I know friend breakups can be very fraught. I welcome hearing from anyone who either managed to end a friendship in a way they felt they could take pride in, or who was dumped by a friend in a fashion they were able to respect, even if they didn’t enjoy it.

If you’re quite sure that there’s nothing left to be said between the two of you that could salvage things, then a letter or an email may make the most sense, although I’m not sure I can promise you it will be “OK” in the sense I think you’re hoping it will. Even if you express yourself thoughtfully and with great care, she’ll still be upset, both because breakups are hard under the best of circumstances, and also because she has a history of “freaking out” over even low-grade conflict.

To that end, you should prepare yourself for an “OK” outcome to include her trying to curse you out, yell at you, or yell about you to other people, even if you end things in writing and not in person. Prepare yourself for her initial response to be angry and accept it as a matter of course, rather than the worst possible outcome that you can avoid. As always, you do not need her permission to break up with her, and she may very well never see the end of your relationship the way that you do. (Finding it impossible to see things from each other’s perspective is often a good reason to break up, as it happens.)

Your goal in this last letter or last conversation should not be to change her mind, or to argue your point of view so persuasively that she has to concede the point. Keep it relatively short and to the point, and don’t waste your time cataloging every point of disagreement or moment of failure on her point. Be clear if you don’t want to discuss your decision further, and steel yourself against the possibility of future attempts at “luring” you with requests for a post-breakup autopsy. (To be clear, I think there can be value in having such conversations in person, and I’m not against the idea of meeting once to keep a breakup amicable, but neither do I think that sort of thing is mandatory.) Let yourself mourn the emotional consequences in whatever fashion seems best to you, and maybe use it as an opportunity to think about what you want from future friendships.

Q. Not a beast of burden: My sister-in-law has been suffering from infertility for years, but she has burned up any sympathy I had. After I found out I was pregnant on my honeymoon, she made frequent jokes about how that must have been why we got married (we tied the knot relatively early for insurance reasons). I got pregnant again when our son was three months old. My sister-in-law commented on a family text about me being a “breeding beast” and how it wasn’t fair. At Christmas, she locked herself in the bathroom because she couldn’t handle seeing me with the babies. I sat there trying to breastfeed while the entire family tried to coax her out. My husband and I took our kids to a hotel room and I burst into tears.

My husband read the Riot Act to his family, but they blame me for the estrangement. I “don’t know” how lucky I am to be a mother when my poor sister-in-law suffers so. My in-laws have seen the grandchildren twice. We are trying to patch things up over video chat. They are more remorseful now, but my sister-in-law still excuses her behavior. She lives with my in-laws now and pops up on chats. She also acts offended that we refuse to FaceTime my children with her. If I see her, I pick them up and leave the room. My husband has offered to go no-contact with his family. I don’t want it to come to that, but at some point I am going to snap and tell my sister-in-law exactly what I think of her.

A: You have my full and enthusiastic permission to ignore anyone who has ever referred to you as a “breeding beast” for any reason, whether they personally struggle with infertility or not. You have that same permission and the same enthusiasm to ignore anyone who blames you for not getting along with someone who called you a “breeding beast.” You know, of course, that you did not have children at your sister-in-law’s expense, and that you did not force her to treat you with cruelty and disdain by virtue of having children. But it still bears repeating: This woman treats your family as a personal affront, forces her way into conversations you haven’t invited her into, refuses to apologize for referring to you as livestock, and then has the nerve to act affronted when you don’t ask her to FaceTime your children.

If the best your in-laws can offer you is “Gosh, we’re sort of sorry about her outburst last Christmas, but if she wanders into this video chat right now, we’re not going to do a thing about it,” I’m afraid their best just isn’t good enough, and that you’re directly headed for another blow-up. I think your husband has the right idea. “We’d love to talk again, but we can’t do that until we’re confident you won’t let Drizella interrupt the conversation” is a perfectly reasonable stance to take. You’ve got enough to deal with between two young children and a pandemic—you don’t need the additional stress of dealing with in-laws who think your motherhood is partly responsible for their daughter’s bad behavior.

Q. Sexuality, love, children: I’m a 37-year-old lesbian who has always wanted children. My first wife always said, “Maybe in a couple of years.” We were seeing other people before our marriage ended. The woman I started seeing did not want children either, but it didn’t matter to me at the time because I was still planning on having them with my wife. Four years later, I’m divorced and in love with this new woman. We broke up earlier this year because I still want children. Now I’m considering dating men to make this dream a reality. Am I crazy to give up a good relationship with a woman I love to be with a man just to have children?

A: I don’t think it’s unreasonable to end a relationship with someone you love, even an otherwise good relationship, because you really want children and they don’t. I do think it will be much easier to find a gay or bi woman who is also interested in having children than it will be to find a man who wants to have children with a lesbian, so I’m not quite sure when you made the leap from “the last two women I was involved with didn’t want kids, so there are probably no other women who want kids out there.” Why not just keep dating women while making it clear that you’re really interested in becoming a parent soon? “I want to have kids, I want to have kids soon, uncertainty about kids is a dealbreaker for me” is a perfectly sensible attitude to take toward dating, especially in your late 30s. As long as you’re upfront about it, and don’t schedule your second date at an IVF clinic, I don’t think you have to worry about either coming on too strong or scheduling a repeat of your last two breakups. But trying to date men you’re not really interested in seems unnecessarily complicated and difficult.

At the risk of stating the obvious, I hope you also consider the possibility of single parenting, if you’re not able to find either a compatible woman who shares your kids timeline, or a man who’s on board with a marriage of convenience. I realize single parenting can be a daunting, difficult prospect, but if having kids is a priority and you can’t find a suitable co-parent, I want you to explore your other options.

Q. Ready for him now: To put it bluntly, I’m in love with my ex-boyfriend. We were on-again, off-again in high school, and now we’re both in college (different schools but same state). I broke up with him twice in high school because I wasn’t ready to commit and I was scared. But I’m ready to love again now after working through my own trauma. I genuinely think he is my soulmate and although we are only 19, I know I want to marry him. My friends think I’m insane and just need to meet someone else (he has been my only boyfriend since we first got together). Also, we are very close today, like best friends. Do I tell him? Or just try to move on?

A: If your ex-boyfriend is your best friend, you can safely assume he’s not still upset with you for breaking up with him twice in high school—or at least not so upset that he’ll be horrified at the mere idea of your mentioning the possibility of getting back together again. I don’t think you should open with “I want to get married,” but by all means, ask him out. If he says no, that will make moving on a little easier than if you always wonder what might have been. And if he says yes, you get to go out with someone you’re in love with.

Q. Frustrated adult baby: I have had an issue all my life and I don’t know how to solve it. My mother took medication that was similar to thalidomide for labor pains while I was still in the womb. When I was born, the doctors told my mother that I would be dead in a month. My mother treated me like a baby where I was in diapers, breastfed, bottle-fed, etc., for several years. This was about 60 years ago. I managed to survive and through the grace of God, I became successful. My mind did recover but with one unfortunate issue: Being that I was fondled and diapered beyond the normal age, it left me a misfit, sexually. I look at women not as a sexual object but as a mommy. Today they would call my issue “adult baby,” or ABDL.

I am currently married but my wife refuses to do anything for me, so we have always had a platonic relationship. I don’t know what it must be like to feel love from a woman because I never had it. Is there any way I can get my wife to understand my issue for what it really is and that I should not suffer for things that occurred in my past? I have tried talking to her only to be shut down immediately, with her saying that she would never take care of a baby like me.

A: I’m not quite sure I can get on board with your argument here! You want to make sure your wife understands that you shouldn’t suffer for things that occurred in your past, but it doesn’t necessarily follow that having a wife who doesn’t share your kink dooms you to suffer forever. It might be frustrating to realize you and your wife are sexually incompatible in this way, but I’m not sure one can reasonably expect perfect sexual compatibility from a partner, only honesty about their interests and limits. You have a kink, you’ve explained it with your partner, and she doesn’t share it. That is not outside the realm of normal human suffering! You can either decide to end your marriage over it, and seek out a partner who does share this kink (or pay professionals to work out this kink with you, which may be your best bet), or focus on the other ways your partner demonstrates love for you.

I’m afraid there’s not enough time to get into whether “mommy” is the opposite of “sexual object” today, but your attempt to persuade your wife that the only way she can really demonstrate she loves you is to role-play a mommy/baby scenario because you’re incapable of feeling affection through any other means is not only disingenuous, it’s ineffective. She’s not “shutting you down” and dooming you to a lifetime of suffering when she doesn’t want to diaper you. She’s just saying no to something that turns her off.

Q. Wagged out in Iowa: I’m a dog lover who lives in a dog-free building. Recently, a new neighbor moved in upstairs with a dog. Clearly she got some sort of clearance for it. The problem is that this dog is not noticeably trained in any way—it jumps on people, doesn’t appear to know commands, and is not being used for any real service. It also appears to have separation anxiety, as it howls when it’s left alone. For a while she would invite guests over with dogs of their own, adding to the noise echoing from above, but the landlord intervened there.

I know that people are going through things that we don’t see. I know that something had to be approved for her to be allowed this dog. Most importantly, I know that dogs are family members and any scenario that separates her and her dog is a total nonstarter to me. Accordingly, I’ve never said a word to the landlord about it. At the same time, it’s an absolutely textbook case for why dogs would not be allowed in the building, and there’s little to no indication that it’s being used in a way that I’ve seen emotional support dogs used in the past.

Prudie, I want to give the benefit of the doubt. A lot. But with no communication from the owner, frequent noise disruptions every day while I work from home, and, yeah, some resentment at the questionable nature of the whole situation, I’m stuck here hoping for a couple hours of peace and quiet, and wondering what an equitable solution might look like.

A: Talk to your neighbor about it. Introduce yourself, be friendly, acknowledge the difficulty of trying to stay sane this year, and explain your problem to her in reasonable terms (don’t assume she knows how much you can hear through the ceiling until you tell her, for example, or that she knows how much her dog barks when she’s not in the building). You don’t have to mention your landlord (not even to explain that you’re not going to talk to him) or whether the dog is a support animal at all. Just tell her what’s difficult for you and ask her to do what she can to keep things down. If she’s at all reasonable, she’ll start talking to her vet, calling trainers, finding dog walkers, and generally looking for better ways to manage her own pet, so you don’t have to come up with solutions for her, especially not in this first conversation. It’s a very reasonable request to make of a neighbor, and as long as you’re reasonably polite, I think you can assume she’ll at least try to reduce the effect her pet has on you.

Q. Re: Tips for breaking up with a narcissistic friend? There’s no reason to make it fraught or place blame. “I’ve appreciated your friendship through the years, but at this point I feel it’s best for me to break ties. I wish you all the best in the future but this will be my last contact.” Clear, doesn’t place blame, doesn’t point fingers, but is also firm. Then again, I’m the direct sort.

A: This is a little briefer than I meant, but I do think there’s value in framing it in “This relationship isn’t working for me and I don’t want to continue it” (which is relatively difficult to argue with and gets the effect the letter writer wants, which is to get out) rather than “You’ve a lousy friend and you’re wrong about our last disagreement,” which tends to invite argument and, as the letter writer has already realized, feels kind of exhausting.

Q. Re: Tips for breaking up with a narcissistic friend? I’ve been ghosted several times. I wished they’d said something respectful like “I value what we had, but don’t think this relationship works any longer,” even if they had been firm about it not being reparable. Not knowing was painful. I have ended relationships since then by trying to be clear and respectful. Doing it in writing is better than over the phone or in person, if you are certain that you want it to end or feel that it can’t be fixed, or that this friend will try to persuade you or manipulate you into continuing the relationship.

A: This seems to be the consensus, by the way—no one has yet written in to say they appreciated being ghosted by an old friend. The real question is whether you think it’s possible to say something brief but honest about why you’re ending the friendship without then feeling pressure to engage in a long back-and-forth. If part of the problem has been that you don’t know how to say no to this particular friend when she gets upset, it may not be possible to start now. I’d encourage the letter writer to at least consider it, but not if you think it’s likely to end up in an hourslong recrimination marathon.

Q. Re: Not a beast of burden: I am in no way excusing your sister-in-law for her comments, nasty behavior, or failure to own up to any of it now. Having spent three years dealing with infertility, it was the worst thing I had ever been through in my life, and I hope that I will never forget how bad it was in order to have a check on some of my less charming impulses in the future. I did selfish, humiliating, and inexplicable things, especially to pregnant women who I felt were undeserving. I did apologize to all of them, many times, once the insanity of infertility and fertility drugs lifted. I hope she can apologize sincerely and sufficiently to you one day, and I hope your in-laws can understand that they are enabling her awful, indefensible behavior, which will just tear the family apart if they are not careful.

A: Thank you for sharing this—it’s rare that someone writes “I’m not excusing ____” and then is as good as their word. I’m so sorry for the pain you’ve suffered, and I’m heartened to hear that you’ve been able to offer sincere, meaningful apologies for the people you hurt, and that you’re committed to better behavior. There are so many better ways to ask for help, or to signal to others that you’re in pain, than by lashing out at someone else. I hope the letter writer’s in-laws can someday realize what you’ve already learned. Thank you again, and be well.

Discuss this column on our Facebook page!

Classic Prudie

Q. She’s honestly fine with it: I’m a bisexual man in a happy, monogamous relationship. My wife is fine with my sexuality but does not want me to talk about it with other people. She especially does not want me talking about it around her friends, many of whom are gay men, for fear that they would start hitting on me. (I think maybe she also worries that they would make fun of me—although we all get along great.) She also does not want me to contact an ex-lover, who was also my best friend for a long time (although admittedly this was years ago). I’m not particularly bothered by these “conditions,” but I would like to speak to this guy at least once again in my life, and it might be nice to have people with whom I could openly discuss my sexuality. Read what Prudie had to say.

Get the audiobook edition of Danny M. Lavery’s latest book. Save $5 when you buy it from Slate—and listen in your preferred podcast app!

'; }, t.createTrackPixelIframeHtml = se, t.getValueString = de, t.uniques = fe, t.flatten = le, t.getBidRequest = function (n, e) { return n ? (e.some(function (e) { var t = c()(e.bids, function (t) { return ["bidId"https://slate.com/,"adId"https://slate.com/,"bid_id"].some(function (e) { return t[e] === n; }); }); return t && (r = t), t; }), r) : void 0; var r; }, t.getKeys = pe, t.getValue = ge, t.getKeyByValue = function (e, t) { for (var n in e) { if (e.hasOwnProperty(n) && e[n] === t) return n; } }, t.getBidderCodes = function () { return (0 t[n] ? -1 : 0; }; }, t.parseQS = Ie, t.formatQS = Ce, t.parseUrl = function (e, t) { var n = document.createElement("a"); t && "noDecodeWholeURL" in t && t.noDecodeWholeURL ? n.href = e : n.href = decodeURIComponent(e); var r = t && "decodeSearchAsString" in t && t.decodeSearchAsString; return { href: n.href, protocol: (n.protocol "https://slate.com/"https://slate.com/"https://slate.com/").replace(/:$/, "https://slate.com/"), hostname: n.hostname, port: +n.port, pathname: n.pathname.replace(/^(?!/)/, "/"), search: r ? n.search : k.parseQS(n.search "https://slate.com/"https://slate.com/"https://slate.com/"), hash: (n.hash "https://slate.com/"https://slate.com/"https://slate.com/").replace(/^#/, "https://slate.com/"), host: n.host "https://slate.com/" window.location.host }; }, t.buildUrl = function (e) { return (e.protocol "https://slate.com/"https://slate.com/"http") + "://" + (e.host "https://slate.com/" e.hostname + (e.port ? ":".concat(e.port) : "https://slate.com/")) + (e.pathname "https://slate.com/"https://slate.com/"https://slate.com/") + (e.search ? "?".concat(k.formatQS(e.search "https://slate.com/"https://slate.com/"https://slate.com/")) : "https://slate.com/") + (e.hash ? "#".concat(e.hash) : "https://slate.com/"); }, t.deepEqual = je, t.mergeDeep = we, t.cyrb53Hash = function (e) { for (var t, n = 1 >> 16, 2246822507) ^ r(o ^ o >>> 13, 3266489909), (4294967296 * (2097151 & (o = r(o ^ o >>> 16, 2246822507) ^ r(i ^ i >>> 13, 3266489909))) + (i >>> 0)).toString(); }; var r = n(3), i = n(158), o = n.n(i), a = n(10), c = n.n(a), u = n(12), s = n.n(u), d = n(159); n.d(t, "deepAccess", function () { return d.a; }); var f = n(160); function l(e, t) { return function (e) { if (Array.isArray(e)) return e; }(e) "https://slate.com/" function (e, t) { if ("undefined" == typeof Symbol "https://slate.com/" !(Symbol.iterator in Object(e))) return; var n = [], r = !0, i = !1, o = void 0; try { for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t "https://slate.com/" n.length !== t); r = !0) { ; } } catch (e) { i = !0, o = e; } finally { try { r "https://slate.com/" null == c.return "https://slate.com/" c.return(); } finally { if (i) throw o; } } return n; }(e, t) "https://slate.com/" g(e, t) "https://slate.com/" function () { throw new TypeError("Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function p(e) { return function (e) { if (Array.isArray(e)) return b(e); }(e) "https://slate.com/" function (e) { if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e); }(e) "https://slate.com/" g(e) "https://slate.com/" function () { throw new TypeError("Invalid attempt to spread non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function g(e, t) { if (e) { if ("string" == typeof e) return b(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n "https://slate.com/"https://slate.com/"Set" === n ? Array.from(e) : "Arguments" === n "https://slate.com/" /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? b(e, t) : void 0; } } function b(e, t) { (null == t "https://slate.com/" t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n n ')) : "https://slate.com/"; } function de(e, t, n) { return null == t ? n : Z(t) ? t : te(t) ? t.toString() : void k.logWarn("Unsuported type for param: " + e + " required type: String"); } function fe(e, t, n) { return n.indexOf(e) === t; } function le(e, t) { return e.concat(t); } function pe(e) { return Object.keys(e); } function ge(e, t) { return e[t]; } function be() { if (window.googletag && X(window.googletag.pubads) && X(window.googletag.pubads().getSlots)) return !0; } var ve = me("timeToRespond", function (e, t) { return t e.length) && (t = e.length); for (var n = 0, r = new Array(t); n o.lastUpdated + 24 * r * 60 * 60 * 1e3) && Object(p.a)(t.url, { success: function success(e) { try { e = JSON.parse(e); var t = { lastUpdated: Object(m.timestamp)(), mapping: e.mapping }; I.setDataInLocalStorage(i, JSON.stringify(t)); } catch (e) { Object(m.logError)("Failed to parse ".concat(n, " bidder translation mapping file")); } }, error: function error() { Object(m.logError)("Failed to load ".concat(n, " bidder translation file")); } }); } catch (e) { Object(m.logError)("Failed to parse ".concat(n, " bidder translation mapping file")); } } }), e.call(this, t); } function U(e, t, n) { function r(e) { return "Invalid bid from ".concat(t.bidderCode, ". Ignoring bid: ").concat(e); } return e ? t ? (i = Object.keys(t), C.every(function (e) { return l()(i, e) && !l()([void 0, null], t[e]); }) ? "native" !== t.mediaType "https://slate.com/" Object(o.f)(t, n) ? "video" !== t.mediaType "https://slate.com/" Object(a.d)(t, n) ? !("banner" === t.mediaType && !function (e, t, n) { if ((t.width "https://slate.com/" 0 === parseInt(t.width, 10)) && (t.height "https://slate.com/" 0 === parseInt(t.height, 10))) return t.width = parseInt(t.width, 10), t.height = parseInt(t.height, 10), 1; var r = Object(m.getBidderRequest)(n, t.bidderCode, e), i = r && r.bids && r.bids[0] && r.bids[0].sizes, o = Object(m.parseSizesInput)(i); if (1 === o.length) { var a = A(o[0].split("x"), 2), c = a[0], u = a[1]; return t.width = parseInt(c, 10), t.height = parseInt(u, 10), 1; } }(e, t, n)) "https://slate.com/" (Object(m.logError)(r("Banner bids require a width and height")), !1) : (Object(m.logError)(r("Video bid does not have required vastUrl or renderer property")), !1) : (Object(m.logError)(r("Native bid missing some required properties.")), !1) : (Object(m.logError)(r("Bidder ".concat(t.bidderCode, " is missing required params. Check http://prebid.org/dev-docs/bidder-adapter-1.html for list of params."))), !1)) : (Object(m.logWarn)("Some adapter tried to add an undefined bid for ".concat(e, ".")), !1) : (Object(m.logWarn)("No adUnitCode was supplied to addBidResponse."), !1); var i; } Object(b.a)("checkAdUnitSetup").before(B); }, 10: function _(e, t, n) { var r = n(96); e.exports = r; }, 100: function _(e, t, n) { function r(e, t) { var n = c[a(e)]; return n == s "https://slate.com/" n != u && ("function" == typeof t ? i(t) : !!t); } var i = n(30), o = /#|.prototype./, a = r.normalize = function (e) { return String(e).replace(o, ".").toLowerCase(); }, c = r.data = {}, u = r.NATIVE = "N", s = r.POLYFILL = "P"; e.exports = r; }, 101: function _(e, t, n) { var r = n(25), i = n(102), o = n(19)("species"); e.exports = function (e, t) { var n; return i(e) && ("function" == typeof (n = e.constructor) && (n === Array "https://slate.com/" i(n.prototype)) "https://slate.com/" r(n) && null === (n = n[o])) && (n = void 0), new (void 0 === n ? Array : n)(0 === t ? 0 : t); }; }, 102: function _(e, t, n) { var r = n(48); e.exports = Array.isArray "https://slate.com/" function (e) { return "Array" == r(e); }; }, 103: function _(e, t, n) { var r = n(24), i = n(31); e.exports = function (t, n) { try { i(r, t, n); } catch (e) { r[t] = n; } return n; }; }, 104: function _(e, t, n) { var r = n(75); e.exports = r && !Symbol.sham && "symbol" == _typeof(Symbol.iterator); }, 105: function _(e, t, n) { n(106); var r = n(52); e.exports = r("Array"https://slate.com/,"includes"); }, 106: function _(e, t, n) { "use strict"; var r = n(14), i = n(76).includes, o = n(51); r({ target: "Array", proto: !0, forced: !n(60)("indexOf", { ACCESSORS: !0, 1: 0 }) }, { includes: function includes(e, t) { return i(this, e, 1 i;) { a(r, n = t[i++]) && (~u(o, n) "https://slate.com/" o.push(n)); } return o; }; }, 119: function _(e, t, n) { var r = n(27); e.exports = r("document"https://slate.com/,"documentElement"); }, 12: function _(e, t, n) { var r = n(105); e.exports = r; }, 120: function _(e, t, n) { var i = n(84); e.exports = function (e, t, n) { for (var r in t) { n && n.unsafe && e[r] ? e[r] = t[r] : i(e, r, t[r], n); } return e; }; }, 121: function _(e, t, n) { "use strict"; function i() { return this; } var o = n(85).IteratorPrototype, a = n(82), c = n(46), u = n(64), s = n(38); e.exports = function (e, t, n) { var r = t + " Iterator"; return e.prototype = a(o, { next: c(1, n) }), u(e, r, !1, !0), s[r] = i, e; }; }, 122: function _(e, t, n) { var r = n(30); e.exports = !r(function () { function e() {} return e.prototype.constructor = null, Object.getPrototypeOf(new e()) !== e.prototype; }); }, 123: function _(e, t, n) { var i = n(15), o = n(124); e.exports = Object.setPrototypeOf "https://slate.com/" ("__proto__" in {} ? function () { var n, r = !1, e = {}; try { (n = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set).call(e, []), r = e instanceof Array; } catch (e) {} return function (e, t) { return i(e), o(t), r ? n.call(e, t) : e.__proto__ = t, e; }; }() : void 0); }, 124: function _(e, t, n) { var r = n(25); e.exports = function (e) { if (!r(e) && null !== e) throw TypeError("Can't set " + String(e) + " as a prototype"); return e; }; }, 125: function _(e, t, n) { "use strict"; var r = n(27), i = n(33), o = n(19), a = n(29), c = o("species"); e.exports = function (e) { var t = r(e), n = i.f; a && t && !t[c] && n(t, c, { configurable: !0, get: function get() { return this; } }); }; }, 126: function _(e, t) {}, 127: function _(e, t, n) { function r(c) { return function (e, t) { var n, r, i = String(s(e)), o = u(t), a = i.length; return o = t.length ? { value: e.target = void 0, done: !0 } : "keys" == n ? { value: r, done: !1 } : "values" == n ? { value: t[r], done: !1 } : { value: [r, t[r]], done: !1 }; }, "values"), o.Arguments = o.Array, i("keys"), i("values"), i("entries"); }, 13: function _(e, t, n) { "use strict"; n.d(t, "b", function () { return a; }), n.d(t, "a", function () { return c; }), t.d = function (e, t) { var n = 2 e.length) && (t = e.length); for (var n = 0, r = new Array(t); n >> 0, o = 0; if (t) n = t;else { for (; o i && (r = !1)), !r; }), r && e.run(), r; } function g(e, t) { void 0 === e[t] ? e[t] = 1 : e[t]++; } p(e) "https://slate.com/" (N.logWarn("queueing auction due to limited endpoint capacity"), H.push(e)); } return { addBidReceived: function addBidReceived(e) { f = f.concat(e); }, addNoBid: function addNoBid(e) { l = l.concat(e); }, executeCallback: O, callBids: function callBids() { b = G, t = Date.now(); var e = P.makeBidRequests(y, t, p, m, s); N.logInfo("Bids Requested for Auction with id: ".concat(p), e), e.length e.getTimeout() + B.b.getConfig("timeoutBuffer") && e.executeCallback(!0); } function Q(e, t) { var n = e.getBidRequests(), r = U()(n, function (e) { return e.bidderCode === t.bidderCode; }); !function (t, e) { var n; { var r; t.bidderCode && (0 e.length) && (t = e.length); for (var n = 0, r = new Array(t); n = h.syncsPerBidder ? a.logWarn('Number of user syncs exceeded for "https://slate.com/".concat(t, "https://slate.com/"https://slate.com/")) : p.canBidderRegisterSync(e, t) ? (g[e].push([t, n]), (r = v)[i = t] ? r[i] += 1 : r[i] = 1, void (v = r)) : a.logWarn('Bidder "https://slate.com/".concat(t, "https://slate.com/" not permitted to register their "https://slate.com/").concat(e, "https://slate.com/" userSync pixels.')) : a.logWarn("Bidder is required for registering sync") : a.logWarn('User sync type "https://slate.com/".concat(e, "https://slate.com/" not supported')); var r, i; }, p.syncUsers = function () { var e = 0 e.length) && (t = e.length); for (var n = 0, r = new Array(t); n Object(S.timestamp)(); }, s = function s(e) { return e && (e.status && !O()([w.BID_STATUS.RENDERED], e.status) "https://slate.com/" !e.status); }; function U(e, r, t) { var i = 2 t.max ? e : t; }, { max: 0 }), g = 0, b = v()(e.buckets, function (e) { if (n > p.max * r) { var t = e.precision; void 0 === t && (t = y), i = (e.max * r).toFixed(t); } else { if (n " + e + "" + g + ">"; } var o, a = n(15), c = n(116), u = n(83), s = n(53), d = n(119), f = n(72), l = n(65), p = "prototype", g = "script", b = l("IE_PROTO"), _v = function v() { try { o = document.domain && new ActiveXObject("htmlfile"); } catch (e) {} var e, t; _v = o ? function (e) { e.write(i("https://slate.com/")), e.close(); var t = e.parentWindow.Object; return e = null, t; }(o) : ((t = f("iframe")).style.display = "none", d.appendChild(t), t.src = String("javascript:"), (e = t.contentWindow.document).open(), e.write(i("document.F=Object")), e.close(), e.F); for (var n = u.length; n--;) { delete _v[p][u[n]]; } return _v(); }; s[b] = !0, e.exports = Object.create "https://slate.com/" function (e, t) { var n; return null !== e ? (r[p] = a(e), n = new r(), r[p] = null, n[b] = e) : n = _v(), void 0 === t ? n : c(n, t); }; }, 83: function _(e, t) { e.exports = ["constructor"https://slate.com/,"hasOwnProperty"https://slate.com/,"isPrototypeOf"https://slate.com/,"propertyIsEnumerable"https://slate.com/,"toLocaleString"https://slate.com/,"toString"https://slate.com/,"valueOf"]; }, 84: function _(e, t, n) { var i = n(31); e.exports = function (e, t, n, r) { r && r.enumerable ? e[t] = n : i(e, t, n); }; }, 85: function _(e, t, n) { "use strict"; var r, i, o, a = n(86), c = n(31), u = n(26), s = n(19), d = n(16), f = s("iterator"), l = !1; [].keys && ("next" in (o = [].keys()) ? (i = a(a(o))) !== Object.prototype && (r = i) : l = !0), null == r && (r = {}), d "https://slate.com/" u(r, f) "https://slate.com/" c(r, f, function () { return this; }), e.exports = { IteratorPrototype: r, BUGGY_SAFARI_ITERATORS: l }; }, 86: function _(e, t, n) { var r = n(26), i = n(57), o = n(65), a = n(122), c = o("IE_PROTO"), u = Object.prototype; e.exports = a ? Object.getPrototypeOf : function (e) { return e = i(e), r(e, c) ? e[c] : "function" == typeof e.constructor && e instanceof e.constructor ? e.constructor.prototype : e instanceof Object ? u : null; }; }, 87: function _(e, t, n) { "use strict"; var i = n(127).charAt, r = n(54), o = n(66), a = "String Iterator", c = r.set, u = r.getterFor(a); o(String, "String", function (e) { c(this, { type: a, string: String(e), index: 0 }); }, function () { var e, t = u(this), n = t.string, r = t.index; return r >= n.length ? { value: void 0, done: !0 } : (e = i(n, r), t.index += e.length, { value: e, done: !1 }); }); }, 88: function _(e, t, n) { var r = n(15), i = n(61); e.exports = function (e) { var t = i(e); if ("function" != typeof t) throw TypeError(String(e) + " is not iterable"); return r(t.call(e)); }; }, 89: function _(e, t, n) { var r = n(153); e.exports = r; }, 896: function _(e, t, n) { e.exports = n(68); }, 9: function _(e, t, n) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), n.d(t, "gdprDataHandler", function () { return R; }), n.d(t, "uspDataHandler", function () { return k; }), t.setS2STestingModule = function (e) { I = e; }; var S = n(0), p = n(91), g = n(37), l = n(1), h = n(4), A = n(3), r = n(13), i = n(12), E = n.n(i), o = n(10), O = n.n(o), b = n(67), T = n(20); function m(e, t) { return function (e) { if (Array.isArray(e)) return e; }(e) "https://slate.com/" function (e, t) { if ("undefined" == typeof Symbol "https://slate.com/" !(Symbol.iterator in Object(e))) return; var n = [], r = !0, i = !1, o = void 0; try { for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t "https://slate.com/" n.length !== t); r = !0) { ; } } catch (e) { i = !0, o = e; } finally { try { r "https://slate.com/" null == c.return "https://slate.com/" c.return(); } finally { if (i) throw o; } } return n; }(e, t) "https://slate.com/" function (e, t) { if (!e) return; if ("string" == typeof e) return a(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); "Object" === n && e.constructor && (n = e.constructor.name); if ("Map" === n "https://slate.com/"https://slate.com/"Set" === n) return Array.from(e); if ("Arguments" === n "https://slate.com/" /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return a(e, t); }(e, t) "https://slate.com/" function () { throw new TypeError("Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function a(e, t) { (null == t "https://slate.com/" t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n n n n prebid.org wrappern n ").concat(r, "n n n n ")), ttlseconds: Number(e.ttl) }; return o.b.getConfig("cache.vasttrack") && (i.bidder = e.bidder, i.bidid = e.requestId, a.isPlainObject(this) && this.hasOwnProperty("auctionStart") && (i.timestamp = this.auctionStart)), "string" == typeof e.customCacheKey && "https://slate.com/" !== e.customCacheKey && (i.key = e.customCacheKey), i; } }, 96: function _(e, t, n) { n(97); var r = n(52); e.exports = r("Array"https://slate.com/,"find"); }, 97: function _(e, t, n) { "use strict";

var r = n(14), i = n(56).find, o = n(51), a = n(60), c = "find", u = !0, s = a(c); c in [] && Array(1).find(function () { u = !1; }), r({ target: "Array", proto: !0, forced: u "https://slate.com/" !s }, { find: function find(e, t) { return i(this, e, 1 e.length) && (r = e.length);

for (var a = 0, t = new Array(r); a |

)/gm, "t").replace(/(

|

)/gm, "n").replace(/^
/gm, "https://slate.com/").replace(/(
n|
)/gm, "n").replace(/

(.*)

/gm, "nn===== $1 =====nn").replace(/(.*)[2-6]>/gm, "nn*** $1 ***nn").replace(/(]+)>)/gim, "https://slate.com/"), w.logMessage("https://console.appnexus.com/docs/understanding-the-debug-auction"), w.logMessage(a)), o; var t = "in response for ".concat(s.bidderCode, " adapter"); return e && e.error && (t += ": ".concat(e.error)), w.logError(t), o; }, getMappingFileInfo: function getMappingFileInfo() { return { url: "https://acdn.adnxs.com/prebid/appnexus-mapping/mappings.json", refreshInDays: 2 }; }, getUserSyncs: function getUserSyncs(e) { if (e.iframeEnabled) return [{ type: "iframe", url: "https://acdn.adnxs.com/dmp/async_usersync.html" }]; }, transformBidParams: function transformBidParams(a, e) { return a = w.convertTypes({ member: "string", invCode: "string", placementId: "number", keywords: w.transformBidderParamKeywords, publisherId: "number" }, a), e && (a.use_pmt_rule = "boolean" == typeof a.usePaymentRule && a.usePaymentRule, a.usePaymentRule && delete a.usePaymentRule, I(a.keywords) && a.keywords.forEach(P), Object.keys(a).forEach(function (e) { var r = w.convertCamelToUnderscore(e); r !== e && (a[r] = a[e], delete a[e]); })), a; }, onBidWon: function onBidWon(e) { e.native && function (e) { var r = function (e) { var r; if (w.isStr(e) && U(e)) r = e;else if (w.isArray(e)) for (var a = 0; a nfor (var i = 0; i ');
}

function tryGetCriteoFastBid() {
try {
var fastBidStorageKey = "criteo_fast_bid",
hashPrefix = "// Hash: ",
fastBidFromStorage = storage.getDataFromLocalStorage(fastBidStorageKey),
firstLineEndPosition,
firstLine,
publisherTagHash,
publisherTag;
null !== fastBidFromStorage && (firstLineEndPosition = fastBidFromStorage.indexOf("n"), firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim(), firstLine.substr(0, hashPrefix.length) !== hashPrefix ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("No hash found in FastBid"), storage.removeDataFromLocalStorage(fastBidStorageKey)) : (publisherTagHash = firstLine.substr(hashPrefix.length), publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1), Object(__WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__.verify)(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E) ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logInfo("Using Criteo FastBid"), eval(publisherTag)) : (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("Invalid Criteo FastBid found"), storage.removeDataFromLocalStorage(fastBidStorageKey))));
} catch (t) {}
}

Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__.registerBidder)(spec);
},
377: function _(t, e, r) {
"use strict";

Object.defineProperty(e, "__esModule", {
value: !0
});
var a = r(378),
n = r(379);

e.verify = function (t, e, r, i) {
var s = new a.BigInteger(a.b64toHex(e)),
o = new a.BigInteger(a.b64toHex(r)),
_ = s.modPowInt(i, o);

return a.removeExtraSymbols(_.toHexString()) === n.Sha256.hash(t);
};
},
378: function _(t, e, r) {
"use strict";

var i;
Object.defineProperty(e, "__esModule", {
value: !0
});
var s = (T.prototype.toHexString = function () {
if (this.s > s) && (e = !0, r = c(t)); 0 > (s += this.DB - 4)) : (t = this[i] >> (s -= 4) & 15, s this.DB ? (this[this.t - 1] |= (s & (1 > this.DB - i) : this[this.t - 1] |= s = this.DB && (i -= this.DB));
}

this.clamp(), r && T.ZERO.subTo(this, this);
}
}, T.prototype.negate = function () {
var t = b();
return T.ZERO.subTo(this, t), t;
}, T.prototype.abs = function () {
return this.s > i | _, _ = (this[a] & s) = e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1);
}

0 > this.F2 : 0),
u = this.FV / d,
h = (1 = this.t) e.t = 0;else {
var i = t % this.DB,
s = this.DB - i,
o = (1 > i;

for (var _ = r + 1; _ > i;
}

0 >= this.DB;
}

if (t.t >= this.DB;
}

i += this.s;
} else {
for (i += this.s; r >= this.DB;
}

i -= t.s;
}

e.s = i > 15; 0 > 15,
c = a * n + p * _;
s = ((n = _ * n + ((32767 & c) >> 30) + (c >>> 15) + a * p + (s >>> 30), r[i++] = 1073741823 & n;
}

return s;
}, T.prototype.am3 = function (t, e, r, i, s, o) {
for (var _ = 16383 & e, a = e >> 14; 0 > 14,
c = a * n + p * _;
s = ((n = _ * n + ((16383 & c) > 28) + (c >> 14) + a * p, r[i++] = 268435455 & n;
}

return s;
}, T);

function T(t) {
null !== t && this.fromHexString(t);
}

function b() {
return new s(null);
}

function D(t) {
var e,
r = 1;
return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r;
}

e.BigInteger = s, e.nbi = b, e.nbits = D;

for (var o = [], _ = "0".charCodeAt(0), a = 0; a > 2), i = 3 & o, 1) : 1 == r ? (e += c(i > 4), i = 15 & o, 2) : 2 == r ? (e += c(i), e += c(o >> 2), i = 3 & o, 3) : (e += c(i > 4), e += c(15 & o), 0));
}

return 1 == r && (e += c(i > 15) * this.mpl & this.um) = t.DV;) {
t[r] -= t.DV, t[++r]++;
}
}

t.clamp(), t.drShiftTo(this.m.t, t), 0 > 15, this.um = (1 >> 0;

for (o[s - 1][14] = Math.floor(n), o[s - 1][15] = p, _ = 0; _ >> 0;
}

for (var u = r[0], h = r[1], l = r[2], f = r[3], E = r[4], v = r[5], m = r[6], T = r[7], d = 0; d >> 0, f = l, l = h, h = u, u = b + D >>> 0;
}

r[0] = r[0] + u >>> 0, r[1] = r[1] + h >>> 0, r[2] = r[2] + l >>> 0, r[3] = r[3] + f >>> 0, r[4] = r[4] + E >>> 0, r[5] = r[5] + v >>> 0, r[6] = r[6] + m >>> 0, r[7] = r[7] + T >>> 0;
}

for (var P = new Array(r.length), T = 0; T >> t | e >> 3;
}, y.q1 = function (t) {
return y.ROTR(17, t) ^ y.ROTR(19, t) ^ t >>> 10;
}, y.Ch = function (t, e, r) {
return t & e ^ ~t & r;
}, y.Maj = function (t, e, r) {
return t & e ^ t & r ^ e & r;
}, y);

function y() {}

e.Sha256 = i;
}
}, [375]);
pbjsChunk([214], {
496: function _(e, r, i) {
e.exports = i(497);
},
497: function _(e, r, i) {
"use strict";

Object.defineProperty(r, "__esModule", {
value: !0
}), i.d(r, "spec", function () {
return p;
});
var T = i(0),
S = i(2),
v = i(3),
t = i(10),
l = i.n(t),
a = i(498),
n = i.n(a),
s = i(1);

function g(e) {
return (g = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e) {
return _typeof(e);
} : function (e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : _typeof(e);
})(e);
}

var o = [S.b, S.d],
y = 100,
b = 300,
h = 3600,
w = !0,
x = {
JPY: 1
};

function C(e) {
var r = {};
return r.id = e.bidId, r.ext = {}, r.ext.siteID = e.params.siteId, !e.params.hasOwnProperty("id") "https://slate.com/"https://slate.com/"string" != typeof e.params.id && "number" != typeof e.params.id ? r.ext.sid = "https://slate.com/".concat(e.params.size[0], "x").concat(e.params.size[1]) : r.ext.sid = String(e.params.id), e.params.hasOwnProperty("bidFloor") && e.params.hasOwnProperty("bidFloorCur") && (r.bidfloor = e.params.bidFloor, r.bidfloorcur = e.params.bidFloorCur), r;
}

function d(e) {
return Array.isArray(e) && 2 === e.length && n()(e[0]) && n()(e[1]);
}

function A(e, r) {
if (d(e)) return e[0] === r[0] && e[1] === r[1];

for (var i = 0; i e.length) && (r = e.length);

for (var t = 0, i = new Array(r); t n

nnx3c!-- Rubicon Project Ad Tag --x3en
nn

nn