Coloriage : soldes – comparaison – comment choisir There’s a sinister reason they’re so popular during the coronavirus pandemic.

  • Fritz Ridenour So What'S The Difference?: A Look At 20 Worldviews, Faiths And Religions And How They Compare To Christianity: How The World'S Faiths Compare To Christianity
    Binding : Taschenbuch, Edition : 0002, Label : Gospel Light Pubn, Publisher : Gospel Light Pubn, NumberOfItems : 1, PackageQuantity : 1, medium : Taschenbuch, numberOfPages : 220, publicationDate : 2001-04-01, authors : Fritz Ridenour, languages : english, ISBN : 0830718982
  • Bildverkstad So Thankful in Green Poster (21x29.7 cm (A4))
    Ce poster inspirant est une invitation à l'optimisme et à la gratitude, parfait pour diffuser des ondes positives dans votre maison ou sur votre lieu de travail. Avec un texte vert vif qui dit "There's always something to be thankful for" sur un fond blanc riche en détails, rempli de lignes et de motifs complexes, il encourage une vision de vie positive et la réflexion. Cette impression n'est pas seulement un rappel pour apprécier les bonnes choses de la vie, mais aussi un ajout artistique à votre décoration murale. Son message simple mais puissant, combiné avec la palette de couleurs harmonieuse en vert et blanc, en fait un élément de décoration polyvalent et significatif.
  • Miriam Margolyes This Much Is True: 'There'S Never Been A Memoir So Packed With Eye-Popping, Hilarious And Candid Stories' Daily Mail
    Brand : John Murray Press, Binding : Taschenbuch, Label : John Murray, Publisher : John Murray, NumberOfItems : 1, medium : Taschenbuch, numberOfPages : 448, publicationDate : 2021-09-16, releaseDate : 2021-09-16, authors : Miriam Margolyes, ISBN : 152937989X
