Gossip & News

Meghan McCain Says ‘RHOBH’ Star Erika ‘Has a Good Heart’


master mentalism tricks

[]

Friends come in all shapes and sizes! Martha Stewart and Snoop Dogg are among two of many celebrities who’ve proven stars don’t have to be similar to become close pals.

The lifestyle guru and “Drop It Like It’s Hot” singer began a lifelong friendship in 2008, after Snoop appeared on Stewart’s show Martha. Their chemistry was easy to see and later sparked their own cooking show, Martha & Snoop’s Potluck Dinner Party.

“This is magic right here,” the rapper told Us Weekly exclusively in April 2019 of his dynamic with Stewart. “It’s a complex world that we live in, but at the same time we love being able to do what we do, like being able to come outside of my box, and to join hands with Martha, and to bring people together.”

Other unlikely duos got their start in childhood, like Gwyneth Paltrow and Maya Rudolph. After their fathers became friends in college, and the actresses attended the same elementary school in California, their bond was cemented for good.

“This week has been real extra-special to me because one of my best friends is on the show now, and I’m so proud of her,” Paltrow gushed about Rudolph while hosting Saturday Night Live in 2001. “She’s super-funny and talented, and I’m so glad she’s in the cast.”

Seven-time Wimbledon champion Serena Williams and actor Colton Haynes’ friendship is one that has been well documented on social media. The two have dressed up for fun parties together and supported one another during big life moments.

