Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 460

Deprecated: Function create_function() is deprecated in /home/layout/domains/layout2book.com/public_html/libraries/rokcommon/RokCommon/Service/ContainerImpl.php on line 461
Crikey! There was an error...
Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("TEST_12345_THIS_IS_THE_EDITED_FILE").
Previous exceptions
  • TEST_12345_THIS_IS_THE_EDITED_FILE (500)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("TEST_12345_THIS_IS_THE_EDITED_FILE")." Stacktrace: #44 Twig\Error\RuntimeError in /home/layout/domains/layout2book.com/public_html/media/gantry5/engines/nucleus/particles/menu.html.twig:2 #43 Exception in /home/layout/domains/layout2book.com/public_html/libraries/src/Factory.php:139 #42 Joomla\CMS\Factory:getApplication in /home/layout/domains/layout2book.com/public_html/libraries/src/Router/Route.php:90 #41 Joomla\CMS\Router\Route:_ in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Framework/Menu.php:378 #40 Gantry\Framework\Menu:getList in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Menu/AbstractMenu.php:154 #39 Gantry\Component\Menu\AbstractMenu:instance in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:704 #38 Twig\Template:getAttribute in /home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/04/044a99fc4afe831c278d59c760d3754c5501b763e076cbe22b2d3adc478ef54e.php:32 #37 __TwigTemplate_abe408e5806812acde8de3b2ddae4f06b7d350277865e863347db8c8323e8a4c:doDisplay in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #36 Twig\Template:displayWithErrorHandling in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #35 Twig\Template:display in /home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/bf/bfc721f933e8dbc421175ff417c73c9dd70c1417a9d21048f4317f536124a923.php:71 #34 __TwigTemplate_b03bdd93e11c8f0a454a4c4a94f59b6567b38a90017902ebb1e0af97d9e07690:doDisplay in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #33 Twig\Template:displayWithErrorHandling in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #32 Twig\Template:display in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:434 #31 Twig\Template:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/TemplateWrapper.php:47 #30 Twig\TemplateWrapper:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Environment.php:384 #29 Twig\Environment:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/AbstractTheme.php:163 #28 Gantry\Component\Theme\AbstractTheme:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:769 #27 Gantry\Framework\Theme:getContent in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:668 #26 Gantry\Framework\Theme:renderContent in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:595 #25 Gantry\Framework\Theme:prepareLayout in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:581 #24 Gantry\Framework\Theme:prepareLayout in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:581 #23 Gantry\Framework\Theme:prepareLayout in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:581 #22 Gantry\Framework\Theme:prepareLayout in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/ThemeTrait.php:424 #21 Gantry\Framework\Theme:segments in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:702 #20 Twig\Template:getAttribute in /home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/e8/e8a7820de124bf69728a19f34f61992fdc1c43ab0fd0542c209abc8d6843c2cf.php:47 #19 __TwigTemplate_fcf6b84d99ee0c649bbd3565c54e357a0b8455743ec1bdfa54be543f1fe55e65:doDisplay in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #18 Twig\Template:displayWithErrorHandling in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #17 Twig\Template:display in /home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/8d/8da9c74876eba78eb8aef4f7a95e3838449d7ef48c73532b8526c5268febf94d.php:35 #16 __TwigTemplate_049bc175fb6b7bac2cab934343319fcd6a77e54455f720d9fac0f2bf28551b2f:doDisplay in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #15 Twig\Template:displayWithErrorHandling in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #14 Twig\Template:display in /home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/81/8185070b0fb05aa12b3d83b5556f245a99ef880efa5e9468dd59cadefccbcfb3.php:35 #13 __TwigTemplate_6e7faa0ae24a7596fbfce0dc7880e4ceb6b1e7a93b86375938b1bc41b68404df:doDisplay in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:455 #12 Twig\Template:displayWithErrorHandling in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:422 #11 Twig\Template:display in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Template.php:434 #10 Twig\Template:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/TemplateWrapper.php:47 #9 Twig\TemplateWrapper:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/vendor/twig/twig/src/Environment.php:384 #8 Twig\Environment:render in /home/layout/domains/layout2book.com/public_html/libraries/gantry5/classes/Gantry/Component/Theme/AbstractTheme.php:163 #7 Gantry\Component\Theme\AbstractTheme:render in /home/layout/domains/layout2book.com/public_html/templates/g5_helium/index.php:23 #6 require in /home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php:653 #5 JDocumentHtml:_loadTemplate in /home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php:715 #4 JDocumentHtml:_fetchTemplate in /home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php:530 #3 JDocumentHtml:parse in /home/layout/domains/layout2book.com/public_html/libraries/cms/application/cms.php:1102 #2 JApplicationCms:render in /home/layout/domains/layout2book.com/public_html/libraries/cms/application/site.php:777 #1 JApplicationSite:render in /home/layout/domains/layout2book.com/public_html/libraries/cms/application/cms.php:271 #0 JApplicationCms:execute in /home/layout/domains/layout2book.com/public_html/index.php:49