?>
  • Coloriage Abstrait pour Adultes: Livre de Coloriage d'Art Minimaliste, Art moderne, Art du Cubisme, mizuki, yuki han Independently published
    mizuki, yuki han
  • Coloriages Titounet Et Titounette - Couleurs D'Automne
    Binding : paperback, Label : Coloriages Titounet et Titounette - Couleurs d'automne, Format : big_book, medium : paperback, numberOfPages : 32, publicationDate : 2024-10-25, languages : french, ISBN : 2383860921
  • Ambiance-sticker Sticker prénom personnalisable style coloriage
    Des stickers prénoms pour votre déco ! Avec les stickers muraux prénoms et ce Sticker prénom personnalisable style coloriage, vous pourrez enfin décorer l'intérieur de votre maison à votre guise ! Ce sticker nom style coloriage est à la fois amusant et original, vos enfants vont adorer. Où coller c
  • Filibabba Mon livre de coloriage aquatique préféré - Dans la forêt
    Détails du produit : Âge : à partir de 3 ansPlonge dans ta pause créative avec ton nouveau livre de coloriage préféré !Ce superbe livre de coloriage aquatique ravira les petits artistes avec ses sympathiques animaux de la forêt et les parents avec son crayon de coloriage astucieux qui ne tache...
  • Filibabba Mon livre de coloriage aquatique préféré - FILIBABBA-Favoriten
    Détails du produit : Âge : à partir de 3 ansLe dixième anniversaire de Filibabba est fêté avec une collection magique en édition strictement limitée.Plonge-toi dans ta pause créative avec ton nouveau livre de coloriage préféré !Ce superbe livre de coloriage aquatique ravira les petits artistes...
  • Ozzé Coloriages érotiques pour adultes
    Je suis le livre de Coloriages érotiques pour adultes de Ozzé (https://www.espaceplaisir.fr/marques/48-ozze). Original et divertissant, je suis un excellent cadeau à offrir à ses amis, par exemple pour un EVJF ou un EVJG ! Être adulte ne signifie pas ne plus être joueur ou joueuse...Je cache de nombreux coloriages au fil de mes pages, tous plus coquins les uns que les autres. Concentrez-vous pour colorier sans dépasser les lignes... Y arriverez-vous ? Dans tous les cas, vous passerez un bon moment !
  • Star Notenschreibpapiere Cahier A4 - 4 Portées + Feuilles Coloriage (76 Pages)
    Le "COLLECTEUR DE NOTES" comporte 76 pages et est destiné aux tout petits amateurs d'art.Chaque page de notes de musique est suivie d'une page vierge à colorier.
  • Smoby - Tableau de coloriage magnétique en bois
    Détails du produit : Âge : à partir de 3 ans C'est le moment d'être créatif ! Le tableau de coloriage de table Smoby est fabriqué en bois et en plastique de haute qualité et constitue un jouet créatif polyvalent qui offre des heures de plaisir et d'apprentissage.Le tableau de table dispose d'une...
  • MINISO Livre de coloriage avec figurines de dessin animé Disney, Lilo & Stitch, livre de gribouillage
    Livre de coloriage avec figurines de dessin animé Disney, Lilo & Stitch, livre de gribouillage
  • tlenpo Cahier de coloriage en spirale, 30 feuilles de papier optique, 11.2x8.3 pouces, 100 g/m², pour
    Cahier de coloriage en spirale, 30 feuilles de papier optique, 11.2x8.3 pouces, 100 g/m², pour
  • Filibabba Mon livre de coloriage aquatique préféré - Dinos
    Détails du produit : Âge : à partir de 3 ans Plonge dans ta pause créative avec ton nouveau livre de coloriage préféré. Ce superbe livre de coloriage à l'eau ravira les petits artistes avec ses adorables amis dinosaures et les parents grâce à son crayon de coloriage astucieux qui ne tache pas.Ce...
  • tlenpo Livre de coloriage en spirale pour adultes, papier optique, parfait pour la rentrée scolaire,
    Livre de coloriage en spirale pour adultes, papier optique, parfait pour la rentrée scolaire,
  • LANHAN Income IA Peinture Modèle Coloriage EX Série EX01-EX 10 Grand HI 50ML
    Income IA Peinture Modèle Coloriage EX Série EX01-EX 10 Grand HI 50ML
  • Aucun Cahier de Coloriage et de Nettoyage pour le Bricolage, Papier d'Images du Jeu de l'Espace, Pratique
    Cahier de Coloriage et de Nettoyage pour le Bricolage, Papier d'Images du Jeu de l'Espace, Pratique
  • GATYZTORY GatyzQuantité-Peinture acrylique par numéros, artisanat, paysage, coloriage par numéros, décoration
    GatyzQuantité-Peinture acrylique par numéros, artisanat, paysage, coloriage par numéros, décoration
  • Aucun Stylos marqueurs aquarelle à pointe fine, stylos de coloriage double art, marqueurs pinceaux pour
    Stylos marqueurs aquarelle à pointe fine, stylos de coloriage double art, marqueurs pinceaux pour
  • tlenpo Livre de coloriage en spirale-30 feuilles livre de coloriage pour adultes, 11.2x8.3 pouces, 100g de
    Livre de coloriage en spirale-30 feuilles livre de coloriage pour adultes, 11.2x8.3 pouces, 100g de
  • Painting Era Bricolage peinture par numéros dessin animé chien coloriage par numéros peint à la main acrylique
    Bricolage peinture par numéros dessin animé chien coloriage par numéros peint à la main acrylique
  • Harry Potter Harries livre de coloriage fantastique magie et animaux fantastiques livre de coloriage de
    Harries livre de coloriage fantastique magie et animaux fantastiques livre de coloriage de
  • Aucun H & B – ensemble de crayons de couleur pour livres de coloriage pour adultes, 24/72/120/180 pièces,
    H & B – ensemble de crayons de couleur pour livres de coloriage pour adultes, 24/72/120/180 pièces,
  • Aucun Livre de coloriage de peinture graffiti pour enfants, édition épaissie, cas de coups simples, 10000
    Livre de coloriage de peinture graffiti pour enfants, édition épaissie, cas de coups simples, 10000
  • Aucun Livre de coloriage pour adultes, couleur par numéros, livres d'apprentissage pour dessin, ensemble
    Livre de coloriage pour adultes, couleur par numéros, livres d'apprentissage pour dessin, ensemble
  • Aucun Rouleau de papier kraft blanc pour arts et artisanat, coloriage et dessin, papier liatif el,
    Rouleau de papier kraft blanc pour arts et artisanat, coloriage et dessin, papier liatif el,
  • nbyinto Livre de coloriage Animorphia pour adultes et enfants, 96 Pages, développement de l'intelligence,
    Livre de coloriage Animorphia pour adultes et enfants, 96 Pages, développement de l'intelligence,

Old black-and-white photo of a little girl coloring in a coloring book
H. Armstrong Roberts/Getty Images

In these days of social distancing, I find myself drawn to the comfort of coloring books. I brighten the smile of bunnies having a picnic and blush the lips of two kissers. I animate the empty streets of San Jose and burnish the beams of the Eiffel Tower. Coloring books give life to my hopes for socialization and travel and can make my broken world seem whole, even if it’s just on the page, just for one moment.

I’m not alone. A recent New York Times article celebrated coloring’s ability to reduce anxieties (“repetitive strokes provide temporary relief from life stressors,” I tell myself over and over). Handsome Instagram people told me that it’s OK for grown-ups to color when stuck at home. Free coloring books “are taking over the internet” in this quarantine that comes and goes and seems to never end.

My moment came when a bright ad for a coloring app stalked me online for days. I installed it and flipped through the gallery of black-and-white drawings, ready to turn my finger into a brush, an eraser, a spray bottle. I could do it anytime, which means I did it all the time. I pinched my fingers out to zoom in and stayed within the boundaries, obsessively removing the pixels that splashed over, like the crumbs on a kitchen counter after dinner, wondering whether such activity had real benefits or was just something that brought me a minute closer to when I no longer would have to color books.

As I buried myself in these projects, my thoughts eventually darkened, for reasons that may be familiar to anyone with some art-history training. What if the recent popularity of coloring books comes not from the creativity they purportedly inspire, but from the submission they induce? This, after all, has been their mission from the start. It may be lost to the fans of coloring books that their success peaked in the 19th century, when such publications taught children how to behave. And obedience seems to be what many of us crave in these pandemic days.

Doesn’t this sum up what coloring books are about: Stay within the lines?

The Little Folks Painting Book—often described as the first coloring book—invited one to paint the illustrations of songs and tales about the harms of waking up late, being selfish, or playing a trick on your well-mannered cousin. The last story of the book is particularly revealing. It is about a brother and sister who wish to fly away from their boring, secluded life and are magically held captive on flying carpets that take them on a journey that never ends, a Dantesque hell of punishment that comes with the warning: “Never be discontented, never wish for anything you cannot have.” Doesn’t this sum up what coloring books are about: Stay within the lines?

Historically, coloring has often been considered inferior to drawing. In Renaissance Florence, when artists dissected their differences as a way to show that they were not artisans but intellectuals mastering their craft, drawing was singled out as the artistic equivalent of thinking. Artists were expected to spend hours working out compositions because it is through them—where to place figures? how to draw them?—that they won praise.

Coloring did matter. Reddening the cheeks of figures brought the miracle of life to a work of art. Yet colors were applied at a second stage, a lesser stage, as shown by a Leonardo da Vinci sketch of a hanged renegade, next to which he listed the dyes of his fur-trimmed outfit.

Such bifurcation was not lost on Henry Peacham, author of The Compleat Gentleman of 1622, perhaps the first book to advertise the benefits of coloring. Peacham believed that a well-educated gentleman had to master drawing. Still, he also recommended spending time coloring, “for the practice of the hand doth speedily instruct the mind, and strongly confirm the memory beyond anything else.” Which is to say: Painting is a way not to invent but to learn and internalize. In particular, Peacham recommended painting maps as a way to learn capital cities and geopolitical boundaries (this at a time when borders were more violently contested than today). He promoted coloring as a way to accept a world assembled by rulers, and not just accept it but to yearn for it and delight in its preservation. Coloring was for him, as it was becoming to me, a means to maintain the political status quo.

To color is to inhabit a world designed by others, to dwell in an environment where you are left with no options but to memorize what is already there. But I am in no need to be reminded of what a small, limited life feels like: I live it and am tired of it. I am even more tired of the tamed fantasies that coloring books want me to make my own. They are mostly consolatory, rather than empowering. In the early 1980s, we colored automobiles, the dreams of careerists. A few years ago, we colored Ryan Gosling, asking you out on a date. Today we color unicorns, campfires, and storefronts full of stuff.

After days of coloring these diminutive dreams, I came to see the energy I spent on it as dimming my capacity to imagine how a future can be conceived and built. So I deleted my app. And if in these days of stillness and isolation you are offered a coloring book, my suggestion is: Rip it up and reassemble its fragments as a collage. That is the true artistic outlet for those who do not want to accept the world as it is but want to make it wildly anew without depleting its resources.

What if Dear Abby was an investigative reporter? Check out How To! on Apple Podcasts or listen below to hear Charles Duhigg take on listeners’ toughest problems and, with the help of experts, find the answers they need.

nnx3c!-- Rubicon Project Ad Tag --x3en

nn

nn")), n = v(f[r.size_id].split("x").map(function (e)
return Number(e);
), 2), i.width = n[0], i.height = n[1]), i.rubiconTargeting = (Array.isArray(r.targeting) ? r.targeting : []).reduce(function (e, r)
return e[r.key] = r.values[0], e;
,
rpfl_elemid: s.adUnitCode
), e.push(i)) : g.logError("Rubicon: bidRequest undefined at index position:".concat
}, []).sort(function (e, r) );
},
getUserSyncs: function getUserSyncs(e, r, t, i)
if (!R && e.iframeEnabled)
var n = "";
return t && "string" == typeof t.consentString && ("boolean" == typeof t.gdprApplies ? n += "?gdpr=".concat(Number(t.gdprApplies), "&gdpr_consent=").concat(t.consentString) : n += "?gdpr_consent=".concat(t.consentString)), i && (n += "".concat(n ? "&" : "?"https://slate.com/culture/2020/08/,"us_privacy=").concat(encodeURIComponent(i))), R = !0,
type: "iframe",
url: a + n
;

,
transformBidParams: function transformBidParams(e)
return g.convertTypes(
accountId: "number",
siteId: "number",
zoneId: "number"
, e);

};

function _(e, r) !d[n]) return null;
var o = d[n];