{ let bidders = [‘a9’, ‘ix’, ‘iris’]; // create a requestManager to keep track of bidder state to determine when to send ad server // request and what amazonSlots to request from the ad server var requestManager = { adserverRequestSent: false, }; //loop through bidder array and add the bidders to the request manager: bidders.forEach( function( bidder ) { requestManager[bidder] = false; } ); // return true if all bidders have returned function allBiddersBack() { var allBiddersBack = bidders // get the booleans from the object .map( function( bidder ) { return requestManager[bidder]; } ) // get rid of false values – indicates that the bidder has responded .filter( Boolean ) // if length is equal to bidders, all bidders are back .length === bidders.length; return allBiddersBack; } // handler for header bidder responses function headerBidderBack( bidder ) { // return early if request to adserver is already sent if ( requestManager.adserverRequestSent === true ) { return; } // flip bidder back flag if ( bidder === ‘a9’ ) { requestManager.a9 = true; console.log(‘second promise a9 ready’); } else if ( bidder === ‘ix’ ) { requestManager.ix = true; console.log(‘second promise ix ready’); } else if ( bidder === ‘iris’ ) { requestManager.iris = true; console.log(‘second promise iris ready’); } // if all bidders are back, send the request to the ad server if ( allBiddersBack() ) { resolve( url ); } } if ( typeof apstag == ‘object’ && apstag ) { apstag.fetchBids({ slots: [{ slotID: window.prerollTag[vHash], mediaType: ‘video’ }] }, function( bids ) { console.log( “AMI jwp amazon bid callback”, new Date().getTime(), bids ); window.jwpBids[vHash].amazon = true; if ( bids.length > 0 ) { //If we have received any bids back try { console.log(“AMI jwp amazon bid request ad”, bids[0].encodedQsParams); url = url + ‘&scp=’ + bids[0].encodedQsParams; } catch ( e ) { console.log(e); } } else { console.log(“AMI jwp amazon no bids”); } headerBidderBack(‘a9’); }); } else { headerBidderBack(‘a9’); } headertag.cmd.push( function() { headertag.retrieveVideoDemand( [{‘htSlotName’: ‘preroll’}], function( demand ) { console.log( “AMI jwp IX callback”, demand ); if ( ‘undefined’ !== typeof demand.preroll && demand.preroll.length ){ window.jwpBids[vHash].ixBids = demand.preroll[0].targeting.price; console.log( ‘AMI jwp IX Bids’, new Date().getTime(), demand.preroll[0].targeting ); var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } var keys = Object.keys( demand.preroll[0].targeting.price ); for ( var key of keys ) { custParams.set( key, demand.preroll[0].targeting.price[key][0]); } vastParams.set( ‘cust_params’, custParams.toString() ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘ix’); } ); } ); // Get main item context data window.irisContext.getContext(jwplayer(el).getPlaylistItem().mediaid).then(function(data) { // Encode the context data console.log( ‘AMI jwp IrisTV Bids’, new Date().getTime(), data.context ); // Replace the server url with the context data (this is for simple ad requests), // If you have the serverUrl dynamically configured, then you will need to append the context data // under cust_params, so this is just for testing purpose if ( data.context && Object.keys( data.context ).length ) { var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } custParams.set( ‘iris_context’, data.context.join(‘,’)); vastParams.set( ‘cust_params’, decodeURIComponent( custParams.toString() ) ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘iris’); }); setTimeout(function(){ resolve( url ); }, 10000); }); } var player_jwplayer_be0FWRsH_Bk5vyVYE_div = jwplayer(el).setup(videoParams).on(“ready”, function(){ var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var playerInstance = jwplayer(el); ns_.StreamingAnalytics.JWPlayer( playerInstance, { publisherId: “6036076”, labelmapping: “ns_st_pu=”AMI”, c3=”Us Weekly”, ns_st_ge=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ia=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ce=”” + decodeURIComponent( “1” ) + “”, ns_st_ddt=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_tdt=”” + decodeURIComponent( “%2Anull” ) + “””, }); }).on(‘adsManager’, (e) => { var vHash = ‘ami’ + decodeURIComponent( ‘be0FWRsH’ ); const { adsManager, videoElement } = e; const iasConfig = { anId: ‘928572’, campId: `${jwplayer().getWidth()}x${jwplayer().getHeight()}`, // This is dynamic based on player dimensions, but can be hard coded chanId: window.prerollTag[vHash], placementId: ‘Open Auction’, pubOrder: ‘Video’, pubId: ‘Direct’ }; if (googleImaVansAdapter) { googleImaVansAdapter.init(window.google, adsManager, videoElement, iasConfig); } }).on( ‘time’, function( e ) { var id = this.id; var pct = Math.round( e.position ); if ( ! window.amiPlayersData ) { window.amiPlayersData = {}; } if ( ! window.amiPlayersData[id] ) { window.amiPlayersData[id] = { m3: false, m10: false }; } if ( window.amiPlayersData[id][‘m3’] === false && pct >= 3 ) { window.amiPlayersData[id][‘m3’] = true; console.log( ‘3sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ‘3s played’} ); } if ( window.amiPlayersData[id][‘m10’] === false && pct >= 10 ) { window.amiPlayersData[id][‘m10’] = true; console.log( ’10sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ’10s played’} ); } }).on( ‘complete’, function( e ) { if ( window.amiPlayersData && window.amiPlayersData[ this.id ] ) { window.amiPlayersData[ this.id ][‘m3’] = false; window.amiPlayersData[ this.id ][‘m10’] = false; console.log( ‘clear played: ‘, this.id ); } }).once(“play”, function(){ var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var playerInstance = jwplayer(el); loadIrisPlugin(playerInstance, playerInstance.getConfig().plugins[“https://ovp.iris.tv/plugins/jwplayer/v2/iris-jwplayer8.adaptive.min.js”]) }).on(‘play’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language:”English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video play”); }).on(‘complete’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoComplete”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video event:”, e); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; }).on(‘time’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.currentTime/e.duration).toFixed(2); if ( (0.25 === progress && false === window.lock_25) || (0.5 === progress && false === window.lock_50) || (0.75 === progress && false === window.lock_75) || (100 === progress && false === window.lock_100) ) { window.permutive.track(“VideoProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 === progress ) { window.lock_25 = true; } if ( 0.5 === progress ) { window.lock_50 = true; } if ( 0.75 === progress ) { window.lock_75 = true; } if ( 1 === progress ) { window.lock_100 = true; } console.log(“Permutive video play progress ” + progress); } }).on(‘mute’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.mute) ? “sound off” : “sound on”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘fullscreen’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.fullscreen) ? “fullscreen on” : “fullscreen off”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘ready’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); console.log(jwInfo); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; window.permutive.track(“VideoLoad”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video load event”); }).on(‘adPlay’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); window.adInfo = e; var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.adlock_25 = false; window.adlock_50 = false; window.adlock_75 = false; window.adlock_100 = false; window.permutive.track(“VideoAdPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad play”); }).on(‘adClick’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoAdClick”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad click”); }).on(‘adTime’, (e) => { var el = decodeURIComponent( “jwplayer_be0FWRsH_Bk5vyVYE_div” ); var vHash = “ami” + decodeURIComponent( “be0FWRsH” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.position/e.duration).toFixed(2); if ( (0.25 >= progress && false === window.adlock_25) || (0.5 >= progress && false === window.adlock_50) || (0.75 >= progress && false === window.adlock_75) || (0.95 >= progress && false === window.adlock_100) ) { window.permutive.track(“VideoAdProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “be0FWRsH” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 >= progress ) { window.adlock_25 = true; } if ( 0.5 >= progress ) { window.adlock_50 = true; } if ( 0.75 >= progress ) { window.adlock_75 = true; } if ( 0.95 >= progress ) { window.adlock_100 = true; } console.log(“Permutive video ad progress ” + progress); } }).setPlaylistItemCallback(function(item, index) { return waitForAmazon // Wait until Amazon is loaded. .then(() => performAsyncBidding( player_jwplayer_be0FWRsH_Bk5vyVYE_div, item, index ), () => { console.log(“AMI JWP bidding FAILER”); }) // External bidding. .then(tag => { // Update the playlist item. console.log(“AMI jwp new headerbid”, tag); return Object.assign({}, item, { adschedule: [{ tag, offset: “pre” }] }); }).catch(function(e){ console.log(“AMI jwp bidding failed”, e); return item; }); // If bidding fails, use unmodified playlist item. });; clearInterval(checkJWReady); } }, 500); })(); ]]>

“My favorite lil songbird welcomed her 1st baby into the world today,” Haynes wrote via Instagram in September 2017, after Williams became a mom. “I am so proud of you my love @serenawilliams . Uncle Coco is reporting for duty  You always continue to amaze me. I love you.”

Beginning in 2012, John Mayer and Andy Cohen’s bromance caused many to ask if they were more than just friends.

“I think that I was not surprised because we also have a great love for each other,” the Watch What Happens Live host told CNN in 2018. “So, it just seems like the obvious assumption.”

The pals, who have vacationed together in Montana and celebrated birthdays with one another over the years, agree that their relationship is special … but it’s platonic.

“In conclusion, I love you, and you are such a special person that I’m sure you are known throughout the universe,” Mayer wrote in June 2018 in honor of Cohen’s 50th birthday.

Scroll down to see which celebrities have the most unlikely friendships.

Read The Full Article Here


trick photography
Why Mickey Rourke Didnt Pay ,000 in Rent Before Eviction
Why Mickey Rourke Didnt Pay $60,000 in Rent Before Eviction
Ronda Rousey Net Worth: How Much Money the Fighter Makes
Ronda Rousey Net Worth: How Much Money the Fighter Makes
Why Mingus Reedus Assault Charges Could Be Dropped
Why Mingus Reedus Assault Charges Could Be Dropped
Kathie Lee Gifford, Hoda Kotb Have Hilarious Today Reunion
Kathie Lee Gifford, Hoda Kotb Have Hilarious Today Reunion
Steven Spielbergs Disclosure Day Trailer Previews UFO Movie Starring Emily Blunt
Steven Spielbergs Disclosure Day Trailer Previews UFO Movie Starring Emily Blunt
Oscars Increase Security Amid FBI Warnings About Potential Attack
Oscars Increase Security Amid FBI Warnings About Potential Attack
How To Make A Killing review – social satire with no bite
How To Make A Killing review – social satire with no bite
Nobody 3 & 4 Update Is Good & Bad News for R-Rated Action Franchise
Nobody 3 & 4 Update Is Good & Bad News for R-Rated Action Franchise
Nancy Guthrie Bedroom Video May Have Helped Kidnapper, Says Megyn Kelly
Nancy Guthrie Bedroom Video May Have Helped Kidnapper, Says Megyn Kelly
Scrubs Boss Clarifies How Many Kids J.D. Has In Revival – TVLine
Scrubs Boss Clarifies How Many Kids J.D. Has In Revival – TVLine
Kelly Clarkson Bashes American Idol for Lying Over Prizes for Winning Show
Kelly Clarkson Bashes American Idol for Lying Over Prizes for Winning Show
Casting News: Doc Adds Blair Underwood, Kate Walshs CBS Comedy Pilot, And More – TVLine
Casting News: Doc Adds Blair Underwood, Kate Walshs CBS Comedy Pilot, And More – TVLine
Why A2IM Started an RIAA-Style Sales Certification Program for Indie Artists
Why A2IM Started an RIAA-Style Sales Certification Program for Indie Artists
Metallica Fans Left Confused By Hilarious South Park Funko Mix-Up
Metallica Fans Left Confused By Hilarious South Park Funko Mix-Up
Iceage Release Star, First New Single in Five Years
Iceage Release Star, First New Single in Five Years
Dionne Warwick Claims Rights Firm Stole Millions in Royalties
Dionne Warwick Claims Rights Firm Stole Millions in Royalties
Interview with Megan Freitas, Author of The Green Widow – NewInBooks
Interview with Megan Freitas, Author of The Green Widow – NewInBooks
New Mystery and Thriller Books to Read | March 10 – NewInBooks
New Mystery and Thriller Books to Read | March 10 – NewInBooks
Business Books for Ambitious Readers Ready to Level Up – NewInBooks
Business Books for Ambitious Readers Ready to Level Up – NewInBooks
Young Adult Reads Full of Friendship, Love, and Discovery – NewInBooks
Young Adult Reads Full of Friendship, Love, and Discovery – NewInBooks
Feel-Good Street Style: How Our Editors Wear UGGs in 2026
Feel-Good Street Style: How Our Editors Wear UGGs in 2026
'90s Grunge Is Back, Plus 8 Other Fall 2026 Fashion Trends to Know
'90s Grunge Is Back, Plus 8 Other Fall 2026 Fashion Trends to Know
Everything to Know About the "Love Is Blind" Engagement Rings
Everything to Know About the "Love Is Blind" Engagement Rings
Spotted at NYFW—6 Shoe Trends Fashion People Are Actually Wearing in 2026
Spotted at NYFW—6 Shoe Trends Fashion People Are Actually Wearing in 2026
STRANGER THINGS Joe Davisons Sorority of the Damned SCREAMING on AMAZON | HNN
STRANGER THINGS Joe Davisons Sorority of the Damned SCREAMING on AMAZON | HNN
FIRST LOOK: Mary Shelleys Christmas Nightmares Summons Old-Hollywood Horror in Debut Feature From De Havilland Pictures | HNN
FIRST LOOK: Mary Shelleys Christmas Nightmares Summons Old-Hollywood Horror in Debut Feature From De Havilland Pictures | HNN
OFFICIAL TRAILER NOW LIVE!! – NIGHT PATROL Starring Jermaine Fowler, Justin Long, CM Punk, YG, Flying Lotus, Dermot Mulroney – In Theaters January 16, 2026 | HNN
OFFICIAL TRAILER NOW LIVE!! – NIGHT PATROL Starring Jermaine Fowler, Justin Long, CM Punk, YG, Flying Lotus, Dermot Mulroney – In Theaters January 16, 2026 | HNN
Hazels Heart (2025) Screening at ARTQUEST | HNN
Hazels Heart (2025) Screening at ARTQUEST | HNN