Stack frames (45)
44
Twig\Error\RuntimeError
/home/layout/domains/layout2book.com/public_html/media/gantry5/engines/nucleus/particles/menu.html.twig2
43
Exception
/home/layout/domains/layout2book.com/public_html/libraries/src/Factory.php139
42
Joomla\CMS\Factory getApplication
/home/layout/domains/layout2book.com/public_html/libraries/src/Router/Route.php90
41
Joomla\CMS\Router\Route _
/classes/Gantry/Framework/Menu.php378
40
Gantry\Framework\Menu getList
/classes/Gantry/Component/Menu/AbstractMenu.php154
39
Gantry\Component\Menu\AbstractMenu instance
/vendor/twig/twig/src/Template.php704
38
Twig\Template getAttribute
/home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/04/044a99fc4afe831c278d59c760d3754c5501b763e076cbe22b2d3adc478ef54e.php32
37
__TwigTemplate_abe408e5806812acde8de3b2ddae4f06b7d350277865e863347db8c8323e8a4c doDisplay
/vendor/twig/twig/src/Template.php455
36
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
35
Twig\Template display
/home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/bf/bfc721f933e8dbc421175ff417c73c9dd70c1417a9d21048f4317f536124a923.php71
34
__TwigTemplate_b03bdd93e11c8f0a454a4c4a94f59b6567b38a90017902ebb1e0af97d9e07690 doDisplay
/vendor/twig/twig/src/Template.php455
33
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
32
Twig\Template display
/vendor/twig/twig/src/Template.php434
31
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php47
30
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php384
29
Twig\Environment render
/classes/Gantry/Component/Theme/AbstractTheme.php163
28
Gantry\Component\Theme\AbstractTheme render
/classes/Gantry/Component/Theme/ThemeTrait.php769
27
Gantry\Framework\Theme getContent
/classes/Gantry/Component/Theme/ThemeTrait.php668
26
Gantry\Framework\Theme renderContent
/classes/Gantry/Component/Theme/ThemeTrait.php595
25
Gantry\Framework\Theme prepareLayout
/classes/Gantry/Component/Theme/ThemeTrait.php581
24
Gantry\Framework\Theme prepareLayout
/classes/Gantry/Component/Theme/ThemeTrait.php581
23
Gantry\Framework\Theme prepareLayout
/classes/Gantry/Component/Theme/ThemeTrait.php581
22
Gantry\Framework\Theme prepareLayout
/classes/Gantry/Component/Theme/ThemeTrait.php424
21
Gantry\Framework\Theme segments
/vendor/twig/twig/src/Template.php702
20
Twig\Template getAttribute
/home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/e8/e8a7820de124bf69728a19f34f61992fdc1c43ab0fd0542c209abc8d6843c2cf.php47
19
__TwigTemplate_fcf6b84d99ee0c649bbd3565c54e357a0b8455743ec1bdfa54be543f1fe55e65 doDisplay
/vendor/twig/twig/src/Template.php455
18
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
17
Twig\Template display
/home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/8d/8da9c74876eba78eb8aef4f7a95e3838449d7ef48c73532b8526c5268febf94d.php35
16
__TwigTemplate_049bc175fb6b7bac2cab934343319fcd6a77e54455f720d9fac0f2bf28551b2f doDisplay
/vendor/twig/twig/src/Template.php455
15
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
14
Twig\Template display
/home/layout/domains/layout2book.com/public_html/cache/gantry5/g5_helium/twig/81/8185070b0fb05aa12b3d83b5556f245a99ef880efa5e9468dd59cadefccbcfb3.php35
13
__TwigTemplate_6e7faa0ae24a7596fbfce0dc7880e4ceb6b1e7a93b86375938b1bc41b68404df doDisplay
/vendor/twig/twig/src/Template.php455
12
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php422
11
Twig\Template display
/vendor/twig/twig/src/Template.php434
10
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php47
9
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php384
8
Twig\Environment render
/classes/Gantry/Component/Theme/AbstractTheme.php163
7
Gantry\Component\Theme\AbstractTheme render
/home/layout/domains/layout2book.com/public_html/templates/g5_helium/index.php23
6
require
/home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php653
5
JDocumentHtml _loadTemplate
/home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php715
4
JDocumentHtml _fetchTemplate
/home/layout/domains/layout2book.com/public_html/libraries/joomla/document/html.php530
3
JDocumentHtml parse
/home/layout/domains/layout2book.com/public_html/libraries/cms/application/cms.php1102
2
JApplicationCms render
/home/layout/domains/layout2book.com/public_html/libraries/cms/application/site.php777
1
JApplicationSite render
/home/layout/domains/layout2book.com/public_html/libraries/cms/application/cms.php271
0
JApplicationCms execute
/home/layout/domains/layout2book.com/public_html/index.php49
{% try %}
    {% set menu = gantry.menu.instance(particle) %}
{% catch %}
    <div class="alert alert-error">{{ e.getMessage }}</div>
{% endtry %}
 