var a = function () ();

if (!a

function I(e, r) r.refererInfo.referer;
return e.params.secure ? t.replace(/^http:/i, "https:") : t;

function A(e, r)
var t = e.params;

if ("video" === r)
var i = [];
return t.video && t.video.playerWidth && t.video.playerHeight ? i = [t.video.playerWidth, t.video.playerHeight] : Array.isArray(g.deepAccess(e, "mediaTypes.video.playerSize")) && 1 === e.mediaTypes.video.playerSize.length ? i = e.mediaTypes.video.playerSize[0] : Array.isArray(e.sizes) && 0 < e.sizes.length && Array.isArray(e.sizes[0]) && 1 < e.sizes[0].length && (i = e.sizes[0]), i; var n = []; return Array.isArray(t.sizes) ? n = t.sizes : void 0 !== g.deepAccess(e, "mediaTypes.banner.sizes") ? n = s(e.mediaTypes.banner.sizes) : Array.isArray(e.sizes) && 0 < e.sizes.length ? n = s(e.sizes) : g.logWarn("Rubicon: no sizes are setup or found"), S(n); function s(e) return g.parseSizesInput(e).reduce(function (e, r) var t = parseInt(f[r], 10); return t && e.push , []); function c(e) return "object" === x(g.deepAccess(e, "params.video")) && void 0 !== g.deepAccess(e, "mediaTypes.".concat(u.d)); function m(e, r) var t = 1 < arguments.length && void 0 !== r && r; return c(e) ? -1 === ["outstream"https://slate.com/culture/2020/08/,"instream"].indexOf(g.deepAccess(e, "mediaTypes.".concat(u.d, ".context"))) ? void (t && g.logError("Rubicon: mediaTypes.video.context must be outstream or instream")) : A(e, "video").length < 2 ? void (t && g.logError("Rubicon: could not determine the playerSize of the video")) : (t && g.logMessage("Rubicon: making video request for adUnit", e.adUnitCode), "video") : 0 === A(e, "banner").length ? void (t && g.logError("Rubicon: could not determine the sizes for banner request")) : (t && g.logMessage("Rubicon: making banner request for adUnit", e.adUnitCode), "banner"); function S(e) var n = [15, 2, 9]; return e.sort(function (e, r) ); function C(e) var r = parseInt(g.deepAccess(e, "params.video.size_id")); return isNaN(r) ? "outstream" === g.deepAccess(e, "mediaTypes.".concat(u.d, ".context")) ? 203 : 201 : r; function j(e) return ranges: low: [ max: 5, increment: .5 ], medium: [ max: 20, increment: .1 ], high: [ max: 20, increment: .01 ], auto: [ max: 5, increment: .05 , min: 5, max: 10, increment: .1 , min: 10, max: 20, increment: .5 ], dense: [ max: 3, increment: .01 , min: 3, max: 8, increment: .05 , min: 8, max: 20, increment: .5 ], custom: e.getConfig("customPriceBucket") && e.getConfig("customPriceBucket").buckets [e.getConfig("priceGranularity")] ; function k(r) var t = !0, e = Object.prototype.toString.call([]), i = Object.prototype.toString.call(0), n = mimes: e, protocols: e, maxduration: i, linearity: i, api: e ; return Object.keys(n).forEach(function (e) Object.prototype.toString.call(g.deepAccess(r, "mediaTypes.video." + e)) !== n[e] && (t = !1, g.logError("Rubicon: mediaTypes.video." + e + " is required and must be of type: " + n[e])); ), t; function T(e) g.logError("Rubicon: required schain params missing")), r; function w(e, r) return "rp_schain" === e ? "rp_schain=".concat(r) : "".concat(e, "=").concat(encodeURIComponent(r)); var R = !1; Object(i.registerBidder)(h); } }, [677]); pbjsChunk([93], { 719: function _(e, t, r) e.exports = r(720); , 720: function _(e, t, r) { "use strict"; Object.defineProperty(t, "__esModule", value: !0 ), r.d(t, "spec", function () return o; ), r.d(t, "_isInbounds", function () return a; ), t._getPlatform = v; var n = r(1), y = r(0), i = r(2), c = r(3), g = r(10), d = r(44); function h(e, t) function s(e, t) (null == t return n; } function u() function p(e, t, r) return t in e ? Object.defineProperty(e, t, value: r, enumerable: !0, configurable: !0, writable: !0 ) : e var b = "sonobi", l = Object(y.generateUUID)(), o = code: b, supportedMediaTypes: [i.b, i.d], isBidRequestValid: function isBidRequestValid(e) if (!e.params) return !1; if (!e.params.ad_unit && !e.params.placement_id) return !1; if (!Object(y.deepAccess)(e, "mediaTypes.banner") && !Object(y.deepAccess)(e, "mediaTypes.video")) return !1; if (Object(y.deepAccess)(e, "mediaTypes.banner")) if (!Object(y.deepAccess)(e, "mediaTypes.banner.sizes") && !e.params.sizes) return !1; else if (Object(y.deepAccess)(e, "mediaTypes.video")) if ("outstream" === Object(y.deepAccess)(e, "mediaTypes.video.context") && !e.params.sizes) return !1; if ("instream" === Object(y.deepAccess)(e, "mediaTypes.video.context") && !Object(y.deepAccess)(e, "mediaTypes.video.playerSize")) return !1; return !0; , buildRequests: function buildRequests(e, t) ("fhnS5drwmH"); s && (i.digid = s.id, i.digkeyv = s.keyv), e[0].schain && (i.schain = JSON.stringify(e[0].schain)), Object(y.deepAccess)(e[0], "userId") && 0 < Object.keys(e[0].userId).length && (i.userid = JSON.stringify(e[0].userId)); var o = e[0].params.keywords; if (o && (i.kw = o), t && t.uspConsent && (i.us_privacy = t.uspConsent), Object(y.isEmpty)(n)) return null; var a = "https://apex.go.sonobi.com/trinity.json"; return Object(y.deepAccess)(e[0], "params.bid_request_url") && (a = Object(y.deepAccess)(e[0], "params.bid_request_url")), method: "GET", url: a, withCredentials: !0, data: i, bidderRequests: e ; , interpretResponse: function interpretResponse(e, l) { var f = e.body, m = [], v = l.data.ref; return 0 === Object.keys(f.slots).length || Object.keys(f.slots).forEach(function (e) var t = f.slots[e], r = e.split("), m; }, getUserSyncs: function getUserSyncs(e, t) var r = []; try e.pixelEnabled && t[0].body.sbi_px.forEach(function (e) r.push( type: e.type, url: e.url ); ); catch (e) return r; }; function f(e) return Object(y.deepAccess)(e, "mediaTypes.video") ? "" : e.params.sizes ? Object(y.parseSizesInput)(e.params.sizes).join(",") : Object(y.deepAccess)(e, "mediaTypes.banner.sizes") ? Object(y.parseSizesInput)(Object(y.deepAccess)(e, "mediaTypes.banner.sizes")).join(",") : e.sizes ? Object(y.parseSizesInput)(e.sizes).join(",") : void 0; function m(e) return e.params.floor ? " var j = function j(i, s) return function (e, t) ; ; var a = function a(e) var r = 0 < arguments.length && void 0 !== e ? e : window; return function () var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : 0, t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : Number.MAX_SAFE_INTEGER; return r.innerWidth >= e && r.innerWidth < t; ; ; function v() var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : window, t = a(e), r = 992, n = 768; return t(0, 768) ? "mobile" : t(n, r) ? "tablet" : "desktop"; function O(i) i.renderer.push(function () var e = h(i.getSize().split("x"), 2), t = e[0], r = e[1], n = new window.SbiOutstreamRenderer(); n.init( vastUrl: i.vastUrl, height: r, width: t ), n.setRootElement(i.adUnitCode); ); Object(n.registerBidder)(o); } }, [719]); pbjsChunk([85], { 741: function _(e, r, t) e.exports = t(742); , 742: function _(e, r, t) { "use strict"; Object.defineProperty(r, "__esModule", value: !0 ), t.d(r, "spec", function () return n; ); var a = t(1), d = t(0), p = 12, o = 11, c = 0, u = 22, n = code: "teads", supportedMediaTypes: ["video"https://slate.com/culture/2020/08/,"banner"], isBidRequestValid: function isBidRequestValid(e) var r, t, a = !1; return void 0 !== e.params && (r = i(d.getValue(e.params, "placementId")), t = i(d.getValue(e.params, "pageId")), a = r && t), a , buildRequests: function buildRequests(e, r) var t = e.map(I), a = referrer: function (e) var r = ""; e && e.refererInfo && e.refererInfo.referer && (r = e.refererInfo.referer); return r; (r), data: t, deviceWidth: screen.width, hb_version: "3.23.0" ; e[0].schain && (a.schain = e[0].schain); var n, d, i, s = r.gdprConsent; return r && s && (n = "boolean" == typeof s.gdprApplies, d = "string" == typeof s.consentString, i = n ? function (e, r, t) var a = p; e ? function (e, r) e.hasGlobalConsent : !(!e (r, t) && (a = o) : a = c; return a; (s.gdprApplies, s.vendorData, s.apiVersion) : u, a.gdpr_iab = consent: d ? s.consentString : "", status: i, apiVersion: s.apiVersion ), r && r.uspConsent && (a.us_privacy = r.uspConsent), method: "POST", url: "https://a.teads.tv/hb/bid-request", data: JSON.stringify(a) ; , interpretResponse: function interpretResponse(e) var t = []; return (e = e.body).responses && e.responses.forEach(function (e) var r = cpm: e.cpm, width: e.width, height: e.height, currency: e.currency, netRevenue: !0, ttl: e.ttl, ad: e.ad, requestId: e.bidId, creativeId: e.creativeId, placementId: e.placementId ; e.dealId && (r.dealId = e.dealId), t.push(r); ), t; ; function I(e) var r, t = , a = d.getValue(e.params, "placementId"), n = d.getValue(e.params, "pageId"); return t.sizes = (r = e, d.parseSizesInput(function (e) d.isArray return d.isArray(e) && (d.isArray(e[0]) ? e.forEach(function (e) r.push(e); ) : r.push(e)), r; , []) : e.sizes; (r))), t.bidId = d.getBidIdParameter("bidId", e), t.bidderRequestId = d.getBidIdParameter("bidderRequestId", e), t.placementId = parseInt(a, 10), t.pageId = parseInt(n, 10), t.adUnitCode = d.getBidIdParameter("adUnitCode", e), t.auctionId = d.getBidIdParameter("auctionId", e), t.transactionId = d.getBidIdParameter("transactionId", e), t; } function i(e) return 0 < parseInt(e); Object(a.registerBidder)(n); } }, [741]); pbjsChunk([76], { 761: function _(r, e, t) r.exports = t(762); , 762: function _(r, e, t) { "use strict"; Object.defineProperty(e, "__esModule", value: !0 ), t.d(e, "tripleliftAdapterSpec", function () return s; ); var n = t(2), i = t(1), o = t(0), u = t(3); function p(r) function d(r, e) (null == e var a = !0, c = null, s = { code: "triplelift", supportedMediaTypes: [n.b], isBidRequestValid: function isBidRequestValid(r) return void 0 !== r.params.inventoryCode; , buildRequests: function buildRequests(r, e) { var t, n = "https://tlx.3lift.com/header/auction?", i = function (r) { var e = , t = r[0].schain; e.imp = r.map(function (r, e) { return id: e, tagid: r.params.inventoryCode, floor: r.params.floor, banner: format: r.sizes.filter(l).map(function (r) return w: r[0], h: r[1] ; ) ; }); var n = [].concat(p(function (r) return f(r, "tdid"https://slate.com/culture/2020/08/,"adserver.org"https://slate.com/culture/2020/08/,"TDID"); (r)), p(function (r) return f(r, "idl_env"https://slate.com/culture/2020/08/,"liveramp.com"https://slate.com/culture/2020/08/,"idl"); (r)), p(function (r) return f(r, "criteoId"https://slate.com/culture/2020/08/,"criteo.com"https://slate.com/culture/2020/08/,"criteoId"); (r))); 0 < n.length && (e.user = ext: eids: n ); t && (e.ext = schain: t ); return e; }(r); return n = o.tryAppendQueryString(n, "lib"https://slate.com/culture/2020/08/,"prebid"), n = o.tryAppendQueryString(n, "v"https://slate.com/culture/2020/08/,"3.23.0"), e && e.refererInfo && (t = e.refererInfo.referer, n = o.tryAppendQueryString(n, "referrer", t)), e && e.timeout && (n = o.tryAppendQueryString(n, "tmax", e.timeout)), e && e.gdprConsent && (void 0 !== e.gdprConsent.gdprApplies && (a = e.gdprConsent.gdprApplies, n = o.tryAppendQueryString(n, "gdpr", a.toString())), void 0 !== e.gdprConsent.consentString && (c = e.gdprConsent.consentString, n = o.tryAppendQueryString(n, "cmp_cs", c))), e && e.uspConsent && (n = o.tryAppendQueryString(n, "us_privacy", e.uspConsent)), !0 === u.b.getConfig("coppa") && (n = o.tryAppendQueryString(n, "coppa", !0)), n.lastIndexOf("&") === n.length - 1 && (n = n.substring(0, n.length - 1)), o.logMessage("tlCall request built: " + n), method: "POST", url: n, data: i, bidderRequest: e ; }, interpretResponse: function interpretResponse(r, e) []).map(function (r) return function (r, e) (t, r); ); , getUserSyncs: function getUserSyncs(r, e, t, n) var i = function (r) if (!r) return; if (r.iframeEnabled) return "iframe"; if (r.pixelEnabled) return "image"; (r); if (i) var u = "https://eb2.3lift.com/sync?"; return "image" === i && (u = o.tryAppendQueryString(u, "px", 1), u = o.tryAppendQueryString(u, "src"https://slate.com/culture/2020/08/,"prebid")), null !== c && (u = o.tryAppendQueryString(u, "gdpr", a), u = o.tryAppendQueryString(u, "cmp_cs", c)), n && (u = o.tryAppendQueryString(u, "us_privacy", n)), [ type: i, url: u ]; }; function f(r, e, t, n) { return r.map((o = e, function (r) return r && r.userId && r.userId[o]; )).filter(function (r) return !!r; ).map((i = t, u = n, function (r) return source: i, uids: [ id: r, ext: rtiPartner: u ] ; )); var i, u, o; } function l(r) return 2 === r.length && "number" == typeof r[0] && "number" == typeof r[1]; Object(i.registerBidder)(s); } }, [761]); pbjsChunk([75], { 763: function _(e, r, t) e.exports = t(764); , 764: function _(e, r, t) { "use strict"; Object.defineProperty(r, "__esModule", value: !0 ), t.d(r, "spec", function () return v; ); var m = t(0), s = t(1), o = t(10), c = t(2), f = "Bid from response has no auid parameter - ", l = "Bid from response has no adm parameter - ", p = "Array of bid objects is empty", g = "Can't find in requested bids the bid with auid - ", u = "Seatbid array from response has empty item", y = "Response is empty", b = "Response has empty seatbid array", h = "Seatbid from response has no array of bid objects - ", v = code: "trustx", supportedMediaTypes: [c.b, c.d], isBidRequestValid: function isBidRequestValid(e) return !!e.params.uid; , buildRequests: function buildRequests(e, r) ); var t = pt: l, auids: p.join(","), sizes: m.getKeys(f).join(","), r: o, wrapperType: "Prebid_js", wrapperVersion: "3.23.0" ; return a && (t.keywords = JSON.stringify(a)), r && (r.refererInfo && r.refererInfo.referer && (t.u = r.refererInfo.referer), r.timeout && (t.wtimeout = r.timeout), r.gdprConsent && (r.gdprConsent.consentString && (t.gdpr_consent = r.gdprConsent.consentString), t.gdpr_applies = "boolean" == typeof r.gdprConsent.gdprApplies ? Number(r.gdprConsent.gdprApplies) : 1), r.uspConsent && (t.us_privacy = r.uspConsent)), method: "GET", url: "https://sofia.trustx.org/hb", data: m.parseQueryStringParameters bidsMap: u ; , interpretResponse: function interpretResponse(e, r, t) { var s = 2 < arguments.length && void 0 !== t ? t : o.a; e = e && e.body; var n, d = [], i = r.bidsMap, a = r.data.pt; return e ? e.seatbid && !e.seatbid.length && (n = b) : n = y, !n && e.seatbid && e.seatbid.forEach(function (e) { !function (e, d, r, t, s) (function (e) (e), i, a, d, s); }), n && m.logError(n), d; }, getUserSyncs: function getUserSyncs(e) if (e.pixelEnabled) return [ type: "image", url: "https://sofia.trustx.org/push_sync" ]; }; function E(e) var r; r = e.value, m.isArray(r) && 0 < r.length && "" === e.value[0] && delete e.value; function w(e) e.renderer.push(function () window.ANOutstreamVideo.renderAd( targetId: e.adUnitCode, adResponse: e.adResponse ); ); Object(s.registerBidder)(v); } }, [763]); pbjs.processQueue(); }, ]; window.modules["via.legacy"] = [function(require,module,exports){"use strict"; DS.service("via", function () { "use strict"; // remove `via` from url, to be used after amplitude logs it to prevent users from sharing such urls function removeFromLocation() var url = new URL(location.href); url.searchParams.delete("via"); history.replaceState(null, "", url.toString()); // and add `via` param to any outbound links function addViaToUrl(href, via) if (!href // keys correspond to "page_types" in editable_components.yml var PREFIXES = article: "article", homepage: "homepage", "vertical front": "section", "rubric front": "rubric" ; var pageType; function setPageType(amplitudePageType) pageType = PREFIXES[amplitudePageType]; var DELIMITER = "_"; function concatVia(node, via) var tag = node.dataset && node.dataset.via; if (tag) via = (via.length ? tag + DELIMITER : tag) + via; return via; function addToClickedLinks() document.documentElement.addEventListener("click", function (e) var a; var via = ""; // detect link nodes and collect via directives to append to the href var node = e.target; // the element where this event originated may have been removed from the dom, e.g. in the case of the OIL CMP which disappears after you interact with it while (node && node !== e.currentTarget) if (node.tagName === "A") a = node; via = concatVia(node, via); node = node.parentNode; if (a && via) if (pageType) via = pageType + DELIMITER + via; a.href = addViaToUrl(a.href, via); ); function addToSubmittedForms() document.documentElement.addEventListener("submit", function (e) var form = e.target; // collect via directives var via = ""; var node = e.target; while (node !== e.currentTarget) via = concatVia(node, via); node = node.parentNode; if (via) if (pageType) via = pageType + DELIMITER + via; // dynamically create a hidden input for the form url var input = document.createElement("input"); input.type = "hidden"; input.name = "via"; input.value = via; form.appendChild(input); ); // start listening only once, when first injected addToClickedLinks(); addToSubmittedForms(); return setPageType: setPageType, removeFromLocation: removeFromLocation ; }); }, ]; window.modules["visibility.legacy"] = [function(require,module,exports){"use strict"; DS.service("$visibility", ["$document"https://slate.com/culture/2020/08/,"$window"https://slate.com/culture/2020/08/,"_throttle"https://slate.com/culture/2020/08/,"Eventify", function ($document, $window, _throttle, Eventify) var list = [], Visible, VisibleEvent; /** * @param number a * @param number b * @returns * * @see http://jsperf.com/math-min-vs-if-condition-vs/8 */ function min(a, b) return a < b ? a : b; /** * @param number a * @param number b * @returns * * @see http://jsperf.com/math-min-vs-if-condition-vs/8 */ function max(a, b) return a > b ? a : b;

/**
* Fast loop through watched elements
*/

function onScroll()
list.forEach(updateVisibility);

/**
* updates seen property
* @param Visble item
* @param evt
* @fires Visible#shown
* @fires Visible#hidden
*/

function updateSeen(item, evt) percent < item.hiddenThreshold) && item.seen) item.seen = false; setTimeout(function () item.trigger("hidden", new VisibleEvent("hidden", evt)); , 15); /** * sets preload property * @param Visible item * @param evt * @param Number innerHeight * @fires Visible#preload */ function updatePreload(item, evt, innerHeight) if (!item.preload && item.preloadThreshhold && shouldBePreloaded(evt.target, evt.rect, item.preloadThreshhold, innerHeight)) item.preload = true; setTimeout(function () item.trigger("preload", new VisibleEvent("preload", evt)); , 15); /** * Trigger events * @param Visible item */ function updateVisibility(item) /** * Return normalized viewport height * @return number */ function getViewportHeight() $document.body.clientHeight; /** * Return normalized viewport width * @return number */ function getViewportWidth() /** * make sure an element isn't hidden by styles or etc * @param Element el * @return Boolean */ function isElementNotHidden(el) return el && el.offsetParent !== null && !el.getAttribute("hidden") && getComputedStyle(el).display !== "none" && getComputedStyle(el).visibility !== "hidden"; /** * Apparently the fastest way... * @param Element el * @returns boolean * @example if (!$visibility.isElementInViewport(el)) ... */ function isElementInViewport(el) /** * @param Element el * @param ClientRect rect * @param Number preloadThreshhold * @param Number innerHeight * @return Boolean */ function shouldBePreloaded(el, rect, preloadThreshhold, innerHeight) return rect.top <= innerHeight + preloadThreshhold && isElementNotHidden(el); /** * Create a one-dimensional spacial hash of x * @param number x * @param number stepSize * @param number optimalK * @param number base * @return number */ function getLinearSpacialHash(x, stepSize, optimalK, base) 1)), remainder = x % stepSize, result = index.toString(base); if (optimalK > 1)
result += getLinearSpacialHash(remainder, Math.floor(stepSize / base), optimalK - 1, base);

