$tec = Tribe__Events__Main::instance();
$template_options = array('' => esc_html__('Default Events Template', 'the-events-calendar'), 'default' => esc_html__('Default Page Template', 'the-events-calendar'));
$templates = get_page_templates();
ksort($templates);
foreach (array_keys($templates) as $template) {
    $template_options[$templates[$template]] = $template;
}
/**
 * Filter the array of views that are registered for the tribe bar
 * @param array array() {
 *     Array of views, where each view is itself represented by an associative array consisting of these keys:
 *
 *     @type string $displaying         slug for the view
 *     @type string $anchor             display text (i.e. "List" or "Month")
 *     @type string $event_bar_hook     not used
 *     @type string $url                url to the view
 * }
 * @param boolean
 */
$views = apply_filters('tribe-events-bar-views', array(), false);
$views_options = array();
foreach ($views as $view) {
    $views_options[$view['displaying']] = $view['anchor'];
}
$display_tab_fields = Tribe__Main::array_insert_before_key('tribe-form-content-start', $display_tab_fields, array('info-start' => array('type' => 'html', 'html' => '<div id="modern-tribe-info">'), 'info-box-title' => array('type' => 'html', 'html' => '<h2>' . __('Display Settings', 'the-events-calendar') . '</h2>'), 'info-box-description' => array('type' => 'html', 'html' => '<p>' . sprintf(__('The settings below control the display of your calendar. If things don\'t look right, try switching between the three style sheet options or pick a page template from your theme.</p><p>There are going to be situations where no out-of-the-box template is 100&#37; perfect. Check out our <a href="%s">our themer\'s guide</a> for instructions on custom modifications.', 'the-events-calendar'), Tribe__Main::$tec_url . 'knowledgebase/themers-guide/?utm_medium=plugin-tec&utm_source=generaltab&utm_campaign=in-app') . '</p>'), 'info-end' => array('type' => 'html', 'html' => '</div>')));
$display_tab_fields = Tribe__Main::array_insert_after_key('dateWithYearFormat', $display_tab_fields, array('dateWithoutYearFormat' => array('type' => 'text', 'label' => esc_html__('Date without year', 'the-events-calendar'), 'tooltip' => esc_html__('Enter the format to use for displaying dates without a year. Used when showing an event from the current year.', 'the-events-calendar'), 'default' => 'F j', 'size' => 'medium', 'validation_type' => 'html'), 'monthAndYearFormat' => array('type' => 'text', 'label' => esc_html__('Month and year format', 'the-events-calendar'), 'tooltip' => esc_html__('Enter the format to use for dates that show a month and year only. Used on month view.', 'the-events-calendar'), 'default' => 'F Y', 'size' => 'medium', 'validation_type' => 'html')));
$display_tab_fields = Tribe__Main::array_insert_after_key('dateTimeSeparator', $display_tab_fields, array('timeRangeSeparator' => array('type' => 'text', 'label' => esc_html__('Time range separator', 'the-events-calendar'), 'tooltip' => esc_html__('Enter the separator that will be used between the start and end time of an event.', 'the-events-calendar'), 'default' => ' - ', 'size' => 'small', 'validation_type' => 'html')));
$display_tab_fields = Tribe__Main::array_insert_before_key('tribeEventsDateFormatSettingsTitle', $display_tab_fields, array('tribeEventsBasicSettingsTitle' => array('type' => 'html', 'html' => '<h3>' . __('Basic Template Settings', 'the-events-calendar') . '</h3>'), 'stylesheetOption' => array('type' => 'radio', 'label' => __('Default stylesheet used for events templates', 'the-events-calendar'), 'default' => 'tribe', 'options' => array('skeleton' => __('Skeleton Styles', 'the-events-calendar') . '<p class=\'description tribe-style-selection\'>' . __('Only includes enough css to achieve complex layouts like calendar and week view.', 'the-events-calendar') . '</p>', 'full' => __('Full Styles', 'the-events-calendar') . '<p class=\'description tribe-style-selection\'>' . __('More detailed styling, tries to grab styles from your theme.', 'the-events-calendar') . '</p>', 'tribe' => __('Tribe Events Styles', 'the-events-calendar') . '<p class=\'description tribe-style-selection\'>' . __('A fully designed and styled theme for your events pages.', 'the-events-calendar') . '</p>'), 'validation_type' => 'options'), 'tribeEventsTemplate' => array('type' => 'dropdown_select2', 'label' => __('Events template', 'the-events-calendar'), 'tooltip' => __('Choose a page template to control the appearance of your calendar and event content.', 'the-events-calendar'), 'validation_type' => 'options', 'size' => 'large', 'default' => 'default', 'options' => $template_options), 'tribeEnableViews' => array('type' => 'checkbox_list', 'label' => __('Enable event views', 'the-events-calendar'), 'tooltip' => __('You must select at least one view.', 'the-events-calendar'), 'default' => array_keys($views_options), 'options' => $views_options, 'validation_type' => 'options_multi'), 'viewOption' => array('type' => 'dropdown_select2', 'label' => __('Default view', 'the-events-calendar'), 'validation_type' => 'options', 'size' => 'large', 'default' => 'month', 'options' => $views_options), 'tribeDisableTribeBar' => array('type' => 'checkbox_bool', 'label' => __('Disable the Event Search Bar', 'the-events-calendar'), 'tooltip' => __('Check this to use the classic header.', 'the-events-calendar'), 'default' => false, 'validation_type' => 'boolean'), 'monthEventAmount' => array('type' => 'text', 'label' => __('Month view events per day', 'the-events-calendar'), 'tooltip' => sprintf(__('Change the default 3 events per day in month view. Please note there may be performance issues if you set this too high. <a href="%s">Read more</a>.', 'the-events-calendar'), 'http://m.tri.be/rh'), 'validation_type' => 'positive_int', 'size' => 'small', 'default' => '3'), 'enable_month_view_cache' => array('type' => 'checkbox_bool', 'label' => __('Enable the Month View Cache', 'the-events-calendar'), 'tooltip' => sprintf(__('Check this to cache your month view HTML in transients, which can help improve calendar speed on sites with many events. <a href="%s">Read more</a>.', 'the-events-calendar'), 'http://m.tri.be/18di'), 'default' => false, 'validation_type' => 'boolean')));
$display_tab_fields = Tribe__Main::array_insert_after_key('datepickerFormat', $display_tab_fields, array('tribeEventsAdvancedSettingsTitle' => array('type' => 'html', 'html' => '<h3>' . esc_html__('Advanced Template Settings', 'the-events-calendar') . '</h3>'), 'tribeEventsBeforeHTML' => array('type' => 'wysiwyg', 'label' => esc_html__('Add HTML before event content', 'the-events-calendar'), 'tooltip' => esc_html__('If you are familiar with HTML, you can add additional code before the event template. Some themes may require this to help with styling or layout.', 'the-events-calendar'), 'validation_type' => 'html'), 'tribeEventsAfterHTML' => array('type' => 'wysiwyg', 'label' => esc_html__('Add HTML after event content', 'the-events-calendar'), 'tooltip' => esc_html__('If you are familiar with HTML, you can add additional code after the event template. Some themes may require this to help with styling or layout.', 'the-events-calendar'), 'validation_type' => 'html')));
 /**
  * Adds setting for hiding subsequent occurrences by default.
  *
  *
  * @param array  $args
  * @param string $id
  *
  * @return array
  */
 public static function inject_settings($args, $id)
 {
     if ($id == 'general') {
         // we want to inject the hiding subsequent occurrences into the general section directly after "Live update AJAX"
         $args = Tribe__Main::array_insert_after_key('liveFiltersUpdate', $args, array('hideSubsequentRecurrencesDefault' => array('type' => 'checkbox_bool', 'label' => __('Recurring event instances', 'tribe-events-calendar-pro'), 'tooltip' => __('Show only the first instance of each recurring event (only affects list-style views).', 'tribe-events-calendar-pro'), 'default' => false, 'validation_type' => 'boolean'), 'userToggleSubsequentRecurrences' => array('type' => 'checkbox_bool', 'label' => __('Front-end recurring event instances toggle', 'tribe-events-calendar-pro'), 'tooltip' => __('Allow users to decide whether to show all instances of a recurring event.', 'tribe-events-calendar-pro'), 'default' => false, 'validation_type' => 'boolean'), 'recurrenceMaxMonthsBefore' => array('type' => 'text', 'size' => 'small', 'label' => __('Clean up recurring events after', 'tribe-events-calendar-pro'), 'tooltip' => __('Automatically remove recurring event instances older than this', 'tribe-events-calendar-pro'), 'validation_type' => 'positive_int', 'default' => 24), 'recurrenceMaxMonthsAfter' => array('type' => 'text', 'size' => 'small', 'label' => __('Create recurring events in advance for', 'tribe-events-calendar-pro'), 'tooltip' => __('Recurring events will be created this far in advance', 'tribe-events-calendar-pro'), 'validation_type' => 'positive_int', 'default' => 24)));
         add_filter('tribe_field_div_end', array(__CLASS__, 'add_months_to_settings_field'), 100, 2);
     }
     return $args;
 }
