devxlogo

Getting Fancy with FOP

Getting Fancy with FOP

ebster’s Dictionary defines a fop as being synonymous with a “dandy,” a person (usually male) who spends an inordinate amount of time and effort on dress and appearance, sometimes to ludicrous extremes. Think of the gold-chain-festooned white-polyester clad lounge lizard of the 1970s and you’ll get the basic idea. However, as with so many other terms, FOP has resurfaced with a different meaning?as an acronym for the Formatting-Object Processor, part of the Open Source Apache Project. The FOP processor performs an interesting stunt: it converts an XSL-FO file into an Adobe Postscript Description Format (PDF) file.

XSLT and XSL focus on data-centric and document-centric transformations, respectively, but they are related; You need both to create efficient document-to-print transformations. How do XSLT, XSL, and XSL-Formatting Objects (XSL-FO) fit together?

XSL-FO is a page description language. It’s a language specifically designed for working with fairly sophisticated page content; consequently, it can be surprisingly difficult to master well. Rather than coding XSL-FO documents manually it’s far better to create an XSLT document that will handle the transformation for you.

A Little XSL History
PDF files encode detailed information, font content and graphics within a single file, and have become a standard for document display, just as Postscript has become integral in the area of document printing.

The XSL-FO part, on the other hand, requires a little more explanation, as it is a format that many people think they know but really don’t. In the late 1990’s, as the XML standard was coming together, the W3C Stylesheet working group wanted to create a generalized page description language that would be able to convert an XML document into a presentation. Unfortunately HTML, even as XHTML, isn’t apt at detailed presentations, because the very features that make web browser displays convenient, such aslong scrolling panes of information, don’t fare especially well when split into individual pages.

For example, even simple elements such as headers and footers are problematic. Columns are difficult to format effectively. Specifying print dimensions can be frustrating, because the concept of “width” in a web page is very different from the same concept in most printed output. Finally, HTML is very imprecise, even using CSS positioning, therefore you must add proprietary extensions if you want the output to do more than vaguely resemble the quality of print-only media.

Therefore, the stylesheet group recommended an Extensible Stylesheet Language (or XSL) that would include two components – a descriptive language for formatting specific content, and a transformative language for converting XML into the descriptive language. As it turned out, the simpler of the two languages ended up being the transformation language, which, because it was originally deemed the less essential of the two tasks, was given the name Extensible Stylesheet Language for Transformations, or XSLT. However, as XML has become more data-centric, the role of XSLT as a mechanism for general transformations has become much, much more prominent, while the rest of the XSL specification was relegated to the background.

Eventually though, the XSL recommendation was released, in October, 2001?nearly two years after the XSLT recommendation. Because of the extreme prominence that XSLT has achieved, even though the recommendation is titled Extensible Stylesheet Language (XSL), the page-description portion of XSL is commonly called XSL-FO, where FO stands for Formatting Objects (hence FOP).

A Short XSL-FO Primer
XSL-FO is a page description language. It’s a language specifically designed for working with fairly sophisticated page content; consequently, it can be surprisingly difficult to master well. You won’t be throwing away your copy of Quark or Pagemaker any time soon?but don’t be surprised to see Pagemaker?also an Adobe product?generating XSL-FO eventually. Adobe is perhaps the prime mover behind XSL-FO, though IBM, Sun, Xerox, and other companies also helped author of the XSL Recommendation.

XSL-FO uses the fo: namespace, xmlns:fo = “http://www.w3.org/1999/XSL/Format”, to identify fo: elements contained within a element that acts something akin to HTML’s tag. The document then defines a set of “layout masters”, which can be thought of as templates for different page types, which set the dimensions and general characteristics of each specific type of page. For example, you could create two masters, one for the left page and one for the right, because such pages generally are mirror symmetric in terms of margins. A third master page might define a title page.

I created a very simplified (ad hoc) XML schema to describing the sample document included with this article (although you could easily use something like DocBook to do much the same thing). The schema isn’t the formatting code; it’s just a simple “logical” breakdown of the document (see Listing 1).

Author Note:: The sample document contains an early version of this article?there may be minor differences between the sample document and the final version.

The XSL-FO markup for this document can look a little intimidating, but it’s actually pretty straightforward. All XSL-FO documents begin with a that contains the markup and declares the fo: namespace

The next element should be a layout master set. This is a collection of masters that the document requires. For the current article, the name of this simple page master is (not surprisingly) “mainPage”, but it could be pretty much anything?the master-name attribute just provides a value to refer to the page master:

   

The page master defines the height and width of the page, as well as the dimensions of the margins. Note that the units involved can be any standard CSS units: inches (in), centimeters (cm), millimeters (mm), points (pt), etc. These dimensions are printer page dimensions?if you wanted to print to an 11×17 broadside, for example, you’d specify a page-height of “17in” and a page-width of “11in”. The margins define the actual “printable” area on that page, given as an offset from the page itself along the respective axis.

The page itself is then broken into three distinct areas?the region-before, used to set header information (such as the title of the article), the region-after, which holds footer information such as page numbers, and the region-body, which is the active area where the process inserts the body of the text. The margins here work relative to the margins defined by the page itself, with the extents giving the amount before or after the body that the headers or footers extend respectively.:

         

This defines one master, but it doesn’t tell the order that the master appears. You do that in the page sequence master, which can describe both single instances and repeating collections of pages. The “simpleDoc” sequence master in the following example consists of nothing but repeating page masters named “mainPage.”

            

After defining the page sequence master, you can begin adding content. For a given page sequence adding content involves both defining static content?content such as footers or headers that either do not change or change predictably (such as page numbers) across multiple pages?and flow content, which consists of the main body of the article. You should declare the static content for the header first:

         XML 10 Minute Solution: Getting Fancy With FOP      

The master-name attribute in the element indicates that the page sequence should use the page master defined under page-sequence block just given. The element in turn sets the contents for the header (flow-name=”xsl-region-before”) or the footer (flow-name=”xsl-region-after”). Perhaps the most pervasive element in XSL-FO documents is the element. The element defines a block region, which is analogous to a block within CSS or a

element within HTML. A block defines a rectangular region of text, whether as a paragraph, a collection of paragraphs, a sidebar, a headline or any other layout element that has a bounding rectangle. The opposite of a element is an element, which places the contents of this block within the current flow structure. An element can be thought of as being analogous to an HTML element, or the CSS inline property.

A note about attributes. Many of the attributes you’ll see within both and elements may seem familiar if you’re used to CSS. A big reason for this is that these tags are CSS based, whenever possible. One useful way to envision XSL-FO is to see it a framework for applying CSS in a purely XML environment. The XSL-FO elements define specific entities?parts of pages, regions, or even sections within text?while the attributes basically provide the media description about how those parts look and act.

The footer demonstrates that static content isn’t really all that static:

      Copyright 2001 Cagle Communications --    Page       

The footer content includes the element, which updates from one iteration to the next. The page-number is quite customizable, by the way, employing the same formatting convention that XSLT uses. For example, if you wanted to number elements by capital Roman numerals you’d add the format attribute to the element (note that you don’t add it to the element). Doing that would number the pages in the sequence I, II, III, IV, V, VI, etc., inserting the number at the position of the element.

The final (and arguably most important) part of the document is the region. This contains, for each page sequence, the region into which the template flows the body of text. Unlike static content, which you explicitly set to reside on a given page, the flow content flows from one page to the next, creating new pages when there’s insufficient space on the previous page. The vast majority of the contents within a element will consist of elements.

For example, Listing 2 contains a flow object that shows the title, subtitle, author, and the first paragraph of the article itself

   Getting Fancy With FOP         Creating Adobe Acrobat Files from XSLT and XSL-FO         by Kurt Cagle         Webster's Dictionary defines a fop as being synonymous    with a "dandy," a person (usually male) who spends an    inordinate amount of time and effort on dress and    appearance, sometimes to ludicrous extremes. Think of    the gold-chain-festooned white-polyester clad lounge    lizard of the 1970s and you'll get the basic idea.    However, as with so many other terms, FOP has    resurfaced with a different meaning—as an acronym for    the Formatting-Object Processor, part of the Open    Source Apache Project. The FOP processor performs an    interesting stunt: it converts an XSL-FO file into an    Adobe Postscript Description Format  (PDF) file.         

Finally, the blocks may potentially contain in-line elements. An inline element, as mentioned earlier, is an element that is part of the flow of text. For example, in HTML the element is an inline element that sets the font-weight of the enclosed text to “bold”. In the article, rather than creating and elements, which give no real clue as to why they are bold or italic, I have instead three distinct inline elements: , for emphasis, and to easily create an angle bracketed element. For example, the document presents the element visually as:

   <tag>   

Note that the example given here is very simple?the full XSL-FO specification is more than 300 printed pages in length, and can be extraordinarily complicated. However, that size makes it robust enough to handle a wide variety of applications.

Creating XSL-FO Using XSLT
The full code to describe even a relatively simple XSL-FO document like this one can easily be overwhelming if you attempt to write the XSL-FO code by hand, especially because there’s a great deal of repetition. Ideally, rather than coding a FO document manually (which you should do once, but only once) it’s far better to create an XSLT document that will handle the transformation for you. Fortunately, such transformations are fairly easy to generate.

For example, the file createFOP.xsl contains the transformation for this document. The element declaring the stylesheet namespaces requires two namespaces?one for XML-FO and one for XSLT:

  

Additionally, set the method attribute of the so the stylesheet generates xml output (method=”xml”) and so the result has elements indented, and does not include the XML declaration.

   

The next step to create any kind of document navigator is to figure out how to handle unspecified children. For instance, while the stylesheet uses both the and elements, the XSLT handles them directly in the template that matches the element. To ensure that the content of these elements don’t just “spill out” to the output stream, the stylesheet supports a template matching otherwise untrapped elements or attributes and simply fails to pass them to the output stream. Text elements, on the other hand, usually do need to be passed to the output stream. The following set of match templates handles both of these problems:

            

The template match puts in most of the boilerplate code, including the page dimension definitions and the footer, header and body region. It attempts to match elements in the order that they are encountered (more or less) in the source document, though in general it’s a good idea to explicitly declare the ordering in the stylesheet itself.

                                                                                                                                                               :                                                                         Copyright  - Page                                                                                  

Much of the remainder of the stylesheet generates the appropriate

elements with the prerequisite attributes, and generally have the form:

                           

The element instructs the XSLT processor to find all child elements, attributes and text blocks for the current node and apply the relevant transformation to them. Because the code for handling unknown XML elements already exists, if the stylesheet doesn’t explicitly handle a child element in the source, it simply passes the text of that unknown element into the output stream.

The one single contentious area in this stylesheet involved displaying XML code. XSL-FO does not have an element analogous to the HTML