return result;

/**
* @param ClientRect rect
* @param number innerHeight
* @returns number
*/

function getVerticallyVisiblePixels(rect, innerHeight)
return min(innerHeight, max(rect.bottom, 0)) - min(max(rect.top, 0), innerHeight);

/**
* Get offset of element relative to entire page
*
* @param Element el
* @returns left: number, top: number
* @see http://jsperf.com/offset-vs-getboundingclientrect/7
*/

function getPageOffset(el)
var offsetLeft = el.offsetLeft,
offsetTop = el.offsetTop;

while (el = el.offsetParent)
offsetLeft += el.offsetLeft;
offsetTop += el.offsetTop;

return
left: offsetLeft,
top: offsetTop
;

/**
* Create a new Visible class to observe when elements enter and leave the viewport
*
* Call destroy function to stop listening (this is until we have better support for watching for Node Removal)
* @param Element el
* @param shownThreshold: number, hiddenThreshold: number [options]
* @class
* @example this.visible = new $visibility.Visible(el);
*/

Visible = function Visible(el, options) ;

Visible.prototype =
/**
* Stop triggering.
*/
destroy: function destroy()
// remove from list
list.splice(list.indexOf(this), 1);

/**
* @name Visible#on
* @function
* @param 'hidden' e EventName
* @param function cb Callback
*/

/**
* @name Visible#trigger
* @function
* @param 'hidden' e
* @param
*/

;
Eventify.enable(Visible.prototype);

VisibleEvent = function VisibleEvent(type, options)
var _this = this;

this.type = type;
Object.keys(options).forEach(function (key)
_this[key] = options[key];
);
; // listen for scroll events (throttled)

$document.addEventListener("scroll", _throttle(onScroll, 200)); // public

this.getPageOffset = getPageOffset;
this.getLinearSpacialHash = getLinearSpacialHash;
this.getVerticallyVisiblePixels = getVerticallyVisiblePixels;
this.getViewportHeight = getViewportHeight;
this.getViewportWidth = getViewportWidth;
this.isElementNotHidden = isElementNotHidden;
this.isElementInViewport = isElementInViewport;
this.Visible = Visible;
]);
}, ];
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",fvar 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