<?php

$tec = Tribe__Events__Main::instance();
$general_tab_fields = Tribe__Main::array_insert_after_key('info-start', $general_tab_fields, array('upsell-heading' => array('type' => 'heading', 'label' => esc_html__('Finding & extending your calendar.', 'the-events-calendar'), 'conditional' => !defined('TRIBE_HIDE_UPSELL') || !TRIBE_HIDE_UPSELL), 'finding-heading' => array('type' => 'heading', 'label' => esc_html__('Finding your calendar.', 'the-events-calendar'), 'conditional' => defined('TRIBE_HIDE_UPSELL') && TRIBE_HIDE_UPSELL), 'view-calendar-link' => array('type' => 'html', 'html' => '<p>' . esc_html__('Where\'s my calendar?', 'the-events-calendar') . ' <a href="' . esc_url(Tribe__Events__Main::instance()->getLink()) . '">' . esc_html__('Right here', 'the-events-calendar') . '</a>.</p>')));
$general_tab_fields = Tribe__Main::array_insert_before_key('debugEvents', $general_tab_fields, array('tribeEventsDisplayThemeTitle' => array('type' => 'html', 'html' => '<h3>' . esc_html__('General Settings', 'the-events-calendar') . '</h3>'), 'postsPerPage' => array('type' => 'text', 'label' => esc_html__('Number of events to show per page', 'the-events-calendar'), 'size' => 'small', 'default' => get_option('posts_per_page'), 'validation_type' => 'positive_int'), 'liveFiltersUpdate' => array('type' => 'checkbox_bool', 'label' => esc_html__('Use Javascript to control date filtering', 'the-events-calendar'), 'tooltip' => tribe_get_option('tribeDisableTribeBar', false) == true ? esc_html__('This option is disabled when "Disable the Event Search Bar" is checked on the Display settings tab.', 'the-events-calendar') : esc_html__('Enable live ajax for datepicker on front end (User submit not required).', 'the-events-calendar'), 'attributes' => tribe_get_option('tribeDisableTribeBar', false) == true ? array('disabled' => 'disabled') : null, 'default' => true, 'validation_type' => 'boolean', 'class' => tribe_get_option('tribeDisableTribeBar', false) == true ? 'tribe-fieldset-disabled' : null), 'showComments' => array('type' => 'checkbox_bool', 'label' => esc_html__('Show comments', 'the-events-calendar'), 'tooltip' => esc_html__('Enable comments on event pages.', 'the-events-calendar'), 'default' => false, 'validation_type' => 'boolean'), 'showEventsInMainLoop' => array('type' => 'checkbox_bool', 'label' => esc_html__('Include events in main blog loop', 'the-events-calendar'), 'tooltip' => esc_html__('Show events with the site\'s other posts. When this box is checked, events will also continue to appear on the default events page.', 'the-events-calendar'), 'default' => false, 'validation_type' => 'boolean'), 'unprettyPermalinksUrl' => array('type' => 'html', 'label' => esc_html__('Events URL slug', 'the-events-calendar'), 'html' => '<p>' . sprintf(__('You cannot edit the slug for your events page as you do not have pretty permalinks enabled. The current URL for your events page is <a href="%1$s">%2$s</a>. In order to edit the slug here, <a href="%3$soptions-permalink.php">enable pretty permalinks</a>.', 'the-events-calendar'), esc_url($tec->getLink('home')), $tec->getLink('home '), esc_url(trailingslashit(get_admin_url()))) . '</p>', 'conditional' => '' == get_option('permalink_structure')), 'eventsSlug' => array('type' => 'text', 'label' => esc_html__('Events URL slug', 'the-events-calendar'), 'default' => 'events', 'validation_type' => 'slug', 'conditional' => '' != get_option('permalink_structure')), 'current-events-slug' => array('type' => 'html', 'html' => '<p class="tribe-field-indent tribe-field-description description">' . esc_html__('The slug used for building the events URL.', 'the-events-calendar') . sprintf(esc_html__('Your current events URL is: %s', 'the-events-calendar'), '<code><a href="' . esc_url(tribe_get_events_link()) . '">' . tribe_get_events_link() . '</a></code>') . '</p>', 'conditional' => '' != get_option('permalink_structure')), 'ical-info' => array('type' => 'html', 'display_callback' => function_exists('tribe_get_ical_link') ? '<p id="ical-link" class="tribe-field-indent tribe-field-description description">' . esc_html__('Here is the iCal feed URL for your events:', 'the-events-calendar') . ' <code>' . tribe_get_ical_link() . '</code></p>' : '', 'conditional' => function_exists('tribe_get_ical_link')), 'singleEventSlug' => array('type' => 'text', 'label' => esc_html__('Single event URL slug', 'the-events-calendar'), 'default' => 'event', 'validation_type' => 'slug', 'conditional' => '' != get_option('permalink_structure')), 'current-single-event-slug' => array('type' => 'html', 'html' => '<p class="tribe-field-indent tribe-field-description description">' . sprintf(__('The above should ideally be plural, and this singular.<br />Your single event URL is: %s', 'the-events-calendar'), '<code>' . trailingslashit(home_url()) . tribe_get_option('singleEventSlug', 'event') . '/single-post-name/</code>') . '</p>', 'conditional' => '' != get_option('permalink_structure')), 'multiDayCutoff' => array('type' => 'dropdown', 'label' => esc_html__('End of day cutoff', 'the-events-calendar'), 'validation_type' => 'options', 'size' => 'small', 'default' => '12:00', 'options' => array('00:00' => '12:00 am', '01:00' => '01:00 am', '02:00' => '02:00 am', '03:00' => '03:00 am', '04:00' => '04:00 am', '05:00' => '05:00 am', '06:00' => '06:00 am', '07:00' => '07:00 am', '08:00' => '08:00 am', '09:00' => '09:00 am', '10:00' => '10:00 am', '11:00' => '11:00 am')), 'multiDayCutoffHelper' => array('type' => 'html', 'html' => '<p class="tribe-field-indent tribe-field-description description">' . sprintf(esc_html__("Have an event that runs past midnight? Select a time after that event's end to avoid showing the event on the next day's calendar.", 'the-events-calendar')) . '</p>', 'conditional' => '' != get_option('permalink_structure')), 'defaultCurrencySymbol' => array('type' => 'text', 'label' => esc_html__('Default currency symbol', 'the-events-calendar'), 'tooltip' => esc_html__('Set the default currency symbol for event costs. Note that this only impacts future events, and changes made will not apply retroactively.', 'the-events-calendar'), 'validation_type' => 'textarea', 'size' => 'small', 'default' => '$'), 'reverseCurrencyPosition' => array('type' => 'checkbox_bool', 'label' => esc_html__('Currency symbol follows value', 'the-events-calendar'), 'tooltip' => esc_html__('The currency symbol normally precedes the value. Enabling this option positions the symbol after the value.', 'the-events-calendar'), 'default' => false, 'validation_type' => 'boolean'), 'amalgamateDuplicates' => array('type' => 'html', 'html' => '<fieldset class="tribe-field tribe-field-html"><legend>' . esc_html__('Duplicate Venues &amp; Organizers', 'the-events-calendar') . '</legend><div class="tribe-field-wrap">' . Tribe__Events__Amalgamator::migration_button(esc_html__('Merge Duplicates', 'the-events-calendar')) . '<p class="tribe-field-indent description">' . esc_html__('You might find duplicate venues and organizers when updating The Events Calendar from a pre-3.0 version. Click this button to automatically merge identical venues and organizers.', 'the-events-calendar') . '</p></div></fieldset><div class="clear"></div>', 'conditional' => Tribe__Settings_Manager::get_option('organizer_venue_amalgamation', 0) < 1), 'tribeEventsMiscellaneousTitle' => array('type' => 'html', 'html' => '<h3>' . esc_html__('Miscellaneous Settings', 'the-events-calendar') . '</h3>')));
$general_tab_fields = Tribe__Main::array_insert_after_key('tribeEventsMiscellaneousTitle', $general_tab_fields, array('viewWelcomePage' => array('type' => 'html', 'html' => '<fieldset class="tribe-field tribe-field-html"><legend>' . esc_html__('View Welcome Page', 'the-events-calendar') . '</legend><div class="tribe-field-wrap"><a href="' . Tribe__Settings::instance()->get_url(array(Tribe__Events__Main::instance()->activation_page->welcome_slug => 1)) . '" class="button">' . esc_html__('View Welcome Page', 'the-events-calendar') . '</a><p class="tribe-field-indent description">' . esc_html__('View the page that displayed when you initially installed the plugin.', 'the-events-calendar') . '</p></div></fieldset><div class="clear"></div>'), 'viewUpdatePage' => array('type' => 'html', 'html' => '<fieldset class="tribe-field tribe-field-html"><legend>' . esc_html__('View Update Page', 'the-events-calendar') . '</legend><div class="tribe-field-wrap"><a href="' . Tribe__Settings::instance()->get_url(array(Tribe__Events__Main::instance()->activation_page->update_slug => 1)) . '" class="button">' . esc_html__('View Update Page', 'the-events-calendar') . '</a><p class="tribe-field-indent description">' . esc_html__('View the page that displayed when you updated the plugin.', 'the-events-calendar') . '</p></div></fieldset><div class="clear"></div>')));
$general_tab_fields = Tribe__Main::array_insert_before_key('tribeEventsMiscellaneousTitle', $general_tab_fields, array('tribeEventsDisplayTitle' => array('type' => 'html', 'html' => '<h3>' . esc_html__('Map Settings', 'the-events-calendar') . '</h3>'), 'embedGoogleMaps' => array('type' => 'checkbox_bool', 'label' => esc_html__('Enable Google Maps', 'the-events-calendar'), 'tooltip' => esc_html__('Check to enable maps for events and venues.', 'the-events-calendar'), 'default' => true, 'class' => 'google-embed-size', 'validation_type' => 'boolean'), 'embedGoogleMapsZoom' => array('type' => 'text', 'label' => esc_html__('Google Maps default zoom level', 'the-events-calendar'), 'tooltip' => esc_html__('0 = zoomed out; 21 = zoomed in.', 'the-events-calendar'), 'size' => 'small', 'default' => 10, 'class' => 'google-embed-field', 'validation_type' => 'number_or_percent')));
return $general_tab_fields;
 public function filter_settings_tab_fields($fields, $tab)
 {
     $this->singular_event_label = tribe_get_event_label_singular();
     $this->plural_event_label = tribe_get_event_label_plural();
     switch ($tab) {
         case 'display':
             $fields = Tribe__Main::array_insert_after_key('tribeDisableTribeBar', $fields, array('hideRelatedEvents' => array('type' => 'checkbox_bool', 'label' => __('Hide related events', 'tribe-events-calendar-pro'), 'tooltip' => __('Remove related events from the single event view', 'tribe-events-calendar-pro'), 'default' => false, 'validation_type' => 'boolean')));
             $fields = Tribe__Main::array_insert_after_key('monthAndYearFormat', $fields, array('weekDayFormat' => array('type' => 'text', 'label' => __('Week Day Format', 'tribe-events-calendar-pro'), 'tooltip' => __('Enter the format to use for week days. Used when showing days of the week in Week view.', 'tribe-events-calendar-pro'), 'default' => 'D jS', 'size' => 'medium', 'validation_type' => 'html')));
             $fields = Tribe__Main::array_insert_after_key('hideRelatedEvents', $fields, array('week_view_hide_weekends' => array('type' => 'checkbox_bool', 'label' => __('Hide weekends on Week View', 'tribe-events-calendar-pro'), 'tooltip' => __('Check this to only show weekdays on Week View', 'tribe-events-calendar-pro'), 'default' => false, 'validation_type' => 'boolean')));
             break;
     }
     return $fields;
 }
 /**
  * Inject the GeoLoc settings into the general TEC settings screen
  *
  * @param $args
  * @param $id
  *
  * @return array
  */
 public function inject_settings($args, $id)
 {
     if ($id == 'general') {
         $venues = $this->get_venues_without_geoloc_info();
         // we want to inject the map default distance and unit into the map section directly after "enable Google Maps"
         $args = Tribe__Main::array_insert_after_key('embedGoogleMaps', $args, array('geoloc_default_geofence' => array('type' => 'text', 'label' => __('Map view search distance limit', 'tribe-events-calendar-pro'), 'size' => 'small', 'tooltip' => __('Set the distance that the location search covers (find events within X distance units of location search input).', 'tribe-events-calendar-pro'), 'default' => '25', 'class' => '', 'validation_type' => 'number_or_percent'), 'geoloc_default_unit' => array('type' => 'dropdown', 'label' => __('Map view distance unit', 'tribe-events-calendar-pro'), 'validation_type' => 'options', 'size' => 'small', 'default' => 'miles', 'options' => apply_filters('tribe_distance_units', array('miles' => __('Miles', 'tribe-events-calendar-pro'), 'kms' => __('Kilometers', 'tribe-events-calendar-pro')))), 'geoloc_fix_venues' => array('type' => 'html', 'html' => '<a name="geoloc_fix"></a><fieldset class="tribe-field tribe-field-html"><legend>' . __('Fix geolocation data', 'tribe-events-calendar-pro') . '</legend><div class="tribe-field-wrap">' . $this->fix_geoloc_data_button() . '<p class="tribe-field-indent description">' . sprintf(__("You have %d venues for which we don't have geolocation data. We need to use the Google Maps API to get that information. Doing this may take a while (aprox. 1 minute for every 200 venues).", 'tribe-events-calendar-pro'), $venues->found_posts) . '</p></div></fieldset>', 'conditional' => $venues->found_posts > 0)));
     } elseif ($id == 'display') {
         $args = Tribe__Main::array_insert_after_key('tribeDisableTribeBar', $args, array('hideLocationSearch' => array('type' => 'checkbox_bool', 'label' => __('Hide location search', 'tribe-events-calendar-pro'), 'tooltip' => __('Removes location search field from the events bar on all views except for map view.', 'tribe-events-calendar-pro'), 'default' => false, 'validation_type' => 'boolean')));
     }
     return $args;
 }
