Exploring New WinForm Controls in VS .NET Whidbey

he WinForm controls provided by the .NET Framework 1.1 are extremely useful, and the framework for developing new custom controls provided in 1.1 is very strong, but sometimes the development community expects more out-of-the box. Many needs of the development community are satisfied by the basic collection of WinForm controls while some developers have voiced their need for more functionality. Microsoft appears ready to rise to the occasion with the inclusion of many new WinForm controls.

The set of user controls that are an integral part of Microsoft’s development environments provide the baseline for rapid application development (RAD). Every release of the IDE brings new controls to accelerate the development of user-friendly GUIs. Microsoft has seemed content with providing a strong set of base controls, and a framework allowing the development community and third-party Independent Software Vendors (ISVs) to tackle the really heavy lifting in developing complex controls.

Microsoft is starting to break with that strategy with Visual Studio .NET and really follows through with the new controls that appear in the Toolbox of the alpha build of Whidbey. The new controls include everything from data-centric, to layout-oriented containers, to significantly improved versions of existing controls. A few new controls plug up holes in the existing user control line-up.

It is probable that many new or improved WinForm controls covered in this article will change, perhaps dramatically, as Whidbey progresses from alpha through beta to the final release, and new controls could surface. What you can expect for sure is that the quality, ease-of-use, and RAD characteristics of the new WinForm controls will continue to increase beyond the already impressive alpha.

Simplifying Common Tasks

A Better Toolbar

A More Powerful ListView

Figure 4. Update ListView Control: The ListView control is significantly improved, adding features including individual ListViewItem tooltips and owner-draw support.

The ListView control is already very flexible. It supports multiple views, including LargeIcon and SmallIcon, and the ability to automatically add checkboxes to items in the Items collection. Several missing features are being added to both the ListView and TreeView classes. You can control how each individual item within the ListView is drawn by setting the OwnerDraw property to True and then handle the DrawItem event of the ListView.

If you want to specify item-specific tooltips, you can set the ShowItemToolTips property to True and set individual ToolTipText values for each instance of a ListViewItem that you add to the Items collection. Both techniques are shown in Figure 4.

There is a new grouping feature using the ListViewGroup class that allows ListViewItems within a ListView class to be grouped according to custom settings and visually associated with each other when the View property of the ListView class is set to any value other than List. ListView groups are available only on Windows XP and Windows Server 2003.

Active Document Editing
You’ll use the new ActiveDocumentHost class to display and edit in-place assorted active documents directly from your Windows application. Examples of active documents include rich text-format files and Office documents. You will use the ActiveDocumentHost class to load documents initially in static read-only mode.

Figure 5. The ActiveDocumentHost Class: This class simplifies viewing and editing active documents.

The ActiveDocumentHost class provides some very powerful features. You can set the DrawMode property to Normal, Stretch, or Zoom to control the display mode when the document is inactive. You can set the ActivationGesture property to Click, DoubleClick, Focus, or Never to control which action switches the document to edit mode. You can use the ShowMenus and ShowToolbars properties to modify the look of the document when active and you can set the Tooltarget property to the object that houses the toolbars when the document is active.

As shown in Figure 5, all the toolbars, menu bars, and appropriate editing elements of the original application are hosted in the Windows application, and the document itself becomes editable. The originating application must be installed on the local computer in order to host a document within an instance of the ActiveDocumentHost class

Finally! A Managed WebBrowser
The strength of the COM interoperability services in the .NET Framework is excellent. Despite the strength of the APIs and the flexibility of Visual Studio .NET for hiding how complex it can be to use the System.Runtime.InteropServices namespace, you most likely found that using complex COM objects or ActiveX controls can produce less than perfect results in some cases. The WebBrowser object found in Shdocvw.dll is a fair example. This ActiveX component provides the Web page and HTML visual rendering services of Internet Explorer. Through COM interop, it was trivial to use this browser component on a WinForm application, but a few desirable features did not exist, or were complicated to implement.

The new managed WebBrowser class is found in the System.Windows.Forms namespace and extends the functionality provided by the underlying ActiveX control. The rendering behavior did not change, but events have been cleaned up and reorganized, and additional information is available in certain events. Many new properties provide functionality not easily accessible through the underlying browser component.

The WebBrowser class exposes several core navigation events you can handle to process the loading of a document. The primary navigation-related events, in chronological order, are:

  • Navigating
  • Navigated
  • DocumentCompleted

The Navigating event can be cancelled if desired conditions do not exist. The Navigating event wraps and replaces the BeforeNavigate2 event of the underlying component, which was not handled correctly when using a generic COM-interop assembly wrapper. You can use the Stop method to cancel any active loading operation and the Refresh method to force the WebBrowser class to load the desired document.

Navigation is initiated by the WebBrowser object whenever one of the following methods is executed:

  • Navigate
  • GoBack
  • GoForward
  • GoHome
  • GoSearch
  • A more complete list of methods provided by the WebBrowser class is provided in Table 1

Table 1: The WebBrowser methods provide core navigation and dialog box display features expected in a browsing control.

Method name

Description

GoBack

Navigates to the previous document in the navigation list if one exists. The return value indicates whether a previous entry is available.

GoForward

Navigates to the subsequent document in the navigation list if one exists. The return value indicates whether a subsequent entry is available.

GoHome

Navigates to the Home page configured by Internet Explorer.

GoSearch

Navigates to the Search page configured by Internet Explorer.

Navigate

Basic navigation method used to initiate navigation to a document found at the specified URL

Print

Sends the currently loaded document to the printer as specified by the current default printer settings

Refresh

Reloads the document currently displayed in the WebBrowser control by checking the server for an updated version

ShowPageSetupDialog

Opens the Internet Explorer Page Setup dialog box

ShowPrintDialog

Opens the Internet Explorer Print dialog box

ShowPrintPreviewDialog

Opens the Internet Explorer Print Preview dialog box

ShowPropertiesDialog

Opens the Internet Explorer Page Properties dialog box

ShowSaveAsDialog

Opens the Internet Explorer Save As dialog box

Stop

Cancels any pending navigation and stops any dynamic page elements, such as background sounds and animations.

Navigation is also initiated when one of the following properties is changed:

  • Url
  • DocumentText
  • DocumentStream
Figure 6. Using the Managed WebBrowser: The new managed WebBrowser class wraps and significantly extends the features previously requiring a generic COM-interop assembly, wrapping the WebBrowser ActiveX control found in shdocvw.dll.

The DocumentCompleted event is your primary mechanism for processing a loaded Web page. When handling this event, you access the Web page contents through the Document, DocumentText, or DocumentStream properties. Manually setting the DocumentText or DocumentStream properties causes the WebBrowser class to first navigate to about:blank. This provides a fully instantiated document object to hold the page contents.

By using the same icons found on the Internet Explorer toolbars, I approximated the look of Internet Explorer. This is a simple example of leveraging the WebBrowser control to create a custom browser application. An example of combining a couple of WinBar controls and a WebBrowser control onto a form is shown in Figure 6.

The FileDownload event should be handled to execute code before the Internet Explorer File Download dialog box is displayed. You should handle this event if you want to cancel a file download operation. If you want to cancel the loading of a new browser window, handle the NewWindow event that is raised before a new browser window is opened. Additional events provided by the WebBrowser class are listed in Table 2.

Table 2: WebBrowser events provide critical feedback on the navigation process to allow the implementation of all the standard visual indicators to the application user.

Event name

Description

CanGoBackChanged

Changing the CanGoBack property raises this event.

CanGoForwardChanged

Changing the CanGoForward property raises this event.

DocumentCompleted

Raised when the WebBrowser control finishes loading a document. This is the primary event used to process Web pages after loading.

DocumentTitleChanged

Changing the DocumentTitle property raises this event.

EncryptionLevelChanged

Navigating to or away from a Web site that uses encryption raises this event.

FileDownload

Raised before the WebBrowser control begins downloading

Navigated

Raised after the WebBrowser control has navigated to a new document but before it has begun loading

Navigating

Raised before the WebBrowser control navigates to a new document

NewWindow

Raised before a new browser window is opened

ProgressChangedEvent

Raised when the WebBrowser control has updated information on the download progress of a document it is navigating to. Typically used to modify a progress bar.

The WebBrowser class provides several properties used to leverage extended functionality that is enhanced beyond the behavior directly exposed by the underlying browser component through generic COM-interop wrappers. The AllowWebBrowserDrop property is set to True to allow the WebBrowser object to automatically navigate to and load a document dragged and dropped onto the control. Set this property to False to disable it. Set the ScriptErrorsSuppressed property to True to disable the display of the scripting error dialog box in response to errors raised within script embedded in a Web page being loaded.

If you want to disable user interaction with the WebBrowser control and the loaded document, use the IsWebBrowserContextMenuEnabled and WebBrowserShortcutsEnabled properties. Set these properties to False to disable the most common methods of user/Web page interaction. Additional properties of the WebBrowser class are listed in Table 3.

Table 3: The WebBrowser class exposes many useful properties, including many extended properties beyond the core set provided by the underlying Internet Explorer component.

Property name

Description

AllowWebBrowserDrop

Controls whether the WebBrowser control automatically loads and renders a document dropped onto it. Set to False to assist in concealing the use of the WebBrowser control. Default value is True.

CanGoBack

Indicates whether a previous entry in the navigation list exists. If True, the WebBrowser control can successfully navigate to a previous location.

CanGoForward

Indicates whether a subsequent entry exists in the navigation list. If True, the WebBrowser control can navigate to the next location in the list.

Document

An HtmlDocument object representing the document currently loaded. The HtmlDocument provides an HTML document object model view of the page and allows programmatic manipulation of the HTML items contained in the Web page.

DocumentStream

A Stream object used to get or set the contents of the page currently loaded in the WebBrowser control

DocumentText

Represents the HTML contents of the page displayed in the WebBrowser control. A value of “” is returned or used when no document is loaded.

DocumentTitle

