PageSourceSearch

https://hymy.fi/kategoria/uutiset/

html hymy.fi collected 2026-10-02 07:19:20 UTC 136,060 bytes, 3,221 lines download raw bytes

1<!DOCTYPE html>
2<!--[if IE 7]>
3<html class="ie ie7" lang="fi">
4<![endif]--><!--[if IE 8]>
5<html class="ie ie8" lang="fi">
6<![endif]--><!--[if IE 9]>
7<html class="ie ie9" lang="fi">
8<![endif]--><!--[if !(IE 7) | !(IE 8) | !(IE 9)]><!--><html lang="fi">
9<!--<![endif]-->
10
11
12
13<head>
14    <meta charset="UTF-8">
15<script type="text/javascript">
16/* <![CDATA[ */
17var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),document.addEventListener("gform/theme/scripts_loaded",function(){gform.themeScriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,themeScriptsLoaded:!1,isFormEditor:()=>"function"==typeof InitializeEditor,callIfLoaded:function(o){return!(!gform.domLoaded||!gform.scriptsLoaded||!gform.themeScriptsLoaded&&!gform.isFormEditor()||(gform.isFormEditor()&&console.warn("The use of gform.initializeOnLoaded() is deprecated in the form editor context and will be removed in Gravity Forms 3.1."),o(),0))},initializeOnLoaded:function(o){gform.callIfLoaded(o)||(document.addEventListener("gform_main_scripts_loaded",()=>{gform.scriptsLoaded=!0,gform.callIfLoaded(o)}),document.addEventListener("gform/theme/scripts_loaded",()=>{gform.themeScriptsLoaded=!0,gform.callIfLoaded(o)}),window.addEventListener("DOMContentLoaded",()=>{gform.domLoaded=!0,gform.callIfLoaded(o)}))},hooks:{action:{},filter:{}},addAction:function(o,r,e,t){gform.addHook("action",o,r,e,t)},addFilter:function(o,r,e,t){gform.addHook("filter",o,r,e,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,r){gform.removeHook("action",o,r)},removeFilter:function(o,r,e){gform.removeHook("filter",o,r,e)},addHook:function(o,r,e,t,n){null==gform.hooks[o][r]&&(gform.hooks[o][r]=[]);var d=gform.hooks[o][r];null==n&&(n=r+"_"+d.length),gform.hooks[o][r].push({tag:n,callable:e,priority:t=null==t?10:t})},doHook:function(r,o,e){var t;if(e=Array.prototype.slice.call(e,1),null!=gform.hooks[r][o]&&((o=gform.hooks[r][o]).sort(function(o,r){return o.priority-r.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==r?t.apply(null,e):e[0]=t.apply(null,e)})),"filter"==r)return e[0]},removeHook:function(o,r,t,n){var e;null!=gform.hooks[o][r]&&(e=(e=gform.hooks[o][r]).filter(function(o,r,e){return!!(null!=n&&n!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][r]=e)}});
18/* ]]> */
19</script>
19
20
21    <meta http-equiv="x-ua-compatible" content="IE=edge">
22    <meta name="viewport" content="width=device-width, initial-scale=1.0">
23    <meta name="format-detection" content="telephone=no">
24    <link rel="icon" type="image/png" sizes="32x32" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-32x32.png">
25    <link rel="icon" type="image/png" sizes="16x16" href="https://hymy.fi/wp-content/themes/om-hymy-theme/favicon-16x16.png">
26    <link rel="apple-touch-icon" sizes="57x57" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-57.png">
27    <link rel="apple-touch-icon" sizes="60x60" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-60.png">
28    <link rel="apple-touch-icon" sizes="72x72" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-72.png">
29    <link rel="apple-touch-icon" sizes="114x114" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-114.png">
30    <link rel="apple-touch-icon" sizes="120x120" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-120.png">
31    <link rel="apple-touch-icon" sizes="144x144" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-144.png">
32    <link rel="apple-touch-icon" sizes="152x152" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-152.png">
33    <link rel="apple-touch-icon" sizes="180x180" href="https://hymy.fi/wp-content/themes/om-hymy-theme/assets/img/apple-icon-180.png">
34    <link rel="manifest" href="https://hymy.fi/wp-content/themes/om-hymy-theme/manifest.json">
35
36
37    
38
39    
39<script src="https://use.typekit.net/lyn0ejh.js"></script>
39 
39<script>try{Typekit.load({ async: true });}catch(e){}</script>
39    <link rel="profile" href="http:mpg.org/xfn/11">
40    <link rel="apple-touch-icon" href="">
41    <link rel="shortcut icon" href="">
42
43    <!-- Head tag start, do not remove -->
44
45<!-- // hymy.fi-->
46
47<script type="text/javascript">
48
49	const timerStart = Date.now();
50	window.timerStart = timerStart;
51	var dfpDebug = document.location.href.indexOf("dfpdebug=1") > -1 ? true : false;
52	var cmpDebug = document.location.href.indexOf("cmpdebug=1") > -1 ? true : false;
53	var testSRA = document.location.href.indexOf("testsra=1") > -1 ? true : true;
54
55</script>
55
56
57<meta name="facebook-domain-verification" content="zufmuphmfyae7u4gdbgu0ppy2ycmld">
58
59<style>
60
61	/*.article__body [id*='dfp__'] iframe {width: auto !important;}*/
62	html.no-scroll, body.no-scroll {
63		overflow: hidden !important;
64	}
65	@media screen and (max-width: 1020px) {
66		body.single-post [data-google-query-id] {
67			margin: 30px 0px !important;
68			clear: both !important;
69			display: flex;
70			justify-content: center;
71		}
72		body.category [data-google-query-id] {
73			margin: 0px 0px 30px !important;
74			clear: both !important;
75		}
76	}
77	body.category-horoskooppi [data-google-query-id] {
78		margin: 0px 0px 50px !important;
79		clear: both !important;
80	}
81	@media screen and (min-width: 1020px) {
82		#dfp__desk-12 {min-height: 408px}
83		.bbp-replies .bbp-dfp-slots {display: flex !important; justify-content: center !important}
84	}
85
86</style>
87
88<script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js?rnd=1"></script>
88
89
90<script>
91
92	if (location.href.indexOf('testnewcmp=2') == -1) {
93
94		var cookieMatch = document.cookie.match(/(?:^|;\s*)TcString=([^;]+)/);
95		var tcString = cookieMatch ? decodeURIComponent(cookieMatch[1]) : null;
96
97		if (tcString || (window.tcstring_decoded && window.tcstring_decoded.tcString)) {
98
99			if (cmpDebug) {console.log('Testing local __tcfapi...')}
100
101			var decoded = window.tcstring_decoded || {};
102
103			var tcData = {
104				tcString: tcString || decoded.tcString,
105				version: 2,
106				gdprApplies: true,
107				cmpId: decoded.cmpId || 0,
108				cmpVersion: decoded.cmpVersion || 0,
109				tcfPolicyVersion: 0,
110				vendorListVersion: decoded.vendorListVersion || 0,
111				eventStatus: "tcloaded",
112				cmpStatus: "loaded",
113				purpose: decoded.purpose || { consents: {}, legitimateInterests: {} },
114				vendor: decoded.vendor || { consents: {}, legitimateInterests: {} },
115				publisher: decoded.publisher || { consents: {}, legitimateInterests: {} },
116				specialFeatureOptins: decoded.specialFeatureOptins || {}
117			};
118
119			var __tcfapiListeners = {};
120			var __tcfapiNextId = 1;
121
122			window.__tcfapi = function(command, version, callback, parameter) {
123
124				var haveValidString = !!tcData.tcString;
125
126				switch (command) {
127					case "ping":
128						callback({
129							cmpLoaded: true,
130							cmpStatus: "loaded",
131							tcfPolicyVersion: tcData.tcfPolicyVersion
132						}, true);
133						break;
134					case "getTCData":
135						callback(haveValidString ? tcData : null, haveValidString);
136						break;
137					case "getTCString":
138						callback(haveValidString ? tcData.tcString : null, haveValidString);
139						break;
140					case "addEventListener":
141						var id = __tcfapiNextId++;
142						__tcfapiListeners[id] = callback;
143						callback(haveValidString ? tcData : null, haveValidString);
144						break;
145					case "removeEventListener":
146						if (parameter && __tcfapiListeners[parameter]) {
147							delete __tcfapiListeners[parameter];
148							callback(true, true);
149						} else {
150							callback(false, false);
151						}
152						break;
153					default:
154						callback(null, false);
155				}
156
157				if (cmpDebug) {
158					console.log("[__tcfapi call]", {command, version, parameter});
159					console.log("[__tcfapi response]", {
160						time: (Date.now() - timerStart) + 'ms',
161						command: command,
162						returnedTcString: haveValidString ? tcData.tcString : null,
163						decodedObject: decoded || null
164					});
165				}
166
167			};
168
169		}
170
171	}
172
173	if (cmpDebug) {
174		__tcfapi('getTCData', 2, (tcData, success) => {
175			console.log('testdata3: ' + (Date.now() - timerStart) + 'ms --> ', tcData, success);
176		});
177	}
178
179</script>
179
180
181<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
181
182
183<script>
184
185	function waitForElement(selector) {
186		return new Promise(function(resolve, reject) {
187			var element = document.querySelector(selector);
188			if(element) {
189				resolve(element);
190				return;
191			}
192			var observer = new MutationObserver(function(mutations) {
193				mutations.forEach(function(mutation) {
194					var nodes = Array.from(mutation.addedNodes);
195					for(var node of nodes) {
196						if(node.matches && node.matches(selector)) {
197							observer.disconnect();
198							resolve(node);
199							return;
200						}
201					};
202				});
203			});
204			observer.observe(document.documentElement, { childList: true, subtree: true });
205		});
206	}
207
208	function waitForCondition(checkFn, interval = 50, timeout = 5000) {
209		return new Promise((resolve, reject) => {
210			try {
211				if (checkFn()) {
212					resolve(true);
213					return;
214				}
215			} catch (e) {
216				// ignore early errors (e.g., googletag not yet defined)
217			}
218
219			const start = Date.now();
220			const timer = setInterval(() => {
221				try {
222					if (checkFn()) {
223						clearInterval(timer);
224						resolve(true);
225					} else if (Date.now() - start > timeout) {
226						clearInterval(timer);
227						reject(new Error('Timeout waiting for condition'));
228					}
229				} catch (e) {
230					// still ignore transient errors
231				}
232			}, interval);
233		});
234	}
235
236	var cmpRnd = Math.floor(Math.random() * 999999);
237
238	if (location.href.indexOf('testnewcmp=1') > -1) {
239
240		document.addEventListener('gravito:tcfv2:client', function (event) {
241			console.log('TCData: gravito:tcfv2:client eventType: ', event.detail.eventType);
242		}, true);
243
244		__tcfapi("addEventListener", 2, function (TCData) {
245			console.log('TCData: Got an answer from TCData...');
246			console.log('TCData: eventStatus: ', TCData.eventStatus);
247			if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
248			}
249		});
250
251		//window.checkCMPConditions = function(e,t,n,o,r) {console.log("Uusi funktio toimii varmemmin!");return new Promise((l=>{cmpDebug&&console.log("Local TcString: "+JSON.stringify(tcstring_decoded));let s,g,i,c;""!=e?(cmpDebug&&console.log("Tsekataan keksistä..."),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>
251e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),l(s&&g&&i&&c)):document.addEventListener("gravito:tcfv2:client",(function(a){cmpDebug&&console.log("Kuunnellaan gravito:tcfv2:clientia...");let p=a.detail.eventType;"layer1:opt-in:all"!=p&&"layer2:opt-in:all"!=p&&"layer2:opt-in:selected"!=p&&"layer2:opt-out:all"!=p||(cmpDebug&&console.log("purposeConsentsLength: "+a.detail.purposeConsents.length),gravitoCMP.currentState&&(consentString=cmpGetCookie("TcString"),e=TCStringParse(consentString),cmpDebug&&console.log("currentStaten data: "+JSON.stringify(e))),s=0===t.length||t.every((t=>e.purpose.consents[t])),g=0===n.length||n.every((t=>e.purpose.legitimateInterests[t])),i=0===o.length||o.every((t=>e.vendor.consents[t])),c=0===r.length||r.every((t=>e.vendor.legitimateInterests[t])),cmpDebug&&console.log(s&&g&&i&&c),l(s&&g&&i&&c))}),!0)}))};
252
253		if (location.href.indexOf('testcmp=1') > -1) {
254			waitForElement("body").then(function(element) {
255				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
256				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
257				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
258				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
259			});
260		} else if (location.href.indexOf('testcmp=2') > -1) {
261			waitForElement("body").then(function(element) {
262				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
263				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript2.js?' + cmpRnd;
264				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
265			});
266		} else if (location.href.indexOf('testcmp=3') > -1) {
267			waitForElement("body").then(function(element) {
268				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
269				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/gravito-cmp-deployment-script.
269js?' + cmpRnd;
270				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
271			});
272		} else {
273			waitForElement("body").then(function(element) {
274				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
275				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js';
276				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
277			});
278		}
279
280	} else {
281
282		console.log('Testing local __tcfapi, with cmp script insert...');
283
284		//waitForElement("body").then(function(element) {
285		//	var cmpRnd = Math.floor(Math.random() * 999999);
286		//	(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
287		//	e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
288		//	t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
289		//});
290
291		if (location.href.indexOf('testcmp=1') > -1) {
292			waitForElement("body").then(function(element) {
293				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
294				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
295				e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
296				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
297			});
298		} else {
299			waitForElement("body").then(function(element) {
300				(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
301				//e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js';
302				e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js?' + cmpRnd;
303				t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
304			});
305		}
306
307	}
308
309</script>
309
310
311<!-- Gravito CMP start-->
312	<!--script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script-->
313	<!--script async src="https://storage.googleapis.com/om-gravito-cmp/otavaScript.js"></script-->
314<!-- Gravito CMP end-->
315
316<script>
317	window.ghdConfig = {
318		autoInit: true,
319		endpoint: 'https://otava.detect.gravito.fi/api/v1/events',
320		volume: 'sampling',
321		samplingRatio: 0.1 // capture 10% of the events
322	};
323</script>
vendor: 1 bytes, line 323
323
324<script src="https://otava.detect.gravito.fi/sdk.js" async></script>
vendor: 1 bytes, line 324
324
325<script async="async" src="https://functions.adnami.io/api/macro/adsm.macro.hymy.fi.js"></script>
325
326
327<script>
328
329	var cxContextualIds = [], cxSegmentIds = [];
330	var articleCategory = '', articleCategories = '', recipeTheme = '', articleTags = '', articleSection = '';
331
332	var cX = cX || { options: { tcf20: true } }; cX.callQueue = cX.callQueue || [];
333	var cxDefaultSegments = '8nqech16gy6q,8mt8vs49hkio,8o1gwyxui6y1,aavib3epzfey,8o1mlcz9mvdd';
334	if (dfpDebug) {console.log('cXsegmentIds1: ' + cxSegmentIds)}
335
336	var deliveryType = 'tad';
337
338	checkCMPConditions(tcstring_decoded, [1,3,4], [2,7,9,10], [], [755]).then(result => {
339		if (result) {
340			if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE personalized ads...")}
341			//googletag.pubads().setTargeting("deliveryType", "normal");
342			deliveryType = 'normal';
343		} else {
344			checkCMPConditions(tcstring_decoded, [1], [2,7,9,10], [], [755]).then(result => {
345				if (result) {
346					if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Non-personalized ads...")}
347					//googletag.pubads().setTargeting("deliveryType", "npa");
348					deliveryType = 'npa';
349				} else {
350					checkCMPConditions(tcstring_decoded, [], [2,7,9,10], [], [755]).then(result => {
351						if (result) {
352							if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Limited ads...")}
353							//googletag.pubads().setTargeting("deliveryType", "lads");
354							deliveryType = 'lads';
355							useHBM = false;
356						} else {
357							if (dfpDebug) {console.log("Consent not met: GAM IS ALLOWED TO SERVE TAD...")}
358							//googletag.pubads().setTargeting("deliveryType", "tad");
359							deliveryType = 'tad';
360							useHBM = false;
361						}
362					});
363				}
364			});
365		}
366	});
367
368	checkCMPConditions(tcstring_decoded, [1,3,4], [], [412], []).then(result => {
369		if (result) {
370
371			if (dfpDebug) {console.log("Consents met: PIANO IS GOOD TO GO...")}
372			if (dfpDebug) {console.log("cX can load via tcstring...")}
373
374			// Async load of cx.js
375			(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
376			e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js';
377			t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
378
379			if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
380				if (dfpDebug) {console.log('cX: ls available, getting segments...')}
381				cxSegmentIds = localStorage.getItem('_cX_segmentInfo');
382				if (cxSegmentIds && cxSegmentIds.trim().length > 0) {
383					cxSegmentIds = cxSegmentIds.split(',');
384					if (dfpDebug) console.log('cX: Calling dfp.init() with lsSegments:', cxSegmentIds);
385					dfp.init(cxSegmentIds);
386				} else {
387					if (dfpDebug) {
388						console.log('cX: ls cxSegmentIds.trim().length = 0...');
389						console.log('cX: Calling dfp.init() with default segments...');
390					}
391					dfp.init(cxDefaultSegments);
392				}
393			}
394
395
396			waitForCondition(() => window.cX && cX.loaded).then(() => {
397
398				var cxSegmentIds = [];
399				var contextualIds = [];
400
401				if (dfpDebug) {console.log('cx.loaded, calling cX.getSegments...')}
402				cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
403
404					if (dfpDebug) console.log('cX.getSegments length: ' + segments.length);
405					if (!segments || !Array.isArray(segments) || !segments.length) {
406						if (dfpDebug) console.warn('cX: Segment fetch failed or empty:', segments);
407					}
408
409					cX.Array.forEach(segments, function (cxTypedSegment, index) {
410						if (cxTypedSegment.type == 'contextual') {
411							cxContextualIds.push(cxTypedSegment.id);
412						} else if (cxTypedSegment.type == 'traffic') {
413							cxSegmentIds.push(cxTypedSegment.id);
414						}
415					});
416
417					if (dfpDebug) console.log('cxContextualIds:', cxContextualIds);
418
419					if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
420						localStorage.setItem('_cX_segmentInfo', cxSegmentIds.join(','));
421						if (dfpDebug) console.log('cX: Segments fetched and stored:', cxSegmentIds);
422					}
423
424				});
425			}).catch(err => console.warn(err.message));
426
427		} else {
428
429			if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PIANO!!!")}
430			__tcfapi("addEventListener", 2, function (TCData) {
431				if (dfpDebug) {console.log('Got an answer from TCData...')}
432				if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
433					//initDFP(cxSegmentIds);
434					if (dfpDebug) {
435						console.log('No cX, calling dfp.init() with default segments...');
436					}
437					dfp.init(cxDefaultSegments);
438				}
439			});
440
441		}
442	});
443
444	setTimeout(() => {
445		if (window.dataLayer) {
446			dataLayer.forEach(function (dataLayerItem) {
447				if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) {
448					articleCategory = dataLayerItem['PrimaryCategory'].toLocaleStr
448ing().toLowerCase().replace(/, /g, ',');
449					if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);}
450				}
451				if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) {
452					articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ',');
453					if (dfpDebug) {console.log('Categories: ' + articleCategories);}
454				}
455				if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) {
456					articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ',');
457					if (dfpDebug) {console.log('Tags: ' + articleTags);}
458				}
459				if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) {
460					articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ',');
461					if (dfpDebug) {console.log('ArticleSection: ' + articleSection);}
462				}
463			});
464		} else {
465			console.error('DataLayer is not defined.')
466		}
467	}, 120);
468
469	console.time("timer");
470
471	var adLocation = 'content';
472	var hideAllAds = false;
473	var userdpbjs = false;
474	var hb_setup = 'owpbjs';
475	var rnd = Math.floor(Math.random() * 50);
476	window.dataLayer = window.dataLayer || [];
477	var leiki_contextual = '';
478	var useHBM = true;
479	if (location.href.indexOf('usehbm=false') > -1) {
480		useHBM = false;
481		console.log('HBM not in use!!!');
482	}
483
484	function getLeikiContextual() {
485
486		if (!window.dataLayer) {
487			console.error('LeikiSmartProfiles: dataLayer is not defined.')
488			return;
489		}
490
491		var SmartProfiles = {};
492		var FilteredKeywords = [];
493		var dataLayerKey = 'LeikiSmartProfiles';
494		var keywordFilters = {
495			aste_helsinki: {
496				relevance: 2,
497				reversedSlotsLeft: 5,
498			},
499			iabtier1: {
500				relevance: 10,
501				reversedSlotsLeft: 5,
502			}
503		}
504
505		// Find correct object by key from dataLayer.
506		dataLayer.forEach(function (dataLayerItem) {
507			// If dataLayer item have object named by dataLayerKey
508			// eg. datalayer.LeikiSmartProfiles
509			if (dataLayerItem[dataLayerKey]) {
510				SmartProfiles = dataLayerItem[dataLayerKey];
511			};
512		});
513
514		// First get all object keys of SmartProfiles. Keys are SmartProfile classifications.
515		// Then go through all the classifications
516		Object.keys(SmartProfiles).forEach(function (classification) {
517			// Use only keywordFilters classifications
518			if (classification in keywordFilters) {
519				// Go throug all classification objects. In object we have array of keywords.
520				SmartProfiles[classification].forEach(function (keyword) {
521					// Filter out all keywords what doesn't meat minium relevance level
522					var isMeaningful = keywordFilters[classification].relevance < keyword.relevance;
523					if (isMeaningful && keywordFilters[classification].reversedSlotsLeft > 0) {
524						keywordFilters[classification].reversedSlotsLeft--;
525						FilteredKeywords.push(keyword.ID);
526					}
527				});
528			}
529		});
530
531		// Convert array to string. Keywords are separated by , by default
532		return FilteredKeywords.length > 0 ? FilteredKeywords.join() : null;
533
534	}
535
536	function cmpGetCookie(cname) {
537		var name = cname + "=";
538		var ca = document.cookie.split(';');
539		for(var i = 0; i < ca.length; i++) {
540			var c = ca[i];
541			while (c.charAt(0) == ' ') {
542				c = c.substring(1);
543			}
544			if (c.indexOf(name) == 0) {
545				return c.substring(name.length, c.length);
546			}
547		}
548		return "";
549	}
550
551	setTimeout(function() {
552		leiki_contextual = getLeikiContextual();
553	}, 50);
554
555	var googletag = googletag || {};
556	googletag.cmd = googletag.cmd || [];
557	var definedSlots = {};
558
559	googletag.cmd.push(function() {
560		googletag.pubads().addEventListener('slotRenderEnded', function(event) {
561			if (event.slot.getSlotElementId().includes('dfp__interstitial')) {
562				if (event.isEmpty) {
563					console.log('Interstitial empty...');
564				}
565			}
566		});
567	});
568
569	//var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","interstitial","mob-1","mob-2","mob-3"],"serviceStarted":""};
570	var dfpConfig = {"location":"content","serviceName":"hymy","slots":["desk-1","in-text","rectangle-1","rectangle-2","rectangle-3","rectangle-4","rectangle-5","in-text","mob-1","mob-2","mob-3","to
570pad-mob"],"serviceStarted":""};
571
572	window.dfp = {
573		location: "content",
574		serviceName: 'hymy',
575		visibility: document.documentElement.clientWidth >= 1279 ? "large" : document.documentElement.clientWidth >= 1020 ? "desktop" : "mobile",
576		networkcode: "135812570",
577		initialized: false,
578		definedAds: {},
579		slots: {
580			"desk-1": {
581				sizes: [[728,90], [980,120], [980,400], [980,552]],
582				visibility: ["desktop", "large"]
583			},
584			"rectangle-1": {
585				sizes: [[300,250], [300,300], [300,431], [300,600]],
586				visibility: ["desktop", "large"]
587			},
588			"rectangle-2": {
589				sizes: [[300,250], [300,300], [300,431], [300,600]],
590				visibility: ["desktop", "large"]
591			},
592			"rectangle-3": {
593				sizes: [[300,250], [300,300], [300,431], [300,600]],
594				visibility: ["desktop", "large"],
595				location: ["content", "forum"]
596			},
597			"rectangle-4": {
598				sizes: [[300,250], [300,300], [300,431], [300,600]],
599				visibility: ["desktop", "large"],
600				location: ["forum"]
601			},
602			"rectangle-5": {
603				sizes: [[300,250], [300,300], [300,431], [300,600]],
604				visibility: ["desktop", "large"],
605				location: ["forum"]
606			},
607			"in-text": {
608				sizes: [[300,250], [300,300], [468,400], [620,891]],
609				visibility: ["desktop", "large"]
610			},
611			'interstitial': {
612				sizes: [1, 1],
613				visibility: 'all'
614			},
615			"mob-1": {
616				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150]],
617				visibility: ["mobile"]
618			},
619			"mob-2": {
620				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
621				visibility: ["mobile"],
622				location: ["frontpage", "content", "forum"]
623			},
624			"mob-3": {
625				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
626				visibility: ["mobile"],
627				location: ["forum"]
628			},
629			"mob-4": {
630				sizes: [[360, 600], [320,600], [320,320], [300,600], [300,431], [300,300], [300,250], [300,150], ['fluid']],
631				visibility: ["mobile"],
632				location: ["forum"]
633			},
634			'topad-mob': {
635				sizes: [[1, 2],[2, 2]],
636				visibility: 'mobile'
637			}
638		},
639
640		pbConfig: {
641			large: {
642				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js",
643				configId: {
644					frontpage: "6078352f3b31001aa4257ba8",
645					content: "6078487db0b348085a257bb8",
646					forum: "60785428cac786902d627115"
647				},
648				lazyLoad: {
649					frontpage: 60,
650					content: 60,
651					forum: 60
652				}
653			},
654			desktop: {
655				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d98.js",
656				configId: {
657					frontpage: "6078352f3b31001aa4257ba8",
658					content: "6078487db0b348085a257bb8",
659					forum: "60785428cac786902d627115"
660				},
661				lazyLoad: {
662					frontpage: 60,
663					content: 60,
664					forum: 60
665				}
666			},
667			mobile: {
668				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7d72.js",
669				configId: {
670					frontpage: "607844e0585539bac5257bb3",
671					content: "60784b5efaa9dbd1c0257bb9",
672					forum: "607856c5934372061f627116"
673				},
674				lazyLoad: {
675					frontpage: 60,
676					content: 60,
677					forum: 60
678				}
679			}
680		},
681
682		registerAdslots: function(i) {
683			for (adslot in this.slots) {
684				var v = this.slots[adslot].location || ["all"];
685				if (v != "all" && v.indexOf(adLocation) < 0) {
686					delete this.slots[adslot];
687					console.log(adslot + ' deleted!');
688				}
689			}
690		},
691
692		displayAdslot: function (id) {
693
694			//if (!this.initialized) this.init();
695
696			var that = this;
697			var parts = id.split('__');
698			var parts = parts[1].split('_');
699			var slotName = parts[0];
700
701			if (testSRA) {
702				//if (!(slotName.includes('native'))) {
703				//	return;
704				//}
705				return;
706			}
707
708			// Checking that the native adslot is known
709			if (slotName.includes('native') && this.slots.hasOwnProperty(slotName)) {
710				googletag.cmd.push(function () {
711					that.defineNative(id, slotName);
712					googletag.display(id);
713					if (dfpDebug) {console.log('googletag.display for ' + slotName + '...')}
714				});
715			} else {
716				// Checking that the adslot is known and visibility matches
717				//if (this.slots.hasOwnProperty(parts[0]) && ["all", this.visibility].indexOf(this.slots[parts[0]]['visibility'] || 'all') >= 0) {
718				if	(this.slots.hasOwnProperty(parts[0]) && (this.slots[parts[0]]['visibility'] === 'all' || this.slots[parts[0]]['visibility'].includes(this.visibility))) {
719					if (dfpDebug) {console.log('parts = ' + parts[0])}
720					if (parts[0] == 'interstitial') {
721						//var checkIfGoogletagReady = setInterval(function () {
722							//if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
723								googletag.cmd.push(function () {
724									var slot = that.defineSlot(parts[0], id);
725									googletag.display(id);
726									if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')}
727									//googletag.pubads().refresh([slot], {changeCorrelator: false});
728									//if (dfpDebug) {console.log('googletag.pubads().refresh for ' + parts[0] + '..')}
729								});
730								//clearInterval(checkIfGoogletagReady);
731							//}
732						//}, 50);
733					} else {
734						googletag.cmd.push(function () {
735							var slot = that.defineSlot(parts[0], id);
736							googletag.display(id);
737							if (slotName == 'desk-1' && location.href.indexOf('loadtopad') > -1) {
738								window.dfp.slotdesk1 = slot;
739							}
740							if (dfpDebug) {console.log('googletag.display for ' + parts[0] + '..')}
741						});
742					}
743				}
744			}
745
746		},
747
748		defineSlot: function (slotName, id) {
749
750			var id = id || 'dfp__' + slotName;
751			var path = this.networkcode + '/' + dfpConfig.serviceName + '/' + dfpConfig.location + '/' + slotName;
752			if (slotName.includes('topad-')) {
753				path = this.networkcode + '/' + dfpConfig.serviceName + '/content/' + slotName;
754			}
755			this.definedAds[id] = true;
756			//console.log('defineSlot: ' + slotName + '#' + id);
757
758			if (typeof this.slots[slotName]['sizes'] !== 'undefined') {
759				if (dfpDebug) {console.log('defineSlot for ' + slotName + '...')}
760				return googletag.defineSlot(path, this.slots[slotName]['sizes'], id).addService(googletag.pubads()).setTargeting('adslotid', id.replace('dfp__',''));
761			} else {
762				return googletag.defineOutOfPageSlot(path, id).addService(googletag.pubads());
763			}
764
765		},
766
767		defineNative: function(opt_div, slotName) {
768
769			var opt_div = opt_div || 'dfp__' + slotName;
770			var adUnitPath = this.networkcode + '/' + this.serviceName + '/native/' + slotName;
771			this.definedAds[opt_div] = true;
772			//console.log('defineNative: ' + slotName + '#' + opt_div;
773			//return googletag.defineSlot(adUnitPath, 'fluid', opt_div).addService(googletag.pubads());
774			return googletag.defineSlot(adUnitPath, this.slots[slotName]['sizes'], opt_div).addService(googletag.pubads()).setTargeting('adslotid', opt_div.replace('dfp__',''));
775
776		},
777
778		init: function(cXsegmentIds) {
779
780			//if (dfpDebug) {console.log('Initin segmentit: ' + cXsegmentIds)}
781
782			var that = this;
783
784			if (!dfpConfig.hasOwnProperty('serviceName')) {
785				console.log('DFP service name not set');
786				return;
787			}
788
789			this.registerAdslots(dfpConfig.slots);
790
791			if (!dfpConfig.serviceStarted) {
792
793				googletag.cmd.push(function () {
794
795					googletag.pubads().addEventListener('slotRenderEnded', function(event) {
796
797						if ((dfpDebug || 1 == 2) && window.dfp.visibility == 'mobile' && 1 == 2) {
798
799							var origAdSlotId = event.slot.getSlotElementId();
800							var acceptedSlotIds = ["mob-1","mob-2","mob-3","mob-4","2_1","2_2","2_3","2_4","2_5"];
801
802							if (acceptedSlotIds.some(value => origAdSlotId.endsWith(value))) {
803								if (dfpDebug) {console.log('adSlotId "' + origAdSlotId + '" is allowed for FRB...')}
804								var adPath = 'hymy';
805								if (event.isEmpty) {
806									if (window.relevantDigital) {
807
808										setTimeout(function() {
809											var newAdSlotId = origAdSlotId.replace("-","_") + '_111';
810											var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2);
811											//adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"));
812											if (adSlotName.indexOf("_") > -1) {adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"))}
813											if (dfpDebug) {console.log('adSlotName: ' + adSlotName)};
814											if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)};
815											jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
815<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", ["' + origAdSlotId.replace("dfp__","") + '-111","frb"])});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>');
816											var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
817											relevantDigital.cmd.push(function() {
818												relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true});
819													if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)};
820											});
821										}, 100);
822
823									}
824								} else {
825									if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')};
826								}
827							}
828
829						}
830
831						if (event.slot.getSlotElementId().indexOf('dfp__interstitial') > -1) {
832							if (event.isEmpty) {
833								if (dfpDebug) {console.log('Fpa is empty, calling webinterstitial...')}
834								window.canRunWebInterstitial = true;
835							} else {
836								if (dfpDebug) {console.log('BBW: preventing sticky player when fpa was shown...')}
837								window.bluebillywig = window.bluebillywig || {};
838								window.bluebillywig.cmd = window.bluebillywig.cmd || [];
839								//window.bluebillywig.cmd.push(function($$api) {
840								//	//const originalStickyMode = $$api.getPlayoutData().stickyMode;
841								//	$$api.updatePlayout({stickyMode: 'none'});
842								//	//$$api.updatePlayout({stickyMode: originalStickyMode});
843								//});
844								window.bluebillywig.cmd.push({
845									playerId: '/p/inarticle/a/hymy',
846									callback: function($$api) {
847										$$api.updatePlayout({stickyMode: 'none'});
848									}
849								});
850							}
851						}
852
853					});
854
855					googletag.pubads().setTargeting("url_domain", window.location.host),
856					googletag.pubads().setTargeting("url_path", window.location.pathname),
857					googletag.pubads().setTargeting("url_params", window.location.search.substring(1));
858					googletag.pubads().setTargeting("hb_setup", hb_setup);
859					//googletag.pubads().setCentering(true);
860
861
862					var m = document.cookie.match(/frosmo_keywords=.([^;$]+)/);
863					if(m != null &&  m.length) {
864						googletag.pubads().setTargeting("frosmo", m[1].split("."))
865					}
866
867					if (leiki_contextual !== null && leiki_contextual !== 'undefined') {
868
869						if (dfpDebug) {console.log('leiki_contextual_api success:', leiki_contextual);}
870						googletag.pubads().setTargeting("leiki_contextual", leiki_contextual);
871
872					}
873
874					if (window.dataLayer) {
875
876						//articleCategory = google_tag_manager["GTM-K5WDX4"].dataLayer.get('PrimaryCategory');
877						//articleCategories = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Categories');
878						//recipeTheme = google_tag_manager["GTM-K5WDX4"].dataLayer.get('RecipeTheme');
879						//articleTags = google_tag_manager["GTM-K5WDX4"].dataLayer.get('Tags');
880
881						if (articleCategory != undefined && articleCategory != '') {
882							googletag.pubads().setTargeting("articlecategory", articleCategory.toLowerCase());
883							if (dfpDebug) {console.log('Targeting for articlecategory: ' + articleCategory.toLowerCase());}
884						}
885						if (articleCategories != undefined && articleCategories != '') {
886							googletag.pubads().setTargeting("articlecategories", articleCategories.toLowerCase());
887							if (dfpDebug) {console.log('Targeting for articlecategories: ' + articleCategories.toLowerCase());}
888						}
889						if (articleSection != undefined && articleSection != '') {
890							googletag.pubads().setTargeting("articlesection", articleSection.toLowerCase());
891							if (dfpDebug) {console.log('Targeting for articlesection: ' + articleSection.toLowerCase());}
892						}
893						if (articleTags != undefined && articleTags != '') {
894							googletag.pubads().setTargeting("articlekeywords", articleTags.toLowerCase().replace(/, /g, ','));
895							if (dfpDebug) {console.log('Targeting for articlekeywords: ' + articleTags.toLowerCase().replace(/, /g, ','));}
896						}
897
898					} else {
899						console.error('DataLayer not ready for targeting...')
900					}
901
902					if (cXsegmentIds !== null && cXsegmentIds !== undefined) {
903
904						var regexPattern = new RegExp("(\\b8nqech16gy6q\\b)");
905						if (!regexPattern.test(cXsegmentIds)) {
906							cXsegmentIds = (Array.isArray(cXsegmentIds) && cXsegmentIds.length === 0) ? '8nqech16gy6q' : (cXsegmentIds !== '' ? cXsegmentIds + ',8nqech16gy6q' : cXsegmentIds);
907							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8nqech16gy6q"')}
908						}
909						var regexPattern = new RegExp("(\\b8mt8vs49hkio\\b)");
910						if (!regexPattern.test(cXsegmentIds)) {
911							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8mt8vs49hkio';
912							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8mt8vs49hkio"')}
913						}
914						var regexPattern = new RegExp("(\\b8o1gwyxui6y1\\b)");
915						if (!regexPattern.test(cXsegmentIds)) {
916							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1gwyxui6y1,aavib3epzfey';
917							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1gwyxui6y1,aavib3epzfey"')}
918						}
919						var regexPattern = new RegExp("(\\b8o1mlcz9mvdd\\b)");
920						if (!regexPattern.test(cXsegmentIds)) {
921							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1mlcz9mvdd';
922							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1mlcz9mvdd"')}
923						}
924
925						if (dfpDebug) {console.log('DFP setTargeting CxSegments: ' + cXsegmentIds)}
926						googletag.pubads().setTargeting("CxSegments", cXsegmentIds);
927
928					}
929
930/*
931					if (dfpDebug) {console.log('Calling cX.getSegments...')}
932					cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
933						cX.Array.forEach(segments, function (cxTypedSegment, index) {
934							if (cxTypedSegment.type == 'contextual') {
935								contextualIds.push(cxTypedSegment.id);
936							}
937						});
938						if (dfpDebug) {console.log('Setting targeting fo cX.getSegments: ' + contextualIds.join())}
939						googletag.pubads().setTargeting("CxContext", contextualIds.join());
940					});
941*/
942
943					googletag.pubads().setTargeting("CxContext", cxContextualIds.join());
944
945					//var renderMarginPercent = Math.random() < 1/3 ? 20 : Math.random() < 1/2 ? 40 : 80;
946					var renderMarginPercent = window.dfp.pbConfig[window.dfp.visibility].lazyLoad[adLocation] || 40;
947					googletag.pubads().setTargeting("experiments", "lazyload_" + renderMarginPercent);
948
949
950					googletag.pubads().collapseEmptyDivs(),
951					googletag.pubads().enableLazyLoad({
952						fetchMarginPercent: 100,
953						renderMarginPercent: renderMarginPercent,
954						mobileScaling: 1
955					});
956					if (dfpDebug) {console.log('renderMarginPercent: ' + renderMarginPercent)}
957
958	/*
959					googletag.pubads().enableLazyLoad({
960						fetchMarginPercent: 100,
961						renderMarginPercent: 40,
962						mobileScaling: 1
963					});
964	*/
965
966					googletag.pubads().setTargeting("deliveryType", deliveryType);
967
968					(function () {
969
970						function generateNewPPID() {
971							return crypto.randomUUID().replace(/-/g, '');
972						}
973
974						function parsePossiblyDoubleEncodedJSON(value) {
975							var parsed = value;
976							while (typeof parsed === 'string') {
977								parsed = JSON.parse(parsed);
978							}
979							return parsed;
980						}
981
982						function setPPID(ppid) {
983							if (!ppid) return;
984							localStorage.setItem('ppid', ppid);
985							googletag.pubads().setPublisherProvidedId(ppid);
986						}
987
988						var storedPPID = localStorage.getItem('ppid');
989
990						if (storedPPID) {
991							if (dfpDebug) {console.log('ls storedPPID: ', storedPPID)}
992							googletag.pubads().setPublisherProvidedId(storedPPID);
993							return;
994						}
995
996						try {
997							var gravitoValue = localStorage.getItem('gravito-microprofile-data');
998							if (gravitoValue) {
999								var parsed = parsePossiblyDoubleEncodedJSON(gravitoValue);
1000								if (parsed && parsed.i) {
1001									var migratedPPID = btoa(parsed.i);
1002									if (dfpDebug) {console.log('gmd ls migratedPPID: ', migratedPPID)}
1003									setPPID(migratedPPID);
1004									return;
1005								}
1006							}
1007						} catch (e) {
1008							console.warn('Gravito migration failed:', e);
1009						}
1010
1011						var newPPID = generateNewPPID();
1012						setPPID(newPPID);
1013						if (dfpDebug) {console.log('created a newPPID: ', newPPID)}
1014
1015					})();
1016
1017					//waitForResource('localStorage', 'gravito-microprofile-data').then(function (value) {
1018					//	if (dfpDebug) {console.log('gravito-microprofile-data exists in local storage with value: ', value)}
1019					//	var ppid = btoa(JSON.parse(JSON.parse(value)).i);
1020					//	if (ppid) {
1021					//		googletag.pubads().setPublisherProvidedId(ppid);
1022					//		if (dfpDebug) {console.log('ppid: ' + ppid)}
1023					//	}
1024					//});
1025
1026					googletag.pubads().enableSingleRequest();
1027					googletag.pubads().disableInitialLoad();
1028					googletag.enableServices();
1029					console.timeEnd("timer");
1030
1031					dfpConfig.serviceStarted = true;
1032
1033				})
1034
1035			}
1036
1037			this.initialized = true;
1038			if (dfpDebug) {console.log('DFP initialized...')}
1039
1040		}
1041	}
1042
1043
1044	if (useHBM) {
1045
1046		var rdads = document.createElement('script');
1047		rdads.async = true;
1048		var useSSL = 'https:' == document.location.protocol;
1049		rdads.src = window.dfp.pbConfig[window.dfp.visibility].script;
1050		var node = document.getElementsByTagName('script')[0];
1051		node.parentNode.insertBefore(rdads, node);
1052
1053		var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
1054		if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);}
1055
1056	}
1057
1058	function initDFP(cXsegmentIds) {
1059
1060		//if (dfpDebug) {console.log('cSsegmentIds: ' + cXsegmentIds)}
1061		if( window.dfp !== undefined ) {
1062			if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')}
1063			if (location.href.indexOf("/erotiikka") == -1 && document.location.href.indexOf("/kuvat-ja-videot") == -1) {
1064				setTimeout(function(){
1065					window.dfp.init(cXsegmentIds);
1066				}, 1);
1067				setTimeout(function(){
1068					if (useHBM) {
1069						if (!testSRA) {
1070							if (dfpDebug) {console.log('HBM initialized...')}
1071							if (location.href.indexOf('loadtopad') > -1) {
1072								googletag.pubads().refresh([window.dfp.slotdesk1])
1073							}
1074							initHBM(cXsegmentIds);
1075						}
1076					} else {
1077						if (!testSRA) {
1078							console.log('HBM not in use!!!');
1079							googletag.pubads().refresh();
1080						}
1081					}
1082				}, 1);
1083			}
1084		} else {
1085			console.log('DFP init failed: window.dfp missing!');
1086		}
1087
1088	}
1089
1090	function initHBM(cXsegmentIds) {
1091
1092		if (dfpDebug) {console.log('initHBM called...')}
1093
1094		var hbArticleTags = articleTags != '' ? articleTags.split() : [];
1095		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1096
1097		window.relevantDigital = window.relevantDigital || {};
1098		relevantDigital.cmd = relevantDigital.cmd || [];
1099		relevantDigital.cmd.push(function() {
1100
1101			if (location.href.indexOf('loadtopad') > -1) {
1102
1103				let hasDoneFirstCall;
1104				relevantDigital.addAuctionCallbacks({
1105					onBeforeAuctionSetup: function ({ auction }) {
1106						if (!(window.googletag || {}).pubads) {
1107							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1108							return;
1109						}
1110						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1111							return;
1112						}
1113						hasDoneFirstCall = true;
1114
1115						// Slots to load immediately (without waiting for relevantDigital)
1116						//const TO_LOAD_NOW = ['dfp__desk-1'];
1117						const TO_LOAD_NOW = [];
1118						// Slots to exclude entirely (never loaded)
1119						//const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1'];
1120						const NOT_TO_LOAD_NOW = ['dfp__desk-1'];
1121
1122						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1123						const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId);
1124
1125						const loadNowSlots = [];
1126
1127						googletag.pubads().getSlots().forEach((slot) => {
1128							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1129							if (isLoadNowDiv(divId)) {
1130								loadNowSlots.push(slot);
1131							}
1132						});
1133
1134						if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) {
1135							return; // continue as normal
1136						}
1137
1138						// Requests slots in TO_LOAD_NOW immediately
1139						if (loadNowSlots.length) {
1140							googletag.pubads().refresh(loadNowSlots);
1141						}
1142
1143						// Make sure NOT_TO_LOAD_NOW slots are excluded from the auction
1144						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1145							!isNotToLoadDiv(divId)
1146						);
1147
1148						// Then manually remove them when Relevant is doing the ad request
1149						auction.googletagCalls = auction.googletagCalls || {};
1150						auction.googletagCalls.refresh = (slots, ...rest) => {
1151							const all = slots || googletag.pubads().getSlots();
1152							const toLoad = all.filter((s) =>
1153								!isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots
1154							);
1155							googletag.pubads().refresh(toLoad, ...rest);
1156						};
1157					}
1158				});
1159
1160			}
1161
1162			if (location.href.indexOf('interstitial11') > -1) {
1163
1164				let hasDoneFirstCall;
1165				relevantDigital.addAuctionCallbacks({
1166					onBeforeAuctionSetup: function ({ auction }) {
1167						if (!(window.googletag || {}).pubads) {
1168							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1169							return;
1170						}
1171						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1172							return;
1173						}
1174						hasDoneFirstCall = true;
1175
1176						// Slots to load immediately (without waiting for relevantDigital)
1177						//const TO_LOAD_NOW = ['dfp__desk-1'];
1178						const TO_LOAD_NOW = [];
1179						// Slots to exclude entirely (never loaded)
1180						//const NOT_TO_LOAD_NOW = ['dfp__interstitial_1','dfp__desk-1'];
1181						const NOT_TO_LOAD_NOW = ['dfp__interstitial_1'];
1182
1183						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1184						const isNotToLoadDiv = (divId) => NOT_TO_LOAD_NOW.includes(divId);
1185
1186						const loadNowSlots = [];
1187
1188						googletag.pubads().getSlots().forEach((slot) => {
1189							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1190							if (isLoadNowDiv(divId)) {
1191								loadNowSlots.push(slot);
1192							}
1193						});
1194
1195						if (!loadNowSlots.length && !NOT_TO_LOAD_NOW.length) {
1196							return; // continue as normal
1197						}
1198
1199						// Requests slots in TO_LOAD_NOW immediately
1200						if (loadNowSlots.length) {
1201							googletag.pubads().refresh(loadNowSlots);
1202						}
1203
1204						// Make sure NOT_TO_LOAD_NOW slots are excluded from the auction
1205						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1206							!isNotToLoadDiv(divId)
1207						);
1208
1209						// Then manually remove them when Relevant is doing the ad request
1210						auction.googletagCalls = auction.googletagCalls || {};
1211						auction.googletagCalls.refresh = (slots, ...rest) => {
1212							const all = slots || googletag.pubads().getSlots();
1213							const toLoad = all.filter((s) =>
1214								!isNotToLoadDiv(s.getSlotElementId()) // Exclude NOT_TO_LOAD_NOW slots
1215							);
1216							googletag.pubads().refresh(toLoad, ...rest);
1217						};
1218					}
1219				});
1220
1221			}
1222
1223			if (location.href.indexOf('interstitial22') > -1) {
1224
1225				let hasDoneFirstCall;
1226				relevantDigital.addAuctionCallbacks({
1227					onBeforeAuctionSetup: function ({ auction }) {
1228						if (!(window.googletag || {}).pubads) {
1229							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1230							return;
1231						}
1232						if (hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1233							return;
1234						}
1235						hasDoneFirstCall = true;
1236
1237						// Load all slots associated with these div IDs immediately (without waiting for relevantDigital)
1238						const TO_LOAD_NOW = ['dfp__interstitial_1'];
1239
1240						const isLoadNowDiv = (divId) => TO_LOAD_NOW.includes(divId);
1241						const loadNowSlots = [];
1242
1243						googletag.pubads().getSlots().forEach((slot) => {
1244							const divId = slot.getSlotElementId(); // Get the div ID associated with the slot
1245							if (isLoadNowDiv(divId)) {
1246								loadNowSlots.push(slot);
1247							}
1248						});
1249
1250						if (!loadNowSlots.length) {
1251							return; // continue as normal
1252						}
1253
1254						// Requests slots immediately
1255						googletag.pubads().refresh(loadNowSlots);
1256
1257						// Make sure they're not included in the prebid auction
1258						auction.adUnits = auction.adUnits.filter(({ gamPath, divId }) =>
1259							!isLoadNowDiv(divId)
1260						);
1261
1262						// Then manually remove them when Relevant is doing the ad request
1263						auction.googletagCalls = auction.googletagCalls || {};
1264						auction.googletagCalls.refresh = (slots, ...rest) => {
1265							const all = slots || googletag.pubads().getSlots();
1266							const toLoad = all.filter((s) =>
1267								!isLoadNowDiv(s.getSlotElementId())
1268							);
1269							googletag.pubads().refresh(toLoad, ...rest);
1270						};
1271					},
1272				});
1273
1274			}
1275
1276			if (location.href.indexOf('interstitial33') > -1) {
1277
1278				let hasDoneFirstCall;
1279				relevantDigital.addAuctionCallbacks({
1280					// Code in function below can alternatively be added inside relevantDigital.loadPrebid({ onBeforeAuctionSetup: { ... } })
1281					onBeforeAuctionSetup: function({ auction }) {
1282						if(!(window.googletag || {}).pubads) {
1283							console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1284							return;
1285						}
1286						if(hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1287							return;
1288						}
1289						hasDoneFirstCall = true;
1290
1291						// Load all slots containing these strings in ad unit paths immediately (without waiting for prebid)
1292						const TO_LOAD_NOW = ['desk-1', 'interstitial'];
1293
1294						const isLoadNowPath = (p) => TO_LOAD_NOW.find((s) => p.includes(s));
1295						const loadNowSlots = [];
1296						googletag.pubads().getSlots().forEach((slot) => {
1297							if (isLoadNowPath(slot.getAdUnitPath())) {
1298								loadNowSlots.push(slot);
1299							}
1300						});
1301						if (!loadNowSlots.length) {
1302							return; // continue as normal
1303						}
1304						// Requests slots immediately
1305						googletag.pubads().refresh(loadNowSlots);
1306
1307						// Make sure they're not included in the prebid auction
1308						auction.adUnits = auction.adUnits.filter(({ gamPath }) => !isLoadNowPath(gamPath));
1309
1310						// Then manually remove them when Relevant is doing the ad request
1311						auction.googletagCalls = auction.googletagCalls || {};
1312						auction.googletagCalls.refresh = (slots, ...rest) => {
1313							const all = slots || googletag.pubads().getSlots();
1314							const toLoad = all.filter((s) => !isLoadNowPath(s.getAdUnitPath()));
1315							googletag.pubads().refresh(toLoad, ...rest);
1316						};
1317					},
1318				});
1319
1320			}
1321
1322			relevantDigital.addPrebidConfig({
1323				ortb2: {
1324					site: {
1325						//keywords: contextualIds.join(),
1326						ext: {
1327							data: {
1328								CxContext: Object.values(cxContextualIds),
1329								articleCategories: hbArticleCategories,
1330								articleTags: hbArticleTags
1331							}
1332						}
1333					}
1334				}
1335			});
1336
1337			relevantDigital.loadPrebid({
1338				configId: pbjsConf,
1339				manageAdserver: false, //Manage adserver set to off.
1340				collapseEmptyDivs: true,
1341				collapseBeforeAdFetch: false,
1342				noGpt: true,
1343				allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1344				noSlotReload: true, // set true to only load ad slots that have never been loaded
1345				onBeforeAuctionSetup: function(params) {
1346					params.auction.adUnits.forEach(function(unit) {
1347						unit.bids.forEach(function(bid){
1348							if (bid.bidder == 'appnexus') {
1349								bid.params.keywords = {cxSegments: cXsegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1350								if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1351							}
1352						})
1353					})
1354				}
1355			});
1356
1357			if (location.href.indexOf('testnewcmp=1') > -1) {
1358
1359				const printEvent = (type, ev, adUnitInstance) => {
1360					console.info(`********** ${type} **********`);
1361					console.info('Event: ', ev);
1362					console.info('AdUnitInstance (if any): ', adUnitInstance);
1363					console.info('Is direct rendering: ', ev.directRender);
1364					console.info('Direct rendered bid: ', ev.bid);
1365					console.info('Ad slot: ', ev.slot);
1366					console.info('Is empty: ', ev.isEmpty);
1367				};
1368				relevantDigital.addAdsCallbacks({
1369					slotRequested: (...args) => {
1370						printEvent('slotRequested', ...args);
1371					},
1372					slotResponseReceived: (...args) => {
1373						printEvent('slotResponseReceived', ...args);
1374					},
1375					slotRenderEnded: (ev, data) => {
1376						printEvent('slotRenderEnded', ev, data);
1377					}
1378				});
1379
1380			}
1381
1382		});
1383
1384	}
1385
1386
1387	function loadAdSlot(adSlotId) {
1388
1389		if (location.href.includes('testnewads=1')) {
1390			return;
1391		}
1392
1393		if (dfpDebug) {console.log('HAS: runHeaderbid: ' + adSlotId + ', ' + (Date.now() - timerStart) + 'ms...')}
1394		observerHeaderbidRun = true;
1395
1396		var adUnit = adSlotId.split('__')[1].split('_')[0];
1397
1398		//var hbArticleTags = articleTags != '' ? articleTags.split(',') : [];
1399		var hbArticleTags = articleTags != '' ? articleTags.split(',').map(tag => tag.trim()) : [];
1400		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1401
1402		var takeOver = '', adSlotsNotAllowedForHBM = [];
1403		//if (hbArticleTags.includes('unelmien joulu')) { // exact match
1404		if (hbArticleTags.some(tag => tag.includes('joulu'))) {
1405			useHBM = false;
1406			takeOver = 'unelmien joulu';
1407		}
1408		if (['joulu', 'unelmien joulu'].some(cat => hbArticleCategories.includes(cat))) {
1409			useHBM = false;
1410			takeOver = 'unelmien joulu';
1411		}
1412		if (articleSection == 'unelmien joulu') {
1413			useHBM = false;
1414			takeOver = 'unelmien joulu';
1415		}
1416
1417		//if (!useHBM && takeOver == 'unelmien joulu') {
1418		//	adSlotsNotAllowedForHBM = ['mob-1', 'mob-2', 'desk-1', 'desk-2'];
1419		//	if (dfpDebug) {console.log('HAS: takeOver: ' + takeOver + ', adSlotsNotAllowedForHBM: ' + adSlotsNotAllowedForHBM)}
1420		//}
1421
1422		var slotLocation = adLocation;
1423		if (adUnit.includes('native')) {
1424			slotLocation = 'native';
1425		} else if (adUnit.includes('topad') || adUnit.includes('interstitial')) {
1426			slotLocation = 'content';
1427		}
1428
1429
1430		googletag.cmd.push(function() {
1431
1432			googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId)
1433			.addService(googletag.pubads())
1434			.setTargeting('adslotid', adSlotId.replace('dfp__',''))
1435			.setTargeting('CxContext', cxContextualIds);
1436			if (dfpDebug) {console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + slotLocation + '/' + adUnit)}
1437
1438		});
1439
1440		//if (adUnit.includes('native') || adUnit.includes('interstitial')) {
1441		if (['native', 'interstitial', 'topad-desk', 'desk-1', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot)) || (["tad", "lads"].includes(deliveryType) && !useHBM)) {
1442
1443			googletag.cmd.push(function() {
1444				const slot = googletag.pubads().getSlots().find(s => s.getSlotElementId() === adSlotId);
1445				if (slot) {
1446					googletag.pubads().refresh([slot], {changeCorrelator: false});
1447				}
1448			});
1449
1450		} else {
1451
1452			if (dfpDebug) {
1453				console.log('HAS: Existing slots: ');
1454				googletag.pubads().getSlots().forEach((slot) => {
1455					console.log('HAS: ' + slot.getSlotElementId());
1456				});
1457			}
1458
1459			window.relevantDigital = window.relevantDigital || {};
1460			relevantDigital.cmd = relevantDigital.cmd || [];
1461			relevantDigital.cmd.push(function() {
1462
1463				relevantDigital.addPrebidConfig({
1464					ortb2: {
1465						site: {
1466							//keywords: contextualIds.join(),
1467							ext: {
1468								data: {
1469									CxContext: Object.values(cxContextualIds),
1470									articleCategories: hbArticleCategories,
1471									articleTags: hbArticleTags
1472								}
1473							}
1474						}
1475					}
1476				});
1477
1478				relevantDigital.loadPrebid({
1479					configId: pbjsConf,
1480					manageAdserver: false, //Manage adserver set to off.
1481					collapseEmptyDivs: true,
1482					collapseBeforeAdFetch: false,
1483					noGpt: true,
1484					allowedDivIds: Array.isArray(adSlotId) ? adSlotId : [adSlotId], // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1485					noSlotReload: true, // set true to only load ad slots that have never been loaded
1486					googletagCalls: {
1487						refresh: (slots) => googletag.pubads().refresh(slots, { changeCorrelator: false }),
1488					},
1489					onBeforeAuctionSetup: function(params) {
1490						params.auction.adUnits.forEach(function(unit) {
1491							unit.bids.forEach(function(bid){
1492								if (bid.bidder == 'appnexus' || bid.bidder == 'appnexus_s2s_alias') {
1493									bid.params.keywords = {cxSegments: cxSegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1494									if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1495								}
1496							})
1497						})
1498					}
1499
1500				});
1501			});
1502
1503		}
1504
1505	}
1506
1507
1508	if (location.href.indexOf('interstitial99') > -1) {
1509
1510
1511			let interval = setInterval(function(){
1512				if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
1513					waitForElement("body").then(function(element) {
1514						var aStr = '
1514<script>var interstitialSlot2; googletag.cmd.push(function() {interstitialSlot2 = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_2\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_2\">
1514<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_2\");googletag.pubads().refresh([interstitialSlot2]);});<\/script></div>';
1515						jQuery('#inner-wrapper > div.col-two').before(aStr);
1516						console.log('Interstitial added after timeout...');
1517					});
1518					clearInterval(interval);
1519				}
1520			}, 50);
1521
1522			waitForElement("body").then(function(element) {
1523				var aStr = '
1523<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/frontpage/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
1523<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>';
1524				jQuery('#inner-wrapper > div.col-two').before(aStr);
1525				console.log('Interstitial added...');
1526			});
1527
1528	}
1529
1530/*
1531	if (!location.href.includes('dfptesti')) {
1532
1533		if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
1534			cxSegmentIds = localStorage.getItem("_cX_segmentInfo");
1535		}
1536
1537		initDFP(cxSegmentIds);
1538		console.log('initDFP called with LS_cX_segmentInfo...');
1539
1540	}
1541*/
1542
1543</script>
1543
1544
1545<!-- DFP End -->
1546
1547<style>
1548
1549	#topbar .navi>li>a { padding: 0 6px; letter-spacing: 0; }
1550
1551	.bbp-dfp-slots .grid-item {
1552		padding: 25px 0 0;
1553	}
1554	.clearfix.grid__container.box--full.bbp-dfp-slots {
1555		border: none;
1556	}
1557	@media only screen and (max-width: 768px) {
1558		#bbpress-forums .bbp-body .bbp-reply-author {
1559			min-height: 60px !important;
1560			padding-left: 0 !important;
1561		}
1562		.grid-item2 {
1563			float: none;
1564		}
1565		.clearfix.grid__container.box--full.bbp-dfp-slots .grid-item {
1566			padding: 0;
1567		}
1568		.bbp-dfp-slots .grid-item {
1569			padding: 25px 0;
1570		}
1571	}
1572
1573</style>
1574
1575<!-- Google Tag Manager needs to be here -->
1576<script>
vendor: 327 bytes, lines 1576-1580
1576(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1577new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1578j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1579'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1580})(window,document,'script','dataLayer','
1580GTM-M3VTTX
vendor: 3 bytes, line 1580
1580');
1580</script>
1580
1581<!-- End Google Tag Manager -->
1582
1583<!-- Google Tag Manager -->
1584<script>
vendor: 327 bytes, lines 1584-1588
1584(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1585new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1586j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1587'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1588})(window,document,'script','dataLayer','
1588GTM-TSMVFP56
vendor: 3 bytes, line 1588
1588');
1588</script>
1588
1589<!-- End Google Tag Manager -->
1590
1591<!-- Google Tag Manager -->
1592<script>
vendor: 327 bytes, lines 1592-1596
1592(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1593new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1594j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1595'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1596})(window,document,'script','dataLayer','
1596GTM-T56W3Z7
vendor: 3 bytes, line 1596
1596');
1596</script>
1596
1597<!-- End Google Tag Manager -->
1598
1599<!-- // hymy.fi-->
1600
1601<!-- Head tag end, do not remove -->
1602    <meta name="viewport" content="width=device-width, initial-scale=1.0">
1603<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
1604
1605	<!-- This site is optimized with the Yoast SEO plugin v26.3 - https://yoast.com/wordpress/plugins/seo/ -->
1606	<title>Uutiset - Hymy</title>
1607	<link rel="canonical" href="https://hymy.fi/kategoria/uutiset/">
1608	<link rel="next" href="https://hymy.fi/kategoria/uutiset/page/2/">
1609	<meta property="og:locale" content="fi_FI">
1610	<meta property="og:type" content="article">
1611	<meta property="og:title" content="Uutiset - Hymy">
1612	<meta property="og:url" content="https://hymy.fi/kategoria/uutiset/">
1613	<meta property="og:site_name" content="Hymy">
1614	<meta property="og:image" content="https://hymy.fi/wp-content/uploads/2016/08/hymylogo-1024x710.jpg">
1615	<meta property="og:image:width" content="1024">
1616	<meta property="og:image:height" content="710">
1617	<meta property="og:image:type" content="image/jpeg">
1618	<meta name="twitter:card" content="summary_large_image">
1619	
1619<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://hymy.fi/kategoria/uutiset/","url":"https://hymy.fi/kategoria/uutiset/","name":"Uutiset - Hymy","isPartOf":{"@id":"https://hymy.fi/#website"},"breadcrumb":{"@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb"},"inLanguage":"fi"},{"@type":"BreadcrumbList","@id":"https://hymy.fi/kategoria/uutiset/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Etusivu","item":"https://hymy.fi/"},{"@type":"ListItem","position":2,"name":"Uutiset"}]},{"@type":"WebSite","@id":"https://hymy.fi/#website","url":"https://hymy.fi/","name":"Hymy","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://hymy.fi/haku/?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"}]}</script>
1619
1620	<!-- / Yoast SEO plugin. -->
1621
1622
1623<link rel="dns-prefetch" href="//ajax.googleapis.com">
1624<link rel="dns-prefetch" href="//plausible.io">
1625<link rel="alternate" type="application/rss+xml" title="Hymy &raquo; Uutiset kategorian RSS-syöte" href="https://hymy.fi/kategoria/uutiset/feed/">
1626
1627    
1627<script>
1628      window.AsteikkoMagWidgets = {
1629        siteUrl: "https:\/\/hymy.fi"      };
1630    </script>
1630
1631
1632    <style id="wp-img-auto-sizes-contain-inline-css" type="text/css">
1633img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
1634/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
1635</style>
1636<link rel="stylesheet" id="asteikko-auth-style-css" href="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/css/style.css?ver=3.0.5" type="text/css" media="all">
1637<link rel="stylesheet" id="asmag_widgets_css-css" href="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.css?ver=6.21.2-67928b343a4e93d76879e5e503996d22" type="text/css" media="all">
1638<link rel="stylesheet" id="om-core-css" href="https://hymy.fi/wp-content/themes/om-core/style.css?ver=1790248696" type="text/css" media="all">
1639<link rel="stylesheet" id="om-core-widgets-styles-css" href="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.css?ver=6.9.9" type="text/css" media="all">
1640<style id="wp-block-library-inline-css" type="text/css">
1641:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
1641--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
1642/*wp_block_styles_on_demand_placeholder:6abf5a890f666*/
1643/*# sourceURL=wp-block-library-inline-css */
1644</style>
1645<style id="classic-theme-styles-inline-css" type="text/css">
1646/*! This file is auto-generated */
1647.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
1648/*# sourceURL=/wp-includes/css/classic-themes.min.css */
1649</style>
1650<link rel="stylesheet" id="om-footer-css" href="https://hymy.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0" type="text/css" media="all">
1651<link rel="stylesheet" id="child-style-css" href="https://hymy.fi/wp-content/themes/om-hymy-theme/style.css?ver=6.9.9" type="text/css" media="all">
1652<link rel="stylesheet" id="style_login_widget-css" href="https://hymy.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-single/resources/css/style_login_widget.css?ver=6.9.9" type="text/css" media="all">
1653    
1653<script type="text/javascript" id="om-website-analytics">
1654      analyticsEvent = function() {};
1655      analyticsSocial = function() {};
1656      analyticsVPV = function() {};
1657      analyticsClearVPV = function() {};
1658      analyticsForm = function() {};
1659      window.dataLayer = window.dataLayer || [];
1660      dataLayer.push({"PageType":"Kategoria","PaidUser":false,"UserLevel":"1"});
1661    </script>
vendor: 1 bytes, line 1661
1661
1662<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" id="jquery-js"></script>
vendor: 1 bytes, line 1662
1662
1663<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/plugins.js?ver=1790248696" id="om-core-plugins-js"></script>
vendor: 1 bytes, line 1663
1663
1664<script type="text/javascript" defer data-domain="hymy.fi" data-api="https://plausible.io/api/event" data-cfasync="false" src="https://plausible.io/js/plausible.outbound-links.js?ver=2.3.1" id="plausible-analytics-js"></script>
vendor: 1 bytes, line 1664
1664
1665<script type="text/javascript" id="plausible-analytics-js-after">
1666/* <![CDATA[ */
1667window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }
1668//# sourceURL=plausible-analytics-js-after
1669/* ]]> */
1670</script>
1670
1671<link rel="https://api.w.org/" href="https://hymy.fi/wp-json/"><link rel="alternate" title="JSON" type="application/json" href="https://hymy.fi/wp-json/wp/v2/categories/11355"><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://hymy.fi/xmlrpc.php?rsd">
1672<meta name="generator" content="WordPress 6.9.9">
1673<!-- AWPO lazy-load marker --><meta name="plausible-analytics-version" content="2.3.1">
1674
1675    
1675<script>
1676        var wp_template_url = 'https://hymy.fi/wp-content/themes/om-core';
1677    </script>
1677
1678
1679
1680    
1681    <!-- SSO login related -->
1682    
1682<script type="text/javascript">
1683        window.om = window.om || {};
1684        window.om.wp_nonce = "9b049460a0";
1685        window.om.client_id = "2db43cdc-f69e-4559-9e56-c5694ebacff6";
1686        window.om.client_url = "https://tili.otavamedia.fi";
1687    </script>
1687
1688
1689
1690</head>
1691
1692<body class="archive category category-uutiset category-11355 wp-theme-om-core wp-child-theme-om-hymy-theme blog-1">
1693
1694    <!-- Body tag start, do not remove -->
1695
1696<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1696-1697
1696
1697<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1697GTM-M3VTTX
vendor: 83 bytes, line 1697
1697" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1698<!-- End Google Tag Manager (noscript) -->
1699
1700<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 1700-1701
1700
1701<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1701GTM-TSMVFP56
vendor: 83 bytes, line 1701
1701" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1702<!-- End Google Tag Manager (noscript) -->
1703
1704<!-- Google Tag Manager (noscript) -->
1705<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-T56W3Z7" class="awpo-lazy"></iframe></noscript>
1706<!-- End Google Tag Manager (noscript) -->
1707
1708<script>
1709
1710	if (location.href.includes('dfptesti')) {
1711
1712		if (window.dataLayer) {
1713			dataLayer.forEach(function (dataLayerItem) {
1714				if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) {
1715					articleCategory = dataLayerItem['PrimaryCategory'].toLocaleString().toLowerCase().replace(/, /g, ',');
1716					if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);}
1717				}
1718				if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) {
1719					articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ',');
1720					if (dfpDebug) {console.log('Categories: ' + articleCategories);}
1721				}
1722				if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) {
1723					articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ',');
1724					if (dfpDebug) {console.log('Tags: ' + articleTags);}
1725				}
1726				if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) {
1727					articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ',');
1728					if (dfpDebug) {console.log('ArticleSection: ' + articleSection);}
1729				}
1730			});
1731		} else {
1732			console.error('DataLayer is not defined.')
1733		}
1734
1735		if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
1736			cxSegmentIds = localStorage.getItem("_cX_segmentInfo");
1737		}
1738		initDFP(cxSegmentIds);
1739		console.log('initDFP called with LS_cX_segmentInfo...');
1740
1741	}
1742
1743</script>
1743
1744
1745<!-- Body tag end, do not edit or remove -->
1746    
1746<script>
1747        function getCookie(name) {
1748            var value = "; " + document.cookie;
1749            var parts = value.split("; " + name + "=");
1750            if (parts.length == 2) return parts.pop().split(";").shift();
1751        }
1752
1753        if (getCookie("theme") == "light") {
1754            document.getElementsByTagName("body")[0].classList.add("light");
1755        }
1756    </script>
1756
1757
1758    <div id="additionalBg">
1759        <div id="topbar">
1760            <div class="wrapper--center">
1761
1762    
1763    <span id="mobile-navigation__button" class="fa fa-bars"></span>
1764    <span id="mobile-navigation__search" class="fa fa-search navi__search--button"></span>
1765
1766    
1767    <a class="topbar__logo float--left" href="https://hymy.fi/"></a>
1768
1769    <div id="mobile-scroll">
1770
1771      <div id="navigation--mobilebuttons" class="navi float--right">
1772        <a href="/tilaa" class="float--left">Tilaa</a>
1773<a href="/nakoislehti" class="navi__magazine float--left">Näköislehti</a>
1774
1775<a href="https://hymy.fi/kirjaudu/" title="Kirjaudu" class="navi__user float--left">
1776	Kirjaudu</a>
1777
1778      </div>
1779
1780      <ul id="navigation--primary" class="navi float--left"><li id="menu-item-36689" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-36689"><a href="https://hymy.fi/kategoria/uutiset/" aria-current="page">Uutiset</a></li>
1781<li id="menu-item-692075" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-692075"><a href="https://hymy.fi/kategoria/ilmiot/">Ilmiöt</a></li>
1782<li id="menu-item-690496" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690496"><a href="https://hymy.fi/kategoria/terveys/">Terveys</a></li>
1783<li id="menu-item-690497" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-690497"><a href="https://hymy.fi/kategoria/sotahistoria/">Sotahistoria</a></li>
1784<li id="menu-item-106865" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-106865"><a href="https://hymy.fi/kategoria/horoskooppi/">Horoskooppi</a></li>
1785<li id="menu-item-667255" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-667255"><a href="https://hymy.fi/kategoria/soini-sanoo-suoraan/">Soini sanoo suoraan</a></li>
1786</ul><div id="navigation--secondary" class="navi float--right">
1787
1788  <a href="/nakoislehti" class="navi__magazine float--left" title="Näköislehti">Näköislehti</a>
1789
1790  
1791
1792  <a href="https://hymy.fi/kirjaudu/" class="navi__icon navi__user float--left" title="Kirjaudu">
1793    <i class="fa fa-user"></i>
1794    <span class="display__text--tablet">Kirjaudu</span>
1795  </a>
1796
1797  <a class="navi__icon navi__search--button float--left" title="Haku">
1798    <i class="fa fa-search"></i>
1799  </a>
1800
1801</div>
1802          <div class="navi float--right" id="navigation--some">
1803
1804                          <a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a>
1805                            <a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a>
1806                            <a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a>
1807                          </div>
1808          
1809      <div style="clear:both;"><!-- overflow:hidden; won't work in this case --></div>
1810
1811    </div><!-- mobile-scroll -->
1812  </div><!-- .wrapper--center -->        </div> <!-- topbar -->
1813
1814
1815        <div id="wrapper">
1816            <div id="inner-wrapper">
1817                <div class="widget-area super-widget-area">
1818                                    </div>
1819                <div class="widget-area top-widget-area">
1820
1821                    
1822                </div>
1823
1824                <div class="col-two">
1825		  
1826
1827	<div class="widget-area">
1828
1829		
1830  <div data-template="def50200389132fff570895777387737a2905da87799c4c4d24d836b7d82e8f52a3a9b3775a5bf2e4db222970c7ccd512474b44dd70bfa1ed393e353c781fe47b598373f7586533615e42c451f503da9e9b0061d4c2f98af" data-query="def50200ef0d77c7feb37391e2dd9813d9b9d1d0e19f72fd20f55e53a97ce5e1198638d8633f4222c692b176a20b61afe24f8926c77d414f88b899166f8257b5d77acf345fcd8142a3d787c2acf9d0786acad1558d78e0cedd1fb376147a2994bb6077f74df77cc76bc5a74e1acf6d6a8d2f263f2f361c94b8cfd95e40324080ab2a59a8700971b76d7e91fb67fefb573a41e3823f2c748360cb7e746c1e69bbf1487aa703d52dba04a79c8560cc87cdcd8e70242b9d023bd25bcea80f635f1471da9c4b18ebf0ebe2648b6b1ad2450ecbef0e401ed38b8f4572dd31d974357c7ad4f0dcbbdb448dff28b8e382c3d3cc942b28d22a9329ae35e76705d62c1611f89470614b9a23d55f5b0f1
1830d164e18284612c5bacf1f7ffed40f884911040ff5545a2a" data-hash="6abf5a891c7f6" data-blog="1" data-options="def502000c58e47263a273ad9cf579a8f25749db63549d063aa51ef0040a0cd844bced29aed738f313626499794a25c1f9901bce79db6b1dd99b1eaa9c4fd0218c563dcbcf371d25dae8839ee2adb6732f8f74c89e05" class="postlisting postlisting-6 omwidget om-grid-container two ">
1831
1832    
1833    <ul class="om-grid">
1834          <li class="om-grid-item">
1835
1836        <a href="https://hymy.fi/uutiset/muusikkolegenda-phil-collins-75-kertoo-uudessa-piers-morgan-uncensored-ohjelman-trailerissa-elamansa-synkimmista-hetkista/">
1837            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/10/image-849x1024.png">
1838            </div>
1839        </a>
1840
1841        <div class="om-grid-item__content">
1842          <div class="meta typogr__meta">
1843            <span class="typogr__meta--category">
1844                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1845            </span>
1846          </div>
1847                    <a href="https://hymy.fi/uutiset/muusikkolegenda-phil-collins-75-kertoo-uudessa-piers-morgan-uncensored-ohjelman-trailerissa-elamansa-synkimmista-hetkista/">
1848              <h2>Phil Collins – lapset kutsuttiin sairaalavuoteelle!</h2>
1849
1850              <div class="om-grid-item__excerpt">
1851                <p>Muusikkolegenda&nbsp;Phil Collins, 75, kertoo uudessa Piers Morgan Uncensored -ohjelman trailerissa elämänsä synkimmistä hetkistä. Collins san&hellip;</p>
1852              </div>
1853          </a>
1854
1855          <div class="meta typogr__meta">
1856            
1857            <span class="typogr__meta--date">
1858              02.10.2026            </span>
1859
1860            
1861            
1862          </div>
1863
1864        </div>
1865
1866    </li>
1867    <li class="om-grid-item">
1868
1869        <a href="https://hymy.fi/yleinen/ksml-palsanmaet-harkitsevat-luopumista-jatkajaa-etsitaan/">
1870            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2024/02/VI021706K_01-1-1024x683.jpg">
1871            </div>
1872        </a>
1873
1874        <div class="om-grid-item__content">
1875          <div class="meta typogr__meta">
1876            <span class="typogr__meta--category">
1877                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1878    <a href="https://hymy.fi/kategoria/yleinen/" class=" typogr__catlink">Yleinen</a>
1879            </span>
1880          </div>
1881                    <a href="https://hymy.fi/yleinen/ksml-palsanmaet-harkitsevat-luopumista-jatkajaa-etsitaan/">
1882              <h2>KSML: Palsanmäet harkitsevat luopumista! &#8211; Jatkajaa etsitään!</h2>
1883
1884              <div class="om-grid-item__excerpt">
1885                <p>Aki ja Heli Palsanmäki kertovat Keskisuomalaisen&nbsp;
1885haastattelussa, että he ovat miettineet luopumista toiminnastaan. He ovat alkaneet vähit&hellip;</p>
1886              </div>
1887          </a>
1888
1889          <div class="meta typogr__meta">
1890            
1891            <span class="typogr__meta--date">
1892              02.10.2026            </span>
1893
1894            
1895            
1896          </div>
1897
1898        </div>
1899
1900    </li>
1901    <li class="om-grid-item">
1902
1903        <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/">
1904            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/04/Latelat_012-1024x683.jpg">
1905            </div>
1906        </a>
1907
1908        <div class="om-grid-item__content">
1909          <div class="meta typogr__meta">
1910            <span class="typogr__meta--category">
1911                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1912            </span>
1913          </div>
1914                    <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/">
1915              <h2>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h2>
1916
1917              <div class="om-grid-item__excerpt">
1918                <p>Televisiosta tuttu&nbsp;Sari-Anna ”Sarkku” Huttunen&nbsp;on nyt toimitusjohtaja Tunturiviihde Oy:ssä. Huttunen aloitti 1. lokakuuta uuden pest&hellip;</p>
1919              </div>
1920          </a>
1921
1922          <div class="meta typogr__meta">
1923            
1924            <span class="typogr__meta--date">
1925              01.10.2026            </span>
1926
1927            
1928            
1929          </div>
1930
1931        </div>
1932
1933    </li>
1934    <li class="om-grid-item">
1935
1936        <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/">
1937            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/10/image001-1024x684.jpg">
1938            </div>
1939        </a>
1940
1941        <div class="om-grid-item__content">
1942          <div class="meta typogr__meta">
1943            <span class="typogr__meta--category">
1944                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1945            </span>
1946          </div>
1947                    <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/">
1948              <h2>Katso täältä kohtaukset Aku Louhimiehen Lapin sota -elokuvasta!</h2>
1949
1950              <div class="om-grid-item__excerpt">
1951                <p>Aku Louhimiehen Lapin sota -elokuva tulee elokuvateattereihin 23.10.2026. Katso ohesta näytteet dramaattisesta ja inhimillisestä elokuvasta, j&hellip;</p>
1952              </div>
1953          </a>
1954
1955          <div class="meta typogr__meta">
1956            
1957            <span class="typogr__meta--date">
1958              01.10.2026            </span>
1959
1960            
1961            
1962          </div>
1963
1964        </div>
1965
1966    </li>
1967    <li class="om-grid-item">
1968
1969        <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/">
1970            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2016/09/linna_vankila_kalteri.jpg">
1971            </div>
1972        </a>
1973
1974        <div class="om-grid-item__content">
1975          <div class="meta typogr__meta">
1976            <span class="typogr__meta--category">
1977                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
1978            </span>
1979          </div>
1980                    <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/">
1981              <h2>Kuolemaantuomittu selvisi kahdesta myrkkyruiskeesta – vietiin sairaalaan!</h2>
1982
1983              <div class="om-grid-item__excerpt">
1984                <p>Yhdysvalloissa Tennesseessä tapahtui poikkeuksellinen ja järkyttävä tilanne, kun kuolemaantuomittu&nbsp;Christa Pike, 50, jäi henkiin kahden t&hellip;</p>
1985              </div>
1986          </a>
1987
1988          <div class="meta typogr__meta">
1989            
1990            <span class="typogr__meta--date">
1991              01.10.2026            </span>
1992
1993            
1994            
1995          </div>
1996
1997        </div>
1998
1999    </li>
2000    <li class="om-grid-item">
2001
2002        <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/">
2003            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2023/12/AkiRitaManninen-1024x774.jpg">
2004            </div>
2005        </a>
2006
2007        <div class="om-grid-item__content">
2008          <div class="meta typogr__meta">
2009            <span class="typogr__meta--category">
2010                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2011            </span>
2012          </div>
2013                    <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/">
2014              <h2>Aki ja Rita Manninen puhuvat podissa seksistä: &#8221;Olet se, joka kulkee meistä ilkosilleen kotona&#8221;</h2>
2015
2016              <div class="om-grid-item__excerpt">
2017                <p>Rita Niemi-Manninen ja Aki Manninen ovat avoimina intiimielämästään. He keskustelevat seksistä Sillai kai&nbsp;&#8211;podcastissa. Mikä saa pa&hellip;</p>
2018              </div>
2019          </a>
2020
2021          <div class="meta typogr__meta">
2022            
2023            <span class="typogr__meta--date">
2024              01.10.2026            </span>
2025
2026            
2027            
2028          </div>
2029
2030        </div>
2031
2032    </li>
2033    <li class="om-grid-item">
2034
2035        <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/">
2036            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2023/12/TarjaHalonen-1024x774.jpg">
2037            </div>
2038        </a>
2039
2040        <div class="om-grid-item__content">
2041          <div class="meta typogr__meta">
2042            <span class="typogr__meta--category">
2043                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2044            </span>
2045          </div>
2046                    <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/">
2047              <h2>IS: Tarja Halonen osallistui Seela Sellan hautajaisiin!</h2>
2048
2049              <div class="om-grid-item__excerpt">
2050                <p>Presidentti Tarja Halonen saattoi ystäväänsä Seela Sellaa&nbsp;tämän viimeiselle matkalle. Asiasta kertoo Ilta-Sanomat. – Olin eilen hautajais&hellip;</p>
2051              </div>
2052          </a>
2053
2054          <div class="meta typogr__meta">
2055            
2056            <span class="typogr__meta--date">
2057              01.10.2026            </span>
2058
2059            
2060            
2061          </div>
2062
2063        </div>
2064
2065    </li>
2066    <li class="om-grid-item">
2067
2068        <a href="https://hymy.fi/uutiset/vikingloton-paavoitto-suomeen-miljoonia-euroja/">
2069            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2026/07/image-1-1024x674.png">
2070            </div>
2071        </a>
2072
2073        <div class="om-grid-item__content">
2074          <div class="meta typogr__meta">
2075            <span class="typogr__meta--category">
2076                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2077            </span>
2078          </div>
2079                    <a href="https://hymy.fi/uutiset/vikingloton-paavoitto-suomeen-miljoonia-euroja/">
2080              <h2>Vikingloton päävoitto Suomeen! Miljoonia euroja!</h2>
2081
2082              <div class="om-grid-item__excerpt">
2083                <p>Keskiviikon Vikingloton ainoa täysosuma löytyi Suomesta. Voitto osui kuuden osuuden porukkapeliin. Vikingloton kierroksen 40/2026 oikea rivi o&hellip;</p>
2084              </div>
2085          </a>
2086
2087          <div class="meta typogr__meta">
2088            
2089            <span class="typogr__meta--date">
2090              01.10.2026            </span>
2091
2092            
2093            
2094          </div>
2095
2096        </div>
2097
2098    </li>
2099    <li class="om-grid-item">
2100
2101        <a href="https://hymy.fi/uutiset/lohkomallit-seksuaalirikossarjan-e
2101situtkinta-on-valmistunut-lounais-suomen-poliisi-on-saanut-valmiiksi-turussa-tapahtuneen-seksuaalirikossarjan-esitutkinnan/">
2102            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2021/06/poliisi_2021_1-1024x768.jpg">
2103            </div>
2104        </a>
2105
2106        <div class="om-grid-item__content">
2107          <div class="meta typogr__meta">
2108            <span class="typogr__meta--category">
2109                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2110            </span>
2111          </div>
2112                    <a href="https://hymy.fi/uutiset/lohkomallit-seksuaalirikossarjan-esitutkinta-on-valmistunut-lounais-suomen-poliisi-on-saanut-valmiiksi-turussa-tapahtuneen-seksuaalirikossarjan-esitutkinnan/">
2113              <h2>Seksuaalirikossarjan esitutkinta on valmistunut</h2>
2114
2115              <div class="om-grid-item__excerpt">
2116                <p>Lounais-Suomen poliisi on saanut valmiiksi Turussa tapahtuneen seksuaalirikossarjan esitutkinnan. Poliisi on tutkinut viiden epäillyn seksuaal&hellip;</p>
2117              </div>
2118          </a>
2119
2120          <div class="meta typogr__meta">
2121            
2122            <span class="typogr__meta--date">
2123              30.09.2026            </span>
2124
2125            
2126            
2127          </div>
2128
2129        </div>
2130
2131    </li>
2132    <li class="om-grid-item">
2133
2134        <a href="https://hymy.fi/uutiset/ylojarven-kauraslammen-koulun-tupakkaruudussa-syntyi-nimi-eppu-normaali/">
2135            <div class="grid-item__bg post-image lazy awpo-lazy" style="" data-bg="https://hymy.fi/wp-content/uploads/2025/10/unnamed-18-1024x678.jpg">
2136            </div>
2137        </a>
2138
2139        <div class="om-grid-item__content">
2140          <div class="meta typogr__meta">
2141            <span class="typogr__meta--category">
2142                    <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2143            </span>
2144          </div>
2145                    <a href="https://hymy.fi/uutiset/ylojarven-kauraslammen-koulun-tupakkaruudussa-syntyi-nimi-eppu-normaali/">
2146              <h2>Eppu Normaalille muistolaatta Ylöjärven koulun seinään! &#8211; Tupakkaruudussa syntyi nimi!</h2>
2147
2148              <div class="om-grid-item__excerpt">
2149                <p>Ylöjärven Kauraslammen koulun tupakkaruudussa syntyi nimi: Eppu Normaali. Tuosta on aikaa 50 vuotta. Silloin tuskin bändin perustaneet nuoret &hellip;</p>
2150              </div>
2151          </a>
2152
2153          <div class="meta typogr__meta">
2154            
2155            <span class="typogr__meta--date">
2156              30.09.2026            </span>
2157
2158            
2159            
2160          </div>
2161
2162        </div>
2163
2164    </li>
2165    </ul>
2166
2167        <ul class="om-grid-controls">
2168          <li>
2169        <button class="button om-grid-load-more">Lataa lisää <i style="display:none;" class="loader"></i>
2170       </button>
2171    </li>
2172        </ul>
2173    
2174  </div>
2175
2176        <div id="dfp__mob-2">
2177          
2177<script>window.dfp.displayAdslot('dfp__mob-2')</script>
2177
2178        </div>
2179                <div id="dfp__in-text">
2180          
2180<script>window.dfp.displayAdslot('dfp__in-text')</script>
2180
2181        </div>
2182        
2183	</div>
2184
2185	
2186	<div style="clear: both;"></div>
2187
2188</div>
2189
2190                        
2191<div id="sivupalkki">
2192	<div>
2193		<div class="mainside"></div>
2194	
2195						
2196		<div style="clear:both"></div>
2197		
2198					<div id="secondary" class="widget-area" role="complementary">
2199				
2200				
2201		<div id="tilaa-seuraa" class="om-widget sidebar-block socialmedialinks socialmedialinks-2">
2202			<div class="links">
2203				<a href="/kirjaudu/" class="returnLink">Kirjaudu</a><a href="/tilaa?promoPosition=header-kategoria">Tilaa</a><a href="/ukk/">Ohje</a>			</div>
2204
2205						<div class="some">
2206
2207				<a href="https://www.facebook.com/hymy.fi" target="_blank" title="Facebook" class="fa fa-facebook"></a><a href="https://twitter.com/HymyFI" target="_blank" title="Twitter" class="fa fa-twitter"></a><a href="https://hymy.fi/feed" target="_blank" title="RSS-syöte" class="fa fa-rss"></a>			</div>
2208						<div style="clear:both;"></div>
2209		</div>
2210
2211
2212	        <div id="dfp__rectangle-1">
2213          
2213<script>window.dfp.displayAdslot('dfp__rectangle-1')</script>
2213
2214        </div>
2215        <div class="widget_text sidebar-block"><div class="textwidget custom-html-widget"><!--<div style="text-align: center">	
2216<a href="https://hymy.fi/mainos/tiesitko-taman-kulutusluotosta-vastasimme-vaitteisiin-ja-kumosimme-virheet/"><img src="https://hymy.fi/wp-content/uploads/2024/02/Sortter-2024-helmikuu-Hymy-kuva-01.jpg" border="0"></a></div>--></div></div>
2217      <div class="omwidget sidebar-block magazineorderwidget magazineorderwidget-2">
2218
2219        <a href="https://tilaus.hymy.fi/tilaus?promoID=OM_widget&amp;promoName=OM_HY&amp;promoCreative=onlinetarjous&amp;promoPosition=sidebar">
2220
2221          <div class="magazineorderwidget__content">
2222
2223              <img class="magazineorderwidget__background awpo-lazy" data-src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"><noscript><img class="magazineorderwidget__background" src="https://hymy.fi/wp-content/uploads/2018/03/HY_sivupalkin_myyntiviesti2.jpg"></noscript>
2224
2225              <img class="magazineorderwidget__cover awpo-lazy" data-src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&amp;maxHeight=258"><noscript><img class="magazineorderwidget__cover" src="https://mediapankki.otavamedia.fi/api/v1/covers/hymy/latest.jpg?maxWidth=200&amp;maxHeight=258"></noscript>
2226          </div>
2227
2228        </a>
2229
2230      </div>
2231
2232      <div class="sidebar-block">      <h2 class="block-header_sidebar">Suosituimmat</h2>
2233            <article class="omwidget om-tab-container">
2234
2235  
2236    <ul class="navtabs two">
2237      <li class="active typogr__tab" data-hash="6abf5a896fd0a"><a>Tänään</a></li>
2238      <li class="typogr__tab" data-hash="6abf5a896fe4c"><a>Viikko</a></li>
2239    </ul>
2240
2241
2242  <div data-template="def50200dee9a74be9a6e2618f8f506508fc54b36dacc3cbe084aa2e0fc0c782a7b309fbce7bdabd4359452b59071f14ee6d2b205f91f75b71ab4971d43badb2a3f9eeb3ed36c2766ea9b5d0e210885e572d1992d1c92caf40bf91" data-query="def5020023e6bf96b3b2be7bb698
224200795013dce60801210739c04dd07510bff0241cddcb7d484a50fc5eba3c788e33a7437d2503ea518a2d92455aa589bb3604e5d3998d9522d85972e168bc8859b0705f39ffc2f58a4313c7132838e1c03d617a4f4caab9751f7226f658a4a575a6587375c94f2ed4eba7c2f6cccc0959f2300dfafaceb415b2f98f48a61d7ae571a3c26f8725f80fc59c9b29b75c4bfbfb04ac7b087b14287260d645a4461742571a8c21c24ef2d1fc58da5dc23db3f028d5a11f3963980e913062d2813f75e76391ca533e0c09214b0ef2aaa769ccba4a3be5fe0e3c85d0b82fdf5dd2541d511fd5ecd920f163b5acf7f302a7ec02201274b013846dd3db3626a76c44bad72148169b255978cae9130074e83cd22f8ae205548762123b0839f13b886d1c1244ebf3ff70657adc126a2dcd16d326391624450587d2a1e0694eba15bc5213804aa43cf04c4878" data-hash="6abf5a896fd0a" data-blog="1" data-options="def502009afb50115279a0b9f0a438da9eb67dcbdb94d8d56a6618f824ac6e27cd65c2f27eea44362390c1d0de93b2ceb5fa0310bb1dc7b385cf1b6368505bbf8df56e6f3bc65c7abfe4bfe0305792b23f1a06a35f53" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one  active">
2243
2244    
2245    <ul class="om-grid">
2246      <li class="compact">
2247  <div class="meta typogr__meta">
2248    <span class="compact__cats typogr__catlink">
2249        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2250    </span>
2251    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2252      01.10.2026    </span>
2253  </div>
2254
2255  <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/">
2256    <h3>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h3>
2257  </a>
2258
2259</li>
2260<li class="compact">
2261  <div class="meta typogr__meta">
2262    <span class="compact__cats typogr__catlink">
2263        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2264    </span>
2265    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2266      01.10.2026    </span>
2267  </div>
2268
2269  <a href="https://hymy.fi/uutiset/presidentti-tarja-halonen-saattoi-ystavaansa-seela-sellaa-taman-viimeiselle-matkalle/">
2270    <h3>IS: Tarja Halonen osallistui Seela Sellan hautajaisiin!</h3>
2271  </a>
2272
2273</li>
2274<li class="compact">
2275  <div class="meta typogr__meta">
2276    <span class="compact__cats typogr__catlink">
2277        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2278    </span>
2279    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2280      01.10.2026    </span>
2281  </div>
2282
2283  <a href="https://hymy.fi/uutiset/rita-niemi-manninen-ja-aki-manninen-ovat-avoimina-intiimielamastaan/">
2284    <h3>Aki ja Rita Manninen puhuvat podissa seksistä: &#8221;Olet se, joka kulkee meistä ilkosilleen kotona&#8221;</h3>
2285  </a>
2286
2287</li>
2288<li class="compact">
2289  <div class="meta typogr__meta">
2290    <span class="compact__cats typogr__catlink">
2291        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2292    </span>
2293    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2294      01.10.2026    </span>
2295  </div>
2296
2297  <a href="https://hymy.fi/uutiset/aku-louhimiehen-lapin-sota-elokuva-tulee-elokuvateattereihin-23-10-2026/">
2298    <h3>Katso täältä kohtaukset Aku Louhimiehen Lapin sota -elokuvasta!</h3>
2299  </a>
2300
2301</li>
2302<li class="compact">
2303  <div class="meta typogr__meta">
2304    <span class="compact__cats typogr__catlink">
2305        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2306    </span>
2307    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2308      01.10.2026    </span>
2309  </div>
2310
2311  <a href="https://hymy.fi/uutiset/automaattinen-luonnosyhdysvalloissa-tennesseessa-tapahtui-poikkeuksellinen-ja-jarkyttava-tilanne-kun-kuolemaantuomittu-christa-pike-50-jai-henkiin-kahden-tappavan-ruiskeen-jalkeen/">
2312    <h3>Kuolemaantuomittu selvisi kahdesta myrkkyruiskeesta – vietiin sairaalaan!</h3>
2313  </a>
2314
2315</li>
2316    </ul>
2317
2318    
2319  </div>
2320
2321
2322  <div data-template="def502007deb2306c412e8a1371c3e90ee044e54d87bb093f4eec99d0ab3b7e49da29c4f5bfb817a47d05cf96545eafb103d221a4185f24ea9d9298f327881883dade94c4e84f276099999ca4cd33822fcc704797bfbd2f9248be7" data-query="def502005a0ac484eea39b2a64ebf152a078e22edcbdf9c4929fa583e56a4a3318083681a34ccfdcf3a4b92ee9f13c5c535b8b45e7ecf17c68b815b6eed81bcf2463874cbea89705254bc72b377a639705f3c0b9a24b510a8667306b0c207d54a73e0b47157b3f159f58902ceffd4f9bb4bac31a242a1d9e3b0d4cadeb1d88741281796fc792200df6dc11288d54b9cfdcba2a9e5ffeb797147a6b08be85242fda0a73cd7d48e52bedf3de8905dd01d8bcad9da25a776bf49ed34e5ebf7c42dbb775df1ff4649d25a10f72dd5ee0b154f42b82ce3b34a78c5406e4086a8bb6c2930fb1a41efc7c341b94c32cf3fecc88a93ec464bc6929d4695954c10da357c95e4dc241fad423cc9fd8fc130a59d08a9ec95c65b29cb06bd5e09265b6ce6e34b06c939d69a667c8b4914065a942122140ffb024fc7c0ee216f18c28fc8536a4050937113207dc67cc5229009a3b2efaf7d0fe" data-hash="6abf5a896fe4c" data-blog="1" data-options="def50200f5bfbe2b3382bf6cf13cad454a5fb38e34a0482492c89bacf7195bcb440b8e7d2597a911a06b65704737acae3aa9f56322cc2f92a120fa58cca37b704424a9d8cc60be537f6cf130eaf9d0599880002185d5" class="postlistingwithtabs postlistingwithtabs--1 omwidget om-grid-container one ">
2323
2324    
2325    <ul class="om-grid">
2326      <li class="compact">
2327  <div class="meta typogr__meta">
2328    <span class="compact__cats typogr__catlink">
2329        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2330    </span>
2331    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2332      26.09.2026    </span>
2333  </div>
2334
2335  <a href="https://hymy.fi/uutiset/tuukka-temonen-viettaa-henkilokuntansa-kanssa-karonkkaa/">
2336    <h3>Tuukka Temonen: &#8221;20 385 pizzaa on ihan älytön määrä&#8221;</h3>
2337  </a>
2338
2339</li>
2340<li class="compact">
2341  <div class="meta typogr__meta">
2342    <span class="compact__cats typogr__catlink">
2343        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2344    </span>
2345    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2346      25.09.2026    </span>
2347  </div>
2348
2349  <a href="https://hymy.fi/uutiset/rakennustyomaalla-loytyi-9-miljoonan-euron-kultakatko/">
2350    <h3>Rakennustyömaalla löytyi 9 miljoonan euron kultakätkö!</h3>
2351  </a>
2352
2353</li>
2354<li class="compact">
2355  <div class="meta typogr__meta">
2356    <span class="compact__cats typogr__catlink">
2357        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2358    </span>
2359    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2360      01.10.2026    </span>
2361  </div>
2362
2363  <a href="https://hymy.fi/uutiset/tvsta-tuttu-sari-anna-huttunen-toimitusjohtajaksi-tunturiviihteeseen/">
2364    <h3>TV:stä tuttu Sari-Anna Huttunen toimitusjohtajaksi Tunturiviihteeseen!</h3>
2365  </a>
2366
2367</li>
2368<li class="compact">
2369  <div class="meta typogr__meta">
2370    <span class="compact__cats typogr__catlink">
2371        <a href="https://hymy.fi/kategoria/uutiset/" class=" typogr__catlink">Uutiset</a>
2372    </span>
2373    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2374      27.09.2026    </span>
2375  </div>
2376
2377  <a href="https://hymy.fi/uutiset/pikavippifirma-saa-oikeutta-helposti-ja-halvalla/">
2378    <h3>Velallinen on heikoilla!</h3>
2379  </a>
2380
2381</li>
2382<li class="compact">
2383  <div class="meta typogr__meta">
2384    <span class="compact__cats typogr__catlink">
2385        <a href="https://hymy.fi/kategoria/sotahistoria/" class=" typogr__catlink">Sotahistoria</a>
2386    </span>
2387    <span class="compact__dateandreadcount typogr__meta typogr__meta--date">
2388      26.09.2026    </span>
2389  </div>
2390
2391  <a href="https://hymy.fi/uutiset/jatkosodassa-nuori-kosti-keski-nummi-teki-80-sotalentoa-ja-kavi-55-ilmataistelua/">
2392    <h3>Lentäjä-ässä 
Keski-Nummen 
kauhunhetki taivaalla &#8211; ”Luoti viisti ohimoani!”</h3>
2393  </a>
2394
2395</li>
2396    </ul>
2397
2398    
2399  </div>
2400
2401     </article> 
2402</div>
2403  <div class="widget-imgButton sidebar-block">
2404        <a href="https://hymy.fi/juttuvinkki/" target="_blank">
2405      <img data-src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2016/04/laheta-juttuvinkki.gif"></noscript>
2406    </a>
2407  </div>
2408
2409  
2410  <div class="widget-imgButton sidebar-block">
2411        <a href="http://pubads.g.doubleclick.net/gampad/clk?id=6012526269&amp;iu=/135812570/tracking/click-tracking" target="_blank">
2412      <img data-src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg" class="awpo-lazy"><noscript><img src="https://hymy.fi/wp-content/uploads/2026/09/HYMY_300x300_syksy2.jpg"></noscript>
2413    </a>
2414  </div>
2415
2416  				
2417			</div>
2418		
2419	</div>
2420</div>
2421<div style="clear: both;"></div>
2422</div><!-- #inner-wrapper -->
2423</div><!-- #wrapper -->
2424
2425<footer class="site-footer" id="footer">
2426  
2427<div class="om-footer">
2428    <div class="om-footer__columns">
2429    <div class="om-footer__columns-inner">
2430      <div class="om-footer__column">
2431                  <h2 class="om-footer__column-title">
2432            Asiakaspalvelu          </h2>
2433                          <div class="om-footer__column-content">
2434            <p><span class="label">Digipalvelut</span>(09) 156 6227<br>
2435<span class="label">Avoinna</span>ma–pe 8–19</p>
2436<p>&nbsp;</p>
2437<p><span class="label">Painettu lehti</span>(09) 156 665</p>
2438<p><span class="type label">Avoinna</span>ma–pe 8–19</p>
2439<p>&nbsp;</p>
2440<p><span class="label">Sähköposti (digi)</span> [email protected]</p>
2441<p><span class="label">Sähköposti</span> [email protected]</p>
2442<p>&nbsp;</p>
2443<p><span class="label">Otavamedian vaihde</span> (09) 156 61</p>
2444          </div>
2445              </div>
2446      <div class="om-footer__column">
2447                  <h2 class="om-footer__column-title">
2448            Postiosoite          </h2>
2449                          <div class="om-footer__column-content">
2450            <p>Uudenmaankatu 10<br>
245100015 OTAVAMEDIA</p>
2452<p>&nbsp;</p>
2453<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br>
2454<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br>
2455<a href="#">Evästeasetukset</a></p>
2456          </div>
2457              </div>
2458      <div class="om-footer__column">
2459                  <h2 class="om-footer__column-title">
2460            Mediatiedot          </h2>
2461                          <div class="om-footer__column-content">
2462            <ul class="footer__list">
2463<li><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a></li>
2464<li><a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" rel="nofollow">Tietoa verkon kävijöistä</a></li>
2465<li><a href="https://otavamedia.fi/tietosuoja/" rel="nofollow">Tietosuojaseloste</a></li>
2466<li><a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a></li>
2467</ul>
2468          </div>
2469                          <h2 class="om-footer__column-title">
2470            Tuotteet          </h2>
2471                          <div class="om-footer__column-content">
2472            <ul>
2473<li><a href="https://otavamedia.fi/tuotteet-ja-edut/" rel="nofollow">Aikakauslehdet</a></li>
2474<li><a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut" rel="nofollow">Verkkopalvelut</a></li>
2475<li><a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet" rel="nofollow">Digilehdet</a></li>
2476</ul>
2477          </div>
2478              </div>
2479      <div class="om-footer__column">
2480                  <h2 class="om-footer__column-title">
2481            Toimitus ja lehtitilaus          </h2>
2482                          <div class="om-footer__column-content">
2483            <ul class="footer__list">
2484<li><a href="https://otavamedia.fi/asiakaspalvelu/#omat-tiedot-ja-tilaukset" rel="nofollow">Tilausmuutokset</a></li>
2485<li><a href="/toimituksen-yhteystiedot/#palaute">Palautelomake</a></li>
2486</ul>
2487<p><a class="footer-button" href="/toimituksen-yhteystiedot/">Toimitus</a><br>
2488Sähköpostiosoitteet: [email protected]<br>
2489<a class="footer-button" href="https://hymy.fi/tilaa?promoPosition=footer-etusivu&amp;src=hymy.fi&amp;sid=fd97b1d2-7f45-331b-b8a5-881b7647ff09">Tilaa lehti</a></p>
2490          </div>
2491              </div>
2492    </div>
2493  </div>
2494      <div class="om-footer__logo">
2495        <img width="400" height="174" class="attachment-thumbnail size-thumbnail awpo-lazy" alt="" decoding="async" loading="lazy" data-srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" data-sizes="auto, (max-width: 400px) 100v
2495w, 400px" data-src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png"><noscript><img width="400" height="174" src="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png" class="attachment-thumbnail size-thumbnail" alt="" decoding="async" loading="lazy" srcset="https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-400x174.png 400w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-800x347.png 800w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1024x445.png 1024w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-768x334.png 768w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-1536x667.png 1536w, https://hymy.fi/wp-content/uploads/2024/02/otavamedia_logo_valkoinen-2048x889.png 2048w" sizes="auto, (max-width: 400px) 100vw, 400px"></noscript>    </div>
2496  </div>
2497
2498</footer>
2499
2500
2501<!--[if IE 8]>
2502<div class="if-ie-8">Huom! Sivuston kaikki ominaisuudet eivät välttämättä toimi selaimellasi. Ole hyvä, ja päivitä selaimesi.</div>
2503<![endif]-->
2504
2505<!-- 162 queries in 0,842 seconds. -->
2506<script type="speculationrules">
2507{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/om-hymy-theme/*","/wp-content/themes/om-core/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
2508</script>
2508
2509
2510<script type="text/javascript">
2511  jQuery( function() {
2512    try {
2513      AsteikkoAuth.init( "https:\/\/hymy.fi\/" );
2514    } catch( e ) {
2515      if ( window.console && console.error )
2516        console.error( e );
2517    }
2518  } );
2519</script>
2519			
2519<script>
2520				function convert_to_url(obj) {
2521					return Object
2522					.keys(obj)
2523					.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
2524					.join('&');
2525				}
2526
2527				function pass_to_backend() {
2528					if(window.location.hash) {
2529						var hash = window.location.hash;
2530						var elements = {};
2531						hash.split("#")[1].split("&").forEach(element => {
2532							var vars = element.split("=");
2533							elements[vars[0]] = vars[1];
2534						});
2535						if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) {
2536							if(window.location.href.indexOf("?") !== -1) {
2537								window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements);
2538							} else {
2539								window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements);
2540							}
2541						}
2542					}
2543				}
2544
2545				pass_to_backend();
2546			</script>
2546
2547
2548		
2548<script type="text/javascript" src="https://hymy.fi/wp-content/cache/asauth/fi_blog1.js?ver=84" id="asteikko-auth-lang-fi-js"></script>
vendor: 1 bytes, line 2548
2548
2549<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-auth-otavamedia/js/asteikko-auth.js?ver=3.0.5" id="asteikko-auth-js"></script>
vendor: 1 bytes, line 2549
2549
2550<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.js?ver=6.21.2-0c797b1a9ed13eb8dd863a1165181f5f" id="asmag_widgets_js-js"></script>
vendor: 1 bytes, line 2550
2550
2551<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-core/script.js?ver=1790248696" id="om-core-js-js"></script>
vendor: 1 bytes, line 2551
2551
2552<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/om-widgets-plugin/assets/widgets.js?ver=1" id="om-core-widgets-js-js"></script>
vendor: 1 bytes, line 2552
2552
2553<script type="text/javascript" src="https://hymy.fi/wp-content/plugins/wp-optimizer/assets/dist/awpo.min.js?ver=1722410914" id="awpo-lazyload-js"></script>
vendor: 1 bytes, line 2553
2553
2554<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/plugins.js?ver=6.9.9" id="custom-plugins-js"></script>
vendor: 1 bytes, line 2554
2554
2555<script type="text/javascript" src="https://hymy.fi/wp-content/themes/om-hymy-theme/script.js?ver=6.9.9" id="custom-scripts-js"></script>
2555
2556</div> <!-- / #additionalBg -->
2557<!-- Body end tag start, do not remove -->
2558
2559<script>
2560
2561	//hymy.fi
2562
2563	async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) {
2564		const startTime = Date.now();
2565		for (; !window[variableName]; ) {
2566			if (Date.now() - startTime >= timeoutMs) {
2567				console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`);
2568				return false;
2569			}
2570			await new Promise(resolve => setTimeout(resolve, intervalMs));
2571		}
2572		return true;
2573	}
2574
2575	//jQuery('#inner-wrapper > div.col-two').before(jQuery('#dfp__interstitial'));
2576	//if (dfpDebug) {console.log('Moving interstitial...')}
2577	
2578	jQuery('body').prepend('<div id=\'dfp__interstitial_1\'>
2578<script>window.dfp.displayAdslot(\'dfp__interstitial_1\')<\/script></div>');
2579
2580	if (location.href.indexOf('interstitial2') > -1) {
2581
2582//		let interval = setInterval(function(){
2583//			if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
2584				//var aStr = '
2584<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2584<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");googletag.pubads().refresh([interstitialSlot]);});<\/script></div>';
2585				//var aStr = '
2585<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineOutOfPageSlot(\"/135812570/hymy/content/interstitial\", \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2585<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>';
2586				var aStr = '
2586<script>var interstitialSlot; googletag.cmd.push(function() {interstitialSlot = googletag.defineSlot(\"/135812570/hymy/content/interstitial\", [1, 1], \"dfp__interstitial_1\").addService(googletag.pubads());});<\/script><div id=\"dfp__interstitial_1\">
2586<script>googletag.cmd.push(function() {googletag.display(\"dfp__interstitial_1\");});<\/script></div>';
2587				//jQuery('#inner-wrapper > div.col-two').before(aStr);
2588				jQuery('body').prepend(aStr);
2589				console.log('Interstitial added...');
2590//				clearInterval(interval);
2591//			}
2592//		}, 10);
2593
2594	}	
2595
2596	if (location.href.indexOf('webinterstitial') >= -1) {
2597		waitForVariable2("canRunWebInterstitial", 30000, 1000)
2598		.then((success) => {
2599			if (success) {
2600				if (dfpDebug) {console.log('Defining webinterstitial...')}
2601				var webinterstitialSlot;
2602				googletag.cmd.push(function() {
2603					webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL);
2604					if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot]);}
2605				});
2606			} else {
2607				if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); }
2608			}
2609		})
2610		.catch(error => {
2611			if (dfpDebug) { console.error('Error in waitForVariable2:', error); }
2612		});
2613	}
2614
2615	if (location.href.indexOf('anchorad') > -1) {
2616		if (dfpDebug) {console.log('Anchor ad defined...')}
2617		var anchorSlot;
2618		googletag.cmd.push(function() {
2619			if (document.body.clientWidth <= 500) {
2620				anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2621			} else {
2622				anchorSlot = googletag.defineOutOfPageSlot('/135812570/hymy/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2623			}
2624			if (anchorSlot) {anchorSlot.addService(googletag.pubads())}
2625		});
2626	}
2627
2628	if (window.dfp.visibility == 'mobile') {
2629		jQuery('body').prepend('<div id=\'dfp__topad-mob\'>
2629<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>');
2630	}
2631
2632	if (document.documentElement.clientWidth >= 1020) {
2633		jQuery("#inner-wrapper > div.col-two").before('<div id="dfp__desk-1_1">
2633<script>window.dfp.displayAdslot("dfp__desk-1_1")<\/script></div>');
2634		jQuery('#sivupalkki').find('h2:contains("Suosituimmat")').parent('div').after('<div id="dfp__rectangle-2_2">
2634<script>window.dfp.displayAdslot("dfp__rectangle-2_2")<\/script></div>');
2635		jQuery('#sivupalkki #secondary').append('<div id="dfp__rectangle-2_3">
2635<script>window.dfp.displayAdslot("dfp__rectangle-2_3")<\/script></div>');
2636	}
2637
2638	if (adLocation == 'frontpage') {
2639		
2640		if (document.documentElement.clientWidth < 1020) {
2641			jQuery(".col-two .widget-area .postlisting-3 ul li").eq(0).css('margin-bottom','30px').after('<div id="dfp__mob-1_1">
2641<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2642			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(0).after(jQuery("#dfp__mob-2").css('margin','0px 0px 40px'));
2643			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(2).after('<div id="dfp__mob-2_1">
2643<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2644			jQuery(".col-two .widget-area .postlisting-2 ul li").eq(4).after('<div id="dfp__mob-2_2">
2644<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2645		} else {
2646			//jQuery(".col-two .widget-area .postlisting-2 ul li").eq(1).after(jQuery("#dfp__in-text"));
2647		}
2648
2649	}
2650
2651	if (jQuery('body').hasClass('category-horoskooppi')) {
2652		
2653		if (document.documentElement.clientWidth < 1020) {
2654			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(0).after('<div id="dfp__mob-1_1">
2654<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2655			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(3).after(jQuery("#dfp__mob-2"));
2656			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(6).after('<div id="dfp__mob-2_1">
2656<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2657			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(9).after('<div id="dfp__mob-2_2">
2657<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2658		} else {
2659			jQuery(".col-two .widget-area .postlisting-4 ul li").eq(2).after(jQuery("#dfp__in-text"));
2660		}
2661
2662	} else if (jQuery('body').hasClass('category')) {
2663		
2664		if (document.documentElement.clientWidth < 1020) {
2665			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(0).after('<div id="dfp__mob-1_1">
2665<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2666			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(2).after(jQuery("#dfp__mob-2").css('margin','0px 0px 30px'));
2667			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(4).after('<div id="dfp__mob-2_1">
2667<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2668			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(6).after('<div id="dfp__mob-2_2">
2668<script>window.dfp.displayAdslot("dfp__mob-2_2")<\/script></div>');
2669		} else {
2670			jQuery(".col-two .widget-area .postlisting-6 ul li").eq(3).after('<div></div>').after(jQuery("#dfp__in-text").css('margin-bottom', '30px').css('width','100%'));
2671		}
2672
2673	}
2674
2675	if (adLocation == 'content' && jQuery('body').hasClass('single-post') && location.href.indexOf('testnewads=1') == -1) {
2676
2677		if (document.documentElement.clientWidth < 1020) {
2678
2679			var readMoreIndex = 0;
2680			jQuery('.article__body > p').each(function(index) {
2681				if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') {
2682					readMoreIndex = index;
2683					return false;
2684				}
2685			});
2686			if (dfpDebug) {console.log('readMoreIndex: ' + readMoreIndex)}
2687			var nbrOfParagraphs = jQuery('.article__body > p').length;
2688			var nbrOfContentParagraphs = readMoreIndex > 0 ? nbrOfParagraphs - (nbrOfParagraphs - readMoreIndex) : nbrOfParagraphs;
2689			var mob1AdPlace = nbrOfContentParagraphs > 10 ? 1 : nbrOfContentParagraphs > 5 ? 0 : 0;
2690			if (dfpDebug) {console.log('nop: ' + nbrOfParagraphs + ', nocp: ' + nbrOfContentParagraphs + '. m1ap: ' + mob1AdPlace)}
2691			
2692			if (jQuery(".article__body > p").eq(mob1AdPlace).text().trim().slice(-1) == ">") {mob1AdPlace++}
2693			jQuery(".article__body > p").eq(mob1AdPlace).after('<div id="dfp__mob-1_1">
2693<script>window.dfp.displayAdslot("dfp__mob-1_1")<\/script></div>');
2694	
2695			if (dfpDebug) {console.log('Content p ' + nbrOfContentParagraphs + '. mob-1 after p.eq(' + mob1AdPlace + ')')}
2696			
2697			if (nbrOfContentParagraphs > 8) {
2698	
2699				(function() {
2700					var t = new Date().getTime(); t -= t % (1000*60*60*24*30);
2701					var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true;
2702					l.src = '//otavamedia.bbvms.com/a/hymy.js?t='+t;
2703					var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s);
2704				})();
2705	
2706				var bbwPlace = parseInt(nbrOfContentParagraphs/2);
2707				jQuery(".article__body > p").eq(bbwPlace).after('<div id=\"bbwvideo\"></div>');
2708				if (dfpDebug) {console.log('BBW after p.eq(' + bbwPlace + ')')}
2709	
2710			}
2711	
2712			if (nbrOfContentParagraphs > 4) {
2713				jQuery(".article__body > p").eq(nbrOfContentParagraphs-2).after('<div id="dfp__mob-2_1">
2713<script>window.dfp.displayAdslot("dfp__mob-2_1")<\/script></div>');
2714				if (dfpDebug) {console.log('mob-2 after p.eq(' + (nbrOfContentParagraphs-2) + ')')}
2715			}
2716
2717		} else {
2718			jQuery(".article__body > p").eq(4).after('<div id="dfp__in-text_1">
2718<script>window.dfp.displayAdslot("dfp__in-text_1")<\/script></div>');
2719		}
2720
2721	}
2722
2723	var useDelay = false;
2724	if (location.href.indexOf('usedelay') > -1) {useDelay = true}
2725	if (useDelay) {
2726
2727		if (adLocation == 'content' && document.documentElement.clientWidth < 1020) {
2728			jQuery("#dfp__mob-1, #dfp__mob-2").wrap("<div class='wrapper__mob'><div class='wrapper__mob__inner'></div></div>");
2729			jQuery(".wrapper__mob").css({"min-height": "600px"});
2730			jQuery(".wrapper__mob__inner").css({"position":"-webkit-sticky","position":"sticky","top":"50px"});
2731			//console.log('adLocation: content...');
2732		}
2733		if (document.documentElement.clientWidth >= 1020) {
2734			jQuery("#dfp__sky-scraper-1").wrap("<div class='wrapper__sky-1'></div>");
2735			jQuery("#dfp__sky-scraper-2").wrap("<div class='wrapper__sky-2'></div>");
2736			jQuery(".wrapper__sky-1").css({"min-height": "750px"});
2737			jQuery(".wrapper__sky-2").css({"min-height": "1500px"});
2738			jQuery("#dfp__sky-scraper-1, #dfp__sky-scraper-2").css({"position":"-webkit-sticky","position":"sticky","top":"50px"});
2739		}
2740
2741	}
2742
2743	let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});}
2744	jQuery('#footer a[href=#]').replaceWith('<a href="#" class="manageSettings" onclick="window.gravitoCMP.openPreferences()">Evästeasetukset</a>');
2745
2746	//var rnd = Math.floor(Math.random() * 50);
2747	console.log('rnd: ' + rnd + ', p_rum: ' + cmpGetCookie('p_rum'))
2748
2749	//if (cmpGetCookie('p_rum') != 1 && rnd >= 40) {
2750	if (rnd >= 31) {
2751
2752		console.log('Calling Pingdom rum...');
2753		var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true;
2754		fpa.src = '//rum-static.pingdom.net/pa-5a3bc7dfd31eee00070000c6.js';
2755		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s);
2756
2757	}
2758
2759	if (window.dfp.visibility == 'desktop' || window.dfp.visibility == 'large') {
2760		jQuery("body").append('<iframe srcdoc=\"\
2760<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"hymy.fi\" data-hash=\"347437801fe88859caf76003d7ea5b8b\"><\/iframe>');
2761	}
2762	
2763	var dfpReady = setInterval(function() {
2764		if(window.googletag && googletag.pubadsReady && 1 == 2) {
2765
2766			jQuery(document).ready(function() {
2767
2768				var hasLueLisaa = false;
2769				var paragraphCounter = 0;
2770				//console.log('pCount: ' + jQuery('.article__body > p').length);
2771				jQuery('.article__body > p').each(function() {
2772					if (jQuery(this).text().trim() === 'Lue lisää:' || jQuery(this).text().trim() === 'Lue myös:') {
2773						hasLueLisaa = true;
2774						//jQuery(jQuery(this)).before(jQuery('#dfp__mob-2'));
2775						jQuery('.article__body > .grid--dfp-slots').append('<div style="clear: both"></div>')
2776						jQuery(jQuery(this)).before(jQuery('.article__body > .grid--dfp-slots'));
2777						//var scriptContent = jQuery('.article__body #dfp__rectangle-2').find('script').html();
2778						//var newScriptContent = scriptContent.replace(/dfp__rectangle-2/g, 'dfp__rectangle-2_1');
2779						//jQuery('.article__body #dfp__rectangle-2').find('script').html(newScriptContent);
2780						//jQuery('#dfp__rectangle-2').attr('id', 'dfp__rectangle-2_1');
2781
2782						return false;
2783					}
2784					paragraphCounter++;
2785					//console.log('paragraphCounter: ' + paragraphCounter);
2786				});
2787			
2788				if (hasLueLisaa) {
2789					//console.log('bbbb: ' + (paragraphCounter-1));
2790					var nextParagraphs = (jQuery('.article__body > p').length - (paragraphCounter-1));
2791					//console.log('nextParagraphs: ' + nextParagraphs);
2792					//jQuery('.article__body > p').eq(paragraphCounter+9).before('<p>testi</p>');
2793
2794					var nbrOf2ndAds = 1;
2795					for (i=0;i<=nextParagraphs-1;i++) {
2796						//jQuery('.article__body > p').eq(i).before('<p>testi</p>');
2797						//console.log(i);
2798						jQuery('.article__body > p').eq(i+paragraphCounter).find('a[target="_blank"]').removeAttr('target');
2799						if (document.documentElement.clientWidth < 1020) {
2800							if (i > 0 && i % 7 == 0 && nbrOf2ndAds < 3) {
2801								//console.log('Lisätään mob-2 to p(eq): ' + i);
2802								jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__mob-2_' + nbrOf2ndAds + '">
2802<script>window.dfp.displayAdslot("dfp__mob-2_' + nbrOf2ndAds + '")<\/script></div>');
2803								if (nbrOf2ndAds == 2) {
2804									//break;
2805								}
2806								nbrOf2ndAds++;
2807							}
2808						} else {
2809							if (i > 0 && i % 12 == 0 && nbrOf2ndAds < 2) {
2810								//jQuery('.article__body > p').eq(i+paragraphCounter).before('<div id="dfp__in-text_' + nbrOf2ndAds + '">
2810<script>window.dfp.displayAdslot("dfp__in-text_' + nbrOf2ndAds + '")<\/script></div>');
2811								jQuery('.article__body > p').eq(i+paragraphCounter).before(jQuery('#dfp__in-text'));
2812								if (nbrOf2ndAds == 1) {
2813									//break;
2814								}
2815								nbrOf2ndAds++;
2816							}
2817						}
2818					}
2819				}
2820				
2821			});
2822			clearInterval(dfpReady);
2823	
2824		} else {
2825			//console.log('Checking Again if DFP ready...');
2826		}
2827	}, 100);
2828
2829
2830	if (testSRA) {
2831	
2832		const observers = new Map();
2833		
2834		function observeDFPElements() {
2835			
2836			//const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native'));
2837			const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222');
2838	
2839			targets.forEach(target => {
2840	
2841				target.setAttribute('data-observed', 'true');
2842				//const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1;
2843				let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 0.6;
2844				if (target.getAttribute('id').includes('dfp__native')) {
2845					thresholdValue = 0.3;
2846				};
2847	
2848				let observer = observers.get(thresholdValue);
2849				if (!observer) {
2850					if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`);
2851					//const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`;
2852					const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`;
2853					
2854					observer = new IntersectionObserver(
2855						(entries, obs) => {
2856							entries.forEach(entry => {
2857								if (entry.isIntersecting) {
2858									if (dfpDebug) {
2859										console.log('HAS: entry.boundingClientRect.height: ' + entry.boundingClientRect.height);
2860										console.log('HAS: calling runHeaderbid: ' + entry.target.id);
2861										let distanceFromViewportBottom = window.innerHeight - entry.boundingClientRect.top;
2862										console.log(`HAS: ${entry.target.id} is ${distanceFromViewportBottom.toFixed(0)}px from the bottom of viewport...`);
2863									}
2864									loadAdSlot(entry.target.id);
2865									obs.unobserve(entry.target);
2866								}
2867							});
2868						},
2869						{
2870							root: null, // relative to the viewport
2871							rootMargin: rootMargin,
2872							threshold: 0.0 // Fire as soon as it enters the margin
2873						}
2874					);
2875					observers.set(thresholdValue, observer);
2876				}
2877		
2878				observer.observe(target);
2879				if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue);
2880			});
2881		}
2882		
2883		let debounceTimeout;
2884		function debouncedObserve() {
2885			clearTimeout(debounceTimeout);
2886			debounceTimeout = setTimeout(observeDFPElements, 100);
2887		}
2888	
2889	
2890		var dfpReady = setInterval(function() {
2891			if(window.googletag && googletag.pubadsReady) {
2892				if (dfpDebug) {console.log('DFP ready, starting observation...')}
2893	
2894				observeDFPElements();
2895	
2896				const mutationObserver = new MutationObserver(debouncedObserve);
2897				mutationObserver.observe(document.body, {childList: true, subtree: true});
2898	
2899				clearInterval(dfpReady);
2900	
2901			}
2902		}, 50)
2903	
2904	}
2905
2906
2907	var adslotsDefined = true;
2908
2909
2910	jQuery(function () {
2911	
2912		jQuery('body.single-post .article__body').append('<h3>Lue myös:</h3><ul id="latest-articles"></ul>');
2913	
2914		const FEED_URL = 'https://hymy.fi/wp-json/feeds/uutiset-uusimmat';
2915		const MAX_POSTS = 15;
2916	
2917		const FEED_KEY = 'latestArticlesFeed';
2918		const FEED_TS_KEY = 'latestArticlesFeedTs';
2919		const FEED_TTL = 1000 * 60 * 60; // 1 hour
2920	
2921		const READ_KEY = 'latestReadPostIds';
2922		const READ_TTL = 1000 * 60 * 60 * 24 * 7; // 7 days
2923	
2924		function decodeHtmlEntities(str) {
2925			if (!str) return '';
2926			const txt = document.createElement('textarea');
2927			txt.innerHTML = str;
2928			return txt.value;
2929		}
2930	
2931		function storageAvailable(type) {
2932			try {
2933				const storage = window[type];
2934				const x = '__test__';
2935				storage.setItem(x, x);
2936				storage.removeItem(x);
2937				return true;
2938			} catch (e) {
2939				return false;
2940			}
2941		}
2942	
2943		function getReadPostMap() {
2944	
2945			let readPostMap = {};
2946			if (!storageAvailable('localStorage')) return readPostMap;
2947	
2948			try {
2949				readPostMap = JSON.parse(localStorage.getItem(READ_KEY)) || {};
2950			} catch (e) {
2951				return {};
2952			}
2953	
2954			const now = Date.now();
2955			let changed = false;
2956	
2957			Object.keys(readPostMap).forEach(postId => {
2958				if (now - readPostMap[postId] > READ_TTL) {
2959					delete readPostMap[postId];
2960					changed = true;
2961				}
2962			});
2963	
2964			if (changed) {
2965				localStorage.setItem(READ_KEY, JSON.stringify(readPostMap));
2966			}
2967	
2968			return readPostMap;
2969	
2970		}
2971	
2972		function markPostAsRead(postId) {
2973	
2974			if (!postId || !storageAvailable('localStorage')) return;
2975	
2976			const readPostMap = getReadPostMap();
2977			if (!readPostMap[postId]) {
2978				readPostMap[postId] = Date.now();
2979				localStorage.setItem(READ_KEY, JSON.stringify(readPostMap));
2980			}
2981	
2982		}
2983	
2984		function isPostRead(postId) {
2985			return !!getReadPostMap()[postId];
2986		}
2987	
2988		let currentPostId = null;
2989		if (window.dataLayer && Array.isArray(window.dataLayer)) {
2990			const pageData = window.dataLayer.find(obj => obj.PostId);
2991			if (pageData) {
2992				currentPostId = pageData.PostId;
2993			}
2994		}
2995	
2996		if (currentPostId) {
2997			markPostAsRead(currentPostId);
2998		}
2999	
3000		function getCachedFeed() {
3001	
3002			if (!storageAvailable('sessionStorage')) return null;
3003	
3004			try {
3005	
3006				const feedData = sessionStorage.getItem(FEED_KEY);
3007				const ts = sessionStorage.getItem(FEED_TS_KEY);
3008	
3009				if (!feedData || !ts) return null;
3010	
3011				if (Date.now() - parseInt(ts, 10) > FEED_TTL) {
3012					sessionStorage.removeItem(FEED_KEY);
3013					sessionStorage.removeItem(FEED_TS_KEY);
3014					return null;
3015				}
3016	
3017				return JSON.parse(feedData);
3018	
3019			} catch (e) {
3020				return null;
3021			}
3022	
3023		}
3024	
3025		function cacheFeed(feedData) {
3026			if (!storageAvailable('sessionStorage')) return;
3027			try {
3028				sessionStorage.setItem(FEED_KEY, JSON.stringify(feedData));
3029				sessionStorage.setItem(FEED_TS_KEY, Date.now());
3030			} catch (e) {}
3031		}
3032	
3033		function renderPostList(posts) {
3034	
3035			if (!posts || !posts.length) return;
3036	
3037			const $ul = jQuery('#latest-articles');
3038			if (!$ul.length) return;
3039	
3040			let postsRendered = 0;
3041	
3042			posts.forEach(post => {
3043	
3044				if (postsRendered >= MAX_POSTS) return;
3045				if (post.is_ad) return;
3046				if (post.ID === currentPostId) return;
3047				if (isPostRead(post.ID)) return;
3048	
3049				const $link = jQuery('<a>', {
3050					href: post.url,
3051					text: decodeHtmlEntities(post.title),
3052					class: 'latest-article-link',
3053					'data-postid': post.ID
3054				});
3055	
3056				$link.on('click', function () {
3057	
3058					const postId = jQuery(this).data('postid');
3059					const targetPostId = currentPostId || 0;
3060	
3061					markPostAsRead(postId);
3062	
3063					const cacheBuster = Math.floor(Math.random() * 100000000);
3064					const img = new Image();
3065					img.src =
3066						'https://digitiimi.otavamedia.fi/cc/recom/?siteid=18&typeid=1' +
3067						'&bu=' + encodeURIComponent(location.href) +
3068						'&tu=' + encodeURIComponent(post.url) +
3069						'&cb=' + cacheBuster +
3070						'&pid=' + postId +
3071						'&tpid=' + targetPostId;
3072				});
3073	
3074				const $li = jQuery('<li>').append($link);
3075				$ul.append($li);
3076	
3077				postsRendered++;
3078			});
3079		}
3080	
3081		function init(feedData) {
3082	
3083			if (!feedData || !feedData.posts || !feedData.posts.length) return;
3084	
3085			const posts = feedData.posts.slice().reverse();
3086			renderPostList(posts);
3087	
3088		}
3089	
3090		const cachedFeed = getCachedFeed();
3091	
3092		if (cachedFeed) {
3093			init(cachedFeed);
3094		} else {
3095			jQuery.getJSON(FEED_URL)
3096				.done(function (feedData) {
3097					cacheFeed(feedData);
3098					init(feedData);
3099				});
3100		}
3101	
3102	});
3103
3104</script>
3104
3105
3106<script>
3107
3108	if (document.location.href.indexOf("anchorad=1") > -1) {
3109
3110		//loadAds();
3111		//console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM
3112
3113		var adTestParam = 'anchorad=1';
3114		$("body a").each(function() {
3115			var hrefSrc = $(this).attr('href');
3116			if (hrefSrc != null) {
3117				if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) {
3118					if (hrefSrc.indexOf("?") < 0) {
3119						var ahreffi = hrefSrc + '?' + adTestParam;
3120					} else {
3121						var ahreffi = hrefSrc + '&' + adTestParam;
3122					}
3123					$(this).attr('href',ahreffi);
3124				}
3125			}
3126		});
3127
3128	}
3129
3130</script>
3130
3131
3132<style>
3133
3134	.latest-article-link {
3135		font-size: 15px;
3136	}
3137	ul#latest-articles {
3138		list-style-type: none;
3139		margin: 0;
3140		padding-top: 10px;
3141	}
3142	ul#latest-articles li {
3143		margin-bottom: 5px;
3144	}
3145	ul#latest-articles li:nth-Child(5n+0) {
3146		margin-bottom: 20px;
3147	}
3148	@media screen and (max-width: 768px) {
3149		.latest-article-link {
3150			font-size: 18px;
3151		}
3152		ul#latest-articles li {
3153			margin-bottom: 10px;
3154		}
3155		ul#latest-articles li:nth-Child(5n+0) {
3156			margin-bottom: 30px;
3157		}
3158	}
3159
3160	#verkkopalvelut .footer__services,
3161	#verkkopalvelut #palvelut {
3162		display: none;
3163	}
3164	
3165	#verkkopalvelut .om-logo,
3166	#verkkopalvelut .footer__logo {
3167		margin: 0 auto;
3168		display: block;
3169		float: none;    
3170		max-width:100px;
3171	}
3172	
3173	#verkkopalvelut .footer__logo img {
3174		width: 100%;
3175		max-width:100px;
3176		margin: 0 auto;
3177		display:block;
3178	}
3179	
3180	#verkkopalvelut .om-logo,
3181	#verkkopalvelut {
3182		padding-bottom:0;
3183		padding-top:0;
3184		padding-left:0;
3185		padding-right:0;
3186	}
3187	
3188	#verkkopalvelut .verkkopalvelut-inner {
3189		padding: 30px 0;
3190	}
3191
3192	.bb-float-close-button {
3193		top: -32px !important;
3194		padding: 7px 5px !important;
3195		font-size: 26px !important;
3196	}
3197	.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
3198		right: 8px !important;
3199		bottom: 8px !important;
3200	}
3201	@media screen and (min-width: 880px) {
3202		.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
3203			right: 20px !important;
3204			bottom: 15px !important;
3205		}
3206	}
3207	#dfp__interstitial_1 {
3208		position: fixed;
3209		z-index: 1000000;
3210		width: 1px;
3211		height: 1px;
3212		margin: 0px;
3213		padding: 0px;
3214		left: 0px;
3215		top: 0px;
3216	}
3217
3218</style>
3219
3220<!-- Body end tag end, do not remove --></body>
3221</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.