</span>, which preserves the content and formatting of HTML and XML code. Consequently, to display large blocks of code, you must break each line into its own distinct <span class="pf"><fo:block></span>. Because it&#8217;s unlikely that you would want to wrap thousands of lines of code manually, a better solution is to automate the process, in this case with a named template called codeWrite:</p> <pre><code><xsl:template match="code"> <fo:block font-size="10pt" font-family="Courier" line-height="12pt" text-align="left" padding-left="0.5in" padding-right="0.5in" space-after.optimum="10pt" space-before.optimum="5pt"> <xsl:call-template name="codeWrite"> <xsl:with-param name="buffer" select="string(.)"/> </xsl:call-template> </fo:block> </xsl:template> <xsl:template name="codeWrite"> <xsl:param name="buffer"/> <xsl:variable name="bufferBefore" select="substring-before($buffer,'&#13;')"/> <!-- note that the <xsl:variable name="bufferTest" select="translate($bufferBefore, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvxyz1234567890-=_+& <xsl:variable name="spaceCount" select="string-length( substring-before($bufferTest,'#'))"/> <fo:block margin-left= "0.{number($spaceCount) * 5}in"> <xsl:value-of select="$bufferBefore"/> </fo:block> <xsl:variable name="newBuffer" select="substring-after ($buffer,'&#13;')"/> <xsl:choose> <xsl:when test="$newBuffer != ''"> <xsl:call-template name="codeWrite"> <xsl:with-param name="buffer" select="$newBuffer"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <fo:block> <xsl:value-of select="$newBuffer"/> </fo:block> </xsl:otherwise> </xsl:choose> </xsl:template></code></pre> <p>The <span class="pf">codeWrite</span> routine accepts a block of text and scans for carriage returns. After it finds and extracts the first part of the string, it then determines how much white space is at the beginning of the string (by turning everything else but spaces into hash characters and then retrieving the part of the string before the first encountered hash). The length of this whitespace is then converted into a margin value to indicate how far to indent the line of code.</p> <p>The routine then passes the remainder of the buffered text (after the first carriage return) as a parameter to a recursive <span class="pf">codeWrite</span> call, where the whole process repeats with the truncated string. Eventually, th routine can't retrieve any more strings and the recursive call ends. Because the buffer is written to the output stream each time, this scheme walks through each line of the code. Note that for this to work with XML code, the code must be in a CDATA element:</p> <pre><code> <code>< ![CDATA[ <text>Here is some text</text> ]] ></code></code></pre> <p>Just as with generating HTML from XML, XSLT transformations into XSL-FO can range from being relatively simple to downright Byzantine. The one major notable difference between HTML (especially with CSS) and XSL-FO stems from the fact that XSL-FO does not define the notion of a CSS-like class attribute. Thus, in general, the associations between a given tag (such as the <span class="pf"><code></span> element) and its rendering in XSL-FO tend to be considerably more redundant than HTML code. XSL-FO was intended primarily for print publication, so this redundancy actually makes a great deal of sense, because XSL-FO is intended to be a target of an XSLT transformation, not a hybrid logical/presentation/DOM structure like HTML.</p> <p><strong>Processing FOP</strong><br />XSL-FO by itself is simply a formatting standard?to do anything with it you need to have some kind of processor which will convert the contents of the file into a fully formatted page. Currently, there are few "native" processors for XSL-FO, the most notable one currently being the Antenna House XSL Formatter from Japan. The FOP project was essentially begun as a way to preview XSL-FO, and it has the added benefit of outputting content compatible with the Adobe Acrobat format, which currently is one of the mostly widely available page layout viewers in use on the web.</p> <p>The <a href="http://xml.apache.org/fop/" target="_blank">FOP project</a> is now a part of the <a href="http://xml.apache.org" target="_blank">Apache Open Source project</a>, so it's designed for use with Apache and Cocoon?a content management system that's also part of the work done with Apache.</p> <p>The FOP binary is a set of Java classes that you can invoke directly through the command line or via batch files. On Windows, the package also includes a command line .bat file which you can (with a little finagling) invoke anywhere. You can also integrate the FOP Java classes into Java applications or Servlets to generate PDF files on the fly.</p> <p>XSL-FO is an interesting technology. While it's arguably still trying to determine its true direction, it's also increasingly likely to fill the role of creating hard copy from information on the fly, a task at which HTML is not especially adept, because the onus of such work falls not on the language itself but the specific browser implementation.</p> </div> </div> <div class="elementor-element elementor-element-2298440 elementor-widget elementor-widget-image" data-id="2298440" data-element_type="widget" data-widget_type="image.default"> <div class="elementor-widget-container"> <img width="150" height="68" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-thumbnail size-thumbnail wp-image-24484 ewww_webp" alt="devxblackblue" sizes="(max-width: 150px) 100vw, 150px" data-src-img="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png" data-src-webp="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png.webp" data-srcset-webp="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png.webp 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png.webp 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png.webp 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png.webp 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png.webp 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png.webp 2000w" data-srcset-img="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png 2000w" data-eio="j" /><noscript><img width="150" height="68" src="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png" class="attachment-thumbnail size-thumbnail wp-image-24484" alt="devxblackblue" srcset="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png 2000w" sizes="(max-width: 150px) 100vw, 150px" /></noscript> </div> </div> <div class="elementor-element elementor-element-b24b1f0 elementor-widget elementor-widget-heading" data-id="b24b1f0" data-element_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 class="elementor-element elementor-element-bf49e8d elementor-widget elementor-widget-text-editor" data-id="bf49e8d" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style> <p>At DevX, we&#8217;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&#8217;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-0f1a6bf elementor-widget elementor-widget-heading" data-id="0f1a6bf" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <h2 class="elementor-heading-title elementor-size-default">About Our Journalist</h2> </div> </div> <div class="elementor-element elementor-element-4b5870b elementor-author-box--link-yes elementor-author-box--align-left elementor-author-box--name-yes elementor-author-box--biography-yes elementor-widget elementor-widget-author-box" data-id="4b5870b" data-element_type="widget" data-widget_type="author-box.default"> <div class="elementor-widget-container"> <div class="elementor-author-box"> <div class="elementor-author-box__text"> <a href="https://www.devx.com/author/devx-admin/"> <h3 class="elementor-author-box__name"> Charlie Frank </h3> </a> <div class="elementor-author-box__bio"> 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. </div> <a class="elementor-author-box__button elementor-button elementor-size-xs" href="https://www.devx.com/author/devx-admin/"> View Author </a> </div> </div> </div> </div> </div> </div> </div> </section> <div class="elementor-element elementor-element-fe66bf1 elementor-hidden-desktop elementor-hidden-tablet elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts" data-id="fe66bf1" data-element_type="widget" data-settings="{&quot;classic_columns&quot;:&quot;3&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}" data-widget_type="posts.classic"> <div class="elementor-widget-container"> <link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-posts.min.css"> <div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid"> <article class="elementor-post elementor-grid-item post-47805 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47804 ewww_webp" alt="&quot;Senior Security Adjustment&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" class="attachment-full size-full wp-image-47804" alt="&quot;Senior Security Adjustment&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > Proposed Act Aims to Adjust Social Security for Seniors </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47797 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47796 ewww_webp" alt="&quot;Stability Holds&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" class="attachment-full size-full wp-image-47796" alt="&quot;Stability Holds&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > USD/JPY stability holds amidst market ambiguities </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47799 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47798 ewww_webp" alt="&quot;Silver Demand Surge&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" class="attachment-full size-full wp-image-47798" alt="&quot;Silver Demand Surge&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > Silver prices surge amid increasing demand </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47825 post type-post status-publish format-standard has-post-thumbnail hentry category-entrepreneurship"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" > <div class="elementor-post__thumbnail"><img width="940" height="788" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47829 ewww_webp" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" data-src-img="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg.webp" data-eio="j" /><noscript><img width="940" height="788" src="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" class="attachment-full size-full wp-image-47829" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" > Is Online Bookkeeping the Ideal Side Gig for Remote Workers? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Philip Piletic </span> <span class="elementor-post-date"> April 18, 2024 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47707 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-treasury-yields tag-u-s-dollar tag-ukraine"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47706 ewww_webp" alt="&quot;Stock Stability&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" class="attachment-full size-full wp-image-47706" alt="&quot;Stock Stability&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" > Global stock stability amid rising US interest rates </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 18, 2024 </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47718 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-dell-technologies tag-open-standard-risc-v tag-puneet-kumar tag-rivos-inc tag-walden-catalyst"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47716 ewww_webp" alt="&quot;AI Chip Launch&quot;" data-src-img="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" class="attachment-full size-full wp-image-47716" alt="&quot;AI Chip Launch&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" > Rivos Inc. raises $250 million pre-launch for AI chips </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> </div> </div> </article> </div> </div> </div> <div class="elementor-element elementor-element-39bd7056 elementor-grid-1 elementor-posts--thumbnail-left elementor-hidden-mobile elementor-grid-tablet-2 elementor-grid-mobile-1 load-more-align-center elementor-widget elementor-widget-posts" data-id="39bd7056" data-element_type="widget" data-settings="{&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;pagination_type&quot;:&quot;load_more_on_click&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;load_more_spinner&quot;:{&quot;value&quot;:&quot;fas fa-spinner&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}" data-widget_type="posts.classic"> <div class="elementor-widget-container"> <div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid"> <article class="elementor-post elementor-grid-item post-47805 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47804 ewww_webp" alt="&quot;Senior Security Adjustment&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47804" alt="&quot;Senior Security Adjustment&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > Proposed Act Aims to Adjust Social Security for Seniors </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 8:33 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47797 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47796 ewww_webp" alt="&quot;Stability Holds&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47796" alt="&quot;Stability Holds&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > USD/JPY stability holds amidst market ambiguities </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 8:27 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47799 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47798 ewww_webp" alt="&quot;Silver Demand Surge&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47798" alt="&quot;Silver Demand Surge&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > Silver prices surge amid increasing demand </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 7:52 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47825 post type-post status-publish format-standard has-post-thumbnail hentry category-entrepreneurship"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" > <div class="elementor-post__thumbnail"><img width="940" height="788" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47829 ewww_webp" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" data-src-img="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg.webp" data-eio="j" /><noscript><img width="940" height="788" src="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47829" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" > Is Online Bookkeeping the Ideal Side Gig for Remote Workers? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Philip Piletic </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 2:49 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47707 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-treasury-yields tag-u-s-dollar tag-ukraine"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47706 ewww_webp" alt="&quot;Stock Stability&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47706" alt="&quot;Stock Stability&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" > Global stock stability amid rising US interest rates </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:44 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47718 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-dell-technologies tag-open-standard-risc-v tag-puneet-kumar tag-rivos-inc tag-walden-catalyst"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47716 ewww_webp" alt="&quot;AI Chip Launch&quot;" data-src-img="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47716" alt="&quot;AI Chip Launch&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" > Rivos Inc. raises $250 million pre-launch for AI chips </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:19 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47703 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-bitcoin tag-casey-rodarmor tag-goldman-sachs tag-mainnet tag-x-layer"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/goldman-sachs-advises-caution-in-predicting-bitcoin-prices/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47702 ewww_webp" alt="Bitcoin Caution" data-src-img="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47702" alt="Bitcoin Caution" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/goldman-sachs-advises-caution-in-predicting-bitcoin-prices/" > Goldman Sachs advises caution in predicting Bitcoin prices </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:14 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47711 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-cost-of-living-adjustment tag-social-security-benefits"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/predicted-rise-in-social-security-benefits-amid-inflation/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47710 ewww_webp" alt="Inflation Predicted Rise" data-src-img="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47710" alt="Inflation Predicted Rise" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/predicted-rise-in-social-security-benefits-amid-inflation/" > Predicted rise in social security benefits amid inflation </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:09 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47705 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-asian-trading tag-federal-reserve tag-gold-prices tag-sanctions-on-russia"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/gold-prices-dip-amid-assertive-fiscal-comments/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47704 ewww_webp" alt="Assertive Gold Dip" data-src-img="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47704" alt="Assertive Gold Dip" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/gold-prices-dip-amid-assertive-fiscal-comments/" > Gold prices dip amid assertive fiscal comments </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:46 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47720 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/vorlon-raises-15-7m-to-strengthen-api-security/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47719 ewww_webp" alt="&quot;Vorlon API Security&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47719" alt="&quot;Vorlon API Security&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/vorlon-raises-15-7m-to-strengthen-api-security/" > Vorlon raises $15.7M to strengthen API security </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:28 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47709 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-aprils-final-social-security tag-social-security-payments"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/last-april-social-security-disbursement-approaching/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47708 ewww_webp" alt="April Disbursement" data-src-img="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47708" alt="April Disbursement" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/last-april-social-security-disbursement-approaching/" > Last April social security disbursement approaching </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:16 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47715 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-founders-fund tag-napoleon-ta tag-rippling tag-silicon-valley-bank"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rippling-to-pursue-substantial-funding-round/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47714 ewww_webp" alt="Rippling Pursuit" data-src-img="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47714" alt="Rippling Pursuit" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rippling-to-pursue-substantial-funding-round/" > Rippling to pursue substantial funding round </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 8:33 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47713 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-justin-simpson tag-o-j-simpson"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/simpsons-lawyer-battles-to-protect-estate-from-goldmans/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47712 ewww_webp" alt="&quot;Lawyer Estate Battle&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47712" alt="&quot;Lawyer Estate Battle&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/simpsons-lawyer-battles-to-protect-estate-from-goldmans/" > Simpson&#8217;s lawyer battles to protect estate from Goldmans </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 8:31 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47658 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-retirement-payments"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/aprils-social-security-retirement-payments-underway/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47657 ewww_webp" alt="April&#039;s Retirement" data-src-img="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47657" alt="April&#039;s Retirement" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/aprils-social-security-retirement-payments-underway/" > April&#8217;s Social Security retirement payments underway </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:54 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47667 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-ev-chargers tag-rivian"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rivian-develops-software-to-rank-ev-chargers/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47666 ewww_webp" alt="&quot;EV Charger Ranking&quot;" data-src-img="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47666" alt="&quot;EV Charger Ranking&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rivian-develops-software-to-rank-ev-chargers/" > Rivian develops software to rank EV chargers </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:50 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47660 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-goldman-family tag-o-j-simpson"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/simpsons-will-leaves-goldman-family-uncompensated/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47659 ewww_webp" alt="Simpson&#039;s Uncompensated Will" data-src-img="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47659" alt="Simpson&#039;s Uncompensated Will" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/simpsons-will-leaves-goldman-family-uncompensated/" > Simpson&#8217;s will leaves Goldman family uncompensated </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> April Isaacs </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:26 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47664 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-framework tag-nirav-patel"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/framework-grapples-with-software-sustainability-issues/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47663 ewww_webp" alt="&quot;Sustainability Framework&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47663" alt="&quot;Sustainability Framework&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/framework-grapples-with-software-sustainability-issues/" > Framework grapples with software sustainability issues </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 3:44 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47652 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/surprising-economic-growth-attributed-to-chinas-robust-exports-and-domestic-demand/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47651 ewww_webp" alt="Robust Export Growth" data-src-img="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47651" alt="Robust Export Growth" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/surprising-economic-growth-attributed-to-chinas-robust-exports-and-domestic-demand/" > Surprising economic growth attributed to China&#8217;s robust exports and domestic demand </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 3:04 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47656 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/cobol-at-65-still-a-powerhouse-in-the-tech-industry/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47655 ewww_webp" alt="&quot;COBOL Powerhouse&quot;" data-src-img="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47655" alt="&quot;COBOL Powerhouse&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/cobol-at-65-still-a-powerhouse-in-the-tech-industry/" > COBOL at 65: still a powerhouse in the tech industry </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 1:59 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47654 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/californias-minimum-wage-hike-worries-restaurateurs/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47653 ewww_webp" alt="&quot;Wage Hike Worries&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47653" alt="&quot;Wage Hike Worries&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/californias-minimum-wage-hike-worries-restaurateurs/" > California&#8217;s minimum wage hike worries restaurateurs </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 1:05 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47669 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/irs-introduces-user-friendly-free-tax-software-direct-file/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47668 ewww_webp" alt="&quot;Direct File&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47668" alt="&quot;Direct File&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/irs-introduces-user-friendly-free-tax-software-direct-file/" > IRS introduces user-friendly, free tax software &#8216;Direct File&#8217; </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 11:10 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47662 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/social-security-cola-rise-expects-to-strain-retirees-finances/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47661 ewww_webp" alt="&quot;COLA Strain&quot;" data-src-img="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47661" alt="&quot;COLA Strain&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/social-security-cola-rise-expects-to-strain-retirees-finances/" > Social Security COLA rise expects to strain retirees&#8217; finances </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 7:11 AM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47607 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-hope-murray tag-seniors"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rising-living-costs-force-seniors-back-to-work/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47606 ewww_webp" alt="&quot;Seniors Workforce&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Seniors-Workforce.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Seniors-Workforce.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Seniors-Workforce.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47606" alt="&quot;Seniors Workforce&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rising-living-costs-force-seniors-back-to-work/" > Rising living costs force seniors back to work </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 16, 2024 </span> <span class="elementor-post-time"> 5:28 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47597 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/gershanok-leaves-mckinsey-discusses-workplace-challenges/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47596 ewww_webp" alt="&quot;Workplace Challenges&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Workplace-Challenges.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Workplace-Challenges.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Workplace-Challenges.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47596" alt="&quot;Workplace Challenges&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/gershanok-leaves-mckinsey-discusses-workplace-challenges/" > Gershanok leaves McKinsey, discusses workplace challenges </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> April Isaacs </span> <span class="elementor-post-date"> April 16, 2024 </span> <span class="elementor-post-time"> 3:31 PM </span> </div> </div> </article> <article class="elementor-post elementor-grid-item post-47599 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/indias-economy-hangs-on-election-outcome/" > <div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47598 ewww_webp" alt="&quot;Economy Election Outcome&quot;" data-src-img="https://www.devx.com/wp-content/uploads/Economy-Election-Outcome.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Economy-Election-Outcome.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Economy-Election-Outcome.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47598" alt="&quot;Economy Election Outcome&quot;" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/news/indias-economy-hangs-on-election-outcome/" > India&#8217;s economy hangs on election outcome </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 16, 2024 </span> <span class="elementor-post-time"> 3:28 PM </span> </div> </div> </article> </div> <span class="e-load-more-spinner"> <i aria-hidden="true" class="fas fa-spinner"></i> </span> <div class="e-load-more-anchor" data-page="1" data-max-page="792" data-next-page="https://www.devx.com/get-help/20353/2/"></div> <div class="elementor-button-wrapper"> <a href="#" class="elementor-button-link elementor-button 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" data-id="270dc71" data-element_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"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-2f83f51 elementor-widget elementor-widget-html" data-id="2f83f51" data-element_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-story-id="auto" data-gtm="true" data-layout="overlay" ></ins> </div> </div> </div> </div> </div> </section> </div> </div> <footer data-elementor-type="footer" data-elementor-id="23300" class="elementor elementor-23300 elementor-location-footer"> <div class="elementor-section-wrap"> <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-settings="{&quot;background_background&quot;:&quot;classic&quot;}"> <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"> <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"> <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-widget_type="divider.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-block-end:0;flex-grow:1;border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider--element-align-start .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-start .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-start .elementor-divider__element{margin-inline-start:0}.elementor-widget-divider--element-align-end .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-end .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-end .elementor-divider__element{margin-inline-end:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}</style> <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"> <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"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-269b367 elementor-nav-menu__align-right 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-settings="{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\&quot;fas fa-caret-down\&quot;&gt;&lt;\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav 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-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item">Home</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-23816"><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-46262"><a href="https://www.devx.com/publication-guidelines/" class="elementor-item">Editorial Guidelines</a></li> </ul> </nav> <div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span> </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-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item" tabindex="-1">Home</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" tabindex="-1">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item" tabindex="-1">About</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" tabindex="-1">Editorial Guidelines</a></li> </ul> </nav> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-21928d3" data-id="21928d3" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-869862d" data-id="869862d" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-5d5f4dc5 e-grid-align-left elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="5d5f4dc5" data-element_type="widget" data-widget_type="social-icons.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em));height:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:inline-flex;background-color:#69727d;align-items:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#69727d}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin,.elementor-social-icon-linkedin-in{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-threads{background-color:#000}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-x-twitter{background-color:#000}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{border-radius:50%}</style> <div class="elementor-social-icons-wrapper elementor-grid"> <span class="elementor-grid-item"> <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> <i class="fab fa-linkedin"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-828f132" href="https://twitter.com/DevX_Com" target="_blank"> <span class="elementor-screen-only">Twitter</span> <i class="fab fa-twitter"></i> </a> </span> </div> </div> </div> </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"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-f77ca98" data-id="f77ca98" data-element_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-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-settings="{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;i class=\&quot;fas fa-caret-down\&quot;&gt;&lt;\/i&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav 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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"><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"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span> </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" 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" 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" tabindex="-1">C</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27152"><a href="https://www.devx.com/d-terms/" class="elementor-item" tabindex="-1">D</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27153"><a href="https://www.devx.com/e-terms/" class="elementor-item" tabindex="-1">E</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27154"><a href="https://www.devx.com/f-terms/" class="elementor-item" tabindex="-1">F</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27155"><a href="https://www.devx.com/g-terms/" class="elementor-item" tabindex="-1">G</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27156"><a href="https://www.devx.com/h-terms/" class="elementor-item" tabindex="-1">H</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27157"><a href="https://www.devx.com/i-terms/" class="elementor-item" tabindex="-1">I</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27158"><a href="https://www.devx.com/j-terms/" class="elementor-item" tabindex="-1">J</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27159"><a href="https://www.devx.com/k-terms/" class="elementor-item" tabindex="-1">K</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27137"><a href="https://www.devx.com/l-terms/" class="elementor-item" tabindex="-1">L</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27151"><a href="https://www.devx.com/m-terms/" class="elementor-item" tabindex="-1">M</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27150"><a href="https://www.devx.com/n-terms/" class="elementor-item" tabindex="-1">N</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27149"><a href="https://www.devx.com/o-terms/" class="elementor-item" tabindex="-1">O</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27148"><a href="https://www.devx.com/p-terms/" class="elementor-item" tabindex="-1">P</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27147"><a href="https://www.devx.com/q-terms/" class="elementor-item" tabindex="-1">Q</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27146"><a href="https://www.devx.com/r-terms/" class="elementor-item" tabindex="-1">R</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27145"><a href="https://www.devx.com/s-terms/" class="elementor-item" tabindex="-1">S</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27144"><a href="https://www.devx.com/t-terms/" class="elementor-item" tabindex="-1">T</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27143"><a href="https://www.devx.com/u-terms/" class="elementor-item" tabindex="-1">U</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27142"><a href="https://www.devx.com/v-terms/" class="elementor-item" tabindex="-1">V</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27141"><a href="https://www.devx.com/w-terms/" class="elementor-item" tabindex="-1">W</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27140"><a href="https://www.devx.com/x-terms/" class="elementor-item" tabindex="-1">X</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27139"><a href="https://www.devx.com/y-terms/" class="elementor-item" tabindex="-1">Y</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27138"><a href="https://www.devx.com/z-terms/" class="elementor-item" 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-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" data-id="c5e10d2" data-element_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" data-id="a4f01a6" data-element_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" data-id="a1bc5b1" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-e4f110b" data-id="e4f110b" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4a914653 elementor-widget elementor-widget-heading" data-id="4a914653" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <p class="elementor-heading-title elementor-size-default">©2024 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" data-id="d2cf216" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <p><strong><a href="https://www.devx.com/sitemap/">Sitemap</a> &#8212; </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" data-id="1daca18" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </div> </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-8487d85'>'use strict';(function(){function v(c,b){function a(){this.constructor=c}if("function"!==typeof b&&null!==b)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");N(c,b);c.prototype=null===b?Object.create(b):(a.prototype=b.prototype,new a)}function S(c,b){var a={},d;for(d in c)Object.prototype.hasOwnProperty.call(c,d)&&0>b.indexOf(d)&&(a[d]=c[d]);if(null!=c&&"function"===typeof Object.getOwnPropertySymbols){var e=0;for(d=Object.getOwnPropertySymbols(c);e<d.length;e++)0> b.indexOf(d[e])&&Object.prototype.propertyIsEnumerable.call(c,d[e])&&(a[d[e]]=c[d[e]])}return a}function I(c,b,a,d){var e=arguments.length,f=3>e?b:null===d?d=Object.getOwnPropertyDescriptor(b,a):d,g;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)f=Reflect.decorate(c,b,a,d);else for(var h=c.length-1;0<=h;h--)if(g=c[h])f=(3>e?g(f):3<e?g(b,a,f):g(b,a))||f;return 3<e&&f&&Object.defineProperty(b,a,f),f}function B(c,b){if("object"===typeof Reflect&&"function"===typeof Reflect.metadata)return Reflect.metadata(c, b)}function L(c){var b="function"===typeof Symbol&&Symbol.iterator,a=b&&c[b],d=0;if(a)return a.call(c);if(c&&"number"===typeof c.length)return{next:function(){c&&d>=c.length&&(c=void 0);return{value:c&&c[d++],done:!c}}};throw new TypeError(b?"Object is not iterable.":"Symbol.iterator is not defined.");}function r(c,b){var a="function"===typeof Symbol&&c[Symbol.iterator];if(!a)return c;c=a.call(c);var d,e=[];try{for(;(void 0===b||0<b--)&&!(d=c.next()).done;)e.push(d.value)}catch(g){var f={error:g}}finally{try{d&& !d.done&&(a=c["return"])&&a.call(c)}finally{if(f)throw f.error;}}return e}function w(c,b,a){if(a||2===arguments.length)for(var d=0,e=b.length,f;d<e;d++)!f&&d in b||(f||(f=Array.prototype.slice.call(b,0,d)),f[d]=b[d]);return c.concat(f||Array.prototype.slice.call(b))}function T(c,b){void 0===b&&(b={});b=b.insertAt;if(c&&"undefined"!==typeof document){var a=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css";"top"===b?a.firstChild?a.insertBefore(d, a.firstChild):a.appendChild(d):a.appendChild(d);d.styleSheet?d.styleSheet.cssText=c:d.appendChild(document.createTextNode(c))}}window.adthriveCLS.buildDate="2024-04-18";var N=function(c,b){N=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,d){a.__proto__=d}||function(a,d){for(var e in d)Object.prototype.hasOwnProperty.call(d,e)&&(a[e]=d[e])};return N(c,b)},y=function(){y=Object.assign||function(c){for(var b,a=1,d=arguments.length;a<d;a++){b=arguments[a];for(var e in b)Object.prototype.hasOwnProperty.call(b, e)&&(c[e]=b[e])}return c};return y.apply(this,arguments)};"function"===typeof SuppressedError?SuppressedError:function(c,b,a){a=Error(a);return a.name="SuppressedError",a.error=c,a.suppressed=b,a};var q=new (function(){function c(){}c.prototype.info=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.info,b,a],r(d),!1))};c.prototype.warn=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.warn, b,a],r(d),!1))};c.prototype.error=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.error,b,a],r(d),!1));this.sendErrorLogToCommandQueue.apply(this,w([b,a],r(d),!1))};c.prototype.event=function(b,a){for(var d,e=2;e<arguments.length;e++);"debug"===(null===(d=window.adthriveCLS)||void 0===d?void 0:d.bucket)&&this.info(b,a)};c.prototype.sendErrorLogToCommandQueue=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];window.adthrive= window.adthrive||{};window.adthrive.cmd=window.adthrive.cmd||[];window.adthrive.cmd.push(function(){void 0!==window.adthrive.logError&&"function"===typeof window.adthrive.logError&&window.adthrive.logError(b,a,d)})};c.prototype.call=function(b,a,d){for(var e=[],f=3;f<arguments.length;f++)e[f-3]=arguments[f];f=["%c".concat(a,"::").concat(d," ")];var g=["color: #999; font-weight: bold;"];0<e.length&&"string"===typeof e[0]&&f.push(e.shift());g.push.apply(g,w([],r(e),!1));try{Function.prototype.apply.call(b, console,w([f.join("")],r(g),!1))}catch(h){console.error(h)}};return c}()),u=function(c,b){return null==c||c!==c?b:c},na=function(c){var b=c.clientWidth;getComputedStyle&&(c=getComputedStyle(c,null),b-=parseFloat(c.paddingLeft||"0")+parseFloat(c.paddingRight||"0"));return b},oa=function(c){var b=c.offsetHeight,a=c.offsetWidth,d=c.getBoundingClientRect(),e=document.body,f=document.documentElement;c=Math.round(d.top+(window.pageYOffset||f.scrollTop||e.scrollTop)-(f.clientTop||e.clientTop||0));d=Math.round(d.left+ (window.pageXOffset||f.scrollLeft||e.scrollLeft)-(f.clientLeft||e.clientLeft||0));return{top:c,left:d,bottom:c+b,right:d+a,width:a,height:b}},E=function(){var c=navigator.userAgentData;if(c)return c.mobile;c=navigator.userAgent;var b=/Tablet|iPad|Playbook|Nook|webOS|Kindle|Android (?!.*Mobile).*Safari|CrOS/i.test(c);return/Mobi|iP(hone|od)|Opera Mini/i.test(c)&&!b},pa=function(c){void 0===c&&(c=document);return(c===document?document.body:c).getBoundingClientRect().top},qa=function(c){return c.includes(",")? c.split(","):[c]},ra=function(c){void 0===c&&(c=document);c=c.querySelectorAll("article");return 0===c.length?null:(c=Array.from(c).reduce(function(b,a){return a.offsetHeight>b.offsetHeight?a:b}))&&c.offsetHeight>1.5*window.innerHeight?c:null},sa=function(c,b,a){void 0===a&&(a=document);var d=ra(a),e=d?[d]:[],f=[];c.forEach(function(h){var k=Array.from(a.querySelectorAll(h.elementSelector)).slice(0,h.skip);qa(h.elementSelector).forEach(function(l){var p=a.querySelectorAll(l);l=function(t){var n=p[t]; if(b.map.some(function(x){return x.el.isEqualNode(n)}))return"continue";(t=n&&n.parentElement)&&t!==document.body?e.push(t):e.push(n);-1===k.indexOf(n)&&f.push({dynamicAd:h,element:n})};for(var m=0;m<p.length;m++)l(m)})});var g=pa(a);c=f.sort(function(h,k){return h.element.getBoundingClientRect().top-g-(k.element.getBoundingClientRect().top-g)});return[e,c]},ta=function(c,b,a){void 0===a&&(a=document);b=r(sa(c,b,a),2);c=b[0];b=b[1];if(0===c.length)throw Error("No Main Content Elements Found");return[Array.from(c).reduce(function(d, e){return e.offsetHeight>d.offsetHeight?e:d})||document.body,b]},z;(function(c){c.amznbid="amznbid";c.amzniid="amzniid";c.amznp="amznp";c.amznsz="amznsz"})(z||(z={}));var D;(function(c){c.ThirtyThreeAcross="33across";c.Adform="adform";c.AidemServer="aidem_ss";c.AppNexus="appnexus";c.AmazonTAM="amazon";c.AmazonUAM="AmazonUAM";c.Colossus="colossus";c.ColossusServer="col_ss";c.Conversant="conversant";c.Concert="concert";c.Criteo="criteo";c.GumGum="gumgum";c.ImproveDigital="improvedigital";c.ImproveDigitalServer= "improve_ss";c.IndexExchange="ix";c.Kargo="kargo";c.KargoServer="krgo_ss";c.MediaGrid="grid";c.MediaGridVideo="gridvid";c.Nativo="nativo";c.OpenX="openx";c.Ogury="ogury";c.OpenXServer="opnx_ss";c.Ozone="ozone";c.Pubmatic="pubmatic";c.PubmaticServer="pubm_ss";c.ResetDigital="resetdigital";c.Roundel="roundel";c.Rtbhouse="rtbhouse";c.Rubicon="rubicon";c.RubiconServer="rubi_ss";c.Sharethrough="sharethrough";c.Teads="teads";c.Triplelift="triplelift";c.TripleliftServer="tripl_ss";c.TTD="ttd";c.Undertone= "undertone";c.UndertoneServer="under_ss";c.Unruly="unruly";c.YahooSSP="yahoossp";c.YahooSSPServer="yah_ss";c.Verizon="verizon";c.Yieldmo="yieldmo"})(D||(D={}));var U;(function(c){c.Prebid="prebid";c.GAM="gam";c.Amazon="amazon";c.Marmalade="marmalade";c.Floors="floors";c.CMP="cmp";c.Optable="optable"})(U||(U={}));var V;(function(c){c.cm="cm";c.fbrap="fbrap";c.rapml="rapml"})(V||(V={}));var W;(function(c){c.lazy="lazy";c.raptive="raptive";c.refresh="refresh";c.session="session";c.crossDomain="crossdomain"; c.highSequence="highsequence";c.lazyBidPool="lazyBidPool"})(W||(W={}));var X;(function(c){c.lazy="l";c.raptive="rapml";c.refresh="r";c.session="s";c.crossdomain="c";c.highsequence="hs";c.lazyBidPool="lbp"})(X||(X={}));var Y;(function(c){c.Version="Version";c.SharingNotice="SharingNotice";c.SaleOptOutNotice="SaleOptOutNotice";c.SharingOptOutNotice="SharingOptOutNotice";c.TargetedAdvertisingOptOutNotice="TargetedAdvertisingOptOutNotice";c.SensitiveDataProcessingOptOutNotice="SensitiveDataProcessingOptOutNotice"; c.SensitiveDataLimitUseNotice="SensitiveDataLimitUseNotice";c.SaleOptOut="SaleOptOut";c.SharingOptOut="SharingOptOut";c.TargetedAdvertisingOptOut="TargetedAdvertisingOptOut";c.SensitiveDataProcessing="SensitiveDataProcessing";c.KnownChildSensitiveDataConsents="KnownChildSensitiveDataConsents";c.PersonalDataConsents="PersonalDataConsents";c.MspaCoveredTransaction="MspaCoveredTransaction";c.MspaOptOutOptionMode="MspaOptOutOptionMode";c.MspaServiceProviderMode="MspaServiceProviderMode";c.SubSectionType= "SubsectionType";c.Gpc="Gpc"})(Y||(Y={}));var Z;(function(c){c[c.NA=0]="NA";c[c.OptedOut=1]="OptedOut";c[c.OptedIn=2]="OptedIn"})(Z||(Z={}));var C;(function(c){c.AdDensity="addensity";c.AdLayout="adlayout";c.FooterCloseButton="footerclose";c.Interstitial="interstitial";c.RemoveVideoTitleWrapper="removevideotitlewrapper";c.StickyOutstream="stickyoutstream";c.StickyOutstreamOnStickyPlayer="sospp";c.VideoAdvancePlaylistRelatedPlayer="videoadvanceplaylistrp";c.MobileStickyPlayerPosition="mspp"})(C||(C= {}));var J;(function(c){c.Desktop="desktop";c.Mobile="mobile"})(J||(J={}));var G;(function(c){c.Video_Collapse_Autoplay_SoundOff="Video_Collapse_Autoplay_SoundOff";c.Video_Individual_Autoplay_SOff="Video_Individual_Autoplay_SOff";c.Video_Coll_SOff_Smartphone="Video_Coll_SOff_Smartphone";c.Video_In_Post_ClicktoPlay_SoundOn="Video_In-Post_ClicktoPlay_SoundOn"})(G||(G={}));var aa;(aa||(aa={})).None="none";var ba;(function(c){c.Default="default";c.AZ_Animals="5daf495ed42c8605cfc74b0b";c.Natashas_Kitchen= "55bccc97303edab84afd77e2";c.RecipeTin_Eats="55cb7e3b4bc841bd0c4ea577";c.Sallys_Baking_Recipes="566aefa94856897050ee7303";c.Spend_With_Pennies="541917f5a90318f9194874cf"})(ba||(ba={}));var ua=function(c,b){var a=c.adDensityEnabled;c=c.adDensityLayout.pageOverrides.find(function(d){return!!document.querySelector(d.pageSelector)&&(d[b].onePerViewport||"number"===typeof d[b].adDensity)});return a?!c:!0};z=function(){function c(){this._timeOrigin=0}c.prototype.resetTimeOrigin=function(){this._timeOrigin= window.performance.now()};c.prototype.now=function(){try{return Math.round(window.performance.now()-this._timeOrigin)}catch(b){return 0}};return c}();window.adthrive.windowPerformance=window.adthrive.windowPerformance||new z;z=window.adthrive.windowPerformance;var O=z.now.bind(z),va=function(c){void 0===c&&(c=window.location.search);var b=0===c.indexOf("?")?1:0;return c.slice(b).split("&").reduce(function(a,d){d=r(d.split("="),2);a.set(d[0],d[1]);return a},new Map)},ca=function(c){try{return{valid:!0, elements:document.querySelectorAll(c)}}catch(b){return y({valid:!1},b)}},da=function(c){return""===c?{valid:!0}:ca(c)},wa=function(c){var b=c.reduce(function(a,d){return d.weight?d.weight+a:a},0);return 0<c.length&&c.every(function(a){var d=a.value;a=a.weight;return!(void 0===d||null===d||"number"===typeof d&&isNaN(d)||!a)})&&100===b},xa=["siteId","siteName","adOptions","breakpoints","adUnits"],ya=function(c){var b={},a=va().get(c);if(a)try{var d=decodeURIComponent(a);b=JSON.parse(d);q.event("ExperimentOverridesUtil", "getExperimentOverrides",c,b)}catch(e){}return b},za=function(c){function b(a){var d=c.call(this)||this;d._featureRollouts=a.enabled?a.siteAds.featureRollouts||{}:{};return d}v(b,c);return b}(function(){function c(){this._featureRollouts={}}Object.defineProperty(c.prototype,"siteFeatureRollouts",{get:function(){return this._featureRollouts},enumerable:!1,configurable:!0});c.prototype.isRolloutEnabled=function(b){return this._featureRollouts&&this._featureRollouts[b]?this._featureRollouts[b].enabled: !1};return c}()),ea=function(){function c(){this._clsGlobalData=window.adthriveCLS}Object.defineProperty(c.prototype,"enabled",{get:function(){var b;if(b=!!this._clsGlobalData&&!!this._clsGlobalData.siteAds)a:{b=this._clsGlobalData.siteAds;var a=void 0;void 0===a&&(a=xa);if(b){for(var d=0;d<a.length;d++)if(!b[a[d]]){b=!1;break a}b=!0}else b=!1}return b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"error",{get:function(){return!(!this._clsGlobalData||!this._clsGlobalData.error)}, enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"siteAds",{get:function(){return this._clsGlobalData.siteAds},set:function(b){this._clsGlobalData.siteAds=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"disableAds",{get:function(){return this._clsGlobalData.disableAds},set:function(b){this._clsGlobalData.disableAds=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"enabledLocations",{get:function(){return this._clsGlobalData.enabledLocations}, set:function(b){this._clsGlobalData.enabledLocations=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"injectedFromPlugin",{get:function(){return this._clsGlobalData.injectedFromPlugin},set:function(b){this._clsGlobalData.injectedFromPlugin=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"injectedFromSiteAds",{get:function(){return this._clsGlobalData.injectedFromSiteAds},set:function(b){this._clsGlobalData.injectedFromSiteAds=b},enumerable:!1,configurable:!0}); c.prototype.overwriteInjectedSlots=function(b){this._clsGlobalData.injectedSlots=b};c.prototype.setInjectedSlots=function(b){this._clsGlobalData.injectedSlots=this._clsGlobalData.injectedSlots||[];this._clsGlobalData.injectedSlots.push(b)};Object.defineProperty(c.prototype,"injectedSlots",{get:function(){return this._clsGlobalData.injectedSlots},enumerable:!1,configurable:!0});c.prototype.setInjectedVideoSlots=function(b){this._clsGlobalData.injectedVideoSlots=this._clsGlobalData.injectedVideoSlots|| [];this._clsGlobalData.injectedVideoSlots.push(b)};Object.defineProperty(c.prototype,"injectedVideoSlots",{get:function(){return this._clsGlobalData.injectedVideoSlots},enumerable:!1,configurable:!0});c.prototype.setInjectedScripts=function(b){this._clsGlobalData.injectedScripts=this._clsGlobalData.injectedScripts||[];this._clsGlobalData.injectedScripts.push(b)};Object.defineProperty(c.prototype,"getInjectedScripts",{get:function(){return this._clsGlobalData.injectedScripts},enumerable:!1,configurable:!0}); c.prototype.setExperiment=function(b,a,d){void 0===d&&(d=!1);this._clsGlobalData.experiments=this._clsGlobalData.experiments||{};this._clsGlobalData.siteExperiments=this._clsGlobalData.siteExperiments||{};(d?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments)[b]=a};c.prototype.getExperiment=function(b,a){void 0===a&&(a=!1);return(a=a?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments)&&a[b]};c.prototype.setWeightedChoiceExperiment=function(b,a,d){void 0===d&&(d=!1); this._clsGlobalData.experimentsWeightedChoice=this._clsGlobalData.experimentsWeightedChoice||{};this._clsGlobalData.siteExperimentsWeightedChoice=this._clsGlobalData.siteExperimentsWeightedChoice||{};(d?this._clsGlobalData.siteExperimentsWeightedChoice:this._clsGlobalData.experimentsWeightedChoice)[b]=a};c.prototype.getWeightedChoiceExperiment=function(b,a){var d,e;void 0===a&&(a=!1);return(a=a?null===(d=this._clsGlobalData)||void 0===d?void 0:d.siteExperimentsWeightedChoice:null===(e=this._clsGlobalData)|| void 0===e?void 0:e.experimentsWeightedChoice)&&a[b]};Object.defineProperty(c.prototype,"branch",{get:function(){return this._clsGlobalData.branch},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"bucket",{get:function(){return this._clsGlobalData.bucket},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"videoDisabledFromPlugin",{get:function(){return this._clsGlobalData.videoDisabledFromPlugin},set:function(b){this._clsGlobalData.videoDisabledFromPlugin=b},enumerable:!1, configurable:!0});Object.defineProperty(c.prototype,"targetDensityLog",{get:function(){return this._clsGlobalData.targetDensityLog},set:function(b){this._clsGlobalData.targetDensityLog=b},enumerable:!1,configurable:!0});c.prototype.shouldHalveIOSDensity=function(){var b=new za(this),a=void 0;void 0===a&&(a=navigator.userAgent);return/iP(hone|od|ad)/i.test(a)&&b.isRolloutEnabled("iOS-Resolution")};c.prototype.getTargetDensity=function(b){return this.shouldHalveIOSDensity()?b/2:b};Object.defineProperty(c.prototype, "removeVideoTitleWrapper",{get:function(){return this._clsGlobalData.siteAds.adOptions.removeVideoTitleWrapper},enumerable:!1,configurable:!0});return c}(),Aa=function(){function c(){}c.getScrollTop=function(){return(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0)};c.getScrollBottom=function(){return this.getScrollTop()+(document.documentElement.clientHeight||0)};c.shufflePlaylist=function(b){for(var a=b.length,d,e;0!==a;)e=Math.floor(Math.random()* b.length),--a,d=b[a],b[a]=b[e],b[e]=d;return b};c.isMobileLandscape=function(){return window.matchMedia("(orientation: landscape) and (max-height: 480px)").matches};c.playerViewable=function(b){b=b.getBoundingClientRect();return this.isMobileLandscape()?window.innerHeight>b.top+b.height/2&&0<b.top+b.height/2:window.innerHeight>b.top+b.height/2};c.createQueryString=function(b){return Object.keys(b).map(function(a){return"".concat(a,"=").concat(b[a])}).join("&")};c.createEncodedQueryString=function(b){return Object.keys(b).map(function(a){return"".concat(a, "=").concat(encodeURIComponent(b[a]))}).join("&")};c.setMobileLocation=function(b){b=b||"bottom-right";"top-left"===b?b="adthrive-collapse-top-left":"top-right"===b?b="adthrive-collapse-top-right":"bottom-left"===b?b="adthrive-collapse-bottom-left":"bottom-right"===b?b="adthrive-collapse-bottom-right":"top-center"===b&&(b=E()?"adthrive-collapse-top-center":"adthrive-collapse-bottom-right");return b};c.addMaxResolutionQueryParam=function(b){var a=E()?"320":"1280";a="max_resolution=".concat(a);var d= r(String(b).split("?"),2);b=d[0];a=(d=d[1])?d+"&".concat(a):a;return"".concat(b,"?").concat(a)};return c}(),Ba=function(){return function(c){this._clsOptions=c;this.removeVideoTitleWrapper=u(this._clsOptions.siteAds.adOptions.removeVideoTitleWrapper,!1);c=this._clsOptions.siteAds.videoPlayers;this.footerSelector=u(c&&c.footerSelector,"");this.players=u(c&&c.players.map(function(b){b.mobileLocation=Aa.setMobileLocation(b.mobileLocation);return b}),[]);this.relatedSettings=c&&c.contextual}}(),Ca=function(){return function(c){this.relatedPlayerAdded= this.playlistPlayerAdded=this.mobileStickyPlayerOnPage=!1;this.footerSelector="";this.removeVideoTitleWrapper=!1;this.videoAdOptions=new Ba(c);this.players=this.videoAdOptions.players;this.relatedSettings=this.videoAdOptions.relatedSettings;this.removeVideoTitleWrapper=this.videoAdOptions.removeVideoTitleWrapper;this.footerSelector=this.videoAdOptions.footerSelector}}();D=function(){return function(){}}();var H=function(c){function b(a){var d=c.call(this)||this;d._probability=a;return d}v(b,c);b.prototype.get= function(){if(0>this._probability||1<this._probability)throw Error("Invalid probability: ".concat(this._probability));return Math.random()<this._probability};return b}(D);z=function(){function c(){this._clsOptions=new ea;this.shouldUseCoreExperimentsConfig=!1}c.prototype.setExperimentKey=function(b){void 0===b&&(b=!1);this._clsOptions.setExperiment(this.abgroup,this.result,b)};return c}();var Da=function(c){function b(){var a=c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key= "RemoveLargeSize";a.abgroup="smhd100";a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(.1)).get()};return b}(z),fa=function(c,b,a,d,e,f){c=Math.round(f-e);b=[];e=[];b.push("(",a.map(function(){return"%o"}).join(", "),")");e.push.apply(e,w([],r(a),!1));void 0!==d&&(b.push(" => %o"),e.push(d));b.push(" %c(".concat(c,"ms)"));e.push("color: #999;")}, ha=function(c,b,a){var d=void 0!==a.get?a.get:a.value;return function(){for(var e=[],f=0;f<arguments.length;f++)e[f]=arguments[f];try{var g=O(),h=d.apply(this,e);if(h instanceof Promise)return h.then(function(l){var p=O();fa(c,b,e,l,g,p);return Promise.resolve(l)}).catch(function(l){l.logged||(q.error(c,b,l),l.logged=!0);throw l;});var k=O();fa(c,b,e,h,g,k);return h}catch(l){throw l.logged||(q.error(c,b,l),l.logged=!0),l;}}},P=function(c,b){void 0===b&&(b=!1);return function(a){var d,e=Object.getOwnPropertyNames(a.prototype).filter(function(m){return b|| 0!==m.indexOf("_")}).map(function(m){return[m,Object.getOwnPropertyDescriptor(a.prototype,m)]});try{for(var f=L(e),g=f.next();!g.done;g=f.next()){var h=r(g.value,2),k=h[0],l=h[1];void 0!==l&&"function"===typeof l.value?a.prototype[k]=ha(c,k,l):void 0!==l&&void 0!==l.get&&"function"===typeof l.get&&Object.defineProperty(a.prototype,k,y(y({},l),{get:ha(c,k,l)}))}}catch(m){var p={error:m}}finally{try{g&&!g.done&&(d=f.return)&&d.call(f)}finally{if(p)throw p.error;}}}},Ea=function(c){function b(a){var d= c.call(this)||this;d._result=!1;d.key="ParallaxAdsExperiment";d.abgroup="parallax";d._choices=[{choice:!0},{choice:!1}];d.weight=.5;E()&&a.largeFormatsMobile&&(d._result=d.run(),d.setExperimentKey());return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(this.weight)).get()};return b=I([P("ParallaxAdsExperiment"),B("design:paramtypes",[Object])],b)}(z),Fa=function(c){function b(){var a= c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key="mrsf";a.abgroup="mrsf";E()&&(a._result=a.run(),a.setExperimentKey());return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(1)).get()};return b}(z),Ga=[[728,90],[300,250],[300,600],[320,50],[970,250],[160,600],[300,1050],[336,280],[970,90],[300,50],[320,100],[468,60],[250,250],[120,240],[1,1],[300,300],[552,334], [300,420],[728,250],[320,300],[300,390]],Ha=[[300,600],[160,600]],Ia=new Map([["Footer",1],["Header",2],["Sidebar",3],["Content",4],["Recipe",5],["Sidebar_sticky",6],["Below Post",7]]),Ja=function(c){return Ga.filter(function(b){b=r(b,2);var a=b[0],d=b[1];return c.some(function(e){e=r(e,2);var f=e[1];return a===e[0]&&d===f})})},Ka=function(c,b,a,d,e){b=r(b,2);var f=b[0],g=b[1],h=c.location;b=c.sequence;return"Footer"===h?!("phone"===a&&320===f&&100===g):"Header"===h?!(100<g&&d.result):"Recipe"=== h?!(e.result&&"phone"===a&&(300===f&&390===g||320===f&&300===g)):"Sidebar"===h?(a=c.adSizes.some(function(k){return 300>=r(k,2)[1]}),(d=300<g)&&!a?!0:9===b?!0:b&&5>=b?d?c.sticky:!0:!d):!0},La=function(c,b){var a=c.location;c=c.sticky;if("Recipe"===a&&b){var d=b.recipeMobile;b=b.recipeDesktop;if(E()&&(null===d||void 0===d?0:d.enabled)||!E()&&(null===b||void 0===b?0:b.enabled))return!0}return"Footer"===a||c},Ma=function(c,b){var a=b.adUnits,d=b.adTypes?(new Ea(b.adTypes)).result:!1,e=new Da,f=new Fa; return a.filter(function(g){return void 0!==g.dynamic&&g.dynamic.enabled}).map(function(g){var h=g.location.replace(/\s+/g,"_"),k="Sidebar"===h?0:2;return{auctionPriority:Ia.get(h)||8,location:h,sequence:u(g.sequence,1),sizes:Ja(g.adSizes).filter(function(l){return Ka(g,l,c,e,f)}).concat(d&&"Content"===g.location?Ha:[]),devices:g.devices,pageSelector:u(g.dynamic.pageSelector,"").trim(),elementSelector:u(g.dynamic.elementSelector,"").trim(),position:u(g.dynamic.position,"beforebegin"),max:Math.floor(u(g.dynamic.max, 0)),spacing:u(g.dynamic.spacing,0),skip:Math.floor(u(g.dynamic.skip,0)),every:Math.max(Math.floor(u(g.dynamic.every,1)),1),classNames:g.dynamic.classNames||[],sticky:La(g,b.adOptions.stickyContainerConfig),stickyOverlapSelector:u(g.stickyOverlapSelector,"").trim(),autosize:g.autosize,special:u(g.targeting,[]).filter(function(l){return"special"===l.key}).reduce(function(l,p){return l.concat.apply(l,w([],r(p.value),!1))},[]),lazy:u(g.dynamic.lazy,!1),lazyMax:u(g.dynamic.lazyMax,k),lazyMaxDefaulted:0=== g.dynamic.lazyMax?!1:!g.dynamic.lazyMax,name:g.name}})},ia=function(c,b){var a=na(b),d=c.sticky&&"Sidebar"===c.location;return c.sizes.filter(function(e){var f=d?e[1]<=window.innerHeight-100:!0;return(c.autosize?e[0]<=a||320>=e[0]:!0)&&f})},Na=function(){return function(c){this.clsOptions=c;this.enabledLocations=["Below_Post","Content","Recipe","Sidebar"]}}(),Oa=function(c){var b=document.body;c="adthrive-device-".concat(c);if(!b.classList.contains(c))try{b.classList.add(c)}catch(a){q.error("BodyDeviceClassComponent", "init",{message:a.message}),b="classList"in document.createElement("_"),q.error("BodyDeviceClassComponent","init.support",{support:b})}},Q=function(c){return"adthrive-".concat(c.location.replace("_","-").toLowerCase())},ja=function(c){return"".concat(Q(c),"-").concat(c.sequence)},Pa=function(c){return T('\n .adthrive-device-phone .adthrive-sticky-content {\n height: 450px !important;\n margin-bottom: 100px !important;\n }\n .adthrive-content.adthrive-sticky {\n position: -webkit-sticky;\n position: sticky !important;\n top: 42px !important;\n margin-top: 42px !important;\n }\n .adthrive-content.adthrive-sticky:after {\n content: "\u2014 Advertisement. Scroll down to continue. \u2014";\n font-size: 10pt;\n margin-top: 5px;\n margin-bottom: 5px;\n display:block;\n color: #888;\n }\n .adthrive-sticky-container {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n min-height:'.concat(c? c:400,"px !important;\n margin: 10px 0 10px 0;\n background-color: #FAFAFA;\n padding-bottom:0px;\n }\n "))},ka=function(c){return c.some(function(b){return null!==document.querySelector(b)})},Qa=function(c){function b(){var a=c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key="RemoveRecipeCap";a.abgroup="rrc";a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0}); b.prototype.run=function(){return(new H(1)).get()};return b}(z),R=function(c){function b(a,d){void 0===a&&(a=[]);var e=c.call(this)||this;e._choices=a;e._default=d;return e}v(b,c);b.fromArray=function(a,d){return new b(a.map(function(e){e=r(e,2);return{choice:e[0],weight:e[1]}}),d)};b.prototype.addChoice=function(a,d){this._choices.push({choice:a,weight:d})};b.prototype.get=function(){var a,d=100*Math.random(),e=0;try{for(var f=L(this._choices),g=f.next();!g.done;g=f.next()){var h=g.value,k=h.choice; e+=h.weight;if(e>=d)return k}}catch(p){var l={error:p}}finally{try{g&&!g.done&&(a=f.return)&&a.call(f)}finally{if(l)throw l.error;}}return this._default};Object.defineProperty(b.prototype,"totalWeight",{get:function(){return this._choices.reduce(function(a,d){return a+d.weight},0)},enumerable:!1,configurable:!0});return b}(D),Ra=function(c){for(var b=5381,a=c.length;a;)b=33*b^c.charCodeAt(--a);return b>>>0},M=new (function(){function c(){var b=this;this.name="StorageHandler";this.disable=!1;this.removeLocalStorageValue= function(a){window.localStorage.removeItem("adthrive_".concat(a.toLowerCase()))};this.getLocalStorageValue=function(a,d,e,f,g){void 0===d&&(d=!0);void 0===e&&(e=!0);if(b.disable)return null;try{var h=window.localStorage.getItem("".concat(d?"adthrive_":"").concat(e?a.toLowerCase():a));if(h){var k=JSON.parse(h),l=void 0!==f&&Date.now()-k.created>=f;if(k&&!l)return g&&b.setLocalStorageValue(a,k.value,d),k.value}}catch(p){}return null};this.setLocalStorageValue=function(a,d,e){void 0===e&&(e=!0);try{e= e?"adthrive_":"";var f={value:d,created:Date.now()};window.localStorage.setItem("".concat(e).concat(a.toLowerCase()),JSON.stringify(f))}catch(g){}};this.isValidABGroupLocalStorageValue=function(a){return void 0!==a&&null!==a&&!("number"===typeof a&&isNaN(a))};this.getOrSetLocalStorageValue=function(a,d,e,f,g,h,k){void 0===f&&(f=!0);void 0===g&&(g=!0);void 0===k&&(k=!0);e=b.getLocalStorageValue(a,k,f,e,g);if(null!==e)return e;d=d();b.setLocalStorageValue(a,d,k);h&&h(d);return d};this.getOrSetABGroupLocalStorageValue= function(a,d,e,f,g){var h;void 0===f&&(f=!0);e=b.getLocalStorageValue("abgroup",!0,!0,e,f);if(null!==e&&(f=e[a],b.isValidABGroupLocalStorageValue(f)))return f;d=d();a=y(y({},e),(h={},h[a]=d,h));b.setLocalStorageValue("abgroup",a);g&&g();return d}}c.prototype.init=function(){};return c}()),la=function(){return function(c,b,a){var d=a.value;d&&(a.value=function(){for(var e=this,f=[],g=0;g<arguments.length;g++)f[g]=arguments[g];g=Array.isArray(this._choices)?Ra(JSON.stringify(this._choices)).toString(16): null;var h=this._expConfigABGroup?this._expConfigABGroup:this.abgroup;h=h?h.toLowerCase():this.key?this.key.toLowerCase():"";g=g?"".concat(h,"_").concat(g):h;g=this.localStoragePrefix?"".concat(this.localStoragePrefix,"-").concat(g):g;h=M.getLocalStorageValue("branch");!1===(h&&h.enabled)&&M.removeLocalStorageValue(g);return M.getOrSetABGroupLocalStorageValue(g,function(){return d.apply(e,f)},864E5)})}};D=function(c){function b(){var a=c.apply(this,w([],r(arguments),!1))||this;a._resultValidator= function(){return!0};return a}v(b,c);b.prototype._isValidResult=function(a){var d=this;return c.prototype._isValidResult.call(this,a,function(){return d._resultValidator(a)||"control"===a})};b.prototype.run=function(){if(!this.enabled)return q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","No experiment config found. Defaulting to control."),"control";if(!this._mappedChoices||0===this._mappedChoices.length)return q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","No experiment variants found. Defaulting to control."), "control";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a;q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to control.");return"control"};return b}(function(){function c(){}Object.defineProperty(c.prototype,"enabled",{get:function(){return void 0!==this.experimentConfig},enumerable:!1,configurable:!0});c.prototype._isValidResult=function(b,a){void 0===a&&(a=function(){return!0});return a()&&M.isValidABGroupLocalStorageValue(b)}; return c}());var ma=function(){function c(b){var a=this,d,e;this.siteExperiments=[];this._clsOptions=b;this._device=E()?"mobile":"desktop";this.siteExperiments=null!==(e=null===(d=this._clsOptions.siteAds.siteExperiments)||void 0===d?void 0:d.filter(function(f){var g=f.key;var h=a._device;if(f){var k=!!f.enabled,l=null==f.dateStart||Date.now()>=f.dateStart,p=null==f.dateEnd||Date.now()<=f.dateEnd,m=null===f.selector||""!==f.selector&&!!document.querySelector(f.selector),t="mobile"===f.platform&&"mobile"=== h;h="desktop"===f.platform&&"desktop"===h;t=null===f.platform||"all"===f.platform||t||h;(h="bernoulliTrial"===f.experimentType?1===f.variants.length:wa(f.variants))||q.error("SiteTest","validateSiteExperiment","experiment presented invalid choices for key:",f.key,f.variants);f=k&&l&&p&&m&&t&&h}else f=!1;a:switch(k=a._clsOptions.siteAds,g){case C.AdDensity:var n=ua(k,a._device);break a;case C.StickyOutstream:var x,A;n=(g=null===(A=null===(x=null===(n=k.videoPlayers)||void 0===n?void 0:n.partners)|| void 0===x?void 0:x.stickyOutstream)||void 0===A?void 0:A.blockedPageSelectors)?!document.querySelector(g):!0;break a;case C.Interstitial:n=(n=k.adOptions.interstitialBlockedPageSelectors)?!document.querySelector(n):!0;break a;default:n=!0}return f&&n}))&&void 0!==e?e:[]}c.prototype.getSiteExperimentByKey=function(b){var a=this.siteExperiments.filter(function(f){return f.key.toLowerCase()===b.toLowerCase()})[0],d=ya("at_site_features"),e=typeof((null===a||void 0===a?0:a.variants[1])?null===a||void 0=== a?void 0:a.variants[1].value:null===a||void 0===a?void 0:a.variants[0].value)===typeof d[b];a&&d[b]&&e&&(a.variants=[{displayName:"test",value:d[b],weight:100,id:0}]);return a};return c}(),Sa=function(c){function b(a){var d=c.call(this)||this;d._choices=[];d._mappedChoices=[];d._result="";d._resultValidator=function(e){return"string"===typeof e};d.key=C.AdLayout;d.abgroup=C.AdLayout;d._clsSiteExperiments=new ma(a);d.experimentConfig=d._clsSiteExperiments.getSiteExperimentByKey(d.key);d.enabled&&d.experimentConfig&& (d._choices=d.experimentConfig.variants,d._mappedChoices=d._mapChoices(),d._result=d.run(),a.setWeightedChoiceExperiment(d.abgroup,d._result,!0));return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){if(!this.enabled)return q.error("CLSAdLayoutSiteExperiment","run","() => %o","No experiment config found. Defaulting to empty class name."),"";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a; q.error("CLSAdLayoutSiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to empty class name.");return""};b.prototype._mapChoices=function(){return this._choices.map(function(a){return{weight:a.weight,choice:a.value}})};I([la(),B("design:type",Function),B("design:paramtypes",[]),B("design:returntype",void 0)],b.prototype,"run",null);return b}(D),Ta=function(c){function b(a){var d=c.call(this)||this;d._choices=[];d._mappedChoices=[];d._result="control";d._resultValidator= function(e){return"number"===typeof e};d.key=C.AdDensity;d.abgroup=C.AdDensity;d._clsSiteExperiments=new ma(a);d.experimentConfig=d._clsSiteExperiments.getSiteExperimentByKey(d.key);d.enabled&&d.experimentConfig&&(d._choices=d.experimentConfig.variants,d._mappedChoices=d._mapChoices(),d._result=d.run(),a.setWeightedChoiceExperiment(d.abgroup,d._result,!0));return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run= function(){if(!this.enabled)return q.error("CLSTargetAdDensitySiteExperiment","run","() => %o","No experiment config found. Defaulting to control."),"control";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a;q.error("CLSTargetAdDensitySiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to control.");return"control"};b.prototype._mapChoices=function(){return this._choices.map(function(a){var d=a.value;return{weight:a.weight,choice:"number"=== typeof d?(d||0)/100:"control"}})};I([la(),B("design:type",Function),B("design:paramtypes",[]),B("design:returntype",void 0)],b.prototype,"run",null);return b}(D),Ua=function(c){function b(){var a=c.call(this)||this;a._result=!1;a.abgroup="scae";a.key="StickyContainerAds";a._choices=[{choice:!0},{choice:!1}];a.weight=.99;a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run= function(){return(new H(this.weight)).get()};return b=I([P("StickyContainerAdsExperiment"),B("design:paramtypes",[])],b)}(z),Va=function(c){function b(){var a=c.call(this)||this;a._result=!1;a.abgroup="scre";a.key="StickyContainerRecipe";a._choices=[{choice:!0},{choice:!1}];a.weight=.99;a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(this.weight)).get()}; return b=I([P("StickyContainerRecipeExperiment"),B("design:paramtypes",[])],b)}(z),Ya=function(){function c(b,a){this._clsOptions=b;this._adInjectionMap=a;this._mainContentHeight=this._recipeCount=0;this._mainContentDiv=null;this._totalAvailableElements=[];this._minDivHeight=250;this._densityDevice=J.Desktop;this._pubLog={onePerViewport:!1,targetDensity:0,targetDensityUnits:0,combinedMax:0};this._densityMax=.99;this._smallerIncrementAttempts=0;this._absoluteMinimumSpacingByDevice=250;this._usedAbsoluteMinimum= !1;this._infPageEndOffset=0;this.locationMaxLazySequence=new Map([["Recipe",5]]);this.locationToMinHeight={Below_Post:"250px",Content:"250px",Recipe:"250px",Sidebar:"250px"};a=this._clsOptions.siteAds.breakpoints;var d=a.tablet;var e=window.innerWidth;a=e>=a.desktop?"desktop":e>=d?"tablet":"phone";this._device=a;this._config=new Na(b);this._clsOptions.enabledLocations=this._config.enabledLocations;this._clsTargetAdDensitySiteExperiment=this._clsOptions.siteAds.siteExperiments?new Ta(this._clsOptions): null;this._stickyContainerAdsExperiment=new Ua;this._stickyContainerRecipeExperiment=new Va;this._removeRecipeCapExperiment=new Qa}c.prototype.start=function(){var b=this,a,d,e,f;try{Oa(this._device);var g=new Sa(this._clsOptions);if(g.enabled){var h=g.result,k=h.startsWith(".")?h.substring(1):h;if(/^[-_a-zA-Z]+[-_a-zA-Z0-9]*$/.test(k))try{document.body.classList.add(k)}catch(m){q.error("ClsDynamicAdsInjector","start","Uncaught CSS Class error: ".concat(m))}else q.error("ClsDynamicAdsInjector","start", "Invalid class name: ".concat(k))}var l=Ma(this._device,this._clsOptions.siteAds).filter(function(m){return b._locationEnabled(m)}).filter(function(m){return m.devices.includes(b._device)}).filter(function(m){return 0===m.pageSelector.length||null!==document.querySelector(m.pageSelector)}),p=this.inject(l);(null===(d=null===(a=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===a?void 0:a.content)||void 0===d?0:d.enabled)&&this._stickyContainerAdsExperiment.result&&!ka(this._clsOptions.siteAds.adOptions.stickyContainerConfig.blockedSelectors|| [])&&Pa(null===(f=null===(e=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===e?void 0:e.content)||void 0===f?void 0:f.minHeight);p.forEach(function(m){return b._clsOptions.setInjectedSlots(m)})}catch(m){q.error("ClsDynamicAdsInjector","start",m)}};c.prototype.inject=function(b,a){void 0===a&&(a=document);this._densityDevice="desktop"===this._device?J.Desktop:J.Mobile;this._overrideDefaultAdDensitySettingsWithSiteExperiment();var d=this._clsOptions.siteAds,e=u(d.adDensityEnabled, !0),f=d.adDensityLayout&&e;d=b.filter(function(g){return f?"Content"!==g.location:g});b=b.filter(function(g){return f?"Content"===g.location:null});return w(w([],r(d.length?this._injectNonDensitySlots(d,a):[]),!1),r(b.length?this._injectDensitySlots(b,a):[]),!1)};c.prototype._injectNonDensitySlots=function(b,a){var d,e=this,f,g,h;void 0===a&&(a=document);var k=[],l=[];this._stickyContainerRecipeExperiment.result&&b.some(function(n){return"Recipe"===n.location&&n.sticky})&&!ka((null===(f=this._clsOptions.siteAds.adOptions.stickyContainerConfig)|| void 0===f?void 0:f.blockedSelectors)||[])&&(f=this._clsOptions.siteAds.adOptions.stickyContainerConfig,f="phone"===this._device?null===(g=null===f||void 0===f?void 0:f.recipeMobile)||void 0===g?void 0:g.minHeight:null===(h=null===f||void 0===f?void 0:f.recipeDesktop)||void 0===h?void 0:h.minHeight,T("\n .adthrive-recipe.adthrive-sticky {\n position: -webkit-sticky;\n position: sticky !important;\n top: 42px !important;\n margin-top: 42px !important;\n }\n .adthrive-recipe-sticky-container {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n min-height:".concat(f? f:400,"px !important;\n margin: 10px 0 10px 0;\n background-color: #FAFAFA;\n padding-bottom:0px;\n }\n ")));try{for(var p=L(b),m=p.next();!m.done;m=p.next())this._insertNonDensityAds(m.value,k,l,a)}catch(n){var t={error:n}}finally{try{m&&!m.done&&(d=p.return)&&d.call(p)}finally{if(t)throw t.error;}}l.forEach(function(n){n.element.style.minHeight=e.locationToMinHeight[n.location]});return k};c.prototype._injectDensitySlots=function(b,a){void 0===a&&(a=document);try{this._calculateMainContentHeightAndAllElements(b, a)}catch(h){return[]}var d=this._getDensitySettings(b,a);b=d.onePerViewport;var e=d.targetAll,f=d.targetDensityUnits,g=d.combinedMax;d=d.numberOfUnits;this._absoluteMinimumSpacingByDevice=b?window.innerHeight:this._absoluteMinimumSpacingByDevice;if(!d)return[];this._adInjectionMap.filterUsed();this._findElementsForAds(d,b,e,g,f,a);return this._insertAds()};c.prototype._overrideDefaultAdDensitySettingsWithSiteExperiment=function(){var b;if(null===(b=this._clsTargetAdDensitySiteExperiment)||void 0=== b?0:b.enabled)b=this._clsTargetAdDensitySiteExperiment.result,"number"===typeof b&&(this._clsOptions.siteAds.adDensityEnabled=!0,this._clsOptions.siteAds.adDensityLayout[this._densityDevice].adDensity=b)};c.prototype._getDensitySettings=function(b,a){void 0===a&&(a=document);var d=this._clsOptions.siteAds.adDensityLayout,e=this._determineOverrides(d.pageOverrides);e=e.length?e[0]:d[this._densityDevice];d=this._clsOptions.getTargetDensity(e.adDensity);e=e.onePerViewport;var f=this._shouldTargetAllEligible(d), g=this._getTargetDensityUnits(d,f);b=this._getCombinedMax(b,a);a=Math.min.apply(Math,w([],r(w([this._totalAvailableElements.length,g],r(0<b?[b]:[]),!1)),!1));this._pubLog={onePerViewport:e,targetDensity:d,targetDensityUnits:g,combinedMax:b};return{onePerViewport:e,targetAll:f,targetDensityUnits:g,combinedMax:b,numberOfUnits:a}};c.prototype._determineOverrides=function(b){var a=this;return b.filter(function(d){var e=da(d.pageSelector);return""===d.pageSelector||e.elements&&e.elements.length}).map(function(d){return d[a._densityDevice]})}; c.prototype._shouldTargetAllEligible=function(b){return b===this._densityMax};c.prototype._getTargetDensityUnits=function(b,a){return a?this._totalAvailableElements.length:Math.floor(b*this._mainContentHeight/(1-b)/this._minDivHeight)-this._recipeCount};c.prototype._getCombinedMax=function(b,a){void 0===a&&(a=document);return u(b.filter(function(d){try{var e=a.querySelector(d.elementSelector)}catch(f){}return e}).map(function(d){return Number(d.max)+Number(d.lazyMaxDefaulted?0:d.lazyMax)}).sort(function(d, e){return e-d})[0],0)};c.prototype._elementLargerThanMainContent=function(b){return b.offsetHeight>=this._mainContentHeight&&1<this._totalAvailableElements.length};c.prototype._elementDisplayNone=function(b){var a=window.getComputedStyle(b,null).display;return a&&"none"===a||"none"===b.style.display};c.prototype._isBelowMaxes=function(b,a){return this._adInjectionMap.map.length<b&&this._adInjectionMap.map.length<a};c.prototype._findElementsForAds=function(b,a,d,e,f,g){var h=this;void 0===g&&(g=document); this._clsOptions.targetDensityLog={onePerViewport:a,combinedMax:e,targetDensityUnits:f,targetDensityPercentage:this._pubLog.targetDensity,mainContentHeight:this._mainContentHeight,recipeCount:this._recipeCount,numberOfEls:this._totalAvailableElements.length};var k=function(l){var p;try{for(var m=L(h._totalAvailableElements),t=m.next();!t.done;t=m.next()){var n=t.value,x=n.dynamicAd,A=n.element;h._logDensityInfo(A,x.elementSelector,l);if(!(!d&&h._elementLargerThanMainContent(A)||h._elementDisplayNone(A)))if(h._isBelowMaxes(e, f))h._checkElementSpacing({dynamicAd:x,element:A,insertEvery:l,targetAll:d,target:g});else break}}catch(K){var F={error:K}}finally{try{t&&!t.done&&(p=m.return)&&p.call(m)}finally{if(F)throw F.error;}}!h._usedAbsoluteMinimum&&5>h._smallerIncrementAttempts&&(++h._smallerIncrementAttempts,k(h._getSmallerIncrement(l)))};b=this._getInsertEvery(b,a,f);k(b)};c.prototype._getSmallerIncrement=function(b){b*=.6;b<=this._absoluteMinimumSpacingByDevice&&(b=this._absoluteMinimumSpacingByDevice,this._usedAbsoluteMinimum= !0);return b};c.prototype._insertNonDensityAds=function(b,a,d,e){void 0===e&&(e=document);var f=0,g=0,h=0;0<b.spacing&&(g=f=window.innerHeight*b.spacing);for(var k=this._repeatDynamicAds(b),l=this.getElements(b.elementSelector,e),p=function(n){if(h+1>k.length)return"break";var x=l[n];if(0<f){n=oa(x).bottom;if(n<=g)return"continue";g=n+f}n=k[h];var A="".concat(n.location,"_").concat(n.sequence);a.some(function(Wa){return Wa.name===A})&&(h+=1);var F=m.getDynamicElementId(n),K=Q(b),Xa=ja(b);K=w(["Sidebar"=== b.location&&b.sticky&&b.sequence&&5>=b.sequence?"adthrive-sticky-sidebar":"",m._stickyContainerRecipeExperiment.result&&"Recipe"===b.location&&b.sticky?"adthrive-recipe-sticky-container":"",K,Xa],r(b.classNames),!1);if(x=m.addAd(x,F,b.position,K))F=ia(n,x),F.length&&(a.push({clsDynamicAd:b,dynamicAd:n,element:x,sizes:F,name:A,infinite:e!==document}),d.push({location:n.location,element:x}),"Recipe"===b.location&&++m._recipeCount,h+=1)},m=this,t=b.skip;t<l.length&&"break"!==p(t);t+=b.every);};c.prototype._insertAds= function(){var b=this,a=[];this._adInjectionMap.filterUsed();this._adInjectionMap.map.forEach(function(d,e){var f=d.el,g=d.dynamicAd;d=d.target;e=Number(g.sequence)+e;var h=g.max;h=g.lazy&&e>h;g.sequence=e;g.lazy=h;if(f=b._addContentAd(f,g,d))g.used=!0,a.push(f)});return a};c.prototype._getInsertEvery=function(b,a,d){this._moreAvailableElementsThanUnitsToInject(d,b)?(this._usedAbsoluteMinimum=!1,b=this._useWiderSpacing(d,b)):(this._usedAbsoluteMinimum=!0,b=this._useSmallestSpacing(a));return a&&window.innerHeight> b?window.innerHeight:b};c.prototype._useWiderSpacing=function(b,a){return this._mainContentHeight/Math.min(b,a)};c.prototype._useSmallestSpacing=function(b){return b&&window.innerHeight>this._absoluteMinimumSpacingByDevice?window.innerHeight:this._absoluteMinimumSpacingByDevice};c.prototype._moreAvailableElementsThanUnitsToInject=function(b,a){return this._totalAvailableElements.length>b||this._totalAvailableElements.length>a};c.prototype._logDensityInfo=function(b,a,d){b=this._pubLog;b.onePerViewport; b.targetDensity;b.combinedMax};c.prototype._checkElementSpacing=function(b){var a=b.dynamicAd,d=b.element,e=b.insertEvery,f=b.targetAll;b=b.target;b=void 0===b?document:b;(this._isFirstAdInjected()||this._hasProperSpacing(d,a,f,e))&&this._markSpotForContentAd(d,y({},a),b)};c.prototype._isFirstAdInjected=function(){return!this._adInjectionMap.map.length};c.prototype._markSpotForContentAd=function(b,a,d){void 0===d&&(d=document);this._adInjectionMap.add(b,this._getElementCoords(b,"beforebegin"===a.position|| "afterbegin"===a.position),a,d);this._adInjectionMap.sort()};c.prototype._hasProperSpacing=function(b,a,d,e){var f="beforebegin"===a.position||"afterbegin"===a.position;a="beforeend"===a.position||"afterbegin"===a.position;d=d||this._isElementFarEnoughFromOtherAdElements(b,e,f);f=a||this._isElementNotInRow(b,f);b=-1===b.id.indexOf("AdThrive_".concat("Below_Post"));return d&&f&&b};c.prototype._isElementFarEnoughFromOtherAdElements=function(b,a,d){b=this._getElementCoords(b,d);var e=!1;for(d=0;d<this._adInjectionMap.map.length&& !(e=this._adInjectionMap.map[d+1]&&this._adInjectionMap.map[d+1].coords,e=b-a>this._adInjectionMap.map[d].coords&&(!e||b+a<e));d++);return e};c.prototype._isElementNotInRow=function(b,a){var d=b.previousElementSibling,e=b.nextElementSibling;return(a=a?!d&&e||d&&b.tagName!==d.tagName?e:d:e)&&0===b.getBoundingClientRect().height?!0:a?b.getBoundingClientRect().top!==a.getBoundingClientRect().top:!0};c.prototype._calculateMainContentHeightAndAllElements=function(b,a){void 0===a&&(a=document);b=r(ta(b, this._adInjectionMap,a),2);a=b[1];this._mainContentDiv=b[0];this._totalAvailableElements=a;b=this._mainContentDiv;a=void 0;void 0===a&&(a="div #comments, section .comments");this._mainContentHeight=(a=b.querySelector(a))?b.offsetHeight-a.offsetHeight:b.offsetHeight};c.prototype._getElementCoords=function(b,a){void 0===a&&(a=!1);b=b.getBoundingClientRect();return(a?b.top:b.bottom)+window.scrollY};c.prototype._addContentAd=function(b,a,d){var e,f;void 0===d&&(d=document);var g=null,h=Q(a),k=ja(a),l= (null===(f=null===(e=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===e?void 0:e.content)||void 0===f?0:f.enabled)&&this._stickyContainerAdsExperiment.result?"adthrive-sticky-container":"";if(b=this.addAd(b,this.getDynamicElementId(a),a.position,w([l,h,k],r(a.classNames),!1)))e=ia(a,b),e.length&&(b.style.minHeight=this.locationToMinHeight[a.location],g="".concat(a.location,"_").concat(a.sequence),g={clsDynamicAd:a,dynamicAd:a,element:b,sizes:e,name:g,infinite:d!==document});return g}; c.prototype.getDynamicElementId=function(b){return"".concat("AdThrive","_").concat(b.location,"_").concat(b.sequence,"_").concat(this._device)};c.prototype.getElements=function(b,a){void 0===a&&(a=document);return a.querySelectorAll(b)};c.prototype.addAd=function(b,a,d,e){void 0===e&&(e=[]);document.getElementById(a)||(e='<div id="'.concat(a,'" class="adthrive-ad ').concat(e.join(" "),'"></div>'),b.insertAdjacentHTML(d,e));return document.getElementById(a)};c.prototype._repeatDynamicAds=function(b){var a= [],d=this._removeRecipeCapExperiment.result&&"Recipe"===b.location?99:this.locationMaxLazySequence.get(b.location),e=b.lazy?u(d,0):0;d=b.max;var f=b.lazyMax;e=Math.max(d,0===e&&b.lazy?d+f:Math.min(Math.max(e-b.sequence+1,0),d+f));for(f=0;f<e;f++){var g=Number(b.sequence)+f,h=b.lazy&&f>=d;a.push(y(y({},b),{sequence:g,lazy:h}))}return a};c.prototype._locationEnabled=function(b){b=this._clsOptions.enabledLocations.includes(b.location);var a=this._clsOptions.disableAds&&this._clsOptions.disableAds.all|| document.body.classList.contains("adthrive-disable-all"),d=!document.body.classList.contains("adthrive-disable-content")&&!this._clsOptions.disableAds.reasons.has("content_plugin");return b&&!a&&d};return c}(),Za=function(c){function b(a,d){var e=c.call(this,a,"ClsVideoInsertion")||this;e._videoConfig=a;e._clsOptions=d;e._IN_POST_SELECTOR=".adthrive-video-player";e._WRAPPER_BAR_HEIGHT=36;e._playersAddedFromPlugin=[];d.removeVideoTitleWrapper&&(e._WRAPPER_BAR_HEIGHT=0);return e}v(b,c);b.prototype.init= function(){this._initializePlayers()};b.prototype._wrapJWPlayerWithCLS=function(a,d,e){void 0===e&&(e=0);return a.parentNode?(d=this._createGenericCLSWrapper(.5625*a.offsetWidth,d,e),a.parentNode.insertBefore(d,a),d.appendChild(a),d):null};b.prototype._createGenericCLSWrapper=function(a,d,e){var f=document.createElement("div");f.id="cls-video-container-".concat(d);f.className="adthrive";f.style.minHeight="".concat(a+e,"px");return f};b.prototype._getTitleHeight=function(a){a.innerText="Title";a.style.visibility= "hidden";document.body.appendChild(a);var d=window.getComputedStyle(a),e=parseInt(d.height,10),f=parseInt(d.marginTop,10);d=parseInt(d.marginBottom,10);document.body.removeChild(a);return Math.min(e+d+f,50)};b.prototype._initializePlayers=function(){var a=document.querySelectorAll(this._IN_POST_SELECTOR);a.length&&this._initializeRelatedPlayers(a);this._shouldRunAutoplayPlayers()&&this._determineAutoplayPlayers()};b.prototype._createStationaryRelatedPlayer=function(a,d,e){var f="mobile"===this._device? [400,225]:[640,360],g=G.Video_In_Post_ClicktoPlay_SoundOn;d&&a.mediaId&&(e="".concat(a.mediaId,"_").concat(e),d=this._wrapJWPlayerWithCLS(d,e),this._playersAddedFromPlugin.push(a.mediaId),d&&this._clsOptions.setInjectedVideoSlots({playerId:a.playerId,playerName:g,playerSize:f,element:d,type:"stationaryRelated"}))};b.prototype._createStickyRelatedPlayer=function(a,d){var e="mobile"===this._device?[400,225]:[640,360],f=G.Video_Individual_Autoplay_SOff;this._stickyRelatedOnPage=!0;this._videoConfig.mobileStickyPlayerOnPage= "mobile"===this._device;if(d&&a.position&&a.mediaId){var g=document.createElement("div");d.insertAdjacentElement(a.position,g);d=document.createElement("h3");d.style.margin="10px 0";d=this._getTitleHeight(d);d=this._wrapJWPlayerWithCLS(g,a.mediaId,this._WRAPPER_BAR_HEIGHT+d);this._playersAddedFromPlugin.push(a.mediaId);d&&this._clsOptions.setInjectedVideoSlots({playlistId:a.playlistId,playerId:a.playerId,playerSize:e,playerName:f,element:g,type:"stickyRelated"})}};b.prototype._createPlaylistPlayer= function(a,d){var e=a.playlistId,f="mobile"===this._device?G.Video_Coll_SOff_Smartphone:G.Video_Collapse_Autoplay_SoundOff,g="mobile"===this._device?[400,225]:[640,360];this._videoConfig.mobileStickyPlayerOnPage=!0;var h=document.createElement("div");d.insertAdjacentElement(a.position,h);d=this._wrapJWPlayerWithCLS(h,e,this._WRAPPER_BAR_HEIGHT);this._playersAddedFromPlugin.push("playlist-".concat(e));d&&this._clsOptions.setInjectedVideoSlots({playlistId:a.playlistId,playerId:a.playerId,playerSize:g, playerName:f,element:h,type:"stickyPlaylist"})};b.prototype._isVideoAllowedOnPage=function(){var a=this._clsOptions.disableAds;if(a&&a.video){var d="";a.reasons.has("video_tag")?d="video tag":a.reasons.has("video_plugin")?d="video plugin":a.reasons.has("video_page")&&(d="command queue");q.error(d?"ClsVideoInsertionMigrated":"ClsVideoInsertion","isVideoAllowedOnPage",Error("DBP: Disabled by publisher via ".concat(d||"other")));return!1}return this._clsOptions.videoDisabledFromPlugin?!1:!0};return b}(function(c){function b(a, d){var e=c.call(this)||this;e._videoConfig=a;e._component=d;e._stickyRelatedOnPage=!1;e._relatedMediaIds=[];a=void 0;void 0===a&&(a=navigator.userAgent);a=/Windows NT|Macintosh/i.test(a);e._device=a?"desktop":"mobile";e._potentialPlayerMap=e.setPotentialPlayersMap();return e}v(b,c);b.prototype.setPotentialPlayersMap=function(){var a=this._videoConfig.players||[],d=this._filterPlayerMap();a=a.filter(function(e){return"stationaryRelated"===e.type&&e.enabled});d.stationaryRelated=a;return this._potentialPlayerMap= d};b.prototype._filterPlayerMap=function(){var a=this,d=this._videoConfig.players,e={stickyRelated:[],stickyPlaylist:[],stationaryRelated:[]};return d&&d.length?d.filter(function(f){var g;return null===(g=f.devices)||void 0===g?void 0:g.includes(a._device)}).reduce(function(f,g){f[g.type]||(q.event(a._component,"constructor","Unknown Video Player Type detected",g.type),f[g.type]=[]);g.enabled&&f[g.type].push(g);return f},e):e};b.prototype._checkPlayerSelectorOnPage=function(a){var d=this;a=this._potentialPlayerMap[a].map(function(e){return{player:e, playerElement:d._getPlacementElement(e)}});return a.length?a[0]:{player:null,playerElement:null}};b.prototype._getOverrideElement=function(a,d,e){a&&d?(e=document.createElement("div"),d.insertAdjacentElement(a.position,e)):(d=this._checkPlayerSelectorOnPage("stickyPlaylist"),a=d.player,d=d.playerElement,a&&d&&(e=document.createElement("div"),d.insertAdjacentElement(a.position,e)));return e};b.prototype._shouldOverrideElement=function(a){a=a.getAttribute("override-embed");return"true"===a||"false"=== a?"true"===a:this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.overrideEmbedLocation:!1};b.prototype._checkPageSelector=function(a,d,e){void 0===e&&(e=[]);return a&&d&&0===e.length?("/"!==window.location.pathname&&q.event("VideoUtils","getPlacementElement",Error("PSNF: ".concat(a," does not exist on the page"))),!1):!0};b.prototype._getElementSelector=function(a,d,e){if(d&&d.length>e)return d[e];q.event("VideoUtils","getPlacementElement",Error("ESNF: ".concat(a," does not exist on the page"))); return null};b.prototype._getPlacementElement=function(a){var d=a.pageSelector,e=a.elementSelector;a=a.skip;var f=da(d),g=f.valid,h=f.elements;f=S(f,["valid","elements"]);var k=ca(e),l=k.valid,p=k.elements;k=S(k,["valid","elements"]);return""===d||g?l?this._checkPageSelector(d,g,h)?this._getElementSelector(e,p,a)||null:null:(q.error("VideoUtils","getPlacementElement",Error("".concat(e," is not a valid selector")),k),null):(q.error("VideoUtils","getPlacementElement",Error("".concat(d," is not a valid selector")), f),null)};b.prototype._getEmbeddedPlayerType=function(a){(a=a.getAttribute("data-player-type"))&&"default"!==a||(a=this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.defaultPlayerType:"static");this._stickyRelatedOnPage&&(a="static");return a};b.prototype._getMediaId=function(a){return(a=a.getAttribute("data-video-id"))?(this._relatedMediaIds.push(a),a):!1};b.prototype._createRelatedPlayer=function(a,d,e,f){"collapse"===d?this._createCollapsePlayer(a,e):"static"===d&&this._createStaticPlayer(a, e,f)};b.prototype._createCollapsePlayer=function(a,d){var e=this._checkPlayerSelectorOnPage("stickyRelated"),f=e.player;e=e.playerElement;var g=f?f:this._potentialPlayerMap.stationaryRelated[0];g&&g.playerId?(this._shouldOverrideElement(d)&&(d=this._getOverrideElement(f,e,d)),d=document.querySelector("#cls-video-container-".concat(a," > div"))||d,this._createStickyRelatedPlayer(y(y({},g),{mediaId:a}),d)):q.error(this._component,"_createCollapsePlayer","No video player found")};b.prototype._createStaticPlayer= function(a,d,e){this._potentialPlayerMap.stationaryRelated.length&&this._potentialPlayerMap.stationaryRelated[0].playerId?this._createStationaryRelatedPlayer(y(y({},this._potentialPlayerMap.stationaryRelated[0]),{mediaId:a}),d,e):q.error(this._component,"_createStaticPlayer","No video player found")};b.prototype._shouldRunAutoplayPlayers=function(){return this._isVideoAllowedOnPage()&&(this._potentialPlayerMap.stickyRelated.length||this._potentialPlayerMap.stickyPlaylist.length)?!0:!1};b.prototype._determineAutoplayPlayers= function(){var a=this._component,d="VideoManagerComponent"===a,e=this._config;if(this._stickyRelatedOnPage)q.event(a,"stickyRelatedOnPage",d&&{device:e&&e.context.device,isDesktop:this._device}||{});else{var f=this._checkPlayerSelectorOnPage("stickyPlaylist"),g=f.player;f=f.playerElement;g&&g.playerId&&g.playlistId&&f?this._createPlaylistPlayer(g,f):q.event(a,"noStickyPlaylist",d&&{vendor:"none",device:e&&e.context.device,isDesktop:this._device}||{})}};b.prototype._initializeRelatedPlayers=function(a){for(var d= new Map,e=0;e<a.length;e++){var f=a[e],g=f.offsetParent,h=this._getEmbeddedPlayerType(f),k=this._getMediaId(f);g&&k&&(g=(d.get(k)||0)+1,d.set(k,g),this._createRelatedPlayer(k,h,f,g))}};return b}(function(){function c(){}Object.defineProperty(c.prototype,"enabled",{get:function(){return!0},enumerable:!1,configurable:!0});return c}())),$a=function(c){function b(){return null!==c&&c.apply(this,arguments)||this}v(b,c);return b}(function(){function c(){this._map=[]}c.prototype.add=function(b,a,d,e){void 0=== e&&(e=document);this._map.push({el:b,coords:a,dynamicAd:d,target:e})};Object.defineProperty(c.prototype,"map",{get:function(){return this._map},enumerable:!1,configurable:!0});c.prototype.sort=function(){this._map.sort(function(b,a){return b.coords-a.coords})};c.prototype.filterUsed=function(){this._map=this._map.filter(function(b){return!b.dynamicAd.used})};c.prototype.reset=function(){this._map=[]};return c}());try{(function(){var c=new ea;c&&c.enabled&&((new Ya(c,new $a)).start(),(new Za(new Ca(c), c)).init())})()}catch(c){q.error("CLS","pluginsertion-iife",c),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><link rel='stylesheet' id='e-animations-css' href='https://www.devx.com/wp-content/plugins/elementor/assets/lib/animations/animations.min.css?ver=3.20.4' type='text/css' media='all' /> <script type="text/javascript" id="wpil-frontend-script-js-extra"> /* <![CDATA[ */ var wpilFrontend = {"ajaxUrl":"\/wp-admin\/admin-ajax.php","postId":"11031","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"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/link-whisper-premium/js/frontend.min.js?ver=1712228365" id="wpil-frontend-script-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/themes/devxnew/assets/js/hello-frontend.min.js?ver=1.0.0" id="hello-theme-frontend-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.0.1" id="smartmenus-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.12.3" id="elementor-pro-webpack-runtime-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.20.4" id="elementor-webpack-runtime-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.20.4" id="elementor-frontend-modules-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill-inert.min.js?ver=3.1.2" id="wp-polyfill-inert-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.14.0" id="regenerator-runtime-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/hooks.min.js?ver=2810c76e705dd1a53b18" id="wp-hooks-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" id="elementor-pro-frontend-js-before"> /* <![CDATA[ */ var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.devx.com\/wp-admin\/admin-ajax.php","nonce":"c6909ecec4","urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/www.devx.com\/wp-json\/"},"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"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.12.3" id="elementor-pro-frontend-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/lib/waypoints/waypoints.min.js?ver=4.0.2" id="elementor-waypoints-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.2" id="jquery-ui-core-js"></script> <script type="text/javascript" id="elementor-frontend-js-before"> /* <![CDATA[ */ 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","a11yCarouselWrapperAriaLabel":"Carousel | Horizontal scrolling: Arrow Left & Right","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}}},"version":"3.20.4","is_static":false,"experimentalFeatures":{"e_optimized_assets_loading":true,"e_optimized_css_loading":true,"additional_custom_breakpoints":true,"e_swiper_latest":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"block_editor_assets_optimize":true,"ai-layout":true,"landing-pages":true,"e_image_loading_optimization":true,"page-transitions":true,"notes":true,"loop":true,"form-submissions":true,"e_scroll_snap":true},"urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor\/assets\/"},"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":11031,"title":"Getting%20Fancy%20with%20FOP%20-%20DevX","excerpt":"","featuredImage":"https:\/\/www.devx.com\/wp-content\/uploads\/2022\/02\/thumbnail.jpg"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.20.4" id="elementor-frontend-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.12.3" id="pro-elements-handlers-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=3.12.3" id="e-sticky-js"></script> <script>!function(){"use strict";!function(e){if(-1===e.cookie.indexOf("__adblocker")){e.cookie="__adblocker=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";var t=new XMLHttpRequest;t.open("GET","https://ads.adthrive.com/abd/abd.js",!0),t.onreadystatechange=function(){if(XMLHttpRequest.DONE===t.readyState)if(200===t.status){var a=e.createElement("script");a.innerHTML=t.responseText,e.getElementsByTagName("head")[0].appendChild(a)}else{var n=new Date;n.setTime(n.getTime()+3e5),e.cookie="__adblocker=true; expires="+n.toUTCString()+"; path=/"}},t.send()}}(document)}(); </script><script>!function(){"use strict";var e;e=document,function(){var t,n;function r(){var t=e.createElement("script");t.src="https://cafemedia-com.videoplayerhub.com/galleryplayer.js",e.head.appendChild(t)}function a(){var t=e.cookie.match("(^|[^;]+)\\s*__adblocker\\s*=\\s*([^;]+)");return t&&t.pop()}function c(){clearInterval(n)}return{init:function(){var e;"true"===(t=a())?r():(e=0,n=setInterval((function(){100!==e&&"false"!==t||c(),"true"===t&&(r(),c()),t=a(),e++}),50))}}}().init()}(); </script> </body> </html> <!-- Dynamic page generated in 1.897 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2024-04-19 10:43:06 --> <!-- Compression = gzip -->