<?php

/**
 * Filter the array of views that are registered for the tribe bar
 *
 * @param array $views {
 *     Array of views, where each view is itself represented by an associative array consisting of these keys:
 *
 *     @type string $displaying         slug for the view
 *     @type string $anchor             display text (i.e. "List" or "Month")
 *     @type string $event_bar_hook     not used
 *     @type string $url                url to the view
 * }
 *
 * @param boolean $context
 */
$views = apply_filters('tribe-events-bar-views', array(), false);
$views_options = array('default' => esc_html__('Use Default View', 'tribe-events-calendar-pro'));
foreach ($views as $view) {
    $views_options[$view['displaying']] = $view['anchor'];
}
$settings = Tribe__Main::array_insert_after_key('viewOption', $settings, array('mobile_default_view' => array('type' => 'dropdown_select2', 'label' => esc_html__('Default mobile view', 'tribe-events-calendar-pro'), 'tooltip' => esc_html__('Change the default view for Mobile users.', 'tribe-events-calendar-pro'), 'validation_type' => 'options', 'size' => 'large', 'default' => 'default', 'options' => $views_options)));
return $settings;
 /**
  * Which Columns are Available on Ignored Events view
  *
  * @param  array $columns Columns and it's labels
  *
  * @return array
  */
 public function filter_columns($columns)
 {
     if (empty($_GET['post_status']) || $_GET['post_status'] !== self::$ignored_status) {
         return $columns;
     }
     // Remove unwanted Columns
     unset($columns['author'], $columns['events-cats'], $columns['tags'], $columns['comments'], $columns['recurring']);
     // Add New Columns backwards
     $columns = Tribe__Main::array_insert_after_key('title', $columns, array('source' => esc_html__('Source', 'the-events-calendar')));
     $info = ' <span class="dashicons dashicons-editor-help" title="' . esc_attr__('The last time this event was imported and/or updated via import.', 'the-events-calendar') . '"></span>';
     $columns = Tribe__Main::array_insert_after_key('title', $columns, array('last-import' => esc_html__('Last Import', 'the-events-calendar') . $info));
     return $columns;
 }