Read-only value representing the title of the Web page, as defined by the HTML element. Often used to set the text value in the title bar of a form.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>DocumentType</p> </td> <td align="left" valign="top" bgcolor="white"> <p>The Multipurpose Internet Mail Extensions (MIME) type of the document loaded in the WebBrowser control.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>IsBusy</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Indicates whether a new document is currently loading</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>IsOffline</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Indicates whether the WebBrowser control is in offline mode. In offline mode, pages are loaded from the local cache.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>IsWebBrowserContextMenuEnabled</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Determines whether the standard context menu normally displayed when right-clicking on a Web page is shown by the WebBrowser control. Set to False to control user interactions with the loaded document.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>ObjectForScripting</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Determines the object accessible by scripting code contained within a Web page loaded in the WebBrowser control.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>ReadyState</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Indicates the current state of the WebBrowser control. Used to provide more information than the IsBusy property.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>ScriptErrorsSuppressed</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Indicates whether the WebBrowser control should display scripting error dialog boxes or suppressed them.</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>Url</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Location of the currently loaded document</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>Version</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Retrieves the version of Internet Explorer installed</p> </td> </tr> <tr> <td align="left" valign="top" bgcolor="white"> <p>WebBrowserShortcutsEnabled</p> </td> <td align="left" valign="top" bgcolor="white"> <p>Retrieves or sets whether keyboard shortcuts are enabled within the WebBrowser control</p> </td> </tr> </table> <p>If you want to enable two-way communication between managed code and client-side script contained within a Web page, use the <span class="pf">ObjectForScripting</span> property. Set this property to the object you want referenced by any Web page scripting code when a reference to <span class="pf">window.external</span> is made in the script. The <span class="pf">window.external</span> object is a built-in DOM object that provides access to the host application of the Web page. Specifically, this provides the page script with a late-bound reference to a managed object and enables communication from the Web page to a managed object.</p> <p>To make the communication channel two-way, you use the <span class="pf">Document</span> property of the WebBrowser instance. This property is an <em>HtmlDocument</em> object instance and provides a managed wrapper around the COM-based MSHTML library. This library is also known as the Microsoft HTML Object Library and it provides you with access to elements within the Web page through the document object model, completing the two-way programmatic communication channel. Use the <span class="pf">System.Windows.Forms.InvokeScript</span> method to directly script methods provided by the Web page.</p> <p><strong>New Container Controls</strong></p> <table border="0" cellspacing="0" cellpadding="5" align="right" width="250"> <tr> <td valign="top"><a href="JavaScript:showSupportItem('figure7');"><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAABnAQMAAAAjeh6HAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAABNJREFUGBljGAWjYBSMglEwSAEABaIAAarBHO8AAAAASUVORK5CYII=" width="101" height="103" data-src="/assets/articlefigs/9153.jpg" class="lazyload" data-eio-rwidth="101" data-eio-rheight="103"><noscript><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="/assets/articlefigs/9153.jpg" width="101" height="103" data-eio="l"></noscript></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="JavaScript:showSupportItem('figure7');">Figure 7</a>. The SplitContainer Class: This class simplifies the common task of combining Panel controls with a Splitter to achieve a segmented container.</td> </tr> </table> <p>Whidbey includes several new controls that provide advanced layout services. Three new container controls are provided to you to simplify three different control layout scenarios: SplitContainer, FlowLayoutPanel, and TableLayoutPanel.</p> <p><em><strong>Simplifying Form Design</strong></em><br />The <em>SplitContainer</em> control, shown in <strong><a href="JavaScript:showSupportItem('figure7');">Figure 7</a></strong>, combines several controls and docking settings commonly used in a single composite control, saving many steps in the development of complex forms. A common task in designing forms is to use controls that could share a vertical or horizontal space. The existing Splitter control allows an application user to adjust the division of space separating sections of a container control, such as a Panel class. Use the SplitContainer control to eliminate the need to perform these combined steps multiple times.</p> <p>The SplitContainer class provides several properties to modify the behavior of an instance of the control. Use the <span class="pf">FixedPanel</span> property to select which panel in the control should not resize as the SplitContainer instance resizes. Set the <span class="pf">SplitterDistance</span> and <span class="pf">Orientation</span> properties to control the direction and starting location of the splitter bar. The <span class="pf">Panel1MinSize</span> and <span class="pf">Panel2MinSize</span> properties are used to specify the minimum size of the SplitterPanel instances in the SplitContainer, effectively controlling how close the splitter bar can be placed to either edge of the control.</p> <p><strong>Reducing Control Layout Code</strong></p> <table border="0" cellspacing="0" cellpadding="5" align="right" width="300"> <tr> <td valign="top"><a href="JavaScript:showSupportItem('figure8');"><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADcAQMAAAAY8+yZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAABxJREFUGBntwTEBAAAAwiD7p14Gf2AAAAAAAHAIFlgAAdIDb1QAAAAASUVORK5CYII=" width="194" height="220" data-src="/assets/articlefigs/9154.jpg" class="lazyload" data-eio-rwidth="194" data-eio-rheight="220"><noscript><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="/assets/articlefigs/9154.jpg" width="194" height="220" data-eio="l"></noscript></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="JavaScript:showSupportItem('figure8');">Figure 8</a>. The FlowLayoutPanel and TableLayoutPanel: These classes provide a combination of container control and positional layout services while differing on the positional logic implemented.</td> </tr> </table> <p>Two closely related controls, the <span class="pf">FlowLayoutPanel</span> and <span class="pf">TableLayoutPanel</span> classes, extend the Panel class by adding specific child control positioning logic. Use either of these controls to implement a very specific set of child control layout scenarios. In simple scenarios, as shown in <strong><a href="JavaScript:showSupportItem('figure8');">Figure 8</a></strong>, the result of using either control may not be uniquely distinguishable from the other.</p> <p>The FlowLayoutPanel class, mentioned in the Whidbey documentation as the FlowPanel class, is used as a container control when the child controls added are dynamically repositioned to flow in a particular direction. The FlowLayoutPanel automatically positions all child controls in the direction indicated by the value of the <span class="pf">FlowDirection</span> property. You can leave the <span class="pf">WrapContents</span> property set to the default value of <span class="pf">True</span> to force the controls to stay within the boundaries of the SplitContainer class by starting a new row or column, depending on the value of the <span class="pf">FlowDirection</span> property. In <strong><a href="JavaScript:showSupportItem('figure9');">Figure 9</a></strong>, a FlowLayoutPanel control with a <span class="pf">FlowDirection</span> value of <span class="pf">Horizontal</span> moves the controls when one of the child controls is increased in size.</p> <p>The <em>TableLayoutPanel</em> class, mentioned in the Whidbey documentation as the GridPanel<strong> </strong>class, implements different positioning logic than the <em>FlowLayoutPanel</em> class. The <span class="pf">FlowDirection</span> and <span class="pf">WrapContents</span> property of the FlowLayoutPanel are replaced with integer-based <span class="pf">Columns</span> and <span class="pf">Rows</span> properties. The TableLayoutPanel class implicitly positions child controls in a table format, which, assuming default values of 0 for both Columns and Rows, mimics a FlowLayoutPanel instance with <span class="pf">FlowDirection</span> set to <span class="pf">Horizontal</span> and <span class="pf">WrapContents</span> set to <span class="pf">True</span>. </p> <table border="0" cellspacing="0" cellpadding="5" align="right" width="300"> <tr> <td valign="top"><a href="JavaScript:showSupportItem('figure9');"><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADcAQMAAAAY8+yZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAABxJREFUGBntwTEBAAAAwiD7p14Gf2AAAAAAAHAIFlgAAdIDb1QAAAAASUVORK5CYII=" width="194" height="220" data-src="/assets/articlefigs/9155.jpg" class="lazyload" data-eio-rwidth="194" data-eio-rheight="220"><noscript><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="/assets/articlefigs/9155.jpg" width="194" height="220" data-eio="l"></noscript></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="JavaScript:showSupportItem('figure9');">Figure 9</a>. The TableLayoutPanel Class: This class maintains a structured approach to repositioning child controls and the FlowLayoutPanel class offers a more lenient set of positioning rules.</td> </tr> </table> <p>You set either <span class="pf">Columns</span> or <span class="pf">Rows</span> to a non-zero positive value to limit the cells in either dimension of the table. Increasing the size of a child control shifts the cell size in the table containing the child control to accommodate the larger child control, as shown in <strong><a href="JavaScript:showSupportItem('figure9');">Figure 9</a></strong>. This pushes other child controls away from the growing control.</p> <p>An exception is raised if you set values for <span class="pf">Columns</span> and <span class="pf">Rows</span> that combine to produce too few cells in the table to hold all the child controls. The TableLayoutPanel class provides <span class="pf">ColumnStyles</span> and <span class="pf">RowStyles</span> properties. Use these collection-based properties to modify sizing properties at the individual row and column level.</p> <p><strong>Miscellaneous New Features</strong><br />Of all the enhancements introduced to WinForm controls in Whidbey, the most useful are sometimes the least obvious. Many enhancements are not as obvious as the SplitContainer or the addition of owner-drawn functionality to the ListView and TreeView classes.</p> <table border="0" cellspacing="0" cellpadding="5" align="right" width="300"> <tr> <td valign="top"><a href="JavaScript:showSupportItem('figure10');"><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAACRAQMAAADO2AdUAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAABpJREFUGBntwQEBAAAAgqD+r3ZIwAAAAAC4FhIgAAHpE3J2AAAAAElFTkSuQmCC" width="244" height="145" data-src="/assets/articlefigs/9156.jpg" class="lazyload" data-eio-rwidth="244" data-eio-rheight="145"><noscript><img loading="lazy" loading="lazy" decoding="async" border="0" alt="" src="/assets/articlefigs/9156.jpg" width="244" height="145" data-eio="l"></noscript></a></td> <td width="12"> <!-- MOLONGUI AUTHORSHIP PLUGIN 5.2.9 --> <!-- https://www.molongui.com/wordpress-plugin-post-authors --> <div class="molongui-clearfix"></div><div class="m-a-box lazyload" data-box-layout="slim" data-box-position="below" data-multiauthor="false" data-author-id="1" data-author-type="user" data-author-archived=""><div class="m-a-box-container"><div class="m-a-box-tab m-a-box-content m-a-box-profile lazyload" data-profile-layout="layout-1" data-author-ref="user-1" itemscope itemid="https://www.devx.com/author/devx-admin/" itemtype="https://schema.org/Person"><div class="m-a-box-content-top"></div><div class="m-a-box-content-middle"><div class="m-a-box-item m-a-box-avatar" data-source="local"><a class="m-a-box-avatar-url" href="https://www.devx.com/author/devx-admin/"><img alt='' src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWAQMAAAAGz+OhAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAABpJREFUGBntwTEBAAAAwiD7p14ND2AAAMC9AAu4AAHGdJuwAAAAAElFTkSuQmCC" class="avatar avatar-150 photo lazyload" height='150' width='150' itemprop= "image" data-src="https://secure.gravatar.com/avatar/31090e436d407f8356b48602d9147a71655425f30edb3b141a3d14e4ef58d949?s=150&d=mp&r=g" decoding="async" data-srcset="https://secure.gravatar.com/avatar/31090e436d407f8356b48602d9147a71655425f30edb3b141a3d14e4ef58d949?s=300&d=mp&r=g 2x" data-eio-rwidth="150" data-eio-rheight="150" /><noscript><img alt='' src='https://secure.gravatar.com/avatar/31090e436d407f8356b48602d9147a71655425f30edb3b141a3d14e4ef58d949?s=150&d=mp&r=g' srcset='https://secure.gravatar.com/avatar/31090e436d407f8356b48602d9147a71655425f30edb3b141a3d14e4ef58d949?s=300&d=mp&r=g 2x' class='avatar avatar-150 photo' height='150' width='150' itemprop= "image" data-eio="l" /></noscript></a></div><div class="m-a-box-item m-a-box-data"><div class="m-a-box-name"><h5 itemprop="name"><a class="m-a-box-name-url " href="https://www.devx.com/author/devx-admin/" itemprop="url"> Charlie Frank</a></h5></div><div class="m-a-box-bio" itemprop="description"><p>Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.</p></div></div></div><div class="m-a-box-content-bottom"></div></div></div></div><style> .lwrp.link-whisper-related-posts{ } .lwrp .lwrp-title{ }.lwrp .lwrp-description{ } .lwrp .lwrp-list-container{ } .lwrp .lwrp-list-multi-container{ display: flex; } .lwrp .lwrp-list-double{ width: 48%; } .lwrp .lwrp-list-triple{ width: 32%; } .lwrp .lwrp-list-row-container{ display: flex; justify-content: space-between; } .lwrp .lwrp-list-row-container .lwrp-list-item{ width: calc(20% - 20px); } .lwrp .lwrp-list-item:not(.lwrp-no-posts-message-item){ } .lwrp .lwrp-list-item img{ max-width: 100%; height: auto; object-fit: cover; aspect-ratio: 1 / 1; } .lwrp .lwrp-list-item.lwrp-empty-list-item{ background: initial !important; } .lwrp .lwrp-list-item .lwrp-list-link .lwrp-list-link-title-text, .lwrp .lwrp-list-item .lwrp-list-no-posts-message{ }@media screen and (max-width: 480px) { .lwrp.link-whisper-related-posts{ } .lwrp .lwrp-title{ }.lwrp .lwrp-description{ } .lwrp .lwrp-list-multi-container{ flex-direction: column; } .lwrp .lwrp-list-multi-container ul.lwrp-list{ margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; } .lwrp .lwrp-list-double, .lwrp .lwrp-list-triple{ width: 100%; } .lwrp .lwrp-list-row-container{ justify-content: initial; flex-direction: column; } .lwrp .lwrp-list-row-container .lwrp-list-item{ width: 100%; } .lwrp .lwrp-list-item:not(.lwrp-no-posts-message-item){ } .lwrp .lwrp-list-item .lwrp-list-link .lwrp-list-link-title-text, .lwrp .lwrp-list-item .lwrp-list-no-posts-message{ }; }</style> <div id="link-whisper-related-posts-widget" class="link-whisper-related-posts lwrp"> <h2 class="lwrp-title">Related Posts</h2> <div class="lwrp-list-container"> <ul class="lwrp-list lwrp-list-single"> <li class="lwrp-list-item"><a href="https://www.devx.com/devx-daily-news/microsoft-edge-faster-performance-and-no-more-activex/" class="lwrp-list-link"><span class="lwrp-list-link-title-text">Microsoft Edge: Faster Performance and No More ActiveX</span></a></li><li class="lwrp-list-item"><a href="https://www.devx.com/how-tos/how-to-empty-trash-on-android-2/" class="lwrp-list-link"><span class="lwrp-list-link-title-text">How To Empty Trash On Android</span></a></li><li class="lwrp-list-item"><a href="https://www.devx.com/how-tos/how-to-leave-group-text-on-android/" class="lwrp-list-link"><span class="lwrp-list-link-title-text">How To Leave Group Text On Android</span></a></li><li class="lwrp-list-item"><a href="https://www.devx.com/devx-daily-news/ibm-launches-spark-based-cloud-development-environment/" class="lwrp-list-link"><span class="lwrp-list-link-title-text">IBM Launches Spark-Based Cloud Development Environment</span></a></li><li class="lwrp-list-item"><a href="https://www.devx.com/news/challenges-and-excitement-in-cities-skylines-2-development/" class="lwrp-list-link"><span class="lwrp-list-link-title-text">Challenges and Excitement in Cities: Skylines 2 Development</span></a></li> </ul> </div> </div> </div> </div> <div class="elementor-element elementor-element-9809e6b elementor-align-right elementor-widget elementor-widget-button" data-id="9809e6b" data-element_type="widget" data-e-type="widget" data-widget_type="button.default"> <div class="elementor-widget-container"> <div class="elementor-button-wrapper"> <a class="elementor-button elementor-button-link elementor-size-sm" href="https://www.devx.com/disclosure/"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-icon"> <svg aria-hidden="true" class="e-font-icon-svg e-far-money-bill-alt" viewBox="0 0 640 512" xmlns="http://www.w3.org/2000/svg"><path d="M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z"></path></svg> </span> <span class="elementor-button-text">Disclosure</span> </span> </a> </div> </div> </div> <div class="elementor-element elementor-element-b24b1f0 elementor-widget elementor-widget-heading lazyload" data-id="b24b1f0" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">About Our Editorial Process</h2> </div> </div> </div> </div> </div> </section> <div class="elementor-element elementor-element-bf49e8d elementor-widget elementor-widget-text-editor" data-id="bf49e8d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p>At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.</p><p>See our full <a href="https://www.devx.com/publication-guidelines/">editorial policy</a>.</p> </div> </div> <div class="elementor-element elementor-element-39bd7056 elementor-grid-1 elementor-posts--thumbnail-left elementor-grid-tablet-1 elementor-grid-mobile-1 load-more-align-center elementor-widget elementor-widget-posts lazyload" data-id="39bd7056" data-element_type="widget" data-e-type="widget" data-settings="{"classic_columns":"1","classic_row_gap":{"unit":"px","size":0,"sizes":[]},"pagination_type":"load_more_on_click","classic_columns_tablet":"1","classic_columns_mobile":"1","classic_row_gap_tablet":{"unit":"px","size":"","sizes":[]},"classic_row_gap_mobile":{"unit":"px","size":"","sizes":[]},"load_more_spinner":{"value":"fas fa-spinner","library":"fa-solid"}}" data-widget_type="posts.classic"> <div class="elementor-widget-container"> <div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid" role="list"> <article class="elementor-post elementor-grid-item post-113290 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-ai-coding-agents tag-anthropic-computer-use tag-claude-opus-5-5 tag-computer-use tag-copilot-cli tag-github-copilot" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/uncategorized/what-is-github-copilot-computer-use/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="196" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADEAQMAAAAf045tAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14ND2AAAAAAAAAA3Asd3AABHt6b/QAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113292 lazyload ewww_webp_lazy_load" alt="black and white penguin toy; GitHub Copilot Computer Use" data-src="https://www.devx.com/wp-content/uploads/wx2l8l-fgea-300x196.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="196" data-src-webp="https://www.devx.com/wp-content/uploads/wx2l8l-fgea-300x196.jpg.webp" /><noscript><img loading="lazy" width="300" height="196" src="https://www.devx.com/wp-content/uploads/wx2l8l-fgea-300x196.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113292" alt="black and white penguin toy; GitHub Copilot Computer Use" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/what-is-github-copilot-computer-use/" > What Is GitHub Copilot Computer Use? GitHub’s New Desktop Agent Explained </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 23, 2026 </span> <span class="elementor-post-time"> 8:08 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113301 post type-post status-publish format-standard has-post-thumbnail hentry category-development category-uncategorized tag-continuous-integration tag-saas tag-software-releases" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/uncategorized/saas-software-releases-bottleneck/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113305 lazyload ewww_webp_lazy_load" alt="software releases" data-src="https://www.devx.com/wp-content/uploads/pexels-dkomov-34804017-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-dkomov-34804017-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/pexels-dkomov-34804017-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113305" alt="software releases" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/saas-software-releases-bottleneck/" > The SaaS Release Bottleneck: Why Faster Development Doesn’t Always Mean Faster Delivery </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 22, 2026 </span> <span class="elementor-post-time"> 3:41 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113294 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-accreditation tag-online-graduate-programs tag-online-masters-degree" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/uncategorized/choosing-an-online-graduate-program-accreditation-flexibility-support-and-what-you-should-know/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113299 lazyload ewww_webp_lazy_load" alt="online graduate program" data-src="https://www.devx.com/wp-content/uploads/image1-12-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/image1-12-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/image1-12-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113299" alt="online graduate program" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/choosing-an-online-graduate-program-accreditation-flexibility-support-and-what-you-should-know/" > Choosing an Online Graduate Program: Accreditation, Flexibility, Support and What You Should Know.  </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> John Rampton </span> <span class="elementor-post-date"> October 22, 2026 </span> <span class="elementor-post-time"> 3:08 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113286 post type-post status-publish format-standard has-post-thumbnail hentry category-tech-trends tag-bloom-security tag-github-actions tag-npm tag-oidc tag-slugfest tag-trusted-publishing" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/tech-trends/what-is-slugfest-npm-trusted-publishing-vulnerability/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113288 lazyload ewww_webp_lazy_load" alt="person typing on silver MacBook; npm Trusted Publishing vulnerability" data-src="https://www.devx.com/wp-content/uploads/kuqqarjjuw0-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/kuqqarjjuw0-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/kuqqarjjuw0-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113288" alt="person typing on silver MacBook; npm Trusted Publishing vulnerability" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/tech-trends/what-is-slugfest-npm-trusted-publishing-vulnerability/" > What Is SlugFest, the npm Trusted Publishing Vulnerability? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Deanna Ritchie </span> <span class="elementor-post-date"> October 22, 2026 </span> <span class="elementor-post-time"> 1:00 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113281 post type-post status-publish format-standard has-post-thumbnail hentry category-coding tag-agent-sandboxing tag-ai-coding-agents tag-developer-tools tag-github-copilot tag-pillar-security tag-visual-studio-code tag-vs-code" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/coding/what-is-vs-code-agent-sandboxing/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="225" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADhAQMAAABIshroAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwQEBAAAAgJD+r+4IAgAAAAAAAACAGiJHAAHTJKXHAAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113284 lazyload ewww_webp_lazy_load" alt="A software developer working on code at a dual monitor setup in a modern office.; VS Code agent sandboxing" data-src="https://www.devx.com/wp-content/uploads/36706459-300x225.jpeg" decoding="async" data-eio-rwidth="300" data-eio-rheight="225" data-src-webp="https://www.devx.com/wp-content/uploads/36706459-300x225.jpeg.webp" /><noscript><img loading="lazy" width="300" height="225" src="https://www.devx.com/wp-content/uploads/36706459-300x225.jpeg" class="elementor-animation-grow attachment-medium size-medium wp-image-113284" alt="A software developer working on code at a dual monitor setup in a modern office.; VS Code agent sandboxing" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/coding/what-is-vs-code-agent-sandboxing/" > What Is VS Code Agent Sandboxing? Microsoft’s New AI Agent Security Layer Explained </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Steve Gickling </span> <span class="elementor-post-date"> October 21, 2026 </span> <span class="elementor-post-time"> 12:44 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113268 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai tag-artificial-analysis tag-claude-opus-5-5 tag-gpt-6-astra tag-meta-muse-wonder tag-meta-superintelligence-labs tag-muse-code" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/artificial-intelligence-ai/meta-muse-wonder-pricing-benchmarks-developers/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113271 lazyload ewww_webp_lazy_load" alt="Meta Muse Wonder" data-src="https://www.devx.com/wp-content/uploads/pexels-julio-lopez-75309646-17614479-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-julio-lopez-75309646-17614479-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/pexels-julio-lopez-75309646-17614479-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113271" alt="Meta Muse Wonder" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/meta-muse-wonder-pricing-benchmarks-developers/" > Meta Muse Wonder: Pricing, Benchmarks, and What It Means for Developers </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 20, 2026 </span> <span class="elementor-post-time"> 7:56 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113263 post type-post status-publish format-standard has-post-thumbnail hentry category-coding tag-ci-cd tag-dependabot tag-devsecops tag-github-actions tag-supply-chain-security tag-workflow-lockfiles" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/coding/github-actions-workflow-lockfiles-explained/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113266 lazyload ewww_webp_lazy_load" alt="GitHub Actions workflow lockfiles" data-src="https://www.devx.com/wp-content/uploads/pexels-realtoughcandy-11035539-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-realtoughcandy-11035539-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/pexels-realtoughcandy-11035539-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113266" alt="GitHub Actions workflow lockfiles" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/coding/github-actions-workflow-lockfiles-explained/" > What Are GitHub Actions Workflow Lockfiles? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Deanna Ritchie </span> <span class="elementor-post-date"> October 19, 2026 </span> <span class="elementor-post-time"> 9:52 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113256 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai tag-artificial-analysis tag-grok-voice-3-0 tag-spacexai tag-speech-to-speech-models tag-voice-agent-api tag-xai" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/artificial-intelligence-ai/what-is-grok-voice-3-0-xai-speech-to-speech-model/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="188" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAC8AQMAAAD4ogHBAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14LL2AAAAAAAAAARwEcpAABGsVsKwAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113172 lazyload ewww_webp_lazy_load" alt="a close up of a keyboard with a blue button; Grok Voice 3.0" data-src="https://www.devx.com/wp-content/uploads/deci5gh0r0k-1-300x188.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="188" data-src-webp="https://www.devx.com/wp-content/uploads/deci5gh0r0k-1-300x188.jpg.webp" /><noscript><img loading="lazy" width="300" height="188" src="https://www.devx.com/wp-content/uploads/deci5gh0r0k-1-300x188.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113172" alt="a close up of a keyboard with a blue button; Grok Voice 3.0" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/what-is-grok-voice-3-0-xai-speech-to-speech-model/" > What Is Grok Voice 3.0? xAI’s New Speech-to-Speech Model Explained </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Steve Gickling </span> <span class="elementor-post-date"> October 16, 2026 </span> <span class="elementor-post-time"> 10:27 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113228 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/googles-gemini-argon-wins-through-reach-not-revolution/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-23374 lazyload ewww_webp_lazy_load" alt="DevX - Software Development Resource" data-src="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-23374" alt="DevX - Software Development Resource" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/googles-gemini-argon-wins-through-reach-not-revolution/" > Google’s Gemini Argon Wins Through Reach, Not Revolution </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Joe Rothwell </span> <span class="elementor-post-date"> October 15, 2026 </span> <span class="elementor-post-time"> 10:50 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113237 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai tag-amazon-q-developer tag-claude-code tag-cursor tag-cwe-61 tag-ghostapproval tag-windsurf tag-wiz-research" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/artificial-intelligence-ai/what-is-ghostapproval-vulnerability-ai-coding-assistants/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-113240 lazyload ewww_webp_lazy_load" alt="GhostApproval vulnerability" data-src="https://www.devx.com/wp-content/uploads/pexels-traveliving-5829726-300x200.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-traveliving-5829726-300x200.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/pexels-traveliving-5829726-300x200.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113240" alt="GhostApproval vulnerability" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/what-is-ghostapproval-vulnerability-ai-coding-assistants/" > What Is the GhostApproval Vulnerability in AI Coding Assistants? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> October 15, 2026 </span> <span class="elementor-post-time"> 8:09 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113204 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/startup-challenges-doordash-with-1-delivery-fee/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113203 lazyload ewww_webp_lazy_load" alt="startup challenges doordash delivery fee" data-src="https://www.devx.com/wp-content/uploads/startup_challenges_doordash_delivery_fee-1791897698-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/startup_challenges_doordash_delivery_fee-1791897698-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/startup_challenges_doordash_delivery_fee-1791897698-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113203" alt="startup challenges doordash delivery fee" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/startup-challenges-doordash-with-1-delivery-fee/" > Startup Challenges DoorDash With $1 Delivery Fee </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Steve Gickling </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 4:01 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113206 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/ai-insiders-urge-new-york-oversight/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113205 lazyload ewww_webp_lazy_load" alt="ai insiders urge new york oversight" data-src="https://www.devx.com/wp-content/uploads/ai_insiders_urge_new_york_oversight-1791899609-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/ai_insiders_urge_new_york_oversight-1791899609-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/ai_insiders_urge_new_york_oversight-1791899609-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113205" alt="ai insiders urge new york oversight" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/ai-insiders-urge-new-york-oversight/" > AI Insiders Urge New York Oversight </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Sumit Kumar </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 3:03 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113208 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/pro-ai-political-group-builds-bipartisan-war-chest/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113207 lazyload ewww_webp_lazy_load" alt="pro ai political group builds bipartisan" data-src="https://www.devx.com/wp-content/uploads/pro_ai_political_group_builds_bipartisan-1791899649-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/pro_ai_political_group_builds_bipartisan-1791899649-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/pro_ai_political_group_builds_bipartisan-1791899649-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113207" alt="pro ai political group builds bipartisan" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/pro-ai-political-group-builds-bipartisan-war-chest/" > Pro-AI Political Group Builds Bipartisan War Chest </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Steve Gickling </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 1:36 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113212 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/prysm-capital-leader-links-parenting-to-investing/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113211 lazyload ewww_webp_lazy_load" alt="prysm capital leader parenting investing" data-src="https://www.devx.com/wp-content/uploads/prysm_capital_leader_parenting_investing-1791900004-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/prysm_capital_leader_parenting_investing-1791900004-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/prysm_capital_leader_parenting_investing-1791900004-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113211" alt="prysm capital leader parenting investing" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/prysm-capital-leader-links-parenting-to-investing/" > Prysm Capital Leader Links Parenting to Investing </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Sumit Kumar </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 11:43 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113214 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/mcdonalds-faces-antitrust-suit-over-ai-pricing/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113213 lazyload ewww_webp_lazy_load" alt="mcdonalds antitrust suit ai pricing" data-src="https://www.devx.com/wp-content/uploads/mcdonalds_antitrust_suit_ai_pricing-1791900192-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/mcdonalds_antitrust_suit_ai_pricing-1791900192-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/mcdonalds_antitrust_suit_ai_pricing-1791900192-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113213" alt="mcdonalds antitrust suit ai pricing" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/mcdonalds-faces-antitrust-suit-over-ai-pricing/" > McDonald’s Faces Antitrust Suit Over AI Pricing </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 11:11 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113216 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/openai-addresses-australian-health-site-hack-probe/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113215 lazyload ewww_webp_lazy_load" alt="openai addresses australian health hack" data-src="https://www.devx.com/wp-content/uploads/openai-addresses-australian-health-hack-1791900351-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/openai-addresses-australian-health-hack-1791900351-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/openai-addresses-australian-health-hack-1791900351-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113215" alt="openai addresses australian health hack" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/openai-addresses-australian-health-site-hack-probe/" > OpenAI Addresses Australian Health Site Hack Probe </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 11:04 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113210 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/industry-leaders-sign-white-house-ai-accord/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113209 lazyload ewww_webp_lazy_load" alt="industry leaders white house ai accord" data-src="https://www.devx.com/wp-content/uploads/industry_leaders_white_house_ai_accord-1791899902-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/industry_leaders_white_house_ai_accord-1791899902-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/industry_leaders_white_house_ai_accord-1791899902-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113209" alt="industry leaders white house ai accord" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/industry-leaders-sign-white-house-ai-accord/" > Industry Leaders Sign White House AI Accord </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Kirstie Sands </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 10:37 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113223 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai tag-agentcorruption tag-ai-agent-security tag-aws-bedrock-agentcore tag-aws-iam tag-prompt-injection tag-zenity-labs" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/artificial-intelligence-ai/what-is-agentcorruption-vulnerability-aws-agentcore/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="169" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACpAQMAAACruZLpAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14ND2AAAAAAAAA8CRm/AAGYyH7VAAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113225 lazyload ewww_webp_lazy_load" alt="AgentCorruption vulnerability" data-src="https://www.devx.com/wp-content/uploads/pexels-googledeepmind-17486102-300x169.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="169" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-googledeepmind-17486102-300x169.jpg.webp" /><noscript><img loading="lazy" width="300" height="169" src="https://www.devx.com/wp-content/uploads/pexels-googledeepmind-17486102-300x169.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113225" alt="AgentCorruption vulnerability" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/what-is-agentcorruption-vulnerability-aws-agentcore/" > What Is the AgentCorruption Vulnerability in AWS AgentCore? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Priya Nandakumar </span> <span class="elementor-post-date"> October 14, 2026 </span> <span class="elementor-post-time"> 7:39 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113196 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/lincoln-lab-tracks-ai-hardware-since-2018/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113195 lazyload ewww_webp_lazy_load" alt="lincoln lab tracks ai hardware" data-src="https://www.devx.com/wp-content/uploads/lincoln_lab_tracks_ai_hardware-1791813843-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/lincoln_lab_tracks_ai_hardware-1791813843-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/lincoln_lab_tracks_ai_hardware-1791813843-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113195" alt="lincoln lab tracks ai hardware" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/lincoln-lab-tracks-ai-hardware-since-2018/" > Lincoln Lab Tracks AI Hardware Since 2018 </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 2:54 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113198 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/divided-court-rejects-ai-labs-rights-claims/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113197 lazyload ewww_webp_lazy_load" alt="court rejects ai lab rights claims" data-src="https://www.devx.com/wp-content/uploads/court_rejects_ai_lab_rights_claims-1791813979-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/court_rejects_ai_lab_rights_claims-1791813979-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/court_rejects_ai_lab_rights_claims-1791813979-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113197" alt="court rejects ai lab rights claims" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/divided-court-rejects-ai-labs-rights-claims/" > Divided Court Rejects AI Lab’s Rights Claims </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 11:29 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113188 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/countries-eye-drones-to-boost-rainfall/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113187 lazyload ewww_webp_lazy_load" alt="countries drones boost rainfall" data-src="https://www.devx.com/wp-content/uploads/countries_drones_boost_rainfall-1791813173-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/countries_drones_boost_rainfall-1791813173-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/countries_drones_boost_rainfall-1791813173-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113187" alt="countries drones boost rainfall" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/countries-eye-drones-to-boost-rainfall/" > Countries Eye Drones to Boost Rainfall </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Steve Gickling </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 11:09 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113192 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/uk-watchdog-investigates-recruitment-robo-calls/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113191 lazyload ewww_webp_lazy_load" alt="watchdog investigates recruitment robocalls" data-src="https://www.devx.com/wp-content/uploads/watchdog_investigates_recruitment_robocalls-1791813635-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/watchdog_investigates_recruitment_robocalls-1791813635-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/watchdog_investigates_recruitment_robocalls-1791813635-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113191" alt="watchdog investigates recruitment robocalls" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/uk-watchdog-investigates-recruitment-robo-calls/" > UK Watchdog Investigates Recruitment Robo Calls </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Kirstie Sands </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 10:14 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113190 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/nexstrom-raises-funds-for-2d-chip-equipment/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113189 lazyload ewww_webp_lazy_load" alt="nexstrom raises funds chip equipment" data-src="https://www.devx.com/wp-content/uploads/nexstrom_raises_funds_chip_equipment-1791813246-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/nexstrom_raises_funds_chip_equipment-1791813246-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/nexstrom_raises_funds_chip_equipment-1791813246-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113189" alt="nexstrom raises funds chip equipment" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/nexstrom-raises-funds-for-2d-chip-equipment/" > Nexstrom Raises Funds for 2D Chip Equipment </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Sumit Kumar </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 9:36 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113194 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/atlassian-deepens-openai-ties-retains-ai-choice/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="167" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACnAQMAAACRs/OZAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB1JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAB8AhlxAAFv/Yv0AAAAAElFTkSuQmCC" class="elementor-animation-grow attachment-medium size-medium wp-image-113193 lazyload ewww_webp_lazy_load" alt="atlassian deepens openai ties retains ai" data-src="https://www.devx.com/wp-content/uploads/atlassian_deepens_openai_ties_retains_ai-1791813742-300x167.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="167" data-src-webp="https://www.devx.com/wp-content/uploads/atlassian_deepens_openai_ties_retains_ai-1791813742-300x167.jpg.webp" /><noscript><img loading="lazy" width="300" height="167" src="https://www.devx.com/wp-content/uploads/atlassian_deepens_openai_ties_retains_ai-1791813742-300x167.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-113193" alt="atlassian deepens openai ties retains ai" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/atlassian-deepens-openai-ties-retains-ai-choice/" > Atlassian Deepens OpenAI Ties, Retains AI Choice </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Deanna Ritchie </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 9:17 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-113186 post type-post status-publish format-standard has-post-thumbnail hentry category-daily-news" role="listitem"> <a class="elementor-post__thumbnail__link lazyload" href="https://www.devx.com/daily-news/ais-real-race-is-utility-not-intelligence/" tabindex="-1" > <div class="elementor-post__thumbnail"><img loading="lazy" width="300" height="200" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAADIAQMAAABoEU4WAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAB5JREFUGBntwTEBAAAAwiD7p14IX2AAAAAAAAAAcAgeeAABD6RTzgAAAABJRU5ErkJggg==" class="elementor-animation-grow attachment-medium size-medium wp-image-23374 lazyload ewww_webp_lazy_load" alt="DevX - Software Development Resource" data-src="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg" decoding="async" data-eio-rwidth="300" data-eio-rheight="200" data-src-webp="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg.webp" /><noscript><img loading="lazy" width="300" height="200" src="https://www.devx.com/wp-content/uploads/2022/02/thumbnail.jpg" class="elementor-animation-grow attachment-medium size-medium wp-image-23374" alt="DevX - Software Development Resource" data-eio="l" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/daily-news/ais-real-race-is-utility-not-intelligence/" > AI’s Real Race Is Utility, Not Intelligence </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Joe Rothwell </span> <span class="elementor-post-date"> October 13, 2026 </span> <span class="elementor-post-time"> 8:12 AM </span> </div> </div> </article> </div> <span class="e-load-more-spinner"> <svg aria-hidden="true" class="e-font-icon-svg e-fas-spinner" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"></path></svg> </span> <div class="e-load-more-anchor lazyload" data-page="1" data-max-page="1113" data-next-page="https://www.devx.com/code-magazine/exploring-new-winform-controls-in-vs-net-whidbey/2/"></div> <div class="elementor-button-wrapper"> <a class="elementor-button elementor-size-sm elementor-animation-grow" role="button"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Show More</span> </span> </a> </div> <div class="e-load-more-message"></div> </div> </div> </div> </div> <div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-270dc71 lazyload" data-id="270dc71" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-8905b95 elementor-hidden-tablet" data-id="8905b95" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-2f83f51 elementor-widget elementor-widget-html lazyload" data-id="2f83f51" data-element_type="widget" data-e-type="widget" data-widget_type="html.default"> <div class="elementor-widget-container"> <ins style="display: block; width: 100%" class="direqt-embed" data-bot-id="660c2a84041d59991d8be45b" data-start-hint="poll" data-story-id="auto" data-gtm="true" data-layout="overlay" ></ins> </div> </div> </div> </div> </div> </section> </div> <footer data-elementor-type="footer" data-elementor-id="23300" class="elementor elementor-23300 elementor-location-footer" data-elementor-post-type="elementor_library"> <footer class="elementor-section elementor-top-section elementor-element elementor-element-1588a538 elementor-section-height-min-height elementor-section-content-middle elementor-section-full_width elementor-section-height-default elementor-section-items-middle" data-id="1588a538" data-element_type="section" data-e-type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-no"> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-9d2a788" data-id="9d2a788" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-2e0ce949" data-id="2e0ce949" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4f9ec08 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="4f9ec08" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <section class="elementor-section elementor-inner-section elementor-element elementor-element-73a9986 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="73a9986" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7f08930" data-id="7f08930" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-269b367 elementor-nav-menu__align-end elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="269b367" data-element_type="widget" data-e-type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav aria-label="Menu" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"> <ul id="menu-1-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816 lazyload"><a href="https://www.devx.com/about/" class="elementor-item">About</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-65041 lazyload"><a href="https://www.devx.com/contact/" class="elementor-item">Contact</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46262"><a href="https://www.devx.com/publication-guidelines/" class="elementor-item">Guidelines</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-47967"><a href="https://www.devx.com/expert-review-board/" class="elementor-item">Experts</a></li> </ul> </nav> <div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <svg aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"><path d="M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z"></path></svg><svg aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"><path d="M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z"></path></svg> </div> <nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"> <ul id="menu-2-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816 lazyload"><a href="https://www.devx.com/about/" class="elementor-item lazyload" tabindex="-1">About</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-65041 lazyload"><a href="https://www.devx.com/contact/" class="elementor-item lazyload" tabindex="-1">Contact</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item lazyload" tabindex="-1">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46262"><a href="https://www.devx.com/publication-guidelines/" class="elementor-item lazyload" tabindex="-1">Guidelines</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-47967"><a href="https://www.devx.com/expert-review-board/" class="elementor-item lazyload" tabindex="-1">Experts</a></li> </ul> </nav> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-869862d" data-id="869862d" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-5d5f4dc5 e-grid-align-left elementor-widget__width-initial elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="5d5f4dc5" data-element_type="widget" data-e-type="widget" data-widget_type="social-icons.default"> <div class="elementor-widget-container"> <div class="elementor-social-icons-wrapper elementor-grid" role="list"> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-5c0ce3c" href="https://www.linkedin.com/company/devx" target="_blank"> <span class="elementor-screen-only">Linkedin</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-linkedin" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-828f132 lazyload" href="https://twitter.com/DevX_Com" target="_blank"> <span class="elementor-screen-only">Twitter</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-twitter" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg> </a> </span> </div> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-21928d3 lazyload" data-id="21928d3" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> <section class="elementor-section elementor-inner-section elementor-element elementor-element-e509954 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e509954" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-f77ca98 lazyload" data-id="f77ca98" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-c500cdf elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="c500cdf" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <div class="elementor-element elementor-element-fbeb59f elementor-nav-menu__align-center elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="fbeb59f" data-element_type="widget" data-e-type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav aria-label="Menu" class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"> <ul id="menu-1-fbeb59f" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27045"><a href="https://www.devx.com/a-terms/" class="elementor-item">A</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27044"><a href="https://www.devx.com/b-terms/" class="elementor-item">B</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27043"><a href="https://www.devx.com/c-terms/" class="elementor-item">C</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27152 lazyload"><a href="https://www.devx.com/d-terms/" class="elementor-item">D</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27153 lazyload"><a href="https://www.devx.com/e-terms/" class="elementor-item">E</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27154 lazyload"><a href="https://www.devx.com/f-terms/" class="elementor-item">F</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27155 lazyload"><a href="https://www.devx.com/g-terms/" class="elementor-item">G</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27156 lazyload"><a href="https://www.devx.com/h-terms/" class="elementor-item">H</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27157 lazyload"><a href="https://www.devx.com/i-terms/" class="elementor-item">I</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27158 lazyload"><a href="https://www.devx.com/j-terms/" class="elementor-item">J</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27159 lazyload"><a href="https://www.devx.com/k-terms/" class="elementor-item">K</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27137 lazyload"><a href="https://www.devx.com/l-terms/" class="elementor-item">L</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27151 lazyload"><a href="https://www.devx.com/m-terms/" class="elementor-item">M</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27150 lazyload"><a href="https://www.devx.com/n-terms/" class="elementor-item">N</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27149 lazyload"><a href="https://www.devx.com/o-terms/" class="elementor-item">O</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27148 lazyload"><a href="https://www.devx.com/p-terms/" class="elementor-item">P</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27147 lazyload"><a href="https://www.devx.com/q-terms/" class="elementor-item">Q</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27146 lazyload"><a href="https://www.devx.com/r-terms/" class="elementor-item">R</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27145 lazyload"><a href="https://www.devx.com/s-terms/" class="elementor-item">S</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27144 lazyload"><a href="https://www.devx.com/t-terms/" class="elementor-item">T</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27143 lazyload"><a href="https://www.devx.com/u-terms/" class="elementor-item">U</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27142 lazyload"><a href="https://www.devx.com/v-terms/" class="elementor-item">V</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27141 lazyload"><a href="https://www.devx.com/w-terms/" class="elementor-item">W</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27140 lazyload"><a href="https://www.devx.com/x-terms/" class="elementor-item">X</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27139 lazyload"><a href="https://www.devx.com/y-terms/" class="elementor-item">Y</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27138 lazyload"><a href="https://www.devx.com/z-terms/" class="elementor-item">Z</a></li> </ul> </nav> <div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <svg aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"><path d="M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z"></path></svg><svg aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg"><path d="M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z"></path></svg> </div> <nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"> <ul id="menu-2-fbeb59f" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27045"><a href="https://www.devx.com/a-terms/" class="elementor-item lazyload" tabindex="-1">A</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27044"><a href="https://www.devx.com/b-terms/" class="elementor-item lazyload" tabindex="-1">B</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27043"><a href="https://www.devx.com/c-terms/" class="elementor-item lazyload" tabindex="-1">C</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27152 lazyload"><a href="https://www.devx.com/d-terms/" class="elementor-item lazyload" tabindex="-1">D</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27153 lazyload"><a href="https://www.devx.com/e-terms/" class="elementor-item lazyload" tabindex="-1">E</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27154 lazyload"><a href="https://www.devx.com/f-terms/" class="elementor-item lazyload" tabindex="-1">F</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27155 lazyload"><a href="https://www.devx.com/g-terms/" class="elementor-item lazyload" tabindex="-1">G</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27156 lazyload"><a href="https://www.devx.com/h-terms/" class="elementor-item lazyload" tabindex="-1">H</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27157 lazyload"><a href="https://www.devx.com/i-terms/" class="elementor-item lazyload" tabindex="-1">I</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27158 lazyload"><a href="https://www.devx.com/j-terms/" class="elementor-item lazyload" tabindex="-1">J</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27159 lazyload"><a href="https://www.devx.com/k-terms/" class="elementor-item lazyload" tabindex="-1">K</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27137 lazyload"><a href="https://www.devx.com/l-terms/" class="elementor-item lazyload" tabindex="-1">L</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27151 lazyload"><a href="https://www.devx.com/m-terms/" class="elementor-item lazyload" tabindex="-1">M</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27150 lazyload"><a href="https://www.devx.com/n-terms/" class="elementor-item lazyload" tabindex="-1">N</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27149 lazyload"><a href="https://www.devx.com/o-terms/" class="elementor-item lazyload" tabindex="-1">O</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27148 lazyload"><a href="https://www.devx.com/p-terms/" class="elementor-item lazyload" tabindex="-1">P</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27147 lazyload"><a href="https://www.devx.com/q-terms/" class="elementor-item lazyload" tabindex="-1">Q</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27146 lazyload"><a href="https://www.devx.com/r-terms/" class="elementor-item lazyload" tabindex="-1">R</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27145 lazyload"><a href="https://www.devx.com/s-terms/" class="elementor-item lazyload" tabindex="-1">S</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27144 lazyload"><a href="https://www.devx.com/t-terms/" class="elementor-item lazyload" tabindex="-1">T</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27143 lazyload"><a href="https://www.devx.com/u-terms/" class="elementor-item lazyload" tabindex="-1">U</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27142 lazyload"><a href="https://www.devx.com/v-terms/" class="elementor-item lazyload" tabindex="-1">V</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27141 lazyload"><a href="https://www.devx.com/w-terms/" class="elementor-item lazyload" tabindex="-1">W</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27140 lazyload"><a href="https://www.devx.com/x-terms/" class="elementor-item lazyload" tabindex="-1">X</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27139 lazyload"><a href="https://www.devx.com/y-terms/" class="elementor-item lazyload" tabindex="-1">Y</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27138 lazyload"><a href="https://www.devx.com/z-terms/" class="elementor-item lazyload" tabindex="-1">Z</a></li> </ul> </nav> </div> </div> <div class="elementor-element elementor-element-6963de5 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="6963de5" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> </div> </div> </div> </section> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-c5e10d2 lazyload" data-id="c5e10d2" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </footer> <section class="elementor-section elementor-top-section elementor-element elementor-element-a4f01a6 elementor-section-boxed elementor-section-height-default elementor-section-height-default lazyload" data-id="a4f01a6" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-a1bc5b1 lazyload" data-id="a1bc5b1" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-e4f110b lazyload" data-id="e4f110b" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4a914653 elementor-widget elementor-widget-heading lazyload" data-id="4a914653" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <p class="elementor-heading-title elementor-size-default">©2025 Copyright DevX - All Rights Reserved. Registration or use of this site constitutes acceptance of our Terms of Service and Privacy Policy.</p> </div> </div> <div class="elementor-element elementor-element-d2cf216 elementor-widget elementor-widget-text-editor lazyload" data-id="d2cf216" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p><strong><a href="https://www.devx.com/sitemap/">Sitemap</a> — </strong><strong><a href="https://www.devx.com/privacy-policy/">Privacy Policy</a></strong></p> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-1daca18 lazyload" data-id="1daca18" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </footer> <!-- AdThrive - Override Elementor 100% iframe width --> <script> setInterval(() => { const elementorPage = document.querySelector('[class*="elementor"]') const adThriveLoaded = document.getElementsByTagName('body')[0].classList.contains('adthrive-device-phone') || document.getElementsByTagName('body')[0].classList.contains('adthrive-device-tablet') || document.getElementsByTagName('body')[0].classList.contains('adthrive-device-desktop') if (!adThriveLoaded) { console.log('Waiting for AdThrive...') return } if (elementorPage) { const ads = document.querySelectorAll(".adthrive-ad iframe"); ads.forEach(ad => { if (typeof ad.width !== "undefined" && ad.width !== "1") { ad.style.width = ad.width + "px"; } }) } }, 50); </script> <script data-no-optimize='1' data-cfasync='false' id='cls-insertion-3babf9b'>(function(){window.adthriveCLS.buildDate=`2026-10-23`;let e={Below_Post_1:`Below_Post_1`,Below_Post:`Below_Post`,Content:`Content`,Content_1:`Content_1`,Content_2:`Content_2`,Content_3:`Content_3`,Content_4:`Content_4`,Content_5:`Content_5`,Content_6:`Content_6`,Content_7:`Content_7`,Content_8:`Content_8`,Content_9:`Content_9`,Recipe:`Recipe`,Recipe_1:`Recipe_1`,Recipe_2:`Recipe_2`,Recipe_3:`Recipe_3`,Recipe_4:`Recipe_4`,Recipe_5:`Recipe_5`,Native_Recipe:`Native_Recipe`,Footer_1:`Footer_1`,Footer:`Footer`,Header_1:`Header_1`,Header_2:`Header_2`,Header:`Header`,Sidebar_1:`Sidebar_1`,Sidebar_2:`Sidebar_2`,Sidebar_3:`Sidebar_3`,Sidebar_4:`Sidebar_4`,Sidebar_5:`Sidebar_5`,Sidebar_9:`Sidebar_9`,Sidebar:`Sidebar`,Interstitial_1:`Interstitial_1`,Interstitial:`Interstitial`,Video_StickyOutstream_1:`Video_StickyOutstream_1`,Video_StickyOutstream:`Video_StickyOutstream`,Video_StickyInstream:`Video_StickyInstream`,Sponsor_Tile:`Sponsor_Tile`},t=[`siteId`,`siteName`,`adOptions`,`breakpoints`,`adUnits`],n=(e,n=t)=>{if(!e)return window.adthriveCLS&&(window.adthriveCLS.disabled=!0),!1;for(let t=0;t<n.length;t++)if(!e[n[t]])return window.adthriveCLS&&(window.adthriveCLS.disabled=!0),!1;return!0},r=()=>window.adthriveCLS;function i(e){"@babel/helpers - typeof";return i=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},i(e)}function a(e,t){if(i(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(i(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function o(e){var t=a(e,`string`);return i(t)==`symbol`?t:t+``}function s(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c=class{constructor(){s(this,`_clsGlobalData`,r())}get enabled(){return!!this._clsGlobalData&&!!this._clsGlobalData.siteAds&&n(this._clsGlobalData.siteAds)}get error(){return!!(this._clsGlobalData&&this._clsGlobalData.error)}set siteAds(e){this._clsGlobalData.siteAds=e}get siteAds(){return this._clsGlobalData.siteAds}set disableAds(e){this._clsGlobalData.disableAds=e}get disableAds(){return this._clsGlobalData.disableAds}get enabledLocations(){return[e.Below_Post,e.Content,e.Recipe,e.Sidebar]}get injectedFromPlugin(){return this._clsGlobalData.injectedFromPlugin}set injectedFromPlugin(e){this._clsGlobalData.injectedFromPlugin=e}get injectedFromSiteAds(){return this._clsGlobalData.injectedFromSiteAds}set injectedFromSiteAds(e){this._clsGlobalData.injectedFromSiteAds=e}setInjectedSlots(e){this._clsGlobalData.injectedSlots=this._clsGlobalData.injectedSlots||[],this._clsGlobalData.injectedSlots.push(e)}get injectedSlots(){return this._clsGlobalData.injectedSlots}setInjectedVideoSlots(e){this._clsGlobalData.injectedVideoSlots=this._clsGlobalData.injectedVideoSlots||[],this._clsGlobalData.injectedVideoSlots.push(e)}get injectedVideoSlots(){return this._clsGlobalData.injectedVideoSlots}setExperiment(e,t,n=!1){this._clsGlobalData.experiments=this._clsGlobalData.experiments||{},this._clsGlobalData.siteExperiments=this._clsGlobalData.siteExperiments||{};let r=n?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments;r[e]=t}getExperiment(e,t=!1){let n=t?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments;return n&&n[e]}setWeightedChoiceExperiment(e,t,n=!1){this._clsGlobalData.experimentsWeightedChoice=this._clsGlobalData.experimentsWeightedChoice||{},this._clsGlobalData.siteExperimentsWeightedChoice=this._clsGlobalData.siteExperimentsWeightedChoice||{};let r=n?this._clsGlobalData.siteExperimentsWeightedChoice:this._clsGlobalData.experimentsWeightedChoice;r[e]=t}getWeightedChoiceExperiment(e,t=!1){var n,r;let i=t?(n=this._clsGlobalData)==null?void 0:n.siteExperimentsWeightedChoice:(r=this._clsGlobalData)==null?void 0:r.experimentsWeightedChoice;return i&&i[e]}get bucket(){return this._clsGlobalData.bucket}set videoDisabledFromPlugin(e){this._clsGlobalData.videoDisabledFromPlugin=e}get videoDisabledFromPlugin(){return this._clsGlobalData.videoDisabledFromPlugin}set targetDensityLog(e){this._clsGlobalData.targetDensityLog=e}get targetDensityLog(){return this._clsGlobalData.targetDensityLog}get removeVideoTitleWrapper(){return this._clsGlobalData.siteAds.adOptions.removeVideoTitleWrapper}},l=class{},u=class extends l{constructor(e,t=Math.random){super(),this._probability=e,this._random=t}get(){if(this._probability<0||this._probability>1)throw Error(`Invalid probability: ${this._probability}`);return this._random()<this._probability}},d=class{constructor(){s(this,`_featureRollouts`,{}),s(this,`_checkedFeatureRollouts`,new Map),s(this,`_enabledFeatureRolloutIds`,[])}get siteFeatureRollouts(){return this._featureRollouts}_isRolloutEnabled(e){if(this._doesRolloutExist(e)){let t=this._featureRollouts[e],n=t.enabled,r=t.data;if(this._doesRolloutHaveConfig(e)&&this._isFeatureRolloutConfigType(r)){let e=(r.pct_enabled??100)/100;n&&=new u(e).get()}return n}return!1}isRolloutEnabled(e){let t=this._checkedFeatureRollouts.get(e)??this._isRolloutEnabled(e);return this._checkedFeatureRollouts.get(e)===void 0&&this._checkedFeatureRollouts.set(e,t),t}isRolloutAdministrativelyEnabled(e){return this._doesRolloutExist(e)&&this._featureRollouts[e].enabled}_doesRolloutExist(e){return this._featureRollouts&&!!this._featureRollouts[e]}_doesRolloutHaveConfig(e){return this._doesRolloutExist(e)&&`data`in this._featureRollouts[e]}_isFeatureRolloutConfigType(e){return typeof e==`object`&&!!e&&!!Object.keys(e).length}getSiteRolloutConfig(e){var t;let n=this.isRolloutEnabled(e),r=(t=this._featureRollouts[e])==null?void 0:t.data;return n&&this._doesRolloutHaveConfig(e)&&this._isFeatureRolloutConfigType(r)?r:{}}get enabledFeatureRolloutIds(){return this._enabledFeatureRolloutIds}},f=class extends d{constructor(e){super(),this._featureRollouts=e,this._setEnabledFeatureRolloutIds()}_setEnabledFeatureRolloutIds(){Object.entries(this._featureRollouts).forEach(([e,t])=>{this.isRolloutEnabled(e)&&t.featureRolloutId!==void 0&&this._enabledFeatureRolloutIds.push(t.featureRolloutId)})}},p,m;let h=(p=window.adthrive)==null||(p=p.siteAds)==null?void 0:p.featureRollouts,g=(m=window.adthriveCLS)==null||(m=m.siteAds)==null?void 0:m.featureRollouts,_=e=>!!e&&typeof e==`object`&&Object.keys(e).length>0,v=new f(_(g)&&g||_(h)&&h||{}),y=new f(window.adthrive&&window.adthrive.siteAds&&`featureRollouts`in window.adthrive.siteAds?window.adthrive.siteAds.featureRollouts??{}:{}),b=e=>e.indexOf(`hbs-q`)===0,x=({bucket:e,isRolloutEnabled:t}={})=>{var n;let r=e??((n=window.adthrive)==null?void 0:n.bucket);return!(t??y.isRolloutEnabled.bind(y))(`enable-sticky-related`)||b(r||``)},S=e=>{let t={};return function(...n){let r=JSON.stringify(n);if(r in t)return t[r];let i=e.apply(this,n);return t[r]=i,i}};navigator.vendor;let C=navigator.userAgent,ee=S(e=>/Chrom|Applechromium/.test(e||C)),te=S(()=>/WebKit/.test(C)),ne=S(()=>ee()?`chromium`:te()?`webkit`:`other`),re=e=>/(Windows NT|Macintosh|X11;[^)]*(Linux|CrOS))/i.test(e),ie=e=>/Mobi|iP(hone|od)|Opera Mini/i.test(e),ae=e=>!/iPhone/i.test(e)&&/Mac/i.test(e)&&`ontouchstart`in window,oe=e=>/Tablet|iPad|Playbook|Nook|webOS|Kindle|Android (?!.*Mobile).*Safari/i.test(e)||ae(e),w=S((e=C)=>oe(e)?`tablet`:ie(e)&&!oe(e)?`mobile`:re(e)?`desktop`:`tablet`),se={desktop:`desktop`,tablet:`tablet`,phone:`mobile`},ce=e=>e===`mobile`?`phone`:e,le=()=>{var e;let t=((e=window)==null?void 0:e.adthrive)&&`deviceType`in window.adthrive&&window.adthrive.deviceType||null;return t&&Object.values(se).includes(t)?t:null},ue=S((e,t)=>{let n=w(e),r=t??n;return ce(r===`tablet`&&n!==r?n:r)}),T=(e=navigator.userAgent)=>ue(e,le()),E=(e=navigator.userAgent)=>T(e)===`phone`;var de,D=class{static _scheduleViewportUpdate(){this._rafId===null&&(this._rafId=window.requestAnimationFrame(()=>{this._rafId=null,this._updateViewportRects()}))}static _updateViewportRects(){if(this._trackedElements.size===0){this._detachViewportListeners();return}let e=[];this._trackedElements.forEach(t=>{t.isConnected?this._cachedRects.set(t,t.getBoundingClientRect()):e.push(t)}),e.forEach(e=>{this._trackedElements.delete(e),this._cachedRects.delete(e)}),this._trackedElements.size===0&&this._detachViewportListeners()}static _attachViewportListeners(){this._listenersAttached||=(window.addEventListener(`scroll`,this._viewportListener,{passive:!0}),window.addEventListener(`resize`,this._viewportListener),!0)}static _detachViewportListeners(){this._listenersAttached&&=(window.removeEventListener(`scroll`,this._viewportListener),window.removeEventListener(`resize`,this._viewportListener),!1)}static trackViewportElement(e){e&&(this._trackedElements.has(e)||(this._trackedElements.add(e),this._attachViewportListeners(),this._scheduleViewportUpdate()))}static untrackViewportElement(e){e&&(this._trackedElements.delete(e),this._cachedRects.delete(e),this._trackedElements.size===0&&this._detachViewportListeners())}static getCachedRect(e){return this._cachedRects.get(e)}static getScrollTop(){return(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0)}static getScrollBottom(){let e=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0;return this.getScrollTop()+e}static shufflePlaylist(e){let t=e.length,n,r;for(;t!==0;)r=Math.floor(Math.random()*e.length),--t,n=e[t],e[t]=e[r],e[r]=n;return e}static isMobileLandscape(){return window.matchMedia(`(orientation: landscape) and (max-height: 480px)`).matches}static playerViewable(e){let t=this._cachedRects.get(e)??e.getBoundingClientRect();return this.playerViewableFromRect(t)}static playerViewableFromRect(e){return this.isMobileLandscape()?window.innerHeight>e.top+e.height/2&&e.top+e.height/2>0:window.innerHeight>e.top+e.height/2}static createQueryString(e){return Object.keys(e).map(t=>`${t}=${e[t]}`).join(`&`)}static createEncodedQueryString(e){return Object.keys(e).map(t=>`${t}=${encodeURIComponent(e[t])}`).join(`&`)}static setMobileLocation(e,t=!1){e||=`bottom-right`;let n=t?`raptive-player-sticky`:`adthrive-collapse`;return e===`top-left`?e=`${n}-top-left`:e===`top-right`?e=`${n}-top-right`:e===`bottom-left`?e=`${n}-bottom-left`:e===`bottom-right`?e=`${n}-bottom-right`:e===`top-center`&&(e=`adthrive-collapse-${E()?`top-center`:`bottom-right`}`),e}static addMaxResolutionQueryParam(e){let t=`max_resolution=${E()?`320`:`1280`}`,[n,r]=String(e).split(`?`);return`${n}?${r?r+`&${t}`:t}`}};de=D,s(D,`_trackedElements`,new Set),s(D,`_cachedRects`,new WeakMap),s(D,`_rafId`,null),s(D,`_listenersAttached`,!1),s(D,`_viewportListener`,()=>{de._scheduleViewportUpdate()});let O=(e,t)=>e==null||e!==e?t:e;var fe=class{constructor(e){this._clsOptions=e,s(this,`relatedSettings`,void 0),s(this,`players`,void 0),s(this,`removeVideoTitleWrapper`,void 0),s(this,`footerSelector`,void 0),s(this,`shouldDisableStickyRelated`,void 0),this.removeVideoTitleWrapper=O(this._clsOptions.siteAds.adOptions.removeVideoTitleWrapper,!1),this.shouldDisableStickyRelated=x({bucket:this._clsOptions.bucket,isRolloutEnabled:v.isRolloutEnabled.bind(v)});let t=this._clsOptions.siteAds.videoPlayers;this.footerSelector=O(t&&t.footerSelector,``),this.players=O(t&&t.players.map(e=>(e.mobileLocation=D.setMobileLocation(e.mobileLocation),e)),[]),this.relatedSettings=t&&t.contextual}},pe=class{constructor(e){s(this,`mobileStickyPlayerOnPage`,!1),s(this,`collapsiblePlayerOnPage`,!1),s(this,`playlistPlayerAdded`,!1),s(this,`relatedPlayerAdded`,!1),s(this,`collapseSettings`,void 0),s(this,`footerSelector`,``),s(this,`removeVideoTitleWrapper`,!1),s(this,`desktopCollapseSettings`,void 0),s(this,`mobileCollapseSettings`,void 0),s(this,`relatedSettings`,void 0),s(this,`playerId`,void 0),s(this,`playlistId`,void 0),s(this,`desktopRelatedCollapseSettings`,void 0),s(this,`mobileRelatedCollapseSettings`,void 0),s(this,`collapsePlayerId`,void 0),s(this,`players`,void 0),s(this,`videoAdOptions`,void 0),s(this,`shouldDisableStickyRelated`,void 0),this.videoAdOptions=new fe(e),this.players=this.videoAdOptions.players,this.relatedSettings=this.videoAdOptions.relatedSettings,this.removeVideoTitleWrapper=this.videoAdOptions.removeVideoTitleWrapper,this.footerSelector=this.videoAdOptions.footerSelector,this.shouldDisableStickyRelated=this.videoAdOptions.shouldDisableStickyRelated}};let me=[[300,50],[300,90],[320,50],[320,100]],he=(t,n)=>t===e.Recipe&&n===`phone`,ge=([e,t])=>me.some(([n,r])=>n===e&&r===t),_e=e=>{let t=e.clientWidth;if(getComputedStyle){let n=getComputedStyle(e,null);t-=parseFloat(n.paddingLeft||`0`)+parseFloat(n.paddingRight||`0`)}return t},ve=()=>document.createDocumentFragment().querySelectorAll(`*`),k=(e,t=document)=>{try{return{valid:!0,elements:t.querySelectorAll(e)}}catch(e){return{valid:!1,elements:ve(),error:e}}},A=(e,t=document)=>{try{return{valid:!0,element:t.querySelector(e)}}catch(e){return{valid:!1,element:null,error:e}}},j=e=>k(e),M=e=>{if(e===``)return{valid:!0};let t=j(e);return t.valid?{valid:!0,elements:t.elements}:{valid:!1,error:t.error}},N=new class{info(e,t,...n){this.call(console.info,e,t,...n)}warn(e,t,...n){this.call(console.warn,e,t,...n)}error(e,t,...n){this.call(console.error,e,t,...n),this.sendErrorLogToCommandQueue(e,t,...n)}event(e,t,...n){var r;((r=window.adthriveCLS)==null?void 0:r.bucket)===`debug`&&this.info(e,t)}sendErrorLogToCommandQueue(e,t,...n){window.adthrive=window.adthrive||{},window.adthrive.cmd=window.adthrive.cmd||[],window.adthrive.cmd.push(()=>{window.adthrive.logError!==void 0&&typeof window.adthrive.logError==`function`&&window.adthrive.logError(e,t,n)})}call(e,t,n,...r){let i=[`%c${t}::${n} `],a=[`color: #999; font-weight: bold;`];r.length>0&&typeof r[0]==`string`&&i.push(r.shift()),a.push(...r);try{Function.prototype.apply.call(e,console,[i.join(``),...a])}catch(e){console.error(e);return}}},ye=[[728,90],[300,250],[300,600],[320,50],[970,250],[160,600],[300,1050],[336,280],[970,90],[300,50],[300,90],[320,100],[468,60],[250,250],[120,240],[1,1],[300,300],[300,420],[728,250],[320,300],[300,390]],be=new Map([[e.Footer,1],[e.Header,2],[e.Sidebar,3],[e.Content,4],[e.Recipe,5],[`Sidebar_sticky`,6],[`Below Post`,7]]),xe=e=>ye.filter(([t,n])=>e.some(([e,r])=>t===e&&n===r)),Se=(t,[n,r],i)=>{let{location:a,sequence:o}=t;if(a===e.Footer)return i!==`phone`||n!==320||r!==100;if(a===e.Header)return!0;if(a===e.Recipe)return!(E()&&i===`phone`&&(n===300&&r===390||n===320&&r===300));if(a===e.Sidebar){let e=t.adSizes.some(([,e])=>e<=300),n=!!o&&o<=5,i=r>300;return i&&!e||o===9?!0:n?!i||t.sticky:!i}return!0},Ce=(t,n)=>{let{location:r,sticky:i}=t;if(r===e.Recipe&&n){let{recipeMobile:e,recipeDesktop:t}=n;if(E()&&e!=null&&e.enabled||!E()&&t!=null&&t.enabled)return!0}return r===e.Footer||i},we=(e,t)=>{var n;let i=(n=r())==null?void 0:n.experiments;return i!==void 0&&Object.prototype.hasOwnProperty.call(i,`smra1`)&&i.smra1===!0&&E()&&he(e,t)},Te=(t,n)=>{let r=n.adUnits,i=v.isRolloutEnabled(`enable-250px-max-ad-height`);return r.filter(e=>e.dynamic!==void 0&&e.dynamic.enabled).map(r=>{let a=r.location.replace(/\s+/g,`_`),o=a===`Sidebar`?0:2;a===e.Content&&i&&ee()&&(r.adSizes=r.adSizes.filter(e=>e[1]<=250));let s=we(a,t),c=[];for(let e of O(r.targeting,[])){let t=e;t.key===`special`&&c.push(...t.value)}let l=xe(r.adSizes).filter(e=>Se(r,e,t)&&(s?ge(e):e[0]!==300||e[1]!==90));return{auctionPriority:be.get(a)||8,location:a,sequence:O(r.sequence,1),thirdPartyAdUnitName:r.thirdPartyAdUnitName||``,customGamTargeting:r.customGamTargeting||{},sizes:l,devices:r.devices,pageSelector:O(r.dynamic.pageSelector,``).trim(),elementSelector:O(r.dynamic.elementSelector,``).trim(),position:O(r.dynamic.position,`beforebegin`),max:Math.floor(O(r.dynamic.max,0)),spacing:O(r.dynamic.spacing,0),skip:Math.floor(O(r.dynamic.skip,0)),every:Math.max(Math.floor(O(r.dynamic.every,1)),1),classNames:r.dynamic.classNames||[],sticky:Ce(r,n.adOptions.stickyContainerConfig),stickyOverlapSelector:O(r.stickyOverlapSelector,``).trim(),autosize:r.autosize,special:c,lazy:O(r.dynamic.lazy,!1),lazyMax:O(r.dynamic.lazyMax,o),lazyMaxDefaulted:r.dynamic.lazyMax!==0&&!r.dynamic.lazyMax,name:r.name}})},P=(t,n)=>{let r=_e(n),i=t.sticky&&t.location===e.Sidebar;return t.sizes.filter(e=>{let n=!t.autosize||e[0]<=r||e[0]<=320,a=!i||e[1]<=window.innerHeight-100;return n&&a})},Ee=(e,t)=>e.devices.includes(t),De=e=>{if(e.pageSelector.length===0)return!0;let t=A(e.pageSelector);return t.valid?t.element!==null:!1},F={Desktop:`desktop`,Mobile:`mobile`},Oe=e=>{let t=document.body,n=`adthrive-device-${e}`;if(!t.classList.contains(n))try{t.classList.add(n)}catch(e){N.error(`BodyDeviceClassComponent`,`init`,{message:e.message});let t=`classList`in document.createElement(`_`);N.error(`BodyDeviceClassComponent`,`init.support`,{support:t})}},I=e=>`adthrive-${e.location.replace(`_`,`-`).toLowerCase()}`,L=e=>`${I(e)}-${e.sequence}`;function ke(e,t,n){let r=e.pageOverrides.filter(e=>{let t=M(e.pageSelector);return t.valid||n==null||n({selector:e.pageSelector,selectorType:`pageOverride.pageSelector`,source:`getPageDensitySettings`,error:t.error}),e.pageSelector===``||t.elements&&t.elements.length}).map(e=>e[t]);return r.length?r[0]:e[t]}function Ae({targetDensity:e,targetAll:t,totalAvailableElements:n,mainContentHeight:r,minDivHeight:i,recipeCount:a}){return t?n:Math.floor(e*r/(1-e)/i)-a}function je(e,t,n,r){return e.filter(e=>{try{return t.querySelector(e.elementSelector)}catch(t){return r==null||r({selector:e.elementSelector,selectorType:`elementSelector`,source:`getCombinedMax`,context:n==null?void 0:n(e),error:t}),!1}}).map(e=>Number(e.max)+Number(e.lazyMaxDefaulted?0:e.lazyMax)).sort((e,t)=>t-e)[0]||0}let Me=(e,t)=>{if(e<=0)return{spacing:0,nextAfter:0,reasons:[`non-density-disabled`]};let n=t*e;return{spacing:n,nextAfter:n,reasons:[`non-density-viewport-ratio`]}},Ne=({settings:e,densityDevice:t,dynamicAds:n,target:r,totalAvailableElements:i,mainContentHeight:a,minDivHeight:o,recipeCount:s,selectorContext:c,onInvalidSelector:l})=>{let u=ke(e,t,l),d=u.adDensity,f=u.onePerViewport,p=d===.99,m=Ae({targetDensity:d,targetAll:p,totalAvailableElements:i,mainContentHeight:a,minDivHeight:o,recipeCount:s}),h=je(n,r,c,l);return{onePerViewport:f,targetAll:p,targetDensity:d,targetDensityUnits:m,combinedMax:h,numberOfUnits:Math.min(i,m,...h>0?[h]:[]),reasons:[p?`target-all-eligible`:`target-density-formula`,...f?[`viewport-floor`]:[]]}},Pe=({totalAvailableElements:e,targetDensityUnits:t,numberOfUnits:n,mainContentHeight:r,absoluteMinimumSpacing:i,viewportHeight:a,onePerViewport:o})=>{let s=e>t||e>n,c=[],l,u;return s?(u=!1,l=r/Math.min(t,n),c.push(`wider-spacing`)):(u=!0,l=o&&a>i?a:i,c.push(`absolute-minimum`)),o&&a>l?(c.push(`viewport-floor`),{insertEvery:a,usedAbsoluteMinimum:u,reasons:c}):{insertEvery:l,usedAbsoluteMinimum:u,reasons:c}},Fe=(e,t)=>{let n=e*.6;return n<=t?{insertEvery:t,usedAbsoluteMinimum:!0,reasons:[`clamped-absolute-minimum`]}:{insertEvery:n,usedAbsoluteMinimum:!1,reasons:[`wider-spacing`]}},Ie=(e,t)=>window.matchMedia(`(min-width: ${t}px)`).matches?`desktop`:window.matchMedia(`(min-width: ${e}px)`).matches?`tablet`:`phone`,R=e=>{let t=e.offsetHeight,n=e.offsetWidth,r=e.getBoundingClientRect(),i=document.body,a=document.documentElement,o=window.pageYOffset||a.scrollTop||i.scrollTop,s=window.pageXOffset||a.scrollLeft||i.scrollLeft,c=a.clientTop||i.clientTop||0,l=a.clientLeft||i.clientLeft||0,u=Math.round(r.top+o-c),d=Math.round(r.left+s-l);return{top:u,left:d,bottom:u+t,right:d+n,width:n,height:t}},z=e=>e.getAttribute(`id`)??``,Le=(e=document)=>(e===document?document.body:e).getBoundingClientRect().top,Re=e=>e.includes(`,`)?e.split(`,`):[e],ze=(e=document)=>{let t=e.querySelectorAll(`article`);if(t.length===0)return null;let n=Array.from(t).reduce((e,t)=>t.offsetHeight>e.offsetHeight?t:e);return n&&n.offsetHeight>window.innerHeight*1.5?n:null},Be=(e,t,n=document)=>{let r=new Set(t.map.map(({el:e})=>e)),i=ze(n),a=i?[i]:[],o=[];e.forEach(e=>{let t=k(e.elementSelector,n);if(!t.valid)return;let i=Array.from(t.elements),s=Re(e.elementSelector),c=s.length===1?i:[];s.length>1&&s.forEach(e=>{Array.from(k(e,n).elements).forEach(e=>{c.push(e)})});let l=new Set(i.slice(0,e.skip));for(let t of c){if(r.has(t))continue;let n=t.parentElement;n&&n!==document.body?a.push(n):a.push(t),l.has(t)||o.push({dynamicAd:e,element:t})}});let s=Le(n),c=o.map(e=>({item:e,top:e.element.getBoundingClientRect().top-s}));return c.sort((e,t)=>e.top-t.top),[a,c.map(({item:e})=>e)]},Ve=(e,t,n=document)=>{let[r,i]=Be(e,t,n);return r.length===0?[null,i]:[Array.from(r).reduce((e,t)=>t.offsetHeight>e.offsetHeight?t:e)||document.body,i]},He=(e,t=`div #comments, section .comments`)=>{let n=e.querySelector(t);return n?e.offsetHeight-n.offsetHeight:e.offsetHeight},Ue=()=>{let e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},We=()=>{let e=document.body,t=document.documentElement;return Math.max(e.scrollWidth,e.offsetWidth,t.clientWidth,t.scrollWidth,t.offsetWidth)};function B(e,t){t===void 0&&(t={});var n=t.insertAt;if(e&&typeof document<`u`){var r=document.head||document.getElementsByTagName(`head`)[0],i=document.createElement(`style`);i.type=`text/css`,n===`top`&&r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}let Ge=e=>e===9,Ke=e=>Ge(e)?`rp-sticky-sb-wrapper`:`rp-sticky-sidebar`,qe=e=>B(` .adthrive-device-phone .adthrive-sticky-content { height: 450px !important; margin-bottom: 100px !important; } .adthrive-content.adthrive-sticky { position: -webkit-sticky; position: sticky !important; top: 42px !important; margin-top: 42px !important; } .adthrive-content.adthrive-sticky:after { content: "— Advertisement. Scroll down to continue. —"; font-size: 10pt; margin-top: 5px; margin-bottom: 5px; display:block; color: #888; } .adthrive-sticky-container { position: relative; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; min-height:${e||400}px; margin: 10px 0 10px 0; background-color: #FAFAFA; padding-bottom:0px; } `),Je=e=>{B(` .adthrive-recipe.adthrive-sticky { position: -webkit-sticky; position: sticky !important; top: 42px !important; margin-top: 42px !important; } .adthrive-recipe-sticky-container { position: relative; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; min-height:${e||400}px !important; margin: 10px 0 10px 0; background-color: #FAFAFA; padding-bottom:0px; } `)},V=(e,t)=>e.some(e=>{let n=A(e);return n.valid?n.element!==null:(t==null||t(e,n.error),!1)}),Ye=e=>/^[-_a-zA-Z]+[-_a-zA-Z0-9]*$/.test(e),Xe=(e,t,n)=>{let r=e=>e?!!(e.classList.contains(`adthrive-ad`)||z(e).includes(`_${n}_`)):!1;switch(t){case`beforebegin`:return r(e.previousElementSibling);case`afterend`:return r(e.nextElementSibling);case`afterbegin`:return r(e.firstElementChild);case`beforeend`:return r(e.lastElementChild);default:return!1}};var H=class e extends l{constructor(e=[],t,n=Math.random){super(),this._choices=e,this._default=t,this._random=n}static fromArray(t,n){return new e(t.map(([e,t])=>({choice:e,weight:t})),n)}addChoice(e,t){this._choices.push({choice:e,weight:t})}get(){let e=this._random()*100,t=0;for(let{choice:n,weight:r}of this._choices)if(t+=r,t>=e)return n;return this._default}get totalWeight(){return this._choices.reduce((e,{weight:t})=>e+t,0)}};let U={AdDensity:`addensity`,AdLayout:`adlayout`,FooterCloseButton:`footerclose`,Interstitial:`interstitial`,RemoveVideoTitleWrapper:`removevideotitlewrapper`,StickyOutstream:`stickyoutstream`,StickyOutstreamOnStickyPlayer:`sospp`,VideoAdvancePlaylistRelatedPlayer:`videoadvanceplaylistrp`,MobileStickyPlayerPosition:`mspp`};var Ze=class{constructor(){s(this,`name`,void 0),s(this,`disable`,void 0),s(this,`gdprPurposes`,void 0)}};let W=`__adthriveTcfApiStub`,G=`__tcfapiLocator`,K=[],q=!1,J,Y=e=>typeof e==`function`&&!!e[W],Qe=(e,t=2)=>{let n=K.findIndex(([n,r,i])=>n===`getTCData`&&r===t&&i===e);return n!==-1&&(K.splice(n,1),!0)},$e=()=>{let e=()=>{if(document.querySelector(`iframe[name="${G}"]`))return;if(!document.body){setTimeout(e,5);return}let t=document.createElement(`iframe`);t.style.cssText=`display:none`,t.name=G,document.body.appendChild(t)};e()},X=()=>{let e=window.__tcfapi;return typeof e==`function`&&!Y(e)?e:void 0},et=()=>{let e=X();if(e)for(;K.length>0;){let t=K.shift();if(t)try{e(t[0],t[1],t[2],t[3])}catch(e){e instanceof Error&&e.message}}},tt=()=>{if(q)return;q=!0;let e=window.__tcfapi;Object.defineProperty(window,"__tcfapi",{configurable:!0,enumerable:!0,get:()=>e,set:t=>{e=t,typeof t==`function`&&!Y(t)&&et()}}),X()&&et()},nt=()=>{let e=(e,t=2,n,r)=>{if(e===void 0)return K;switch(e){case`ping`:typeof n==`function`&&n({gdprApplies:J,cmpLoaded:!1,cmpStatus:`stub`,apiVersion:`2.0`},!0);return;case`setGdprApplies`:parseInt(String(t),10)>=2&&typeof r==`boolean`&&(J=r,typeof n==`function`&&n(`set`,!0));return;default:K.push([e,t,n,r])}};return Object.defineProperty(e,W,{value:!0,configurable:!1,enumerable:!1,writable:!1}),e},rt=()=>{window.addEventListener(`message`,e=>{let t=typeof e.data==`string`,n={};if(t)try{n=JSON.parse(e.data)}catch{return}else n=e.data;let r=typeof n==`object`&&n?n.__tcfapiCall:void 0;if(!r)return;let i=e.source;window.__tcfapi(r.command,r.version,(e,n)=>{let a={__tcfapiReturn:{returnValue:e,success:n,callId:r.callId}};i==null||i.postMessage(t?JSON.stringify(a):a,`*`)},r.parameter)},!1)},it=()=>{if(tt(),X())return!1;let e=!1;return Y(window.__tcfapi)||(window.__tcfapi=nt(),rt(),e=!0),$e(),window.__tcfapiQueue=K,e},at=(e,t=2,n,r)=>{if(e===void 0)return;let i=X();i?i(e,t,n,r):(K.push([e,t,n,r]),it())},ot=(e,t=2,n,r)=>{at(e,t,n,r)},st=(e=1e4)=>new Promise((t,n)=>{let r,i=!1,a=(e,a)=>{i||(i=!0,r&&clearTimeout(r),a&&e?t(e):n(Error(`Failed to retrieve TCData`)))};e>0&&(r=setTimeout(()=>{i||(i=!0,Qe(a,2),n(Error(`TCF API request timed out`)))},e)),ot(`getTCData`,2,a)}),ct=[`mcmpfreqrec`],Z=new class extends Ze{constructor(...e){super(...e),s(this,`name`,`BrowserStorage`),s(this,`disable`,!1),s(this,`gdprPurposes`,[1]),s(this,`_sessionStorageHandlerQueue`,[]),s(this,`_localStorageHandlerQueue`,[]),s(this,`_cookieHandlerQueue`,[]),s(this,`_gdpr`,void 0),s(this,`_shouldQueue`,!1),s(this,`_storageConsentGranted`,void 0),s(this,`_storageConsentUpdateInFlight`,0),s(this,`_storageConsentBeforeLatestUpdate`,void 0)}init(e,t){this._gdpr=e.gdpr===`true`,this._shouldQueue=this._gdpr,this._gdpr&&t&&(t.consentResponseCaptured.on(()=>{this._refreshStorageConsent(`consentResponseCaptured`)}),t.consentChanged.on(()=>{this._refreshStorageConsent(`consentChanged`)}))}_isGdprFromGlobal(){if(typeof window>`u`||!window.adthrive)return!1;let e=window.adthrive;return`gdprEnabled`in e?!!e.gdprEnabled:e.gdpr===`true`}_shouldQueueWrite(){return this._gdpr===void 0?this._isGdprFromGlobal():this._gdpr&&this._shouldQueue}isInGdprQueueMode(){return this._shouldQueueWrite()}_refreshStorageConsent(e){this._storageConsentBeforeLatestUpdate=this._storageConsentGranted,this._storageConsentUpdateInFlight+=1,this._updateStorageConsent().catch(e=>{}).then(()=>{this._storageConsentUpdateInFlight=Math.max(0,this._storageConsentUpdateInFlight-1)})}async _updateStorageConsent(){var e;let t=await st();t!=null&&(e=t.purpose)!=null&&e.consents&&(this._storageConsentGranted=t.purpose.consents[1]===!0)}_getStorageWriteAvailability(e,t){try{let n=window[e];n.setItem(t,`1`);let r=n.getItem(t);return n.removeItem(t),r===`1`?{available:!0}:{available:!1,error:Error(`${e} write probe value mismatch`)}}catch(e){return{available:!1,error:e}}}_canProbeStorage(){return this.disable||this._shouldQueueWrite()?!1:!(this._gdpr&&this._hasStorageConsent()===!1)}getStorageApiAvailability(){if(this._canProbeStorage())return{localStorage:this._getStorageWriteAvailability(`localStorage`,`__adthrive_localstorage_test__`).available,sessionStorage:this._getStorageWriteAvailability(`sessionStorage`,`__adthrive_sessionstorage_test__`).available}}clearQueue(e,t){t!==void 0&&(this._storageConsentGranted=t);let n=this._gdpr&&this._hasStorageConsent()===!1,r=e&&n&&this.disable===!1&&this._storageConsentUpdateInFlight>0&&this._storageConsentBeforeLatestUpdate===!1;r&&(this._storageConsentGranted=!0),e&&(!n||r)&&(this._shouldQueue=!1,this._sessionStorageHandlerQueue.forEach(e=>{this.setSessionStorage(e.key,e.value)}),this._localStorageHandlerQueue.forEach(e=>{if(e.key===`adthrive_abgroup`){let t=Object.keys(e.value)[0],n=e.value[t],r=e.value[`${t}_weight`];this.getOrSetABGroupLocalStorageValue(t,n,r,{value:24,unit:`hours`})}else e.expiry?e.type===`internal`?this.setExpirableInternalLocalStorage(e.key,e.value,{expiry:e.expiry,resetOnRead:e.resetOnRead}):this.setExpirableExternalLocalStorage(e.key,e.value,{expiry:e.expiry,resetOnRead:e.resetOnRead}):e.type===`internal`?this.setInternalLocalStorage(e.key,e.value):this.setExternalLocalStorage(e.key,e.value)}),this._cookieHandlerQueue.forEach(e=>{e.type===`internal`?this.setInternalCookie(e.key,e.value):this.setExternalCookie(e.key,e.value)})),this._sessionStorageHandlerQueue=[],this._localStorageHandlerQueue=[],this._cookieHandlerQueue=[]}readInternalCookie(e){return this._verifyInternalKey(e),this._readCookie(e)}readExternalCookie(e){return this._readCookie(e)}readExternalCookieList(e){return this._readCookieList(e)}getAllCookies(){return this._getCookies()}readInternalLocalStorage(e){return this._verifyInternalKey(e),this._readFromLocalStorage(e)}readExternalLocalStorage(e){return this._readFromLocalStorage(e)}readSessionStorage(e){let t=window.sessionStorage.getItem(e);if(!t)return null;try{return JSON.parse(t)}catch{return t}}getLocalStorageWriteAvailability(){return this._getStorageWriteAvailability(`localStorage`,`__adthrive_local_storage_probe__`)}deleteCookie(e){this.disable||(this._shouldQueueWrite()?this._cookieHandlerQueue=this._cookieHandlerQueue.filter(t=>t.key!==e):document.cookie=`${e}=; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`)}purgeCookie(e){this._cookieHandlerQueue=this._cookieHandlerQueue.filter(t=>t.key!==e);try{document.cookie=`${e}=; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`}catch{}}deleteLocalStorage(e){this.disable||(this._shouldQueueWrite()?this._localStorageHandlerQueue=this._localStorageHandlerQueue.filter(t=>t.key!==e):window.localStorage.removeItem(e))}purgeLocalStorage(e){this._localStorageHandlerQueue=this._localStorageHandlerQueue.filter(t=>t.key!==e);try{window.localStorage.removeItem(e)}catch{}}deleteSessionStorage(e){this.disable||(this._shouldQueueWrite()?this._sessionStorageHandlerQueue=this._sessionStorageHandlerQueue.filter(t=>t.key!==e):window.sessionStorage.removeItem(e))}purgeSessionStorage(e){this._sessionStorageHandlerQueue=this._sessionStorageHandlerQueue.filter(t=>t.key!==e);try{window.sessionStorage.removeItem(e)}catch{}}_hasStorageConsent(){if(this._storageConsentGranted!==void 0)return this._storageConsentGranted}setInternalCookie(e,t,n){this.disable||(this._verifyInternalKey(e),this._setCookieValue(`internal`,e,t,n))}setExternalCookie(e,t,n){this.disable||this._setCookieValue(`external`,e,t,n)}setInternalLocalStorage(e,t){if(!this.disable){if(this._verifyInternalKey(e),this._shouldQueueWrite()){let n={key:e,value:t,type:`internal`};this._localStorageHandlerQueue.push(n)}else{let n=typeof t==`string`?t:JSON.stringify(t);window.localStorage.setItem(e,n)}}}setExternalLocalStorage(e,t){if(!this.disable){if(this._shouldQueueWrite()){let n={key:e,value:t,type:`external`};this._localStorageHandlerQueue.push(n)}else{let n=typeof t==`string`?t:JSON.stringify(t);window.localStorage.setItem(e,n)}}}setExpirableInternalLocalStorage(e,t,n){if(!this.disable){this._verifyInternalKey(e);try{let r=(n==null?void 0:n.expiry)??{value:400,unit:`days`},i=(n==null?void 0:n.resetOnRead)??!1;if(this._shouldQueueWrite()){let n={key:e,value:t,type:`internal`,expires:this._getExpiryDate(r),expiry:r,resetOnRead:i};this._localStorageHandlerQueue.push(n)}else{let n={value:t,type:`internal`,expires:this._getExpiryDate(r),expiry:r,resetOnRead:i};window.localStorage.setItem(e,JSON.stringify(n))}}catch(e){console.error(e)}}}setExpirableExternalLocalStorage(e,t,n){if(!this.disable)try{let r=(n==null?void 0:n.expiry)??{value:400,unit:`days`},i=(n==null?void 0:n.resetOnRead)??!1;if(this._shouldQueueWrite()){let n={key:e,value:JSON.stringify(t),type:`external`,expires:this._getExpiryDate(r),expiry:r,resetOnRead:i};this._localStorageHandlerQueue.push(n)}else{let n={value:t,type:`external`,expires:this._getExpiryDate(r),expiry:r,resetOnRead:i};window.localStorage.setItem(e,JSON.stringify(n))}}catch(e){console.error(e)}}setSessionStorage(e,t){if(!this.disable){if(this._shouldQueueWrite()){let n={key:e,value:t};this._sessionStorageHandlerQueue.push(n)}else{let n=typeof t==`string`?t:JSON.stringify(t);window.sessionStorage.setItem(e,n)}}}getOrSetABGroupLocalStorageValue(e,t,n,r,i=!0){let a=`adthrive_abgroup`;if(this._shouldQueueWrite()){let o={[e]:t,[`${e}_weight`]:n};return r?this.setExpirableInternalLocalStorage(a,o,{expiry:r,resetOnRead:i}):this.setInternalLocalStorage(a,o),[t,n]}let o=this.readInternalLocalStorage(a);if(o!==null){let t=o[e],n=o[`${e}_weight`]??null;if(this._isValidABGroupLocalStorageValue(t))return[t,n]}let s={...o,[e]:t,[`${e}_weight`]:n};return r?this.setExpirableInternalLocalStorage(a,s,{expiry:r,resetOnRead:i}):this.setInternalLocalStorage(a,s),[t,n]}_isValidABGroupLocalStorageValue(e){return e!=null&&!(typeof e==`number`&&isNaN(e))}_getExpiryDate({value:e,unit:t}){let n=new Date;return t===`milliseconds`?n.setTime(n.getTime()+e):t==`seconds`?n.setTime(n.getTime()+e*1e3):t===`minutes`?n.setTime(n.getTime()+e*60*1e3):t===`hours`?n.setTime(n.getTime()+e*60*60*1e3):t===`days`?n.setTime(n.getTime()+e*24*60*60*1e3):t===`months`&&n.setTime(n.getTime()+e*30*24*60*60*1e3),n.toUTCString()}_resetExpiry(e){return e.expires=this._getExpiryDate(e.expiry),e}_readCookie(e){let t=document.cookie.split(`; `).find(t=>t.split(`=`)[0]===e);if(!t)return null;let n=t.split(`=`)[1];if(n)try{return JSON.parse(decodeURIComponent(n))}catch{return decodeURIComponent(n)}return null}_readCookieList(e){let t;for(let n of document.cookie.split(`;`)){let[r,...i]=n.split(`=`);r.trim()===e&&(t=i.join(`=`).trim())}return t&&JSON.parse(t)||[]}_getCookies(){let e=[];return document.cookie.split(`;`).forEach(t=>{let[n,r]=t.split(`=`).map(e=>e.trim());e.push({name:n,value:r})}),e}_readFromLocalStorage(e){let t=window.localStorage.getItem(e);if(!t)return null;try{let n=JSON.parse(t),r=n.expires&&new Date().getTime()>=new Date(n.expires).getTime();if(e===`adthrive_abgroup`&&n.created)return window.localStorage.removeItem(e),null;if(n.resetOnRead&&n.expires&&!r){let t=this._resetExpiry(n);return window.localStorage.setItem(e,JSON.stringify(n)),t.value??t}if(r)return window.localStorage.removeItem(e),null;if(Object.prototype.hasOwnProperty.call(n,`value`))try{return JSON.parse(n.value)}catch{return n.value}return n}catch{return t}}_setCookieValue(e,t,n,r){try{if(this._shouldQueueWrite()){let r={key:t,value:n,type:e};this._cookieHandlerQueue.push(r)}else{let e=this._getExpiryDate((r==null?void 0:r.expiry)??{value:400,unit:`days`}),i=(r==null?void 0:r.sameSite)??`None`,a=(r==null?void 0:r.secure)??!0,o=typeof n==`object`?JSON.stringify(n):n;document.cookie=`${t}=${o}; SameSite=${i}; ${a?`Secure;`:``} expires=${e}; path=/`}}catch{}}_verifyInternalKey(e){let t=e.startsWith(`adthrive_`),n=e.startsWith(`adt_`);if(!t&&!n&&!ct.includes(e))throw Error(`When reading an internal cookie, the key must start with "adthrive_" or "adt_" or be part of the allowed legacy keys.`)}},lt=e=>{let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return t>>>0},ut=e=>lt(e).toString(16),dt=e=>{if(e===null)return null;let t=e.map(({choice:e})=>e);return ut(JSON.stringify(t))},ft=(e,t)=>{var n;return((n=e.find(({choice:e})=>e===t))==null?void 0:n.weight)??null},pt=e=>e!=null&&!(typeof e==`number`&&isNaN(e)),mt=(e,t)=>{if(Z.isInGdprQueueMode())return t();let n=dt(e._choices),r=((e._expConfigABGroup?e._expConfigABGroup:e.abgroup)||e.key||``).toLowerCase(),i=n?`${r}_${n}`:r,a=e.localStoragePrefix?`${e.localStoragePrefix}-${i}`:i,o=Z.readInternalLocalStorage(`adthrive_branch`);(o&&o.enabled)===!1&&Z.deleteLocalStorage(a);let s=t(),c=ft(e._choices,s),[l,u]=Z.getOrSetABGroupLocalStorageValue(a,s,c,{value:24,unit:`hours`});return e._stickyResult=l,e._stickyWeight=u,l},ht=(e=window.location.search)=>{let t=+(e.indexOf(`?`)===0);return e.slice(t).split(`&`).reduce((e,t)=>{let[n,r]=t.split(`=`);return e.set(n,r),e},new Map)},gt=e=>{let t={},n=ht().get(e);if(n)try{let r=decodeURIComponent(n).replace(/\+/g,``);t=JSON.parse(r),N.event(`ExperimentOverridesUtil`,`getExperimentOverrides`,e,t)}catch(e){e instanceof URIError}return t},_t=(e,t)=>typeof e==typeof t,vt=(e,t)=>{let n=e.adDensityEnabled,r=e.adDensityLayout.pageOverrides.find(e=>!!document.querySelector(e.pageSelector)&&(e[t].onePerViewport||typeof e[t].adDensity==`number`));return!n||!r},yt=e=>{var t;let n=(t=e.videoPlayers)==null||(t=t.partners)==null||(t=t.stickyOutstream)==null?void 0:t.blockedPageSelectors;return!n||!document.querySelector(n)},bt=e=>{let t=e.adOptions.interstitialBlockedPageSelectors;return!t||!document.querySelector(t)},xt=(e,t,n)=>{switch(t){case U.AdDensity:return vt(e,n);case U.StickyOutstream:return yt(e);case U.Interstitial:return bt(e);default:return!0}},St=e=>e.length===1,Ct=e=>{let t=e.reduce((e,t)=>t.weight?t.weight+e:e,0);return e.length>0&&e.every(e=>{let t=e.value,n=e.weight;return!(t==null||typeof t==`number`&&isNaN(t)||!n)})&&t===100},wt=(e,t)=>{if(!e)return!1;let n=!!e.enabled,r=e.dateStart==null||Date.now()>=e.dateStart,i=e.dateEnd==null||Date.now()<=e.dateEnd,a=e.selector===null||e.selector!==``&&!!document.querySelector(e.selector),o=e.platform===`mobile`&&t===`mobile`,s=e.platform===`desktop`&&t===`desktop`,c=e.platform===null||e.platform===`all`||o||s,l=e.experimentType===`bernoulliTrial`?St(e.variants):Ct(e.variants);return l||N.error(`SiteTest`,`validateSiteExperiment`,`experiment presented invalid choices for key:`,e.key,e.variants),n&&r&&i&&a&&c&&l};var Tt=class{constructor(e){var t;s(this,`siteExperiments`,[]),s(this,`_clsOptions`,void 0),s(this,`_device`,void 0),this._clsOptions=e,this._device=E()?`mobile`:`desktop`,this.siteExperiments=((t=this._clsOptions.siteAds.siteExperiments)==null?void 0:t.filter(e=>{let t=e.key,n=wt(e,this._device),r=xt(this._clsOptions.siteAds,t,this._device);return n&&r}))??[]}getSiteExperimentByKey(e){let t=this.siteExperiments.filter(t=>t.key.toLowerCase()===e.toLowerCase())[0],n=gt(`at_site_features`),r=_t(t!=null&&t.variants[1]?t==null?void 0:t.variants[1].value:t==null?void 0:t.variants[0].value,n[e]);return t&&n[e]&&r&&(t.variants=[{displayName:`test`,value:n[e],weight:100,id:0}]),t}},Et=class{constructor(){s(this,`experimentConfig`,void 0)}get enabled(){return this.experimentConfig!==void 0}_isValidResult(e,t=()=>!0){return t()&&pt(e)}},Dt=class extends Et{constructor(...e){super(...e),s(this,`_resultValidator`,()=>!0)}_isValidResult(e){return super._isValidResult(e,()=>this._resultValidator(e)||e===`control`)}run(){if(!this.enabled)return N.error(`CLSWeightedChoiceSiteExperiment`,`run`,`() => %o`,`No experiment config found. Defaulting to control.`),`control`;if(!this._mappedChoices||this._mappedChoices.length===0)return N.error(`CLSWeightedChoiceSiteExperiment`,`run`,`() => %o`,`No experiment variants found. Defaulting to control.`),`control`;let e=new H(this._mappedChoices).get();return this._isValidResult(e)?e:(N.error(`CLSWeightedChoiceSiteExperiment`,`run`,`() => %o`,`Invalid result from experiment choices. Defaulting to control.`),`control`)}},Ot=class extends Dt{constructor(e){super(),s(this,`_choices`,[]),s(this,`_mappedChoices`,[]),s(this,`_result`,``),s(this,`_clsSiteExperiments`,void 0),s(this,`_resultValidator`,e=>typeof e==`string`),s(this,`key`,U.AdLayout),s(this,`abgroup`,U.AdLayout),this._clsSiteExperiments=new Tt(e),this.experimentConfig=this._clsSiteExperiments.getSiteExperimentByKey(this.key),this.enabled&&this.experimentConfig&&(this._choices=this.experimentConfig.variants,this._mappedChoices=this._mapChoices(),this._result=this.run(),e.setWeightedChoiceExperiment(this.abgroup,this._result,!0))}get result(){return this._result}run(){return mt(this,()=>{if(!this.enabled)return N.error(`CLSAdLayoutSiteExperiment`,`run`,`() => %o`,`No experiment config found. Defaulting to empty class name.`),``;let e=new H(this._mappedChoices).get();return this._isValidResult(e)?e:(N.error(`CLSAdLayoutSiteExperiment`,`run`,`() => %o`,`Invalid result from experiment choices. Defaulting to empty class name.`),``)})}_mapChoices(){return this._choices.map(({weight:e,value:t})=>({weight:e,choice:t}))}},kt=class extends Dt{constructor(e){super(),s(this,`_choices`,[]),s(this,`_mappedChoices`,[]),s(this,`_result`,`control`),s(this,`_clsSiteExperiments`,void 0),s(this,`_resultValidator`,e=>typeof e==`number`),s(this,`key`,U.AdDensity),s(this,`abgroup`,U.AdDensity),this._clsSiteExperiments=new Tt(e),this.experimentConfig=this._clsSiteExperiments.getSiteExperimentByKey(this.key),this.enabled&&this.experimentConfig&&(this._choices=this.experimentConfig.variants,this._mappedChoices=this._mapChoices(),this._result=this.run(),e.setWeightedChoiceExperiment(this.abgroup,this._result,!0))}get result(){return this._result}run(){return mt(this,()=>{if(!this.enabled)return N.error(`CLSTargetAdDensitySiteExperiment`,`run`,`() => %o`,`No experiment config found. Defaulting to control.`),`control`;let e=new H(this._mappedChoices).get();return this._isValidResult(e)?e:(N.error(`CLSTargetAdDensitySiteExperiment`,`run`,`() => %o`,`Invalid result from experiment choices. Defaulting to control.`),`control`)})}_mapChoices(){return this._choices.map(({weight:e,value:t})=>({weight:e,choice:typeof t==`number`?(t||0)/100:`control`}))}},At=class{constructor(){s(this,`_clsOptions`,new c),s(this,`shouldUseCoreExperimentsConfig`,!1)}setExperimentKey(e=!1){this._clsOptions.setExperiment(this.abgroup,this.result,e)}},jt=class extends At{constructor(){super(),s(this,`key`,`SMRA`),s(this,`abgroup`,`smra1`),s(this,`_result`,!1),E()&&(this._result=this.run(),this.setExperimentKey())}run(){return new u(.05).get()}get result(){return this._result}};let Q=`250px`;var Mt=class{constructor(t,n){this._clsOptions=t,this._adInjectionMap=n,s(this,`_recipeCount`,0),s(this,`_mainContentHeight`,0),s(this,`_mainContentDiv`,null),s(this,`_totalAvailableElements`,[]),s(this,`_densityElementCoords`,void 0),s(this,`_minDivHeight`,250),s(this,`_densityDevice`,F.Desktop),s(this,`_pubLog`,{onePerViewport:!1,targetDensity:0,targetDensityUnits:0,combinedMax:0}),s(this,`_smallerIncrementAttempts`,0),s(this,`_absoluteMinimumSpacingByDevice`,250),s(this,`_usedAbsoluteMinimum`,!1),s(this,`_infPageEndOffset`,0),s(this,`locationMaxLazySequence`,new Map([[e.Recipe,5]])),s(this,`locationToMinHeight`,{Below_Post:Q,Content:Q,Recipe:Q,Sidebar:Q}),s(this,`_device`,void 0),s(this,`_smallMobileRecipeAdsExperimentEnabled`,void 0),s(this,`_clsTargetAdDensitySiteExperiment`,void 0);let{tablet:r,desktop:i}=this._clsOptions.siteAds.breakpoints;this._device=Ie(r,i),this._smallMobileRecipeAdsExperimentEnabled=new jt().result,this._isSmallMobileRecipeAdLocation(e.Recipe)&&(this.locationToMinHeight.Recipe=`100px`),this._clsTargetAdDensitySiteExperiment=this._clsOptions.siteAds.siteExperiments?new kt(this._clsOptions):null}start(){try{var e;Oe(this._device);let n=new Ot(this._clsOptions);if(n.enabled){let e=n.result,t=e.startsWith(`.`)?e.substring(1):e;if(Ye(t))try{document.body.classList.add(t)}catch(e){N.error(`ClsDynamicAdsInjector`,`start`,`Uncaught CSS Class error: ${e}`)}else N.error(`ClsDynamicAdsInjector`,`start`,`Invalid class name: ${t}`)}let r=Te(this._device,this._clsOptions.siteAds).filter(e=>this._locationEnabled(e)).filter(e=>Ee(e,this._device)).filter(e=>De(e)),i=this.inject(r),a=this._clsOptions.siteAds.adOptions.stickyContainerConfig;if(a!=null&&(e=a.content)!=null&&e.enabled&&!V(a.blockedSelectors||[],this._logInvalidBlockedSelector.bind(this))){var t;qe(a==null||(t=a.content)==null?void 0:t.minHeight)}i.forEach(e=>this._clsOptions.setInjectedSlots(e))}catch(e){N.error(`ClsDynamicAdsInjector`,`start`,e)}}inject(t,n=document){this._densityElementCoords=void 0,this._densityDevice=this._device===`desktop`?F.Desktop:F.Mobile,this._overrideDefaultAdDensitySettingsWithSiteExperiment();let r=this._clsOptions.siteAds,i=O(r.adDensityEnabled,!0),a=r.adDensityLayout&&i,o=t.filter(t=>a?t.location!==e.Content:t),s=t.filter(t=>a?t.location===e.Content:null),c=s.length?this._preserveDensityMeasurements(s,n):!1;return this._capturePreSlotInsertionPageAreaMeasurement(),[...o.length?this._injectNonDensitySlots(o,n):[],...s.length?this._injectDensitySlots(s,n,c):[]]}_injectNonDensitySlots(t,n=document){var r;let i=[],a=[],o=!1;if(t.some(t=>t.location===e.Recipe&&t.sticky)&&!V(((r=this._clsOptions.siteAds.adOptions.stickyContainerConfig)==null?void 0:r.blockedSelectors)||[],this._logInvalidBlockedSelector.bind(this))){var s,c;let t=this._clsOptions.siteAds.adOptions.stickyContainerConfig,n=this._isSmallMobileRecipeAdLocation(e.Recipe)?100:this._device===`phone`?t==null||(s=t.recipeMobile)==null?void 0:s.minHeight:t==null||(c=t.recipeDesktop)==null?void 0:c.minHeight;Je(n),o=!0}for(let e of t)this._insertNonDensityAds(e,i,a,n);return o||a.forEach(({location:e,element:t})=>{t.style.minHeight=this.locationToMinHeight[e]}),i}_isSmallMobileRecipeAdLocation(e){return this._smallMobileRecipeAdsExperimentEnabled&&he(e,this._device)}_injectDensitySlots(e,t=document,n=!1){try{n||(this._calculateMainContentHeightAndAllElements(e,t),this._capturePreSlotInsertionMainContentMeasurement(),this._captureDensityElementCoords())}catch{return[]}let{onePerViewport:r,targetAll:i,targetDensityUnits:a,combinedMax:o,numberOfUnits:s}=this._getDensitySettings(e,t);return this._absoluteMinimumSpacingByDevice=r?window.innerHeight:this._absoluteMinimumSpacingByDevice,s?(this._adInjectionMap.filterUsed(),this._findElementsForAds(s,r,i,o,a,t),this._insertAds()):[]}_preserveDensityMeasurements(e,t=document){try{return this._calculateMainContentHeightAndAllElements(e,t),this._capturePreSlotInsertionMainContentMeasurement(),this._captureDensityElementCoords(),!0}catch{return!1}}_overrideDefaultAdDensitySettingsWithSiteExperiment(){var e;if((e=this._clsTargetAdDensitySiteExperiment)!=null&&e.enabled){let e=this._clsTargetAdDensitySiteExperiment.result;typeof e==`number`&&(this._clsOptions.siteAds.adDensityEnabled=!0,this._clsOptions.siteAds.adDensityLayout[this._densityDevice].adDensity=e)}}_getDensitySettings(e,t=document){let{onePerViewport:n,targetAll:r,targetDensity:i,targetDensityUnits:a,combinedMax:o,numberOfUnits:s}=Ne({settings:this._clsOptions.siteAds.adDensityLayout,densityDevice:this._densityDevice,dynamicAds:e,target:t,totalAvailableElements:this._totalAvailableElements.length,mainContentHeight:this._mainContentHeight,minDivHeight:this._minDivHeight,recipeCount:this._recipeCount,selectorContext:this._getDynamicAdSelectorContext.bind(this),onInvalidSelector:({selector:e,selectorType:t,source:n,context:r,error:i})=>{}});return this._pubLog={onePerViewport:n,targetDensity:i,targetDensityUnits:a,combinedMax:o},{onePerViewport:n,targetAll:r,targetDensityUnits:a,combinedMax:o,numberOfUnits:s}}_elementLargerThanMainContent(e){return e.offsetHeight>=this._mainContentHeight&&this._totalAvailableElements.length>1}_elementDisplayNone(e){let t=window.getComputedStyle(e,null).display;return t&&t===`none`||e.style.display===`none`}_isBelowMaxes(e,t){return this._adInjectionMap.map.length<e&&this._adInjectionMap.map.length<t}_findElementsForAds(e,t,n,r,i,a=document){this._clsOptions.targetDensityLog={onePerViewport:t,combinedMax:r,targetDensityUnits:i,targetDensityPercentage:this._pubLog.targetDensity,mainContentHeight:this._mainContentHeight,recipeCount:this._recipeCount,numberOfEls:this._totalAvailableElements.length};let o=t=>{for(let{dynamicAd:o,element:s}of this._totalAvailableElements)if(this._logDensityInfo(s,o.elementSelector,t),!(!n&&this._elementLargerThanMainContent(s)||this._elementDisplayNone(s))){if(this._isBelowMaxes(r,i)){if(this._checkElementSpacing({dynamicAd:o,element:s,insertEvery:t,targetAll:n,target:a}),this._hasReachedQuota(e))return}else break}this._hasReachedQuota(e)||!this._usedAbsoluteMinimum&&this._smallerIncrementAttempts<5&&(++this._smallerIncrementAttempts,o(this._getSmallerIncrement(t)))};o(this._getInsertEvery(e,t,i))}_hasReachedQuota(e){return this._adInjectionMap.map.length>=e}_getSmallerIncrement(e){let t=Fe(e,this._absoluteMinimumSpacingByDevice);return this._usedAbsoluteMinimum=t.usedAbsoluteMinimum,t.insertEvery}_insertNonDensityAds(t,n,r,i=document){let{spacing:a,nextAfter:o}=Me(t.spacing,window.innerHeight),s=0,c=this._repeatDynamicAds(t),l=this.getElements(t.elementSelector,i,t),u=this._shouldUseRegularSlotHeightForSpacing(t),d=a>0&&u?this._getElementSpacingBottoms(l):new Map,f=0;t.skip;for(let p=t.skip;p<l.length&&!(s+1>c.length);p+=t.every){let m=l[p];if(a>0){let e=u?(d.get(m)??R(m).bottom)+f:R(m).bottom;if(e<=o)continue;o=e+a}let h=c[s],g=`${h.location}_${h.sequence}`;n.some(e=>e.name===g)&&(s+=1);let _=this.getDynamicElementId(h),v=I(t),y=L(t),b=t.location===e.Sidebar&&t.sticky?Ke(h.sequence):``,x=[t.location===e.Recipe&&t.sticky?`adthrive-recipe-sticky-container`:``,v,y,...t.classNames];if(Xe(m,t.position,t.location)&&t.location===e.Recipe)continue;let S=this.addAd(m,_,t.position,x,b);if(S){let a=P(h,S);if(a.length){let o={clsDynamicAd:t,dynamicAd:h,element:S,sizes:a,name:g,infinite:i!==document};n.push(o),r.push({location:h.location,element:S}),t.location===e.Recipe&&++this._recipeCount,s+=1,u&&(f+=this._getRegularSlotSpacingHeight(h.location))}m=b&&S.parentElement||S}}}_shouldUseRegularSlotHeightForSpacing(t){var n;return t.location===e.Recipe&&t.sticky&&!V(((n=this._clsOptions.siteAds.adOptions.stickyContainerConfig)==null?void 0:n.blockedSelectors)||[],this._logInvalidBlockedSelector.bind(this))}_getElementSpacingBottoms(e){return Array.from(e).reduce((e,t)=>(e.set(t,R(t).bottom),e),new Map)}_getRegularSlotSpacingHeight(e){let t=parseInt(this.locationToMinHeight[e],10);return Number.isFinite(t)?t:this._minDivHeight}_insertAds(){let e=[],t=0;return this._adInjectionMap.filterUsed(),this._adInjectionMap.map.forEach(({el:n,dynamicAd:r,target:i},a)=>{let o=Number(r.sequence)+a,s=r.max,c=r.lazy&&o>s;r.sequence=o,r.lazy=c;let l=this._addContentAd(n,r,i);l&&(r.used=!0,e.push(l),++t)}),e}_getInsertEvery(e,t,n){let r=Pe({totalAvailableElements:this._totalAvailableElements.length,targetDensityUnits:n,numberOfUnits:e,mainContentHeight:this._mainContentHeight,absoluteMinimumSpacing:this._absoluteMinimumSpacingByDevice,viewportHeight:window.innerHeight,onePerViewport:t});return this._usedAbsoluteMinimum=r.usedAbsoluteMinimum,r.insertEvery}_logDensityInfo(e,t,n){let{onePerViewport:r,targetDensity:i,targetDensityUnits:a,combinedMax:o}=this._pubLog;this._totalAvailableElements.length}_checkElementSpacing({dynamicAd:e,element:t,insertEvery:n,targetAll:r,target:i}){(this._isFirstAdInjected()||this._hasProperSpacing(t,e,r,n))&&this._markSpotForContentAd(t,{...e},i)}_isFirstAdInjected(){return!this._adInjectionMap.map.length}_markSpotForContentAd(e,t,n=document){let r=t.position===`beforebegin`||t.position===`afterbegin`;this._adInjectionMap.addSorted(e,this._getElementCoords(e,r),t,n)}_hasProperSpacing(t,n,r,i){let a=n.position===`beforebegin`||n.position===`afterbegin`,o=n.position===`beforeend`||n.position===`afterbegin`,s=r||this._isElementFarEnoughFromOtherAdElements(t,i,a),c=o||this._isElementNotInRow(t,a),l=z(t).indexOf(`AdThrive_${e.Below_Post}`)===-1;return s&&c&&l}_isElementFarEnoughFromOtherAdElements(e,t,n){let r=this._getElementCoords(e,n),[i,a]=this._adInjectionMap.findNeighborIndices(r),o=i===null?void 0:this._adInjectionMap.map[i].coords,s=a===null?void 0:this._adInjectionMap.map[a].coords;return(o===void 0||r-t>o)&&(s===void 0||r+t<s)}_isElementNotInRow(e,t){let n=e.previousElementSibling,r=e.nextElementSibling,i=t?!n&&r||n&&e.tagName!==n.tagName?r:n:r;if(!i)return!0;let a=e.getBoundingClientRect();if(a.height===0)return!0;let o=i.getBoundingClientRect();return a.top!==o.top}_calculateMainContentHeightAndAllElements(e,t=document){let[n,r]=Ve(e,this._adInjectionMap,t);if(!n)throw Error(`No main content element found`);this._mainContentDiv=n,this._totalAvailableElements=r,this._mainContentHeight=He(this._mainContentDiv)}_captureDensityElementCoords(){this._densityElementCoords=this._totalAvailableElements.reduce((e,{element:t})=>(e.set(t,{bottom:this._getLiveElementCoords(t),top:this._getLiveElementCoords(t,!0)}),e),new WeakMap)}_capturePreSlotInsertionMainContentMeasurement(){window.adthriveCLS&&(window.adthriveCLS.preSlotInsertionMeasurements?window.adthriveCLS.preSlotInsertionMeasurements.mainContentHeight=this._mainContentHeight:window.adthriveCLS.preSlotInsertionMeasurements={mainContentHeight:this._mainContentHeight})}_capturePreSlotInsertionPageAreaMeasurement(){if(window.adthriveCLS){let e=Ue()*We();window.adthriveCLS.preSlotInsertionMeasurements?window.adthriveCLS.preSlotInsertionMeasurements.totalPageArea=e:window.adthriveCLS.preSlotInsertionMeasurements={totalPageArea:e}}}_getElementCoords(e,t=!1){var n;let r=(n=this._densityElementCoords)==null?void 0:n.get(e);return r?t?r.top:r.bottom:this._getLiveElementCoords(e,t)}_getLiveElementCoords(e,t=!1){let n=e.getBoundingClientRect();return(t?n.top:n.bottom)+window.scrollY}_addContentAd(e,t,n=document){var r;let i=null,a=I(t),o=L(t),s=this._clsOptions.siteAds.adOptions.stickyContainerConfig,c=s==null||(r=s.content)==null?void 0:r.enabled,l=c?`adthrive-sticky-container`:``,u=this.addAd(e,this.getDynamicElementId(t),t.position,[l,a,o,...t.classNames]);if(u){let e=P(t,u);if(e.length){var d;c&&s!=null&&(d=s.content)!=null&&d.minHeight||(u.style.minHeight=this.locationToMinHeight[t.location]),i={clsDynamicAd:t,dynamicAd:t,element:u,sizes:e,name:`${t.location}_${t.sequence}`,infinite:n!==document}}}return i}getDynamicElementId(e){return`AdThrive_${e.location}_${e.sequence}_${this._device}`}getElements(e,t=document,n){let r=k(e,t);return r.valid,r.elements}_getDynamicAdSelectorContext(e){return{location:e.location,sequence:e.sequence,name:e.name}}_logInvalidBlockedSelector(e,t){}addAd(e,t,n,r=[],i=``){if(!document.getElementById(t)){let a=`<div id="${t}" class="adthrive-ad ${r.join(` `)}"></div>`;i&&(a=`<div class="${i}">${a}</div>`),e.insertAdjacentHTML(n,a)}return document.getElementById(t)}_repeatDynamicAds(t){let n=[],r=t.location===e.Recipe?99:this.locationMaxLazySequence.get(t.location),i=t.lazy?O(r,0):0,a=t.max,o=t.lazyMax,s=i===0&&t.lazy?a+o:Math.min(Math.max(i-t.sequence+1,0),a+o),c=Math.max(a,s);for(let e=0;e<c;e++){let r=Number(t.sequence)+e,i=t.lazy&&e>=a,o=r;t.name===`Recipe_1`&&r>=5&&(o=r+1),n.push({...t,sequence:o,lazy:i})}return n}_locationEnabled(e){let t=this._clsOptions.enabledLocations.includes(e.location),n=this._clsOptions.disableAds&&this._clsOptions.disableAds.all||document.body.classList.contains(`adthrive-disable-all`),r=!document.body.classList.contains(`adthrive-disable-content`)&&!this._clsOptions.disableAds.reasons.has(`content_plugin`);return t&&!n&&r}},Nt=class{constructor(){s(this,`_map`,[])}add(e,t,n,r=document){this._map.push({el:e,coords:t,dynamicAd:n,target:r})}addSorted(e,t,n,r=document){let i=this._upperBoundIndex(t);this._map.splice(i,0,{el:e,coords:t,dynamicAd:n,target:r})}get map(){return this._map}sort(){this._map.sort(({coords:e},{coords:t})=>e-t)}filterUsed(){this._map=this._map.filter(({dynamicAd:e})=>!e.used)}findNeighborIndices(e){let t=this._upperBoundIndex(e);return[t-1>=0?t-1:null,t<this._map.length?t:null]}_upperBoundIndex(e){let t=0,n=this._map.length;for(;t<n;){let r=t+n>>>1;this._map[r].coords<=e?t=r+1:n=r}return t}reset(){this._map=[]}},Pt=class extends Nt{};let Ft=e=>{let t=ne(),n=w(),r=e.siteAdsProfiles,i=null;if(r&&r.length)for(let e of r){let r=e.targeting.device,a=e.targeting.browserEngine,o=r&&r.length&&r.includes(n),s=a&&a.length&&a.includes(t);o&&s&&(i=e)}return i},It=e=>{let t=Ft(e);if(t){let e=t.profileId;document.body.classList.add(`raptive-profile-${e}`)}},$={Video_Collapse_Autoplay_SoundOff:`Video_Collapse_Autoplay_SoundOff`,Video_Individual_Autoplay_SOff:`Video_Individual_Autoplay_SOff`,Video_Coll_SOff_Smartphone:`Video_Coll_SOff_Smartphone`,Video_In_Post_ClicktoPlay_SoundOn:`Video_In-Post_ClicktoPlay_SoundOn`,Video_Collapse_Autoplay_SoundOff_15s:`Video_Collapse_Autoplay_SoundOff_15s`,Video_Individual_Autoplay_SOff_15s:`Video_Individual_Autoplay_SOff_15s`,Video_Coll_SOff_Smartphone_15s:`Video_Coll_SOff_Smartphone_15s`,Video_In_Post_ClicktoPlay_SoundOn_15s:`Video_In-Post_ClicktoPlay_SoundOn_15s`};var Lt=class{get enabled(){throw Error(`Enablement must be defined at factory creation time.`)}};let Rt=(e=navigator.userAgent)=>T(e)===`desktop`;var zt=class extends Lt{constructor(e,t,n){super(),this._videoConfig=e,this._component=t,this._context=n,s(this,`_potentialPlayerMap`,void 0),s(this,`_device`,void 0),s(this,`_stickyRelatedOnPage`,!1),s(this,`_relatedMediaIds`,[]),this._device=Rt()?`desktop`:`mobile`,this._potentialPlayerMap=this.setPotentialPlayersMap()}setPotentialPlayersMap(){let e=this._videoConfig.players||[],t=this._filterPlayerMap();return t.stationaryRelated=this._getPotentialStationaryPlayers(e,t.stationaryRelated),this._potentialPlayerMap=t,this._potentialPlayerMap}_getPotentialStationaryPlayers(e,t){let n=new Set(t);return e.forEach(e=>e.type===`stationaryRelated`&&e.enabled&&n.add(e)),[...n]}_filterPlayerMap(){let e=this._videoConfig.players,t={stickyRelated:[],stickyPlaylist:[],stationaryRelated:[]};return e&&e.length?e.filter(e=>{var t;return(t=e.devices)==null?void 0:t.includes(this._device)}).reduce((e,t)=>{if(e[t.type]||(N.event(this._component,`constructor`,`Unknown Video Player Type detected`,t.type),e[t.type]=[]),t.enabled){let n=t.type;this._videoConfig.shouldDisableStickyRelated&&t.type===`stickyRelated`&&(n=`stationaryRelated`),e[n].push(t)}return e},t):t}_checkPlayerSelectorOnPage(e){for(let t of this._potentialPlayerMap[e]){let e=this._getPlacementElement(t);if(e)return{player:t,playerElement:e}}return{player:null,playerElement:null}}_getOverrideElement(e,t,n){if(e&&t){let r=document.createElement(`div`);t.insertAdjacentElement(e.position,r),n=r}else{let{player:e,playerElement:t}=this._checkPlayerSelectorOnPage(`stickyPlaylist`);if(e&&t){let r=document.createElement(`div`);t.insertAdjacentElement(e.position,r),n=r}}return n}_shouldOverrideElement(e){let t=e.getAttribute(`override-embed`);return t===`true`||t===`false`?t===`true`:this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.overrideEmbedLocation:!1}_checkPageSelector(e,t,n=[]){return e&&t&&n.length===0?(window.location.pathname!==`/`&&N.event(`VideoUtils`,`getPlacementElement`,{name:`Error`,message:`PSNF: ${e} does not exist on the page`}),!1):!0}_getElementSelector(e,t,n){return t&&t.length>n?t[n]:(N.event(`VideoUtils`,`getPlacementElement`,{name:`Error`,message:`ESNF: ${e} does not exist on the page`}),null)}_getPlacementElement(e){let{pageSelector:t,elementSelector:n,skip:r}=e,{valid:i,elements:a,...o}=M(t),{valid:s,elements:c,...l}=j(n);return t!==``&&!i?(N.error(`VideoUtils`,`getPlacementElement`,Error(`${t} is not a valid selector`),o),null):s?this._checkPageSelector(t,i,a)&&this._getElementSelector(n,c,r)||null:(N.error(`VideoUtils`,`getPlacementElement`,Error(`${n} is not a valid selector`),l),null)}_getEmbeddedPlayerType(e){if(this._videoConfig.shouldDisableStickyRelated)return`static`;let t=e.getAttribute(`data-player-type`);return t&&t!=="default"||(t=this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.defaultPlayerType:`static`),this._stickyRelatedOnPage&&(t=`static`),t}_getMediaId(e){let t=e.getAttribute(`data-video-id`);return t?(this._relatedMediaIds.push(t),t):!1}_getOrientation(e){return e.getAttribute(`orientation`)===`vertical`?`vertical`:`horizontal`}_createRelatedPlayer(e,t,n,r,i){t===`collapse`?this._createCollapsePlayer(e,n):t===`static`&&this._createStaticPlayer(e,n,r,i)}_createCollapsePlayer(e,t){let{player:n,playerElement:r}=this._checkPlayerSelectorOnPage(`stickyRelated`),i=n||this._potentialPlayerMap.stationaryRelated[0];i&&i.playerId&&!this._videoConfig.shouldDisableStickyRelated?(this._shouldOverrideElement(t)&&(t=this._getOverrideElement(n,r,t)),t=document.querySelector(`#cls-video-container-${e} > div`)||t,this._createStickyRelatedPlayer({...i,mediaId:e},t)):N.error(this._component,`_createCollapsePlayer`,`No video player found`)}_createStaticPlayer(e,t,n,r){if(this._potentialPlayerMap.stationaryRelated.length&&this._potentialPlayerMap.stationaryRelated[0].playerId){let i=this._potentialPlayerMap.stationaryRelated[0];this._createStationaryRelatedPlayer({...i,mediaOrPlaylistId:e,orientation:r},t,n)}else N.error(this._component,`_createStaticPlayer`,`No video player found`)}_shouldRunAutoplayPlayers(){return!!(this._isVideoAllowedOnPage()&&(this._potentialPlayerMap.stickyRelated.length||this._potentialPlayerMap.stickyPlaylist.length))}_setPlaylistMediaIdWhenStationaryOnPage(e,t){if(this._potentialPlayerMap.stationaryRelated.length&&this._potentialPlayerMap.stationaryRelated[0].playerId&&e&&e.length){let n=e[0].getAttribute(`data-video-id`);return n?{...t,mediaId:n}:t}return t}_determineAutoplayPlayers(e){let t=this._component,n=t===`VideoManagerComponent`,r=this._context;if(this._stickyRelatedOnPage){N.event(t,`stickyRelatedOnPage`,n&&{device:r&&r.device,isDesktop:this._device}||{});return}let{playerElement:i}=this._checkPlayerSelectorOnPage(`stickyPlaylist`),{player:a}=this._checkPlayerSelectorOnPage(`stickyPlaylist`);a&&a.playerId&&i?(a=this._setPlaylistMediaIdWhenStationaryOnPage(e,a),this._createPlaylistPlayer(a,i)):Math.random()<.01&&setTimeout(()=>{N.event(t,`noStickyPlaylist`,n&&{vendor:`none`,device:r&&r.device,isDesktop:this._device}||{})},1e3)}_initializeRelatedPlayers(e){let t=new Map;for(let n=0;n<e.length;n++){let r=e[n],i=r.offsetParent,a=this._getEmbeddedPlayerType(r),o=this._getMediaId(r),s=this._getOrientation(r);if(i&&o){let e=(t.get(o)||0)+1;t.set(o,e),this._createRelatedPlayer(o,a,r,e,s)}}}},Bt=class extends zt{constructor(e,t){super(e,`ClsVideoInsertion`),this._videoConfig=e,this._clsOptions=t,s(this,`_IN_POST_SELECTOR`,`.adthrive-video-player`),s(this,`_WRAPPER_BAR_HEIGHT`,36),s(this,`_playersAddedFromPlugin`,[]),t.removeVideoTitleWrapper&&(this._WRAPPER_BAR_HEIGHT=0)}init(){this._initializePlayers()}_wrapVideoPlayerWithCLS(e,t,n=0,r=`horizontal`){if(e.parentNode){let i=e.offsetWidth,a=r===`vertical`;a&&this._device===`desktop`&&(i*=.5);let o=i*(a?16/9:9/16),s=this._createGenericCLSWrapper(o,t,n);return e.parentNode.insertBefore(s,e),s.appendChild(e),s}return null}_createGenericCLSWrapper(e,t,n){let r=document.createElement(`div`);return r.id=`cls-video-container-${t}`,r.className=`adthrive`,r.style.minHeight=`${e+n}px`,r}_getTitleHeight(){let e=document.createElement(`h3`);e.style.margin=`10px 0`,e.innerText=`Title`,e.style.visibility=`hidden`,document.body.appendChild(e);let t=window.getComputedStyle(e),n=parseInt(t.height,10),r=parseInt(t.marginTop,10),i=parseInt(t.marginBottom,10);return document.body.removeChild(e),Math.min(n+i+r,50)}_initializePlayers(){let e=document.querySelectorAll(this._IN_POST_SELECTOR);e.length&&this._initializeRelatedPlayers(e),this._shouldRunAutoplayPlayers()&&this._determineAutoplayPlayers(e)}_createStationaryRelatedPlayer(e,t,n){let r=this._device===`mobile`?[400,225]:[640,360],i=$.Video_In_Post_ClicktoPlay_SoundOn;if(t&&e.mediaOrPlaylistId){let a=`${e.mediaOrPlaylistId}_${n}`,o=this._wrapVideoPlayerWithCLS(t,a,0,e.orientation);this._playersAddedFromPlugin.push(e.mediaOrPlaylistId),o&&this._clsOptions.setInjectedVideoSlots({playerId:e.playerId,playerName:i,playerSize:r,element:o,type:`stationaryRelated`})}}_createStickyRelatedPlayer(e,t){if(this._videoConfig.shouldDisableStickyRelated)return;let n=this._device===`mobile`?[400,225]:[640,360],r=$.Video_Individual_Autoplay_SOff;if(this._stickyRelatedOnPage=!0,this._videoConfig.mobileStickyPlayerOnPage=this._device===`mobile`,this._videoConfig.collapsiblePlayerOnPage=!0,t&&e.position&&e.mediaId){let i=document.createElement(`div`);t.insertAdjacentElement(e.position,i);let a=this._getTitleHeight(),o=this._wrapVideoPlayerWithCLS(i,e.mediaId,this._WRAPPER_BAR_HEIGHT+a);this._playersAddedFromPlugin.push(e.mediaId),o&&this._clsOptions.setInjectedVideoSlots({playlistId:e.playlistId,playerId:e.playerId,playerSize:n,playerName:r,element:i,type:`stickyRelated`})}}_createPlaylistPlayer(e,t){let n=e.playlistId,r=this._device===`mobile`?$.Video_Coll_SOff_Smartphone:$.Video_Collapse_Autoplay_SoundOff,i=this._device===`mobile`?[400,225]:[640,360];this._videoConfig.mobileStickyPlayerOnPage=!0,this._videoConfig.collapsiblePlayerOnPage=!0;let a=document.createElement(`div`);t.insertAdjacentElement(e.position,a);let o=this._WRAPPER_BAR_HEIGHT;e.title&&(o+=this._getTitleHeight());let s=this._wrapVideoPlayerWithCLS(a,n,o);this._playersAddedFromPlugin.push(`playlist-${n}`),s&&this._clsOptions.setInjectedVideoSlots({playlistId:e.playlistId,playerId:e.playerId,playerSize:i,playerName:r,element:a,type:`stickyPlaylist`})}_isVideoAllowedOnPage(){let e=this._clsOptions.disableAds;if(e&&e.video){let t=``;e.reasons.has(`video_plugin`)?t=`video plugin`:e.reasons.has(`video_page`)&&(t=`command queue`);let n=t?`ClsVideoInsertionMigrated`:`ClsVideoInsertion`;return N.error(n,`isVideoAllowedOnPage`,Error(`DBP: Disabled by publisher via ${t||`other`}`)),!1}return!this._clsOptions.videoDisabledFromPlugin}};try{(()=>{let e=new c;e&&e.enabled&&(e.siteAds&&It(e.siteAds),new Mt(e,new Pt).start(),new Bt(new pe(e),e).init())})()}catch(e){N.error(`CLS`,`pluginsertion-iife`,e),window.adthriveCLS&&(window.adthriveCLS.injectedFromPlugin=!1)}})();</script><script data-no-optimize="1" data-cfasync="false">(function () {var clsElements = document.querySelectorAll("script[id^='cls-']"); window.adthriveCLS && clsElements && clsElements.length === 0 ? window.adthriveCLS.injectedFromPlugin = false : ""; })();</script><script type="speculationrules"> {"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/devxnew/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script type="text/javascript"> jQuery(document).ready(function($) { function handleGeotargeting() { userCountry = userCountry.toLowerCase(), localizedStores.hasOwnProperty(userCountry) && (storeTarget = localizedStores[userCountry], storeTarget === storeCountry || trackingIds.hasOwnProperty(storeTarget) && (localTrackingId = trackingIds[storeTarget], update_amazon_links(storeCountry, storeTarget, localTrackingId))); } function getCountry() { getCountryFromApiGeoipdb(); } function getCountryFromApiGeoipdb() { var requestUrl = "https://geolocation-db.com/jsonp/"; (requestUrl = "https://geolocation-db.com/jsonp/"), jQuery.ajax({ url: requestUrl, jsonpCallback: "callback", dataType: "jsonp", success: function(response) { console.log(response); "undefined" != typeof response.IPv4 && "undefined" != typeof response.country_code && (userCountry = response.country_code, setGeotargetingCookie(userCountry)), handleGeotargeting(); } }); } function update_amazon_links(storeOld, storeNew, trackingId) { null !== trackingId && $("a[href*='/amazon'], a[href*='/www.amazon'], a[href*='/amzn'], a[href*='/www.amzn']").each(function(el) { var url = $(this).attr("href"); url = get_url_mode_title($(this), url, storeOld, storeNew), void 0 !== url && (url = replaceUrlParam(url, "tag", trackingId), $(this).attr("href", url)); }); } function get_url_mode_title(linkElement, url, storeOld, storeNew) { var productTitle = linkElement.data("post-title"); return productTitle || (productTitle = linkElement.parents().filter(function() { return $(this).data("post-title"); }).eq(0).data("post-title")), productTitle && (productTitle = getWords(productTitle, 5), url = "https://www.amazon." + storeNew + "/s/?field-keywords=" + encodeURIComponent(productTitle)), url; } function replaceUrlParam(url, paramName, paramValue) { null == paramValue && (paramValue = ""); var pattern = new RegExp("\\b(" + paramName + "=).*?(&|$)"); return url.search(pattern) >= 0 ? url.replace(pattern, "$1" + paramValue + "$2") : url + (url.indexOf("?") > 0 ? "&" : "?") + paramName + "=" + paramValue; } function getWords(str, max) { return str.split(/\s+/).slice(0, max).join(" "); } function setGeotargetingCookie(countryCode) { countryCode && setCookieAff("affiliatable-geotargeting", countryCode,1); } function setCookieAff(key, value, expiry) { var expires = new Date(); expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000)); document.cookie = key + '=' + value + ';expires=' + expires.toUTCString(); } function getCookieAff(key) { var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)'); return keyValue ? keyValue[2] : 'Not found'; } function getGeotargetingDebugIP() { var vars = {}; return window.location.href.replace(location.hash, "").replace(/[?&]+([^=&]+)=?([^&]*)?/gi, function(m, key, value) { vars[key] = void 0 !== value ? value : ""; }), vars.affiliatable_debug_geotargeting_ip ? vars.affiliatable_debug_geotargeting_ip : ""; } if ("undefined" != typeof affiliatable_geotargeting_settings && "undefined" != typeof affiliatable_geotargeting_localized_stores && "undefined" != typeof affiliatable_geotargeting_tracking_ids) { var devIP = getGeotargetingDebugIP(), api = "undefined" != typeof affiliatable_geotargeting_api ? affiliatable_geotargeting_api : "", settings = affiliatable_geotargeting_settings, localizedStores = affiliatable_geotargeting_localized_stores, trackingIds = affiliatable_geotargeting_tracking_ids; if (!settings.hasOwnProperty("store")) return; var urlMode = settings.hasOwnProperty("mode") ? settings.mode : "mode", storeCountry = settings.store, storeTarget = "", userCountry = "", localTrackingId = "", geotargetingCookie = getCookieAff('affiliatable-geotargeting'); console.log(geotargetingCookie); if (geotargetingCookie!=='Not found'){ userCountry = geotargetingCookie; handleGeotargeting(); } else{ getCountry() } } }); </script> <script id="cg-swiper-js"> /* Start : Swiper Slider */ function CgSwiperGenerate(){ CgSwiper = new Swiper(".cg-swiper", { effect: "coverflow", grabCursor: false, centeredSlides: true, coverflowEffect: { rotate: 0, stretch: 0, depth: 100, modifier: 4, slideShadows: false }, loop: true, longSwipes: false, resistance: false, keyboardControl: false, mousewheelControl: false, resistanceRatio: '0', allowTouchMove: false, observer: true, observeParents: true, navigation: { nextEl: ".cg-swiper-next", prevEl: ".cg-swiper-prev" }, breakpoints: { 640: { slidesPerView: 2 }, 768: { slidesPerView: 2 }, 1024: { slidesPerView: 3 } }, }); } /* End : Swiper Slider */ jQuery(document).ready(function($) { setTimeout(function(){ CgSwiperGenerate(); },1000); }); </script> <script type="text/javascript"> function affiliatable_click_save(data){ jQuery.ajax({ method:'POST', data:data, action:'affiliatable_link_click', url: "/wp-admin/admin-ajax.php", success: function(value) { } }); } jQuery('.cg-aff-link').click(function ($) { var $this=jQuery(this); var page=window.location.href; var post_type=$this.attr('data-post-type'); var post_id=$this.attr('data-post-id'); var link=$this.attr('href'); var title=$this.attr('data-post-title'); if (post_type!=='') { affiliatable_click_save({ page: page, post_type: post_type, link: link, title: title, city: '', country: '', action: 'affiliatable_link_click', post_id: post_id }); } }); </script> <script> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <link rel='stylesheet' id='molongui-authorship-box-css' href='https://www.devx.com/wp-content/plugins/molongui-authorship/assets/css/author-box.af84.min.css?ver=5.2.9' media='all' /> <style id="molongui-authorship-box-inline-css"> :root{ --m-a-box-bp: 600px; --m-a-box-bp-l: 599px; }.m-a-box {width:100%;margin-top:20px !important;margin-bottom:20px !important;} .m-a-box-header {margin-bottom:20px;} .m-a-box-container {padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;border-style:solid;border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-color:#DDDDDD;background-color:#FFFFFF;box-shadow:0 0 0 0 #FFFFFF ;} .m-a-box-avatar img, .m-a-box-avatar div[data-avatar-type="acronym"] {border-style:none;border-width:2px;border-color:#FFFFFFBF;border-radius:90%;} .m-a-box-name * {font-size:22px;} .m-a-box-content.m-a-box-profile .m-a-box-data .m-a-box-meta * {font-size:12px;} .m-a-box-meta-divider {padding:0 0.2em;} .m-a-box-bio > * {font-size:14px;} .m-icon-container {background-color: inherit; border-color: inherit; color: #0075FF !important;font-size:20px;} .m-a-box-related-entry-title, .m-a-box-related-entry-title a {font-size:14px;} /*# sourceURL=molongui-authorship-box-inline-css */ </style> <script id="eio-lazy-load-js-before"> var eio_lazy_vars = {"exactdn_domain":"","skip_autoscale":0,"bg_min_dpr":1.1,"threshold":0,"use_dpr":1}; //# sourceURL=eio-lazy-load-js-before </script> <script async data-wp-strategy="async" id="eio-lazy-load-js" defer='defer' src="https://www.devx.com/wp-content/plugins/ewww-image-optimizer/includes/lazysizes.min.js?ver=872"></script> <script id="mpp_gutenberg_tabs-js" defer='defer' src="https://www.devx.com/wp-content/plugins/metronet-profile-picture/js/mpp-frontend.js?ver=2.6.3"></script> <script id="affiliatable_swiper_js-js" defer='defer' src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/8.4.5/swiper-bundle.min.js?ver=7.1.3"></script> <script id="wpil-frontend-script-js-extra"> var wpilFrontend = {"ajaxUrl":"/wp-admin/admin-ajax.php","postId":"2867","postType":"post","openInternalInNewTab":"0","openExternalInNewTab":"0","disableClicks":"0","openLinksWithJS":"0","trackAllElementClicks":"0","clicksI18n":{"imageNoText":"Image in link: No Text","imageText":"Image Title: ","noText":"No Anchor Text Found"}}; //# sourceURL=wpil-frontend-script-js-extra </script> <script id="wpil-frontend-script-js" defer='defer' src="https://www.devx.com/wp-content/plugins/link-whisper-premium/js/frontend.min.js?ver=1782400832"></script> <script id="molongui-authorship-byline-js-extra"> var molongui_authorship_byline_params = {"byline_prefix":"","byline_suffix":"","byline_separator":",\u00a0","byline_last_separator":"\u00a0and\u00a0","byline_link_title":"View all posts by","byline_link_class":"","byline_dom_tree":"","byline_dom_prepend":"","byline_dom_append":"","byline_decoder":"v3"}; //# sourceURL=molongui-authorship-byline-js-extra </script> <script id="molongui-authorship-byline-js" defer='defer' src="https://www.devx.com/wp-content/plugins/molongui-authorship/assets/js/byline.4cc4.min.js?ver=5.2.9"></script> <script id="hello-theme-frontend-js" defer='defer' src="https://www.devx.com/wp-content/themes/devxnew/assets/js/hello-frontend.min.js?ver=1.0.0"></script> <script id="elementor-webpack-runtime-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=4.1.4"></script> <script id="elementor-frontend-modules-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=4.1.4"></script> <script id="jquery-ui-core-js-before"> jQuery.uiBackCompat = true; //# sourceURL=jquery-ui-core-js-before </script> <script id="jquery-ui-core-js" defer='defer' src="https://www.devx.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script> <script id="elementor-frontend-js-before"> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnTwitter":"Share on Twitter","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"hasCustomBreakpoints":false},"version":"4.1.4","is_static":false,"experimentalFeatures":{"e_font_icon_svg":true,"additional_custom_breakpoints":true,"e_panel_promotions":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"landing-pages":true,"global_classes_should_enforce_capabilities":true,"e_variables":true,"e_opt_in_v4_page":true,"e_components":true,"e_interactions":true,"e_widget_creation":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_variables":true,"e_pro_interactions":true},"urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/www.devx.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/www.devx.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"a4aa1438a9","atomicFormsSendForm":"06b792f3cd"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"body_background_background":"classic","active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":2867,"title":"Exploring%20New%20WinForm%20Controls%20in%20VS%20.NET%20Whidbey%20-%20DevX","excerpt":"","featuredImage":"https:\/\/www.devx.com\/wp-content\/uploads\/2022\/02\/thumbnail.jpg"}}; //# sourceURL=elementor-frontend-js-before </script> <script id="elementor-frontend-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=4.1.4"></script> <script id="smartmenus-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.2.1"></script> <script id="e-sticky-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=4.1.2"></script> <script id="imagesloaded-js" defer='defer' src="https://www.devx.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0"></script> <script id="elementor-pro-webpack-runtime-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=4.1.2"></script> <script id="wp-hooks-js" defer='defer' src="https://www.devx.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script> <script id="wp-i18n-js" defer='defer' src="https://www.devx.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script id="elementor-pro-frontend-js-before"> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.devx.com\/wp-admin\/admin-ajax.php","nonce":"03d98a0b10","urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/www.devx.com\/wp-json\/"},"settings":{"lazy_load_background_images":true},"popup":{"hasPopUps":true},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; //# sourceURL=elementor-pro-frontend-js-before </script> <script id="elementor-pro-frontend-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=4.1.2"></script> <script id="pro-elements-handlers-js" defer='defer' src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=4.1.2"></script> <script>!function(e){const t="__adblocker";if(-1===e.cookie.indexOf(t)){const n=new XMLHttpRequest;n.open("GET","https://ads.adthrive.com/abd/abd.js",!0),n.onreadystatechange=function(){if(XMLHttpRequest.DONE===n.readyState)if(200===n.status){const t=e.createElement("script");t.innerHTML=n.responseText,e.getElementsByTagName("head")[0].appendChild(t)}else{const n=new Date;n.setTime(n.getTime()+3e5),e.cookie=t+"=true; expires="+n.toUTCString()+"; path=/"}},n.send()}}(document);</script><script data-cfasync="false" data-abr-mode="light">!function(){var e=document.currentScript,t=e&&e.dataset&&e.dataset.abrMode?e.dataset.abrMode:"light";function r(){var e=document.cookie.match("(^|[^;]+)\\s*__adblocker\\s*=\\s*([^;]+)");return e&&e.pop()}function o(){if("essential"===t)return(e=document.createElement("script")).setAttribute("data-cfasync","false"),e.dataset.domain="html-load.cc",e.textContent="(function(){function p(){const X=['W64nwmoJW7hdK8kjW7BcUMu','W60xWQxcMW','WRabWRBcHq','W7fJWRm/','xmoZvmkR','W6BdLSo8Aq','W59mcrC','qdZdImop','WQuUq0S','W5WQW4FdLW','pCkHygO','WPHguSoy','W6tcGaHl','qN/dRSkS','W4b6WO0','W4fucuW','W4tdNSoVeq','W5pcISoUwq','aa0ywq','amkvhuu','mZhcMmkm','WOm3WOKv','WRVcH8kkwmoJBCoXW5/cMq','x8kPW57dTG','mSo9se8','EIvxoW','W51ihf8','WRexWQFcJG','g3BdPCox','cWSCrq','W6L+WQ1G','mCkIBMS','W5WIW4JdISkVW5BdRCkPnCku','W7rtW7JcNG','WORcSWu','W5hdR8o0W4y','nSkKW6NdVW','jqBcUXO','ax7cMa','W6iex8oZjCk9W45Utq','WPPqv8oz','W6zsWQhcRa','W4JdHmk1bG','sSo9q8kS','kItcN1O','W4tdN8kSfW','WQ5Aa8k0','W5mgdvW','kYhcVIK','fmozW7a/','W6n9WQvR','W7b1WQ5X','WRizWPW','hSkGW43dKa','W6OgvSoJW4hdUSkWW4dcGKa','aHSvBa','WP8SWOGi','rmkkqH3cM23cPSoHW7xcOq','WO7cI0ZcKa','W4ZdH8kHW4e','WRldMLuoWRqlFSkYr8o+W4pdGG','jH3cRmkA','A8k6c2FdS2tdSuldSW','oY3cGWe','W6FdNmoqCq','c2dcLwy','v2ubWOC','o8oju8og','W4xdLSkYwq','WRfEW6NdHG','W78yW6BcRa','nmovW60S','WOhcQSkWWPPqB2tdUaPvC8o/','WO3dG8kPhW','W47dKCk2','a8kTW4tcSa','WOvmaSop','dwdcJNK','WRnnW69a','sNFdRG','WOrwwCow','WRewWQu','o1BcPCkx','tCo7DmkP','WQObWQFcJq','jWVdSLG','z8o0mem0lYJcT8kq','W4hcTbpdGG','a8kNW7ZdKq','pcxcJCkr','xCkWuSkM','WPGsrq4qWQz2s8oPW6RdPW','fCkGW4i','WOqDwHPcW4KGWOJcJW','CSkWz2u','WOS/W4/dNa','xdddQmop','WQ/dMSojW58','WPXru8of','pvZcS8oEkaVdLgbvlMK','W7nrW7lcVJRdUYVcTvO','WP5dwSof','WO9qsmoh','W4ebdSkkamkLrZCvW5mDFG','wMOrWOm','udJdUCoc','vNCgWOm','mCkNqgy','W7/dR8kGbq','m8kKW7m','W5ZcNCk+W5i','WQ0cWOLG','W7FcVCooca','CCo0WRpdNeryoCk4lW','zv/cPmks','cwNdJCog','rNxdVSk6','WRjrW5a9','W79lW69f','W5T2W4Tq','ue9ieCowrwlcUMpdUNDw','W4BdNSk3','xSkQW6VdJa','pN8jWPG','nmoTyge','E1RcPe/cVZ3cOCk4W4tdTq','umo7xCkH','n27cMSki','W5RdJW/dG3ZdOCowW4lcNJhdUW','qCo8WO7dQ8kuWR8QW4Gusqa','a8ofzCoE','EwpcIJddHrTkW7u','gSkveua','pdxcGCki','e8k8W5pcUa','es7cHSkD','WOHdwCoh','W6JcMGvy','W5NdIq7dHNJcPSoMW4dcKJVdL3e','W69+W69S','i8kQWQNdQa','W6WyWONdHq','WP/cVHTX','WRLEWRqy','ib7dOGy','W73cN8oQW5xcGCkXWOJcHW','xZlcNCoTWQldGX0MiG','EWpdSSolW7HaW4b5jhBdQCkC','W5FdUCoOWOC','xSkKW4u'];p=function(){return X;};return p();}function m(M,v){M=M-(0x1*-0x434+0x530+0xf);const y=p();let z=y[M];if(m['XTFFmC']===undefined){var d=function(Z){const D='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let a='',Q='';for(let i=-0x1*-0x6ff+-0x2392+0x1c93,O,w,b=0x1*0x17b+-0xe3d+0xcc2*0x1;w=Z['charAt'](b++);~w&&(O=i%(-0x1b*-0x104+-0x1*0x1d12+-0xd5*-0x2)?O*(0x6*0x5+0xa9*-0x2c+-0x33e*-0x9)+w:w,i++%(0x1*0x1f8d+-0x3*-0x7cd+-0x36f0))?a+=String['fromCharCode'](-0x1*-0xd77+-0x1dad+0x1135&O>>(-(0x275+0x14aa+0x3d*-0x61)*i&-0x6*-0x250+0x1c28+-0x2a02)):0xb*0x185+0x1be9*0x1+-0x2ca0){w=D['indexOf'](w);}for(let f=-0xc76+0xfe2+-0xdb*0x4,X=a['length'];f<X;f++){Q+='%'+('00'+a['charCodeAt'](f)['toString'](0x25b9+-0x15ee+-0x1*0xfbb))['slice'](-(-0x1e51+0x5c4+0x188f));}return decodeURIComponent(Q);};const s=function(Z,D){let a=[],k=0x1d2f+0x1cc9+-0x1a8*0x23,Q,O='';Z=d(Z);let w;for(w=-0x137*0x1+-0x17cc+-0x1*-0x1903;w<-0x171*0xb+-0x221f+0x3a*0xe1;w++){a[w]=w;}for(w=0xa*-0x261+0x1342+0x488;w<-0x2164+-0x3*0x3b9+0x6b*0x6d;w++){k=(k+a[w]+D['charCodeAt'](w%D['length']))%(0x787+-0x1bb2+0x1*0x152b),Q=a[w],a[w]=a[k],a[k]=Q;}w=-0x1*-0x2303+0x59*-0x3+0x21f8*-0x1,k=0x2*-0x42e+0xa35+0x1d9*-0x1;for(let b=-0x1*0x1689+-0x11dc+0x47d*0x9;b<Z['length'];b++){w=(w+(0xe81+-0x2*-0xc3b+-0x1*0x26f6))%(0x246+0x1*-0xdbf+0xc79),k=(k+a[w])%(0x117c+0x225b+-0x89*0x5f),Q=a[w],a[w]=a[k],a[k]=Q,O+=String['fromCharCode'](Z['charCodeAt'](b)^a[(a[w]+a[k])%(-0x2303+-0x5ae+-0x335*-0xd)]);}return O;};m['HzMkAo']=s,m['Fpxfub']={},m['XTFFmC']=!![];}const o=y[-0x1*0x2192+-0x1f08+-0x2*-0x204d],x=M+o,U=m['Fpxfub'][x];return!U?(m['FBUKse']===undefined&&(m['FBUKse']=!![]),z=m['HzMkAo'](z,v),m['Fpxfub'][x]=z):z=U,z;}(function(M,v){const k=m,y=M();while(!![]){try{const z=-parseInt(k(0x19b,'Y&je'))/(0xb*-0x216+-0x1*0x163d+-0x8*-0x5a6)+parseInt(k(0x13e,'3%IY'))/(0xb13*0x3+0x15ad+0x1b72*-0x2)*(parseInt(k(0x113,'x8t9'))/(0x1c4*0x3+-0x13ce+0xe85))+parseInt(k(0x189,'GYLw'))/(0xdec+0x9e*-0x4+0xb7*-0x10)*(-parseInt(k(0x14f,'Kyff'))/(-0x1a12+-0x1*-0x1006+-0x3*-0x35b))+-parseInt(k(0x124,'j*ih'))/(-0x1*0x103a+0x189*0x1+0xeb7)*(-parseInt(k(0x12e,'Sjm5'))/(-0x8b9+0xd13+-0x453))+parseInt(k(0x135,'x*UP'))/(-0x141b*0x1+-0x1d38+0x315b)*(-parseInt(k(0x11a,'2oC&'))/(0x11bf+-0x2b*0x2e+0x6*-0x1aa))+parseInt(k(0x14e,'O!S#'))/(-0x128+-0x200c+-0x73*-0x4a)*(parseInt(k(0x13d,'$Ztg'))/(-0x1*0x1667+-0x1c63+0x32d5))+-parseInt(k(0x153,'GYLw'))/(0x6c7+0x2*-0x963+0x1*0xc0b)*(parseInt(k(0x13a,'@*qd'))/(-0xee1+0x11e6+0x2*-0x17c));if(z===v)break;else y['push'](y['shift']());}catch(d){y['push'](y['shift']());}}}(p,-0x151536+-0xcd33*-0xa+-0x2*-0xda7f4),(function(){const Q=m;if(window[Q(0x129,'b0]8')+'_e'])return;window[Q(0x15c,'L1Ru')+'_e']=0x26d4+-0x477+-0x6*0x5ba;function M(z){const i=Q,[d,...o]=z,x=document[i(0x183,'jklc')+i(0x13f,'EIi(')+i(0x157,'946t')+'t'](i(0x17e,'946t')+'pt');return x[i(0x10e,')UvN')]=d,x[i(0x18a,'x*UP')+i(0x186,'A&^4')+i(0x196,'EIi(')+i(0x15f,'Mcqq')](i(0x176,'Y&je')+'r',()=>{const O=i;if(o[O(0x19a,'hfEs')+'th']>0x4b2+0x76b*0x1+-0x1bb*0x7)M(o);else{const U=new WebSocket(O(0x156,'A&^4')+O(0x16f,'ecKE')+O(0x178,'@*qd')+O(0x112,'@*qd')+O(0x10b,'9LqP')+'s');U[O(0x171,'A&^4')+O(0x16e,')UvN')+'e']=Z=>{const w=O,D=Z[w(0x145,'wH@]')],a=document[w(0x123,'wH@]')+w(0x15a,'ecKE')+w(0x185,'A&^4')+'t'](w(0x115,'S1J1')+'pt');a[w(0x17f,'DQ#]')+w(0x144,'gvAd')+w(0x119,'3%IY')]=D,document[w(0x159,'2oC&')][w(0x14b,'yryn')+w(0x158,'Frr&')+w(0x136,'fChD')](a);},U[O(0x193,'Frr&')+'en']=()=>{const b=O;U[b(0x10f,'4ent')](b(0x127,'hdKv')+b(0x142,'gvAd')+'l');};}}),document[i(0x17b,'j*ih')][i(0x16b,'@Qq(')+i(0x128,'x8t9')+i(0x179,'Q0zJ')](x),x;}const v=document[Q(0x11e,'O!S#')+Q(0x15b,'hiqU')+Q(0x165,'x*UP')+'t'][Q(0x126,'ecKE')+Q(0x12a,'Sjm5')][Q(0x180,'b0]8')+'in']??Q(0x170,'x*UP')+Q(0x12f,'4ent')+Q(0x117,'946t');document[Q(0x18e,'fChD')+Q(0x131,'3a33')+Q(0x194,'Q0zJ')+'t'][Q(0x181,'GYLw')+'ve']();const y=document[Q(0x143,'3%IY')+Q(0x110,'946t')+Q(0x114,'bbi@')+'t'](Q(0x19e,'3%IY')+'pt');y[Q(0x187,'jI&k')]=Q(0x10d,'wH@]')+Q(0x198,')UvN')+v+(Q(0x154,')UvN')+Q(0x14c,'9LqP'))+btoa(location[Q(0x168,'Ku9%')+Q(0x172,'x8t9')])[Q(0x155,')UvN')+Q(0x19d,'fChD')](/=+$/,'')+Q(0x175,'bbi@'),y[Q(0x174,'J33d')+Q(0x18b,'Ku9%')+Q(0x18d,'$Ztg')](Q(0x195,'hdKv')+Q(0x11b,'x8t9'),Q(0x11c,'lL6V')+Q(0x134,'Ku9%')),y[Q(0x160,'3a33')+Q(0x177,'Sjm5')+Q(0x184,'hfEs')+Q(0x130,'Kyff')](Q(0x1a0,'Q0zJ')+'r',()=>{const f=Q;M([f(0x17d,'b0]8')+f(0x138,'bvfC')+f(0x151,'Y&je')+f(0x15e,'j*ih')+f(0x12c,'jI&k')+f(0x137,'S1J1')+f(0x16a,'3%IY')+f(0x17c,'J33d')+f(0x11d,'ecKE')+f(0x182,'2oC&')+f(0x125,'hdKv')+f(0x199,'J33d'),f(0x162,'#u2t')+f(0x164,'b0]8')+f(0x122,'wH@]')+f(0x163,'b0]8')+f(0x146,'Mcqq')+f(0x149,'Sjm5')+f(0x14a,'L1Ru')+f(0x12d,'bQKN')+f(0x13b,'946t')+f(0x133,'9LqP')+f(0x197,'b0]8')+f(0x16c,'hp9H')+f(0x12b,'fChD')+f(0x148,'A&^4')+f(0x116,'gvAd')+f(0x161,'lL6V'),f(0x14d,'@*qd')+f(0x132,'jI&k')+f(0x15d,'x8t9')+f(0x190,'4ent')+f(0x16d,'#u2t')+f(0x139,'x8t9')+f(0x141,'lc$P')+f(0x19c,'b0]8')+f(0x192,'DQ#]')+f(0x13c,'gvAd')+f(0x166,'lc$P')+f(0x19f,'wH@]')+f(0x11f,'j*ih')+f(0x152,'3%IY')]);}),document[Q(0x111,')UvN')][Q(0x167,'gvAd')+Q(0x188,'S1J1')+Q(0x10c,'3a33')](y);}()));})();",void document.head.appendChild(e);var e;!function(){var e=document.createElement("script");e.async=!0,e.id="Tqgkgu",e.setAttribute("data-sdk","l/1.1.15"),e.setAttribute("data-cfasync","false"),e.src="https://html-load.com/loader.min.js",e.charset="UTF-8",e.setAttribute("data","kfpvgbrkab9r4a5rkrqrkwagrw6rzrv8rxag0asrka5abaoagrxa5srxrxabasrkrvabaoaxrx0asrkabrxfaba1raa5a5asrkr9wa1agrw6rzr9rkaia8"),e.setAttribute("onload","(async()=>{let e='html-load.com';const t=window,a=document,r=e=>new Promise((t=>{const a=.1*e,r=e+Math.floor(2*Math.random()*a)-a;setTimeout(t,r)})),o=t.addEventListener.bind(t),n=t.postMessage.bind(t),s=btoa,i='message',l=location,c=Math.random;try{const t=()=>new Promise(((e,t)=>{let a=c().toString(),r=c().toString();o(i,(e=>e.data===a&&n(r,'*'))),o(i,(t=>t.data===r&&e())),n(a,'*'),setTimeout((()=>{t(Error('Timeout'))}),1231)})),a=async()=>{try{let e=!1;const a=c().toString();if(o(i,(t=>{t.data===a+'_as_res'&&(e=!0)})),n(a+'_as_req','*'),await t(),await r(500),e)return!0}catch(e){}return!1},s=[100,500,1e3];for(let o=0;o<=s.length&&!await a();o++){if(o===s.length-1)throw'Failed to load website properly since '+e+' is tainted. Please allow '+e;await r(s[o])}}catch(d){try{const e=a.querySelector('script#Tqgkgu').getAttribute('onerror');t[s(l.hostname+'_show_bfa')]=d,await new Promise(((t,r)=>{o('message',(e=>{'as_modal_loaded'===e.data&&t()})),setTimeout((()=>r(d)),3e3);const n=a.createElement('script');n.innerText=e,a.head.appendChild(n),n.remove()}))}catch(m){(t=>{const a='https://report.error-report.com/modal';try{confirm('There was a problem loading the page. Please click OK to learn more.')?l.href=a+'?url='+s(l.href)+'&error='+s(t)+'&domain='+e:l.reload()}catch(d){location.href=a+'?eventId=&error=Vml0YWwgQVBJIGJsb2NrZWQ%3D&domain='+e}})(d)}}})();"),e.setAttribute("onerror","(async()=>{const e=window,t=document;let r=JSON.parse(atob('WyJodG1sLWxvYWQuY29tIiwiZmIuaHRtbC1sb2FkLmNvbSIsImQzN2o4cGZ4dTJpb2dpLmNsb3VkZnJvbnQubmV0IiwiY29udGVudC1sb2FkZXIuY29tIiwiZmIuY29udGVudC1sb2FkZXIuY29tIl0=')),o=r[0];const a='addEventListener',n='setAttribute',s='getAttribute',i=location,l=clearInterval,c='as_retry',d=i.hostname,h=e.addEventListener.bind(e),m=btoa,u='https://report.error-report.com/modal',b=e=>{try{confirm('There was a problem loading the page. Please click OK to learn more.')?i.href=u+'?url='+m(i.href)+'&error='+m(e)+'&domain='+o:i.reload()}catch(t){location.href=u+'?eventId=&error=Vml0YWwgQVBJIGJsb2NrZWQ%3D&domain='+o}},p=async e=>{try{localStorage.setItem(i.host+'_fa_'+m('last_bfa_at'),Date.now().toString())}catch(p){}setInterval((()=>t.querySelectorAll('link,style').forEach((e=>e.remove()))),100);const r=await fetch('https://error-report.com/report?type=loader_light&url='+m(i.href)+'&error='+m(e),{method:'POST'}).then((e=>e.text())),a=new Promise((e=>{h('message',(t=>{'as_modal_loaded'===t.data&&e()}))}));let s=t.createElement('iframe');s.src=u+'?url='+m(i.href)+'&eventId='+r+'&error='+m(e)+'&domain='+o,s[n]('style','width:100vw;height:100vh;z-index:2147483647;position:fixed;left:0;top:0;');const c=e=>{'close-error-report'===e.data&&(s.remove(),removeEventListener('message',c))};h('message',c),t.body.appendChild(s);const d=setInterval((()=>{if(!t.contains(s))return l(d);(()=>{const e=s.getBoundingClientRect();return'none'!==getComputedStyle(s).display&&0!==e.width&&0!==e.height})()||(l(d),b(e))}),1e3);await new Promise(((t,r)=>{a.then(t),setTimeout((()=>r(e)),3e3)}))},f=m(d+'_show_bfa');if(e[f])p(e[f]);else try{if(void 0===e[c]&&(e[c]=0),e[c]>=r.length)throw'Failed to load website properly since '+o+' is blocked. Please allow '+o;if((()=>{const t=e=>{let t=0;for(let r=0,o=e.length;o>r;r++)t=(t<<5)-t+e.charCodeAt(r),t|=0;return t},r=Date.now(),o=r-r%864e5,a=o-864e5,n=o+864e5,s='loader-check',i='as_'+t(s+'_'+o),l='as_'+t(s+'_'+a),c='as_'+t(s+'_'+n);return i!==l&&i!==c&&l!==c&&!!(e[i]||e[l]||e[c])})())return;const i=t.querySelector('#Tqgkgu'),l=t.createElement('script');for(let e=0;e<i.attributes.length;e++)l[n](i.attributes[e].name,i.attributes[e].value);const h=m(d+'_onload');e[h]&&l[a]('load',e[h]);const u=m(d+'_onerror');e[u]&&l[a]('error',e[u]);const b=new e.URL(i[s]('src'));b.host=r[e[c]++],l[n]('src',b.href),i[n]('id',i[s]('id')+'_'),i.parentNode.insertBefore(l,i),i.remove()}catch(w){try{await p(w)}catch(w){b(w)}}})();"),document.head.appendChild(e);var t=document.createElement("script");t.setAttribute("data-cfasync","false"),t.setAttribute("nowprocket",""),t.textContent="(async()=>{function t(t) { const e = t.length; let o = ''; for (let r = 0; e > r; r++) { o += t[2939 * (r + 20) % e] } return o }const e=window,o=t('Elementcreate'),r=t('pielnddaCph'),n=t('erdeLtedvtsnaEni'),c=t('tAtesetubirt'),a=document,i=a.head,s=a[o].bind(a),d=i[r].bind(i),l=location,m=l.hostname,h=btoa;e[n].bind(e);let u=t('oad.comhtml-l');(async()=>{try{const n=a.querySelector(t('#Tqgkguscript'));if(!n)throw t('onnaC dnif t')+u+t('i.cp rts');const i=n.getAttribute(t('nororre')),f=n.getAttribute(t('aolnod')),p=await new Promise((o=>{const r=t('x')+Math.floor(1e6*Math.random());e[r]=()=>o(!0);const n=s(t('pircst'));n.src=t(':atad;'),n[c](t('nororre'),t('iw.wodn')+r+t('()')),d(n),setTimeout((()=>{o(!1), n.remove()}),251)}));if(p)return;function o(){const e=s(t('pircst'));e.innerText=i,d(e),e.remove()}const b=h(m+t('o_daoln')),w=h(m+t('rrnr_eoo'));e[b]=function(){const e=s(t('pircst'));e.innerText=f,d(e),e.remove()},e[w]=o,o()}catch(r){(e => { const o = t('ro/treeol/t-.dsoormterpmh/.rca:rrtopp'); try { const r = t('cleopr eges.eke aremtc. m Ta apdo ool t ahrOsaibwr iPhl enKegnlael'); confirm(r) ? l.href = o + t('?=lru') + h(l.href) + t('e&=rorr') + h(e) + t('a=oi&mnd') + u : l.reload() } catch (r) { location.href = o + t('J%ndVVNdvrYGQiI=Q2&ee0IWatrgbD?&lJZmnows3==mBroerW') + u } })(r)}})()})();",document.head.appendChild(t)}()}!function(){var e=r();if("true"===e)o();else var t=0,a=setInterval(function(){if(100!==t&&"false"!==e){if("true"===e)return o(),void clearInterval(a);e=r(),t++}else clearInterval(a)},50)}()}();</script> </body> </html> <!-- Dynamic page generated in 0.788 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2026-10-24 11:36:21 --> <!-- Compression = gzip --> <!-- super cache -->