{% macro getCustomWidth(item, menu, mode, dropdown_type) -%}
    {%- if (item.width|default('auto') != 'auto') and not (dropdown_type == 'fullwidth' and item.level > 1) -%}
        {%- if mode == 'item' %} style="position: relative;"
        {%- elseif mode == 'submenu' %} style="width:{{ item.width }};" data-g-item-width="{{ item.width }}"
        {%- endif %}
    {%- endif %}
{%- endmacro %}
 
{% macro displayParticle(item, context) %}
    {% set context = context|merge({ particle: item.options.particle }) %}
    {% set classes = item.options.block.class %}
    <div class="menu-item-particle{{ classes ? ' ' ~ classes }}">
        {% include ['particles/' ~ item.particle ~ '.html.twig', '@particles/' ~ item.particle ~ '.html.twig']
        ignore missing with context only %}
    </div>
{% endmacro %}
 
{% macro displayTitle(item) %}
    {% if not item.icon_only or not (item.image or item.icon) %}
        <span class="g-menu-item-title">{{ item.title }}</span>
        {% if item.subtitle %}
            <span class="g-menu-item-subtitle">{{ item.subtitle }}</span>
        {% endif %}
    {% endif %}
{% endmacro %}
 
{% macro displayItem(item, menu, context, dropdown_type) %}
    {% import _self as self %}
    {% if item.type == 'particle' and not item.options.particle.enabled %}
        {% set enabled = 0 %}
    {% endif %}
    {% if item.visible and item.enabled and enabled|default(1) %}
        {% set title = item.icon_only or item.link_title ? ' title="' ~ item.link_title|default(item.title)|e ~ '"' %}
        {% set label = item.icon_only and (item.image or item.icon) ? ' aria-label="' ~ item.title|e ~'"' %}
     *
     * @param   mixed   $id      A client identifier or name.
     * @param   array   $config  An optional associative array of configuration settings.
     * @param   string  $prefix  Application prefix
     *
     * @return  CMSApplication object
     *
     * @see     JApplication
     * @since   1.7.0
     * @throws  \Exception
     */
    public static function getApplication($id = null, array $config = array(), $prefix = 'J')
    {
        if (!self::$application)
        {
            if (!$id)
            if (!$id)
                        {
                                error_log('GANTRY_DEBUG: ' . print_r(debug_backtrace (DEBUG_BACKTRACE_IGNORE_ARGS, 8), true));
                                throw new \Exception('TEST_12345_THIS_IS_THE_EDITED_FILE', 500);
                        }
 
            self::$application = CMSApplication::getInstance($id);
 
            // Attach a delegated JLog object to the application
            self::$application->setLogger(Log::createDelegatedLogger());
        }
 
        return self::$application;
    }
 
    /**
     * Get a configuration object
     *
     * Returns the global {@link \JConfig} object, only creating it if it doesn't already exist.
     *
     * @param   string  $file       The path to the configuration file
     * @param   string  $type       The type of the configuration file
     * @param   string  $namespace  The namespace of the configuration file
     *
Exception message: TEST_12345_THIS_IS_THE_EDITED_FILE
        {
            // @deprecated  4.0 Before 3.9.7 this method silently converted $tls to integer
            if (!is_int($tls))
            {
                Log::add(
                    __METHOD__ . '() called with incompatible variable type on parameter $tls.',
                    Log::WARNING,
                    'deprecated'
                );
 
                $tls = (int) $tls;
            }
 
            // @todo  Deprecate in 4.0 Before 3.9.7 this method accepted -1.
            if ($tls === -1)
            {
                $tls = self::TLS_DISABLE;
            }
 
            $app    = Factory::getApplication();
            $client = $app->getName();
 
            return static::link($client, $url, $xhtml, $tls, $absolute);
        }
        catch (\RuntimeException $e)
        {
            // @deprecated  4.0 Before 3.9.0 this method failed silently on router error. This B/C will be removed in Joomla 4.0.
            return null;
        }
    }
 
    /**
     * Translates an internal Joomla URL to a humanly readable URL.
     * NOTE: To build link for active client instead of a specific client, you can use <var>JRoute::_()</var>
     *
     * @param   string   $client    The client name for which to build the link.
     * @param   string   $url       Absolute or Relative URI to Joomla resource.
     * @param   boolean  $xhtml     Replace & by &amp; for XML compliance.
     * @param   integer  $tls       Secure state for the resolved URI. Use Route::TLS_* constants
     *                                0: (default) No change, use the protocol currently used in the request
                    default:
                        $app = $this->app;
                        $router = $app::getRouter();
 
                        if ($router->getMode() == JROUTER_MODE_SEF) {
                            $link = 'index.php?Itemid=' . $item->id;
 
                            if (isset($menuItem->query['format']) && $app->get('sef_suffix')) {
                                $link .= '&format=' . $menuItem->query['format'];
                            }
                        } else {
                            $link .= '&Itemid=' . $item->id;
                        }
                        break;
                }
 
                if (!$link) {
                    $item->url(false);
                } elseif (strcasecmp(substr($link, 0, 4), 'http') && (strpos($link, 'index.php?') !== false)) {
                    $item->url(\JRoute::_($link, false, $menuItem->params->get('secure')));
                } else {
                    $item->url(\JRoute::_($link, false));
                }
 
                if ($item->type == 'url') {
                    // Moved from modules/mod_menu/tmpl/default_url.php, not sure why Joomla had application logic in there.
                    // Keep compatibility to Joomla menu module, but we need non-encoded version of the url.
                    $item->url(
                        htmlspecialchars_decode(\JFilterOutput::ampReplace(htmlspecialchars($item->link, ENT_COMPAT|ENT_SUBSTITUTE, 'UTF-8')))
                    );
                }
            }
 
            // FIXME: need to create collection class to gather the sibling data, otherwise caching cannot work.
            // $cache->store($this->items, $key);
        }
    }
}
 
        $instance = clone $this;
        $instance->params = $params;
 
        if ($menu) {
            $instance->override = true;
            $instance->config = $menu;
        } else {
            $instance->config = null;
        }
 
        $config = $instance->config();
        $items = isset($config['items']) ? $config['items'] : [];
 
        // Create menu structure.
        $instance->init($params);
 
        // Get menu items from the system (if not specified otherwise).
        if ($config->get('settings.type') !== 'custom') {
            $instance->getList($params, $items);
        }
 
        // Add custom menu items.
        $instance->addCustom($params, $items);
 
        // Sort menu items.
        $instance->sortAll();
 
        return $instance;
    }
 
    /**
     * Get menu configuration.
     *
     * @return Config
     */
    public function config()
    {
        if (!$this->config) {
            $gantry = static::gantry();
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
            }
            @trigger_error($message, E_USER_DEPRECATED);
 
/* @particles/menu.html.twig */
class __TwigTemplate_abe408e5806812acde8de3b2ddae4f06b7d350277865e863347db8c8323e8a4c extends \Twig\Template
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->parent = false;
 
        $this->blocks = [
        ];
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        // line 1
        try {            // line 2
            echo "    ";
            $context["menu"] = $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "menu", []), "instance", [0 => ($context["particle"] ?? null)], "method");
        } catch (\Exception $e) {
            if ($context['gantry']->debug()) throw $e;
            GANTRY_DEBUGGER && method_exists('Gantry\Debugger', 'addException') && \Gantry\Debugger::addException($e);
            $context['e'] = $e;
            // line 4
            echo "    <div class=\"alert alert-error\">";
            echo twig_escape_filter($this->env, $this->getAttribute(($context["e"] ?? null), "getMessage", []), "html", null, true);
            echo "</div>
";
        }
        // line 6
        echo "
";
        // line 14
        echo "
";
        // line 23
        echo "
";
        // line 32
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                    echo "            ";
                    $context["particle"] = $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "config", []), "getJoined", [0 => ("particles." . $this->getAttribute(($context["segment"] ?? null), "subtype", [])), 1 => $this->getAttribute(($context["segment"] ?? null), "attributes", [])], "method");
                    // line 10
                    echo "        ";
                }
                // line 11
                echo "    ";
            }
            // line 12
            echo "
    ";
            // line 13
            ob_start();
            // line 14
            echo "        ";
            if ((($context["enabled"] ?? null) && ((null === $this->getAttribute($this->getAttribute(($context["segment"] ?? null), "attributes", []), "enabled", [])) || $this->getAttribute($this->getAttribute(($context["segment"] ?? null), "attributes", []), "enabled", [])))) {
                // line 15
                echo "            ";
                $this->loadTemplate([0 => (("particles/" . $this->getAttribute(($context["segment"] ?? null), "subtype", [])) . ".html.twig"), 1 => (("@particles/" . $this->getAttribute(                // line 16
($context["segment"] ?? null), "subtype", [])) . ".html.twig"), 2 => "@nucleus/content/missing.html.twig"], "@nucleus/content/particle.html.twig", 15)->display($context);
                // line 18
                echo "        ";
            }
            // line 19
            echo "    ";
            $context["html"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
            // line 20
            echo "    ";
            $context["html"] = twig_trim_filter(($context["html"] ?? null));
            // line 21
            echo "
    ";
            // line 22
            $context["classes"] = twig_trim_filter(((( !($context["inContent"] ?? null)) ? ("g-content g-particle ") : ("g-particle ")) . twig_join_filter($this->getAttribute(($context["segment"] ?? null), "classes", []), " ")));
            // line 23
            if (($context["html"] ?? null)) {
                // line 24
                if ($this->getAttribute(($context["gantry"] ?? null), "debug", [])) {
                    echo "<!-- START PARTICLE ";
                    echo twig_escape_filter($this->env, ($context["id"] ?? null), "html", null, true);
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
 
            $this->renderer = $this->extendTwig($twig, $loader);
        }
 
        return $this->renderer;
    }
 
    /**
     * Render a template file by using given context.
     *
     * @param string $file
     * @param array $context
     * @return string
     */
    public function render($file, array $context = [])
    {
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $this->renderer()->render($file, $context);
    }
 
    /**
     * Compile and render twig string.
     *
     * @param string $string
     * @param array $context
     * @return string
     */
    public function compile($string, array $context = [])
    {
        $renderer = $this->renderer();
        $template = $renderer->createTemplate($string);
 
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $template->render($context);
    }
 
 
            $filename = $locator->findResource("gantry-cache://theme/html/{$key}.php", true, true);
            $file = PhpFile::instance($filename);
            if ($file->exists()) {
                try {
                    return ContentBlock::fromArray((array) $file->content());
                } catch (\Exception $e) {
                    // Invalid cache, continue to rendering.
                    GANTRY_DEBUGGER && \Gantry\Debugger::addMessage(sprintf('Failed to load %s %s cache', $item->type, $item->id), 'debug');
                }
            }
        }
 
        // Create new document context for assets.
        $context = $this->getContext(['segment' => $item, 'enabled' => 1, 'particle' => $particle] + $options);
 
        /** @var Document $document */
        $document = $gantry['document'];
        $document->push();
        $html = trim($this->render("@nucleus/content/{$item->type}.html.twig", $context));
        $content = $document->pop()->setContent($html);
 
        if (isset($file)) {
            // Save HTML and assets into the cache.
            GANTRY_DEBUGGER && \Gantry\Debugger::addMessage(sprintf('Caching %s %s', $item->type, $item->id), 'debug');
            $file->save($content->toArray());
        }
 
        return $content;
    }
}
 
                        }
                    }
            }
        }
    }
 
    /**
     * Renders individual content block, like particle or position.
     *
     * Function is used to pre-render content.
     *
     * @param object|array $item
     * @param array $options
     * @return string|null
     */
    public function renderContent($item, $options = [])
    {
        $gantry = static::gantry();
 
        $content = $this->getContent($item, $options);
 
        /** @var Document $document */
        $document = $gantry['document'];
        $document->addBlock($content);
 
        $html = $content->toString();
        return !strstr($html, '@@DEFERRED@@') ? $html : null;
    }
 
    /**
     * Renders individual content block, like particle or position.
     *
     * Function is used to pre-render content.
     *
     * @param object|array $item
     * @param array $options
     * @return ContentBlock
     * @since 5.4.3
     */
    public function getContent($item, $options = [])
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    GANTRY_DEBUGGER && \Gantry\Debugger::startTimer($item->id, "Rendering {$item->id}");
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
 
                    GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer($item->id);
 
                    break;
 
                default:
                    if ($sticky) {
                        $item->attributes->sticky = 1;
                        break;
                    }
 
                    if (empty($item->children)) {
                        unset($items[$i]);
                        break;
                    }
 
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    GANTRY_DEBUGGER && \Gantry\Debugger::startTimer($item->id, "Rendering {$item->id}");
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
 
                    GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer($item->id);
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    GANTRY_DEBUGGER && \Gantry\Debugger::startTimer($item->id, "Rendering {$item->id}");
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
 
                    GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer($item->id);
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    GANTRY_DEBUGGER && \Gantry\Debugger::startTimer($item->id, "Rendering {$item->id}");
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
 
                    GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer($item->id);
                }
            }
 
            GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer('atoms');
        }
    }
 
    /**
     * Returns all non-empty segments from the layout.
     *
     * @return array
     */
    public function segments()
    {
        if (!isset($this->segments)) {
            $this->segments = $this->loadLayout()->toArray();
 
            GANTRY_DEBUGGER && \Gantry\Debugger::startTimer('segments', "Preparing layout");
 
            $this->prepareLayout($this->segments);
 
            GANTRY_DEBUGGER && \Gantry\Debugger::stopTimer('segments');
        }
 
        return $this->segments;
    }
 
    /**
     * Prepare layout for rendering. Initializes all CSS/JS in particles.
     */
    public function prepare()
    {
        $this->segments();
    }
 
    /**
     * Returns details of the theme.
     *
     * @return ThemeDetails
     */
            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
                return;
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
            'page_bottom' => [$this, 'block_page_bottom'],
            'body_top' => [$this, 'block_body_top'],
            'body_bottom' => [$this, 'block_body_bottom'],
            'page_head' => [$this, 'block_page_head'],
            'page_footer' => [$this, 'block_page_footer'],
            'page' => [$this, 'block_page'],
            'page_body' => [$this, 'block_page_body'],
        ];
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        // line 1
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "debugger", []), "startTimer", [0 => "render", 1 => "Rendering page"], "method");
        // line 2
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "setLayout", [], "method");
        // line 3
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "loadAtoms", [], "method");
        // line 4
        $context["segments"] = $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "segments", [], "method");
        // line 6
        ob_start();
        // line 7
        echo "    ";
        if ($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "hasContent", [], "method")) {
            // line 8
            echo "        ";
            $this->displayBlock('content', $context, $blocks);
            // line 10
            echo "    ";
        }
        $context["content"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 13
        $context["offcanvas"] = null;
        // line 14
        $context['_parent'] = $context;
        $context['_seq'] = twig_ensure_traversable(($context["segments"] ?? null));
        foreach ($context['_seq'] as $context["_key"] => $context["segment"]) {
            if (($this->getAttribute($context["segment"], "type", []) == "offcanvas")) {
                // line 15
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'page_footer' => [$this, 'block_page_footer'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'content' => [$this, 'block_content'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "partials/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("partials/page.html.twig", "index.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_content($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "platform", []), "displayContent", [0 => ($context["content"] ?? null)], "method");
        echo "
";
    }
 
    public function getTemplateName()
    {
        return "index.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
 
            $this->renderer = $this->extendTwig($twig, $loader);
        }
 
        return $this->renderer;
    }
 
    /**
     * Render a template file by using given context.
     *
     * @param string $file
     * @param array $context
     * @return string
     */
    public function render($file, array $context = [])
    {
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $this->renderer()->render($file, $context);
    }
 
    /**
     * Compile and render twig string.
     *
     * @param string $string
     * @param array $context
     * @return string
     */
    public function compile($string, array $context = [])
    {
        $renderer = $this->renderer();
        $template = $renderer->createTemplate($string);
 
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $template->render($context);
    }
 
 * @author    RocketTheme http://www.rockettheme.com
 * @copyright Copyright (C) 2007 - 2017 RocketTheme, LLC
 * @license   GNU/GPLv2 and later
 *
 * http://www.gnu.org/licenses/gpl-2.0.html
 */
 
defined('_JEXEC') or die;
 
// Bootstrap Gantry framework or fail gracefully (inside included file).
$gantry = include __DIR__ . '/includes/gantry.php';
 
/** @var \Gantry\Framework\Theme $theme */
$theme = $gantry['theme'];
 
// All the custom twig variables can be defined in here:
$context = array();
 
// Render the page.
echo $theme->render('index.html.twig', $context);
 
     * @param   string  $directory  The name of the template
     * @param   string  $filename   The actual filename
     *
     * @return  string  The contents of the template
     *
     * @since   11.1
     */
    protected function _loadTemplate($directory, $filename)
    {
        $contents = '';
 
        // Check to see if we have a valid template file
        if (file_exists($directory . '/' . $filename))
        {
            // Store the file path
            $this->_file = $directory . '/' . $filename;
 
            // Get the file content
            ob_start();
            require $directory . '/' . $filename;
            $contents = ob_get_contents();
            ob_end_clean();
        }
 
        // Try to find a favicon by checking the template and root folder
        $icon = '/favicon.ico';
 
        foreach (array($directory, JPATH_BASE) as $dir)
        {
            if (file_exists($dir . $icon))
            {
                $path = str_replace(JPATH_BASE, '', $dir);
                $path = str_replace('\\', '/', $path);
                $this->addFavicon(JUri::base(true) . $path . $icon);
                break;
            }
        }
 
        return $contents;
    }
 
        if (!file_exists($directory . '/' . $template . '/' . $file))
        {
            $file = 'index.php';
        }
 
        // Load the language file for the template
        $lang = JFactory::getLanguage();
 
        // 1.5 or core then 1.6
        $lang->load('tpl_' . $template, JPATH_BASE, null, false, true)
            || $lang->load('tpl_' . $template, $directory . '/' . $template, null, false, true);
 
        // Assign the variables
        $this->template = $template;
        $this->baseurl = JUri::base(true);
        $this->params = isset($params['params']) ? $params['params'] : new Registry;
 
        // Load
        $this->_template = $this->_loadTemplate($directory . '/' . $template, $file);
 
        return $this;
    }
 
    /**
     * Parse a document template
     *
     * @return  JDocumentHTML  instance of $this to allow chaining
     *
     * @since   11.1
     */
    protected function _parseTemplate()
    {
        $matches = array();
 
        if (preg_match_all('#<jdoc:include\ type="([^"]+)"(.*)\/>#iU', $this->_template, $matches))
        {
            $template_tags_first = array();
            $template_tags_last = array();
 
            $options['title'] = (isset($args[3])) ? $args[3] : null;
        }
 
        parent::$_buffer[$options['type']][$options['name']][$options['title']] = $content;
 
        return $this;
    }
 
    /**
     * Parses the template and populates the buffer
     *
     * @param   array  $params  Parameters for fetching the template
     *
     * @return  JDocumentHTML instance of $this to allow chaining
     *
     * @since   11.1
     */
    public function parse($params = array())
    {
        return $this->_fetchTemplate($params)->_parseTemplate();
    }
 
    /**
     * Outputs the template to the browser.
     *
     * @param   boolean  $caching  If true, cache the output
     * @param   array    $params   Associative array of attributes
     *
     * @return  string The rendered data
     *
     * @since   11.1
     */
    public function render($caching = false, $params = array())
    {
        $this->_caching = $caching;
 
        if (empty($this->_template))
        {
            $this->parse($params);
        }
     */
    protected function render()
    {
        // Setup the document options.
        $this->docOptions['template'] = $this->get('theme');
        $this->docOptions['file']     = $this->get('themeFile', 'index.php');
        $this->docOptions['params']   = $this->get('themeParams');
 
        if ($this->get('themes.base'))
        {
            $this->docOptions['directory'] = $this->get('themes.base');
        }
        // Fall back to constants.
        else
        {
            $this->docOptions['directory'] = defined('JPATH_THEMES') ? JPATH_THEMES : (defined('JPATH_BASE') ? JPATH_BASE : __DIR__) . '/themes';
        }
 
        // Parse the document.
        $this->document->parse($this->docOptions);
 
        // Trigger the onBeforeRender event.
        JPluginHelper::importPlugin('system');
        $this->triggerEvent('onBeforeRender');
 
        $caching = false;
 
        if ($this->isClient('site') && $this->get('caching') && $this->get('caching', 2) == 2 && !JFactory::getUser()->get('id'))
        {
            $caching = true;
        }
 
        // Render the document.
        $data = $this->document->render($caching, $this->docOptions);
 
        // Set the application output data.
        $this->setBody($data);
 
        // Trigger the onAfterRender event.
        $this->triggerEvent('onAfterRender');
                    $this->setUserState('users.login.form.data', array('return' => JUri::getInstance()->toString()));
                    $this->set('themeFile', 'offline.php');
                    $this->setHeader('Status', '503 Service Temporarily Unavailable', 'true');
                }
 
                if (!is_dir(JPATH_THEMES . '/' . $template->template) && !$this->get('offline'))
                {
                    $this->set('themeFile', 'component.php');
                }
 
                // Ensure themeFile is set by now
                if ($this->get('themeFile') == '')
                {
                    $this->set('themeFile', $file . '.php');
                }
 
                break;
        }
 
        parent::render();
    }
 
    /**
     * Route the application.
     *
     * Routing is the process of examining the request environment to determine which
     * component should receive the request. The component optional parameters
     * are then set in the request object to be processed when the application is being
     * dispatched.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function route()
    {
        // Execute the parent method
        parent::route();
 
        $Itemid = $this->input->getInt('Itemid', null);
        }
    }
 
    /**
     * Execute the application.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function execute()
    {
        // Perform application routines.
        $this->doExecute();
 
        // If we have an application document object, render it.
        if ($this->document instanceof JDocument)
        {
            // Render the application output.
            $this->render();
        }
 
        // If gzip compression is enabled in configuration and the server is compliant, compress the output.
        if ($this->get('gzip') && !ini_get('zlib.output_compression') && ini_get('output_handler') !== 'ob_gzhandler')
        {
            $this->compress();
 
            // Trigger the onAfterCompress event.
            $this->triggerEvent('onAfterCompress');
        }
 
        // Send the application response.
        $this->respond();
 
        // Trigger the onAfterRespond event.
        $this->triggerEvent('onAfterRespond');
    }
 
    /**
     * Check if the user is required to reset their password.
{
    include_once __DIR__ . '/defines.php';
}
 
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
 
require_once JPATH_BASE . '/includes/framework.php';
 
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
 
// Instantiate the application.
$app = JFactory::getApplication('site');
 
// Execute the application.
$app->execute();
 

Environment & details:

empty
empty
empty
empty
empty
Key Value
HTTP_HOST layout2book.com
DOCUMENT_ROOT /home/layout/domains/layout2book.com/private_html
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
HTTP_ACCEPT */*
HTTP_ACCEPT_ENCODING gzip, br, zstd, deflate
CONTENT_LENGTH 0
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
UNIQUE_ID aobRcevocRl40cl04kNz7QABijI
HTTPS on
SSL_TLS_SNI layout2book.com
HTTP2 on
H2PUSH off
H2_PUSH off
H2_PUSHED
H2_PUSHED_ON
H2_STREAM_ID 1
H2_STREAM_TAG 73824-2531-1
SERVER_SIGNATURE
SERVER_SOFTWARE Apache/2
SERVER_NAME layout2book.com
SERVER_ADDR 27.254.62.199
SERVER_PORT 443
REMOTE_ADDR 216.73.217.61
REQUEST_SCHEME https
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /home/layout/domains/layout2book.com/private_html
SERVER_ADMIN webmaster@layout2book.com
SCRIPT_FILENAME /home/layout/domains/layout2book.com/private_html/index.php
REMOTE_PORT 22441
SERVER_PROTOCOL HTTP/2.0
REQUEST_METHOD GET
QUERY_STRING
REQUEST_URI /
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1787220337.9434
REQUEST_TIME 1787220337
Key Value
HTTP_HOST www.layout2book.com
DOCUMENT_ROOT /home/layout/domains/layout2book.com/private_html
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
0. Whoops\Handler\PrettyPageHandler